iptables是編寫netfilter規則的工具。
一般情況下,更新kernel可順便更新netfilter子產品。
連接配接追蹤子產品是xt_state.ko.
TCP/IP的狀态有12種,而iptables關于連接配接的狀态隻有4種:Established,New,Related,Ivalid.
Established的狀态定義為,隻要封包能成功穿越防火牆,之後所有相關的封包就都是Established.當然,封包能成功穿越防火牆的前提是有相應的Iptables規則允許。
iptables -A INPUT -m state --state Established -j ACCEPT
New則與協定完全無關,其指每連接配接的第一個封包。
ICMP消息類型有type 8: request echo; type 0: echo reply; type11: Time to live exceeded
Related是指被動産生的響應包,而且這個封包不屬于現有任何連接配接的封包,其與協定無關。
Invalid是指狀态不明的包,如何差別于NEW包?
iptables -A INPUT -p all -m state --state INVALID -j DROP
修改完netfilter規則後使用service iptables save指令就可以把netfilter存儲到/etc/sysconfig/iptables檔案内。
另外,使用shell script管理iptables規則的好處有:
可使用變量。2.友善修改。3.規則易閱讀。4.備份友善。
可将腳本放入/etc/rc.d/rc.local檔案中。
變化的外網口IP怎麼辦?用MASQUERADE
iptables -A PREROUTING -t nat -o eth0 -s 192.168.0.0/24 -j MASQUERADE
NAT要與filter機制結合才能使服務主機得到真正的安全。
Mangle表的作用一般有:
修改IP標頭的TTL值,windows預設128,linux預設64.
修改IP標頭的DSCP值或對特定的封包設定特征。
iptables -t mangle -A OUTPUT -p tcp --dport 22 -j DSCP --set-dscp 43
iptables -t mangle -A FORWARD -p tcp --sport 80 -j DSCP --set-dscp 1
不管是filter, nat, mangle, raw, 它們的chain都是各自獨立的。
有了netmap處理方法,無論要對應的是classC, classB, 或是classA網段,通通隻要兩條規則就搞定了。
iptables -t nat -A PREROUTING -i eth0 -d 10.0.0.0/24 -j NETMAP --to 192.168.1.0.24
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j NETMAP --to 10.0.0.0/24
iptables-save [-c] [-t table]
iptables-restore [-c] [-n]
iptables-save > /etc/iptables-save
iptables-restore < /etc/iptables-save
PREROUTING鍊的作用是在包剛到達防火牆時改變它的目的位址。如果需要的話,OUTPUT鍊改變本地産生的包的目的位址。
POSTROUTING鍊在包就要離開防火牆之前改變其源位址。
MANGLE表不能做任何NAT,它隻是改變資料包的TTL, TOS, 或MARK, 而不是源位址。
-Z 計數器清零
-N 用使用者自定義鍊
-X 删除自定義鍊
-E rename chain
-i 參數隻能用于INPUT,FORWARD,和PREROUTING這三個鍊,用在其他地方會提示錯誤資訊。
請注意,protocol tcp必須在TCP比對器(match)的左邊。
iptables -p tcp --tcp-flags ALL NONE 比對所有标記都未置1的包。一般而言,對于iptables/netfilter甚至是許多防火牆,調試或多或少都是必須的。99%的防火牆問題都是因為認為的政策造成的,我可以保證,你寫規則的時候極其容易犯錯誤,而且很多少時候這些錯誤通過肉眼很難定位。
Netfilter比對方式,内建比對方式有 -p -i -s -d 等等
子產品比對方式:
TCP/UDP協定進階比對。--dport和--sport一次最多可以比對兩個port,如--dport 21:22
TCP flags的比對
連接配接追蹤檔案的位置:/proc/net/ip/contrack 子產品為ip_contrack.ko
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_syn_sent
pkttype 資料包類型:
iptables -A FORWARD -i eth0 -p icmp -m pkttype --ptt-type broadcast -j DROP
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 92 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 6/m --limit-burst 10 -j ACCEPT
recent子產品:
string是由xt_string.ko子產品提供比對,string可以在網絡層提供資料内容,而無需将封包送到應用層的位置才行,但它隻能局限于單一封包,無法比對分散在不同封包的内容。
iptables -A FORWARD -p tcp -d $mail_server --dport 25 -j QUEUE(交給user space)
log 子產品隻記錄,不比對進行操作, 記錄的日志預設放在/var/log/message内
--log-level --log-prefix --log-tcp-sequence --log-tcp-options --log-ip-options --log-uid
本文轉自 拾瓦興閣 51CTO部落格,原文連結:http://blog.51cto.com/ponyjia/1635307