iptables的基礎知識-iptables規則
iptables規則是如何練成的
iptables規則就是指向標,在一條鏈上,對不同的連接和數據包阻塞或允許它們去向何處。插入鏈的每一行都是一條iptables規則。我們也會討論基本的matche及其用法,還有各種各樣的target,以及如何建立我們自己的target(比如,一個新的子鏈)。
我們已經解釋了什么是iptables規則,在內核看來,iptables規則就是決定如何處理一個包的語句。如果一個包符合所有的條件(就是符合matche語句),我們就運行target或jump指令。書寫iptables規則的語法格式是:
- iptables [-t table] command [match] [target/jump]
對于這個句法沒什么可說的,但注意target指令必須在***。為了易讀,我們一般用這種語法。總之,你將見到的大部分iptables規則都是按這種語法寫的。因此,如果你看到別人寫的iptables規則,你很可能會發現用的也是這種語法,當然就很容易理解那些iptables規則了。
如果你不想用標準的表,就要在[table]處指定表名。一般情況下沒有必要指定使用的表,因為iptables 默認使用filter表來執行所有的命令。也沒有必要非得在這里指定表名,實際上幾乎可在iptables規則的任何地方。當然,把表名在開始處已經是約定俗成的標準。
盡管命令總是放在開頭,或者是直接放在表名后面,我們也要考慮考慮到底放在哪兒易讀。command告訴程序該做什么,比如:插入一個iptables規則,還是在鏈的末尾增加一個iptables規則,還是刪除一個iptables規則,具體的可以參考iptables的手冊。
match細致地描述了包的某個特點,以使這個包區別于其它所有的包。在這里,我們可以指定包的來源IP 地址,網絡接口,端口,協議類型,或者其他什么。下面我們將會看到許多不同的match。
***是數據包的目標所在。若數據包符合所有的match,內核就用target來處理它,或者說把包發往 target。比如,我們可以讓內核把包發送到當前表中的其他鏈(可能是我們自己建立的),或者只是丟棄這個包而沒有什么處理,或者向發送者返回某個特殊的應答。
一個測試腳本
- Client-----------------------àserver(web server,dns)
- 192.168.10.7 192.168.55.55
- #實驗環境,redhat 7.1
- #iptables v1.2.1.a
- #客戶機:192.168.10.7
- #linux: 192.68.55.55 安裝apache,dns
- #清除所有iptables規則
- 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
- #所有進入的包先檢查是否正常,然后轉到TCP,UDP進行處理
- #192.168.10.7是網管機,允許該機的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發起ICMP的請求
- iptables -A INPUT -p icmp -s 192.168.10.7 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
- #本機ICMP請求包返回時,進入INPUT,所以狀態是ESTABLISHED,RELATED
- #允許從本機往外發ICMP的請求包
- iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
- #HTTP的請求收到后允許出去,所以狀態是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
上一節:iptables包的轉發過程 下一節:TOS優化提高防火墻性能
【編輯推薦】