四表五鏈: filter nat mangle raw prerouting input output forward postrouting
------------------------------
注意:一張表中有多條鏈,一條鏈中可以有一條或多條規則。
當一個數據包到達一個鏈時,系統就會從第一條規則開始檢查,看是否符合該規則,如果滿足則該規則處理該數據包,如果不滿足,就繼續檢查下一條規則,最後該數據包不符合該鏈中的任一條規則的話,系統就會根據該鏈預先定義的策略來處理該數據包。
iptables 命令的使用:
iptables 【-t 表】 command 鏈 匹配標準 -j 處理方法
-t : filter nat mangle raw
command: 管理鏈: -F [CHAIN] :清除指定的規則鏈,如果省略chain則可以實現刪除對應table中的所有的鏈 -P [CHAIN] :設定指定鏈的默認策略 -N :自定義一個新的空鏈 -X :刪除一個自定義的空鏈 -Z :置零指定鏈中所有規則的計數器 -E :重命名自定義的鏈 管理規則: -A :附加一條規則,添加在鏈的尾部 -I CHINA[num] :插入一條規則,插入爲對應的chain中的第num條 -D CHAIN[num] : 刪除指定鏈中的第num條規則 -R CHAIN[num] : 替換指定鏈中的第num條規則 查看類: -L 顯示指定表中的規則 -n : 以數字格式的形式顯示主機地址和端口號 -v : 顯示鏈及規則的詳細信息 -vv :顯示鏈及規則的更加詳細的信息 -x : 顯示計數器的精確值 --line-numbers : 顯示規則的序號 ==--line
鏈: prerouting input output forward postrouting
匹配標準:
通用匹配:
-o INTERFACE :指定數據報文流出的接口 -i INTERFACE :指定數據報文流入的接口 -s ;--src :指定源地址 -d ;--dst :指定目標地址 -p {tcp|udp|icmp} :指定協議
隱含擴展:
-p tcp --sport PORT 源端口 --dport PORT 目的端口 --tcp-flags mask comp 只檢查mask指定的標誌位,是逗號分隔的標誌位列表
comp:此列表中出現的標誌位必須爲1,comp中沒出現,而mask中出現的必須爲0
eg:--tcp-flagsSYN,FIN,ACK,RST SYN == --syn --syn -p icmp --icmp-type [num] num: 0:echo-reply 響應報文 8:echo-request 請求報文
-p udp --sport PORT --dport PORT
顯示擴展:
-m state --state 結合ip_constack追蹤會話的狀態 NEW :新連接請求 ESTABLISHED :已建立的連接 INVALID :非法連接 RELATED :相關聯的,專爲ftp設定的
練習:192.168.137.11作爲服務器,只允許請求新數據,不允許tcp/22(80) 發送新的請求
首先將iptables的默認策略更改爲DROP iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -A INPUT -d 192.168.137.11 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -s 192.168.137.11 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -d 192.168.137.11 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -s 192.168.137.11 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT -m multiport 離線的多端口匹配 --source-port --destination-port --port
練習:在服務192.168.137.11上同時在一條規則上開放進來的22,80,21端口
iptables -A INPUT -d 192.168.137.11 -p tcp -m miltiport --destination-port 22,21,80 -j ACCEPT -m iprange :地址範圍匹配擴展 --src-range ip-ip --dst-range ip-ip
練習:在192.168.137.11服務器上允許172.16.100.3-172.168.100.100的ip所有服務進來
iptables -A INPUT -m iprange --src-range 172.16.100.3-172.168.100.100 -j ACCEPT -m connlimit-about n :連接數的限制,低於n個的連接纔可以訪問 -m limit --limit RATE(速率) :5/min --limit-burst n :第一次可以上傳多少 -m string --algo (kmp|bm) --string ("STRING")
練習:
-j : ACCEPT : 允許 DROP :丟棄 REJECT :拒絕 DNAT:目的地址轉換 SNAT:源地址轉換 LOG:記錄日誌 --log-prefix "string": 加入前綴 MARK:打標誌 RETURN:返回
---------------------------------
cat /proc/net/ip_conntrack ip報文追蹤信息 iptstate: iptable的狀態信息 -t 顯示所有的連接個數 狀態信息意義: NEW :新連接請求 ESTABLISHED :已建立的連接 INVALID :非法連接 RELATED :相關聯的,專爲ftp設定的。
在繁忙的服務器上建議不要使用這個模塊:
裝載ip_conntrack模塊: service iptables stop modprobe ip_conntrack 轉載內核模塊,可以單獨工作 cat /proc/net/ip_conntrack cat /proc/net/ipv4/ip_conntrack_mak 最大條目,有必要時要調大這個最大值,但在非常繁忙的服務器上,不建議啓動這個模塊
卸載ip_conntrack模塊:
modprobe -r ip_conntrack 注意: iptables -t nat -L 使用這個命令時,會自動啓動ip_conntrack,所以在工作中當其處於關閉時,慎用
-----------------------------------------
命令行中的規則條目是需要保存:
第一種:service iptables save --->默認存放位置:/etc/sysconfig/iptables 開機後會自動加載到iptables規則中。 第二種:iptables-save > /etc/sysconfig/iptables-20150326 iptables-restore < /etc/sysconfig/iptables-20150326 開機後不會自動加載iptables規則中,需要手動加載,一般用於備份恢復。
------------------------------------------------------------
練習:
將192.168.137.10的iptables的默認路由策略更改爲DROP
iptables -t filter -P INPUT -j DROP iptables -t filter -P OUTPUT -j DROP iptables -t filter -P FORWARD -j DROP iptables -L -n
測試 ssh ping http等服務是否工作
ssh 192.168.137.10:22 ping 192.168.137.11 http://192.168.137.11:80
打開ssh:22連接服務:
iptables -t filter -A INPUT -s 192.168.137.0/24 -d 192.168.137.10 -p tcp --dport 22 -j ACCEPT iptables -t filter -A OUTPUT -s 192.168.137.10 -d 192.168.137.0/24 -p tcp --sport 22 -j ACCEPT
測試ssh服務:
ssh 192.168.137.10:22
打開http服務:
iptables -t filter -A INPUT -d 192.168.137.10 -p tcp --dport 80 -j ACCEPT iptables -t filter -A OUTPUT -s 192.168.137.10 -p tcp --sport 80 -j ACCEPT 測試http服務: http://192.168.137.10:80
打開ping功能:
你可以ping通別人,別人無法ping通你:
本機ping其他主機,出去時向其他主機請求報文8,別的主機返回來的是響應報文0 iptables -t filter -A OUTPUT -s 192.168.137.10 -p icmp-type 8 -j ACCEPT iptables -t filter -A INPUT -d 192.168.137.10 -p icmp-type 0 -j ACCEPT 測試ping功能: ping 192.168.137.10 ping 192.168.137.11
別人可以ping通你:
別的主機要ping通你,發送一個請求報文到本機,所以進入本機的是請求報文8,本機再響應報文給請求的主機,所以出去的是響應報文0. iptables -t filter -A INPUT -d 192.168.137.10 -p icmp --icmp-type 8 -j ACCPET iptables -t filter -A OUTPUT -s 192.168.137.10 -p icmp --icmp-type 0 -j ACCEPT
練習:
192.168.137.11作爲服務器,只允許請求新數據,不允許tcp/22(80) 發送新的請求 首先將iptables的默認策略更改爲DROP iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -A INPUT -d 192.168.137.11 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -s 192.168.137.11 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -d 192.168.137.11 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -s 192.168.137.11 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT