命令:
iptables [ -t 表名] 命令選項 [鏈名] [條件匹配] [-j 處理動作或跳轉]
ACCEPT: 允許數據包通過。
DROP : 直接丟棄數據包,不給任何回應信息,這時候客戶端會感覺自己的請求泥牛入海了,過了超時時間才會有反應。
REJECT: 拒絕數據包通過,必要時會給數據發送端一個響應的信息,客戶端剛請求就會收到拒絕的信息。
SNAT : 源地址轉換,解決內網用戶用同一個公網地址上網的問題。
MASQUERADE:是SNAT的一種特殊形式,適用於動態的、臨時會變的ip上。
DNAT : 目標地址轉換。
REDIRECT:在本機做端口映射。
LOG:在/var/log/messages文件中記錄日志信息,然后將數據包傳遞給下一條規則,也就是說除了記錄以外不對數據包做任何其他操作,仍然讓下一條規則去匹配
一般不使用REJECT(拒絕)行為.REJECT會帶來安全隱患
規則表:
1. filter表——三個鏈:INPUT、FORWARD、OUTPUT
作用:過濾數據包 內核模塊:iptables_filter.
1. nat表——三個鏈:PREROUTING、POSTROUTING、OUTPUT
作用:用於網絡地址轉換(IP、端口) 內核模塊:iptable_nat
1. Mangle表——五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改數據包的服務類型、TTL、並且可以配置路由實現QOS內核模塊:iptable_mangle(別看這個表這么麻煩,咱們設置策略時幾乎都不會用到它)
1. Raw表——兩個鏈:OUTPUT、PREROUTING
作用:決定數據包是否被狀態跟蹤機制處理 內核模塊:iptable_raw
(這個是REHL4沒有的,不過不用怕,用的不多)
規則鏈:
1. INPUT——進來的數據包應用此規則鏈中的策略
1. OUTPUT——外出的數據包應用此規則鏈中的策略
1. FORWARD——轉發數據包時應用此規則鏈中的策略
1. PREROUTING——對數據包作路由選擇前應用此鏈中的規則
(記住!所有的數據包進來的時侯都先由這個鏈處理)
1. POSTROUTING——對數據包作路由選擇后應用此鏈中的規則
(所有的數據包出來的時侯都先由這個鏈處理)
一、封單個IP
1、封鎖單個ip: iptables -I INPUT -s IP -j DROP #-I 指插入表第一列 [root@node1 ~]# iptables -I INPUT -s 192.168.1.11 -j DROP [root@node1 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 192.168.1.11 anywhere
2、解封單個ip:iptables -D INPUT -s IP -d IP -j ACCEPT
[root@node1 ~]# iptables -D INPUT -s 192.168.1.11 -j DROP # 解封IP: 192.168.1.11 #-D 刪除 [root@node1 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination
二、封IP段
1、封IP段: 從123.0.0.1到123.255.255.254的命令 [root@node1 ~]# iptables -I INPUT -s 123.0.0.0/8 -j DROP [root@node1 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 123.0.0.0/8 anywhere 2、封IP段: 從123.45.0.1到123.45.255.254的命令 [root@node1 ~]# iptables -I INPUT -s 123.45.0.0/16 -j DROP [root@node1 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 123.45.0.0/16 anywhere DROP all -- 123.0.0.0/8 anywhere 3、封IP段:從123.45.6.1到123.45.6.254的命令是 [root@node1 ~]# iptables -I INPUT -s 123.45.6.0/24 -j DROP [root@node1 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 123.45.6.0/24 anywhere DROP all -- 123.45.0.0/16 anywhere DROP all -- 123.0.0.0/8 anywhere
三、全部清理
[root@node1 ~]# iptables -F
四、查詢
[root@node1 ~]# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target prot opt source destination
target:代表進行的動作,ACCEPT 是放行,REJECT 是拒絕,DROP 則是丟棄數據包。
port:代表使用的協議,主要有 tcp、udp 和 icmp 三種。
opt:額外的選項說明。
source:規則針對的來源 IP。
destination:規則針對的目標 IP。
五、刪除某一條規則
[root@localhost ~]# iptables -A OUTPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT [root@localhost ~]# iptables -L OUTPUT Chain OUTPUT (policy ACCEPT) target prot opt source destination ACCEPT udp -- anywhere anywhere udp dpt:bootpc ACCEPT udp -- anywhere anywhere udp dpt:domain ACCEPT tcp -- anywhere anywhere tcp spt:mysql state ESTABLISHED [root@localhost ~]# iptables -L OUTPUT -n --line-number Chain OUTPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:68 2 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:3306 state ESTABLISHED [root@localhost ~]# iptables -D OUTPUT 3 [root@localhost ~]# iptables -L OUTPUT -n --line-number Chain OUTPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:68 2 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
六、端口映射
1、本機端口轉發
iptables -t nat -A PREROUTING -p tcp -d 192.21.131.81 --dport 80 -j DNAT --to-destination :8081 iptables -t nat -A POSTROUTING -j MASQUERADE 解釋一下以上命令: -t nat :指定操作的表是 NAT 表。 -A PREROUTING :表示將規則添加到 PREROUTING 鏈中,即在數據包進入路由前執行。 -p tcp :指定數據包協議為 TCP。 -d 172.21.131.81 :指定目標 IP 地址為 172.21.131.81。 --dport 80 :指定目標端口為 80 端口。 -j DNAT :表示對符合條件的數據包進行目標地址轉換。 --to-destination :8081 :將目標 IP 地址轉換為本地的 8081 端口。 以上規則將在 PREROUTING 鏈中對源主機發送到 172.21.131.81 的所有流量進行轉發。 -t nat :指定操作的表是 NAT 表。 -A POSTROUTING :表示將規則添加到 POSTROUTING 鏈中,即在數據包離開路由后執行。 -j MASQUERADE :表示對數據包進行源地址轉換,實現 NAT 功能。 以上規則將在 POSTROUTING 鏈中進行源地址轉換,確保返回的數據包正確路由回源主機。 驗證端口轉發 完成以上配置后,源主機上的 192.21.131.81:80 端口的流量將被轉發到本地的 8081 端口。 將在 PREROUTING 鏈中對源主機發送到 172.21.131.81 的所有流量進行轉發,並在 POSTROUTING 鏈中進行源地址轉換,確保返回的數據包正確路由回源主機。
2、將192.21.131.81的80端口的所有流量轉發到192.21.131.99機器的80端口上
在源主機(172.21.131.81)上添加 iptables 規則 在源主機上執行以下命令,添加 iptables 規則進行端口轉發: iptables -t nat -A PREROUTING -p tcp -d 192.21.131.81 --dport 80 -j DNAT --to-destination 192.21.131.99:80 iptables -t nat -A POSTROUTING -j MASQUERADE 以上規則將在 PREROUTING 鏈中對源主機發送到 192.21.131.81 的所有流量進行轉發,並在 POSTROUTING 鏈中進行源地址轉換,確保返回的數據包正確路由回源主機。 請注意,這些規則僅在源主機上設置即可完成端口轉發。目標主機不需要進行任何額外的設置。