iptables的基礎知識-iptables規(guī)則
iptables規(guī)則是如何練成的
iptables規(guī)則就是指向標,在一條鏈上,對不同的連接和數(shù)據(jù)包阻塞或允許它們?nèi)ハ蚝翁帯2迦腈湹拿恳恍卸际且粭liptables規(guī)則。我們也會討論基本的matche及其用法,還有各種各樣的target,以及如何建立我們自己的target(比如,一個新的子鏈)。
我們已經(jīng)解釋了什么是iptables規(guī)則,在內(nèi)核看來,iptables規(guī)則就是決定如何處理一個包的語句。如果一個包符合所有的條件(就是符合matche語句),我們就運行target或jump指令。書寫iptables規(guī)則的語法格式是:
- iptables [-t table] command [match] [target/jump]
對于這個句法沒什么可說的,但注意target指令必須在***。為了易讀,我們一般用這種語法??傊?,你將見到的大部分iptables規(guī)則都是按這種語法寫的。因此,如果你看到別人寫的iptables規(guī)則,你很可能會發(fā)現(xiàn)用的也是這種語法,當然就很容易理解那些iptables規(guī)則了。
如果你不想用標準的表,就要在[table]處指定表名。一般情況下沒有必要指定使用的表,因為iptables 默認使用filter表來執(zhí)行所有的命令。也沒有必要非得在這里指定表名,實際上幾乎可在iptables規(guī)則的任何地方。當然,把表名在開始處已經(jīng)是約定俗成的標準。
盡管命令總是放在開頭,或者是直接放在表名后面,我們也要考慮考慮到底放在哪兒易讀。command告訴程序該做什么,比如:插入一個iptables規(guī)則,還是在鏈的末尾增加一個iptables規(guī)則,還是刪除一個iptables規(guī)則,具體的可以參考iptables的手冊。
match細致地描述了包的某個特點,以使這個包區(qū)別于其它所有的包。在這里,我們可以指定包的來源IP 地址,網(wǎng)絡接口,端口,協(xié)議類型,或者其他什么。下面我們將會看到許多不同的match。
***是數(shù)據(jù)包的目標所在。若數(shù)據(jù)包符合所有的match,內(nèi)核就用target來處理它,或者說把包發(fā)往 target。比如,我們可以讓內(nèi)核把包發(fā)送到當前表中的其他鏈(可能是我們自己建立的),或者只是丟棄這個包而沒有什么處理,或者向發(fā)送者返回某個特殊的應答。
一個測試腳本
- Client-----------------------àserver(web server,dns)
- 192.168.10.7 192.168.55.55
- #實驗環(huán)境,redhat 7.1
- #iptables v1.2.1.a
- #客戶機:192.168.10.7
- #linux: 192.68.55.55 安裝apache,dns
- #清除所有iptables規(guī)則
- iptables -F
- # set policy
- #設置默認策略,均為刪除
- iptables -P INPUT DROP
- iptables -P OUTPUT DROP
- iptables -P FORWARD DROP
- # add chains
- #加入自定義鏈
- iptables -N bad_tcp_packets
- iptables -N allowed
- iptables -N tcp_packets
- iptables -N udp_packets
- # bad tcp
- #對壞包的處理為reset,和掃描等有關
- iptables -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
- #一個新包,SYN不置位,因此不是一個正常的連接請求,刪除
- iptables -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
- #allow chain
- #正常的TCP包都允許,其他的都刪除
- iptables -A allowed -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
- iptables -A allowed -p tcp -j DROP
- #tcp roles
- #TCP鏈的處理,允許WEB服務
- iptables -A tcp_packets -p tcp -s 0/0 --dport 80 -j allowed
- #udp roles
- #UDP鏈的處理,允許DNS
- iptables -A udp_packets -p udp -s 0/0 --dport 53 -j ACCEPT
- #所有進入的包先檢查是否正常,然后轉(zhuǎn)到TCP,UDP進行處理
- #192.168.10.7是網(wǎng)管機,允許該機的ICMP
- iptables -A INPUT -p tcp -j bad_tcp_packets
- iptables -A INPUT -p tcp -j tcp_packets
- iptables -A INPUT -p udp -j udp_packets
- #允許來自192.168.10.7發(fā)起ICMP的請求
- iptables -A INPUT -p icmp -s 192.168.10.7 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
- #本機ICMP請求包返回時,進入INPUT,所以狀態(tài)是ESTABLISHED,RELATED
- #允許從本機往外發(fā)ICMP的請求包
- iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
- #HTTP的請求收到后允許出去,所以狀態(tài)是ESTABLISHED,RELATED
- #當然還有DNS的UDP包
- iptables -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
- iptables -A OUTPUT -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT
上一節(jié):iptables包的轉(zhuǎn)發(fā)過程 下一節(jié):TOS優(yōu)化提高防火墻性能
【編輯推薦】