##########################
#########iptables#########
##########################
1.iptables 實際上就是一種ip信息包過濾型防火牆。就是通過書寫一些接受哪些包,拒絕哪些包的規則,實現數據包的過濾。這些規則存儲在專用的信息包過濾表中,而這些表集成在 Linux 內核中。在信息包過濾表中,規則被分組放在我們所謂的鏈(chain)中。
iptables由兩部分組成:
1>framework:netfilter hooks function鉤子函數,實現網絡過濾器的基本框架。
2>rule utils:iptables 規則管理工具
總體說來,iptables就是由“四表五鏈”組成。
四表:
filter:過濾,防火牆
nat :network address translation 網絡地址轉換
mangle:拆解報文,作出修改,封裝報文
raw: 關閉nat表上啓用的鏈接追蹤機制
五鏈:
PREROUTING 數據包進入路由之前
INPUT 目的地址爲本機
FORWARD 實現轉發
OUTPUT 原地址爲本機,向外發送
POSTROUTING 發送到網卡之前
2.區分SNAT和DNAT
SNAT 和 DNAT 是 iptables 中使用 NAT 規則相關的的兩個重要概念。如果內網主機訪問外網而經過路由時,源 IP 會發生改變,這種變更行爲就是 SNAT;反之,當外網的數據經過路由發往內網主機時,數據包中的目的 IP (路由器上的公網 IP) 將修改爲內網 IP,這種變更行爲就是 DNAT 。
與 SNAT 和 DNAT所對應的兩個鏈分別是 POSTROUTING和PREROUTING 。
-t ##指定表名稱
-n ##不再解析
-L ##列出指定表中的策略
-A ##增加策略
-p ##網絡協議
-P ##修改默認策略
--dport ##端口
-s ##數據來源
-j ##動作
-R ##修改策略
-N ##增加鏈
-E ##修改鏈名稱
-X ##刪除鏈
-D ##刪除指定策略
-I ##插入
ACCEPT ##允許
REJECT ##拒絕
DROP ##丟棄[root@localhost ~]# systemctl status firewalld.service
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service
[root@localhost ~]# systemctl start iptables.service
[root@localhost ~]# systemctl enable iptables.service
iptables -t filter -nL ##查看filter表中的策略
iptables -F ##刷掉filter表中的所有策略,當沒有用-t指定表名稱時默認是filter
service iptables save ##保存當前策略
iptables -t filter -nL ##查看filter表中的策略
iptables -F ##刷掉filter表中的所有策略,當沒有用-t指定表名稱時默認是filter
service iptables save ##保存當前策略
iptables -A INPUT -i lo -j ACCEPT ##允許lo
iptables -A INPUT -p tcp --dport 22 -j ACCEPT ##允許訪問22端口
iptables -A INPUT -s 172.25.254.60 -j ACCEPT ##允許60主機訪問本機所有端口
iptables -A INPUT -j ACCEPT ##拒絕所有主機的數據來源
測試:60主機
iptables -N redhat ##增加鏈redhat
iptables -E redhat westos ##改變鏈名稱
iptables -X westos ##刪除westos鏈
iptables -D INPUT ##刪除INPUT鏈中的第二條策略
iptables -I INPUT -p tcp --dport 80 -j REJECT ##插入策略到INPUT中的第一條
iptables -R INPUT 1 -p tcp --dport 80 -j ACCEPT ##修改第一條策略
iptable -P INPUT DROP ##把INPUT表中的默認策略改爲drop
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT ##策略狀態爲RELATED ESTABLISHED 的策略不再讀取,直接通過
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT ##添加策略的狀態爲NEW
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
iptables -A INPUT -j REJECT
iptables -t filter -nL
[root@localhost ~]# vim /etc/sysctl.conf ##內核路由功能開啓 參數保存/proc/sys/net/ipv4/下
[root@localhost ~]# sysctl -p ##生效
net.ipv4.ip_forward = 1
[root@localhost ~]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.25.254.100 ##從eth1出來的數據包做源地址僞裝,僞裝成172.25.254.100
[root@localhost ~]# iptables -t nat -A PREROUTING -i eth1 -j DNAT --to-dest 172.25.0.11 ##從eth1進來的數據包做目的地址轉換,轉換成172.25.0.11
[root@localhost ~]# iptables -t nat -nL
測試:server端ping254網段和0網段均可ping通