iptables: 包過濾型的防火墻
Firewall:防火墻,隔離工具;工作于主機或網絡邊緣,對于進出本主機或本網絡的報文根據事先定義的檢查規則作匹配檢測,對于能夠被規則匹配到的報文作出相應處理的組件;
主機防火墻
網絡防火墻
軟件防火墻(軟件邏輯)
硬件防火墻(硬件和軟件邏輯)
hook function(鉤子函數):
prerouting
input
output
forward
postrouting
鏈(內置):
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
功能:
filter:過濾,防火墻;
nat:network address translation;用于修改源IP或目標IP,也可以改端口;
mangle:拆解報文,做出修改,并重新封裝起來;
raw:關閉nat表上啟用的連接追蹤機制;
功能<–鏈:
raw:PREROUTING, OUTPUT
mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat:PREROUTING,[INPUT,]OUTPUT,POSTROUTING
filter:INPUT,FORWARD,OUTPUT
報文流向:
流入本機:PREROUTING –> INPUT
由本機流出:OUTPUT –> POSTROUTING
轉發:PREROUTING –> FORWARD –> POSTROUTING
iptables/netfilter
規則:
組成部分:根據規則匹配條件來嘗試匹配報文,一旦匹配成功,就由規則定義的處理動作作出處理;
匹配條件:
基本匹配條件:內建
擴展匹配條件:由擴展模塊定義;
處理動作:
基本處理動作:內建
擴展處理動作:由擴展模塊定義;
自定義處理機制:自定義鏈
iptables的鏈:內置鏈和自定義鏈
內置鏈:對應于hook function
自定義鏈接:用于內置鏈的擴展和補充,可實現更靈活的規則管理機制;
添加規則時的考量點:
(1) 要實現哪種功能:判斷添加到哪個表上;
(2) 報文流經的路徑:判斷添加到哪個鏈上;
鏈:鏈上的規則次序,即為檢查的次序;因此,隱含一定的應用法則:
(1) 同類規則(訪問同一應用),匹配范圍小的放上面;
(2) 不同類的規則(訪問不同應用),匹配到報文頻率較大的放在上面;
(3) 將那些可由一條規則描述的多個規則合并起來;
(4) 設置默認策略;
規則格式:iptables [-t table] COMMAND chain [rulenum] [-m machename [per-match-options]] [-j targetname [per-target-options]] [options]
-t table:
raw, mangle, nat, [filter]
COMMAND:
鏈管理:
-N:new, 自定義一條新的規則鏈;
-X: delete,刪除自定義的規則鏈;
注意:僅能刪除 用戶自定義的 引用計數為0的 空的 鏈;
-P:Policy,設置默認策略;對filter表中的鏈而言,其默認策略有:
ACCEPT:接受
DROP:丟棄
REJECT:拒絕
-E:重命名自定義鏈;引用計數不為0的自定義鏈不能夠被重命名,也不能被刪除;
規則管理:
-A:append,追加;
-I:insert, 插入,要指明位置,省略時表示第一條;
-D:delete,刪除;
(1) 指明規則序號;
(2) 指明規則本身;
-R:replace,替換指定鏈上的指定規則;
-F:flush,清空指定的規則鏈;
-Z:zero,置零;
iptables的每條規則都有兩個計數器:
(1) 匹配到的報文的個數;
(2) 匹配到的所有報文的大小之和;
查看:
-L:list, 列出指定鏈上的所有規則;
-n:numberic,以數字格式顯示地址和端口號;
-v:verbose,詳細信息;
-vv, -vvv
-x:exactly,顯示計數器結果的精確值;
–line-numbers:顯示規則的序號;
chain:
PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
匹配條件:
基本匹配條件:PARAMETERS
擴展匹配條件:
隱式擴展:在使用-p選項指明了特定的協議時,無需再同時使用-m選項指明擴展模塊的擴展機制;
顯式擴展:必須使用-m選項指明要調用的擴展模塊的擴展機制;
基本匹配條件:無需加載任何模塊,由iptables/netfilter自行提供;
[!] -s, –source address[/mask][,…]:檢查報文中的源IP地址是否符合此處指定的地址或范圍;
[!] -d, –destination address[/mask][,…]:檢查報文中的目標IP地址是否符合此處指定的地址或范圍;
所有地址:0.0.0.0/0
[!] -p, –protocol protocol
protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or “all”
{tcp|udp|icmp}
[!] -i, –in-interface name:數據報文流入的接口;只能應用于數據報文流入的環節,只能應用于PREROUTING,INPUT和FORWARD鏈;
[!] -o, –out-interface name:數據報文流出的接口;只能應用于數據報文流出的環節,只能應用于FORWARD、OUTPUT和POSTROUTING鏈;
擴展匹配條件:
隱式擴展:不需要手動加載擴展模塊;因為它們是對協議的擴展,所以,但凡使用-p指明了協議,就表示已經指明了要擴展的模塊;
tcp:
[!] –source-port, –sport port[:port]:匹配報文的源端口;可以是端口范圍;
[!] –destination-port,–dport port[:port]:匹配報文的目標端口;可以是端口范圍;
[!] –tcp-flags mask comp
mask is the flags which we should examine, written as a comma-separated list,例如 SYN,ACK,FIN,RST
comp is a comma-separated list of flags which must be set,例如SYN
例如:“–tcp-flags SYN,ACK,FIN,RST SYN”表示,要檢查的標志位為SYN,ACK,FIN,RST四個,其中SYN必須為1,余下的必須為0;
[!] –syn:用于匹配第一次握手,相當于”–tcp-flags SYN,ACK,FIN,RST SYN“;
udp:
[!] –source-port, –sport port[:port]:匹配報文的源端口;可以是端口范圍;
[!] –destination-port,–dport port[:port]:匹配報文的目標端口;可以是端口范圍;
icmp:
[!] –icmp-type {type[/code]|typename}
echo-request:8
echo-reply:0
顯式擴展:必須要手動加載擴展模塊, [-m matchname [per-match-options]];
1、multiport
以離散或連續的 方式定義多端口匹配條件,最多15個;
[!] –source-ports,–sports port[,port|,port:port]…:指定多個源端口;
[!] –destination-ports,–dports port[,port|,port:port]…:指定多個目標端口;
~]# iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport –dports 22,80,139,445,3306 -j ACCEPT
2、iprange
以連續地址塊的方式來指明多IP地址匹配條件;
[!] –src-range from[-to]
[!] –dst-range from[-to]
~]# iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport –dports 22,80,139,445,3306 -m iprange –src-range 172.16.0.61-172.16.0.70 -j REJECT
3、time
如果包到達時間/日期在給定范圍內,則匹配。
–timestart hh:mm[:ss]
–timestop hh:mm[:ss]
[!] –weekdays day[,day…]
[!] –monthdays day[,day…]
–datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
–datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
–kerneltz:使用內核配置的時區而非默認的UTC;
4、string
該模塊使用某種模式匹配策略匹配給定的字符串。
–algo {bm|kmp}
[!] –string pattern
[!] –hex-string pattern
–from offset
–to offset
~]# iptables -I OUTPUT -m string –algo bm –string “gay” -j REJECT
5、connlimit
允許您限制每個客戶端IP地址(或客戶端地址塊)與服務器的并行連接數量。
–connlimit-upto n
–connlimit-above n
~]# iptables -I INPUT -d 172.16.0.7 -p tcp –syn –dport 22 -m connlimit –connlimit-above 2 -j REJECT
6、limit
此模塊使用令牌桶過濾器以有限的速率匹配。
–limit rate[/second|/minute|/hour|/day]
–limit-burst number
~]# iptables -I OUTPUT -s 172.16.0.7 -p icmp –icmp-type 0 -j ACCEPT
限制本機某tcp服務接收新請求的速率:–syn, -m limit
7、state
The “state” extension is a subset of the “conntrack” module. “state” allows access to the connection tracking state for this packet.
[!] –state state
INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED.
NEW: 新連接請求;
ESTABLISHED:已建立的連接;
INVALID:無法識別的連接;
RELATED:相關聯的連接,當前連接是一個新請求,但附屬于某個已存在的連接;
UNTRACKED:未追蹤的連接;
state擴展:
內核模塊裝載:
nf_conntrack
nf_conntrack_ipv4
手動裝載:
nf_conntrack_ftp
追蹤到的連接:
/proc/net/nf_conntrack
調整可記錄的連接數量最大值:
/proc/sys/net/nf_conntrack_max
超時時長:
/proc/sys/net/netfilter/*timeout*
處理動作(跳轉目標):
-j targetname [per-target-options]
簡單target:
ACCEPT,DROP
擴展target:
REJECT,LOG,RETURN
原創文章,作者:XIAJIDONG,如若轉載,請注明出處:http://www.www58058.com/78251