iptables:
一、防火牆簡介
所謂防火牆指的是一個由軟件和硬件設備組合而成、在內部網和外部網之間、專用網與公共網之間的界面上構造的保護屏障。是一種獲取安全性方法的形象說法,它是一種計算機硬件和軟件的結合,使Internet與Intranet之間建立起一個安全網關,從而保護內部網免受非法用戶的侵入,防火牆主要由服務訪問規則、驗證工具、包過濾和應用網關4個部分組成,防火牆就是一個位於計算機和它所連接的網絡之間的軟件或硬件。該計算機流入流出的所有網絡通信和數據包均要經過此防火牆。當然需要注意的是世界上沒有絕對的安全,防火牆也只是能夠啓到一定的安全防護,大多數的安全風險還是在內網之中。
二、防火牆分類
1、從特點上分類
(1)軟件防火牆,軟件防火牆運行於特定的計算機上,它需要客戶預先安裝好的計算機操作系統的支持,一般來說這臺計算機就是整個網絡的網關。俗稱“個人防火牆”。軟件防火牆就像其它的軟件產品一樣需要先在計算機上安裝並做好配置纔可以使用。
(2)硬件防火牆,硬件防火牆其實就是一個普通PC機的架構,然後上面跑有專門的操作系統。
(3)芯片級防火牆,這種防火牆基於專門的硬件平臺,沒有操作系統,專有的ASIC芯片使它們比其他類的防火牆速度更快,處理能力極強,性能更高,但是價格也極其昂貴。
2、從技術上分類
(1)包過濾型防火牆,這類的防火牆主要是工作在網絡層,根據事先設定好的規則進行檢查,檢查結果根據事先設定好的處理機制進行處理。
(2)應用層防火牆,它是工作在TCP/IP模型中的最高層應用層,相比較來說速度要慢一點。
(3)狀態監視器,狀態監視作爲防火牆其安全性爲最佳,但配置比較複雜,且網絡速度較慢。
三、iptables的原理詳解
1、netfilter與iptables
Netfilter是由Rusty Russell提出的Linux 2.4內核防火牆框架,該框架既簡潔又靈活,可實現安全策略應用中的許多功能,如數據包過濾、數據包處理、地址僞裝、透明代理、動態網絡地址轉換(Network Address Translation,NAT),以及基於用戶及媒體訪問控制(Media Access Control,MAC)地址的過濾和基於狀態的過濾、包速率限制等。Iptables/Netfilter的這些規則可以通過靈活組合,形成非常多的功能、涵蓋各個方面,這一切都得益於它的優秀設計思想。
Netfilter是Linux操作系統核心層內部的一個數據包處理模塊,它具有如下功能:
網絡地址轉換(Network Address Translate)
數據包內容修改
數據包過濾防火牆功能
鏈(chains)
Netfilter 平臺中制定了數據包的五個鏈,分別是PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING。鏈(chains)是數據包傳播的路徑,每一條鏈其實就是衆多規則中的一個檢查清單,每一條鏈中可以有一條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該數據包是否滿足規則所定義的條件。如果滿足,系統就會根據該條規則所定義的方法處理該數據包;否則iptables將繼續檢查下一條規則,如果該數據包不符合鏈中任一條規則,iptables就會根據該鏈預先定義的默認策略來處理數據包。
規則(rules)
規則(rules)其實就是網絡管理員預定義的條件,規則一般的定義爲“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。規則存儲在內核空間的信息包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火牆的主要工作就是添加、修改和刪除這些規則。
表(tables)
表(tables)提供特定的功能,iptables內置了4個表,即filter表、nat表、mangle表和raw表,分別用於實現包過濾,網絡地址轉換、包重構(修改)和數據跟蹤處理。
2、filter、nat、mangle、raw
filter表
主要用於對數據包進行過濾,根據具體的規則決定是否放行該數據包(如DROP、ACCEPT、REJECT、LOG)。filter 表對應的內核模塊爲iptable_filter,包含三個規則鏈:
INPUT鏈:INPUT針對那些目的地是本地的包;
FORWARD鏈:FORWARD過濾所有不是本地產生的並且目的地不是本地(即本機只是負責轉發)的包;
OUTPUT鏈:OUTPUT是用來過濾所有本地生成的包;
nat表
主要用於修改數據包的IP地址、端口號等信息(網絡地址轉換,如SNAT、DNAT、MASQUERADE、REDIRECT)。屬於一個流的包(因爲包 的大小限制導致數據可能會被分成多個數據包)只會經過這個表一次。如果第一個包被允許做NAT或Masqueraded,那麼餘下的包都會自動地被做相同的操作,也就是說,餘下的包不會再通過這個表。表對應的內核模塊爲 iptable_nat,包含三個鏈:
PREROUTING鏈:作用是在包剛剛到達防火牆時改變它的目的地址;
OUTPUT鏈:改變本地產生的包的目的地址;
POSTROUTING鏈:在包就要離開防火牆之前改變其源地址;
mangle表
主要用於修改數據包的TOS(Type Of Service,服務類型)、TTL(Time To Live,生存週期)指以及爲數據包設置Mark標記,以實現Qos(Quality Of Service,服務質量)調整以及策略路由等應用,由於需要相應的路由設備支持,因此應用並不廣泛。包含五個規則鏈:PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。
raw表
是自1.2.9以後版本的iptables新增的表,主要用於決定數據包是否被狀態跟蹤機制處理。在匹配數據包時,raw表的規則要優先於其他表。包含兩條規則鏈——OUTPUT、PREROUTING
3、INPUT、FORWARD等規則鏈和規則
在處理各種數據包時,根據防火牆規則的不同介入時機,iptables供涉及5種默認規則鏈,從應用時間點的角度理解這些鏈:
INPUT鏈:當接收到防火牆本機地址的數據包(入站)時,應用此鏈中的規則。
OUTPUT鏈:當防火牆本機向外發送數據包(出站)時,應用此鏈中的規則。
FORWARD鏈:當接收到需要通過防火牆發送給其他地址的數據包(轉發)時,應用此鏈中的規則。
PREROUTING鏈:在對數據包作路由選擇之前,應用此鏈中的規則,如DNAT。
POSTROUTING鏈:在對數據包作路由選擇之後,應用此鏈中的規則,如SNAT。
其中中INPUT、OUTPUT鏈更多的應用在“主機防火牆”中,即主要針對服務器本機進出數據的安全控制;而FORWARD、PREROUTING、POSTROUTING鏈更多的應用在“網絡防火牆”中,特別是防火牆服務器作爲網關使用時的情況。
防火牆處理數據包的方式(規則):
ACCEPT:允許數據包通過
DROP:直接丟棄數據包,不給任何迴應信息
REJECT:拒絕數據包通過,必要時會給數據發送端一個響應的信息。
SNAT - Source Network Address Translation源網絡地址轉換。這是一種改變數據包源ip地址的技術, 經常用來使多臺計算機分享一個Internet地址。這隻在IPv4中使用,因爲IPv4的地址已快用完了,IPv6將解 決這個問題。
DNAT - Destination Network Address Translation 目的網絡地址轉換。 DNAT是一種改變數據包目的 ip地址的技術,經常和SNAT聯用,以使多臺服務器能共享一個ip地址連入Internet,並且繼續服務。通過對 同一個ip地址分配不同的端口,來決定數據的流向。
MASQUERADE,是SNAT的一種特殊形式,適用於像adsl這種臨時會變的ip上。
REDIRECT:是DNAT的一種特殊形式,將網絡包轉發到本地host上(不管IP頭部指定的目標地址是啥),方便在本機做端口轉發。
RETURN:返回
LOG:在/var/log/messages文件中記錄日誌信息,然後將數據包傳遞給下一條規則。
注意:除去最後一個LOG,前3條規則匹配數據包後,該數據包不會再往下繼續匹配了,所以編寫的規則順序極其關鍵。
4、 Linux數據包路由原理
網口數據包由底層的網卡NIC接收,通過數據鏈路層的解包之後(去除數據鏈路幀頭),就進入了TCP/IP協議棧(本質就是一個處理網絡數據包的內核驅動)和Netfilter混合的數據包處理流程中了。數據包的接收、處理、轉發流程構成一個有限狀態向量機,經過一些列的內核處理函數、以及Netfilter Hook點,最後被轉發、或者本次上層的應用程序消化掉。是時候看這張圖了:
從上圖中,我們可以總結出以下規律:
當一個數據包進入網卡時,數據包首先進入PREROUTING鏈,在PREROUTING鏈中我們有機會修改數據包的DestIP(目的IP),然後內核的”路由模塊”根據”數據包目的IP”以及”內核中的路由表”判斷是否需要轉送出去(注意,這個時候數據包的DestIP有可能已經被我們修改過了)
如果數據包就是進入本機的(即數據包的目的IP是本機的網口IP),數據包就會沿着圖向下移動,到達INPUT鏈。數據包到達INPUT鏈後,任何進程都會-收到它
本機上運行的程序也可以發送數據包,這些數據包經過OUTPUT鏈,然後到達POSTROTING鏈輸出(注意,這個時候數據包的SrcIP有可能已經被我們修改過了)
如果數據包是要轉發出去的(即目的IP地址不再當前子網中),且內核允許轉發,數據包就會向右移動,經過FORWARD鏈,然後到達POSTROUTING鏈輸出(選擇對應子網的網口發送出去)
我們在寫Iptables規則的時候,要時刻牢記這張路由次序圖,根據所在Hook點的不同,靈活配置規則。
四、iptables的幾個狀態
iptables的狀態跟蹤連接有4種,分別是:NEW、ESTABLISHED、RELATED、INVALID,除了從本機出去的數據包有NAT表的OUTPUT鏈處理外,其它所有的狀態跟蹤都在NAT表中的PREROUTING鏈中處理,具體狀態信息如下:
1、NEW狀態:說明這個數據包是收到的第一個數據表。
2、ESTABLISHED狀態:只要發送並接到應答,一個數據表的狀態就從NEW變爲ESTABLISHED,並且該狀態會繼續匹配這個連接後繼數據包。
3、RELATED狀態:當一個數據包的狀態處於ESTABLISHED狀態的連接有關係的時候,就會被認爲是RELATED,也就是說一個連接想要是RELATED狀態,首先要有一個ESTABLISHED的連接。
4、INVALID狀態:不能被識別屬於哪個連接狀態或沒有任何關係的狀態,一般這種數據包都是被拒絕的。
五、iptables的命令使用
1、查看鏈表,創建鏈表類命令
(1)、創建自定義鏈 iptables [-t table] -N chain :創建一條自定義規則的鏈 # iptables -t filter -N clean_in #自定義鏈在沒有引用之前是不起作用的 (2)、刪除自定義鏈 iptables [-t filter] -X [chain] : 刪除一個自定義鏈 # iptables -t filter -X clean_in (3)、修改自定義鏈名字 iptables [-t table] -E old-chain-name new-chain-name : 爲一個自定義鏈修改名字
2、查看修改規則命令組
-F:清空鏈中的規則,規則具有編號,從上到下,從1開始 -L:list,列出表中的所有規則 -n: 數字格式顯示IP和Port -v: 詳細格式顯示 pkts bytes target prot opt in out source destination 每個字段的含義: pkts: packets, 被本規則所匹配到的報文的個數; bytes: 被本規則所匹配到的所有報文的大小之和,會執行單位換算; target: 目標,即處理機制; prot: 協議,一般爲{TCP|UDP|ICMP}; opt: 可選項 in: 數據包的流入接口; out: 數據包的流出接口; source: 源地址; destination: 目標地址; -X:exactly, 精確值,不執行單位換算 --line-number: 顯示各規則的行號 -Z:匹配數量清零
3、添加和編輯規則
-A: append, 附加一條規則 -D chain [rulenum] rule-specification: 刪除一條規則 -I chain [rulenum] rule-specification : 修改規則 -R chain [rulenum] rule-specification:替換指定規則 -S chain [rulenum] 只顯示鏈上的規則添加 rule-specification格式 : 匹配條件 -j 處理機制 通用匹配條件: -s: 匹配原地址,可以IP,也可以是網絡地址,可以使用操作符取反!192.168.0.0/16;-s相當於--src或--source -d: 匹配目標地址 -p: 匹配協議,通常只使用{TCP|UDP|ICMP}三者之一; -i:數據報文流入的接口:通常用於INPUT, FORWARD, PREROUTING -o:流出接口,通常只用於OUTPUT,FORWARD,和POSTROUTING -j target RETURN:返回調用鏈 ACCEPT: 放行 示例: 1、爲了不斷開主機,先開放本機的22號端口 # iptables -t filter -A INPUT -s 192.168.0.0/16 -d 192.168.130.251 -p tcp --dport 22 -j ACCEPT # iptables -t filter -A OUTPUT -s 192.168.130.251 -d 192.168.0.0/16 -p tcp --sport 22 -j ACCEPT # iptables -P INPUT DROP # iptables -P OUTPUT DROP # iptables -L -n -v Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 253 21356 ACCEPT tcp -- * * 192.168.0.0/16 192.168.130.251 tcp dpt:22 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 62 6640 ACCEPT tcp -- * * 192.168.130.251 192.168.0.0/16 tcp spt:22 2、允許192.168.0.0/24網段ping通,當前192.168.120.251主機 # ping -w 2 -c 2 192.168.130.251 #先ping一下測試 PING 192.168.130.251 (192.168.130.251) 56(84) bytes of data. --- 192.168.130.251 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 1999ms #不通 # iptables -A INPUT -s 192.168.0.0/16 -d 192.168.130.251 -p icmp --icmp-type 8 -j ACCEPT # iptables -A OUTPUT -s 192.168.130.251 -d 192.168.0.0/16 -p icmp --icmp-type 0 -j ACCEPT # ping -w 2 -c 2 192.168.130.251 #另一臺機器ping測試 PING 192.168.130.251 (192.168.130.251) 56(84) bytes of data. 64 bytes from 192.168.130.251: icmp_seq=1 ttl=64 time=0.350 ms 64 bytes from 192.168.130.251: icmp_seq=2 ttl=64 time=0.412 ms --- 192.168.130.251 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.350/0.381/0.412/0.031 ms # iptables -L -n -v #查看本機報文匹配 Chain INPUT (policy DROP 1 packets, 229 bytes) pkts bytes target prot opt in out source destination 872 72532 ACCEPT tcp -- * * 192.168.0.0/16 192.168.130.251 tcp dpt:22 2 168 ACCEPT icmp -- * * 192.168.0.0/16 192.168.130.251 icmp type 8 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 440 46340 ACCEPT tcp -- * * 192.168.130.251 192.168.0.0/16 tcp spt:22 2 168 ACCEPT icmp -- * * 192.168.130.251 192.168.0.0/16 icmp type 0
3、iptables隱含擴展
1、tcp協議隱含擴展 -p tcp --dport m[-n]:匹配的目標端口,可以使連續的多個端口 -sport: 源端口 --tcp-flags rst,syn,ack,fin syn : 空格之前表示匹配哪些標識位,空格之後是哪些標識位爲1 --syn:單獨匹配某一項標識位 所有使用的值: URG, PSH, RST, SYN, ACK, FIN,ALL, NONE 示例:釋放所有192.168.0.0/16網段的ssh服務 # iptables -t filter -A INPUT -s 192.168.0.0/16 -d 192.168.130.251 -p tcp --dport 22 -j ACCEPT # iptables -t filter -A OUTPUT -s 192.168.130.251 -d 192.168.0.0/16 -p tcp --sport 22 -j ACCEPT # iptables -P INPUT DROP # iptables -P OUTPUT DROP # iptables -L -n -v Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 253 21356 ACCEPT tcp -- * * 192.168.0.0/16 192.168.130.251 tcp dpt:22 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 62 6640 ACCEPT tcp -- * * 192.168.130.251 #結果: ssh鏈接不會斷開,可以看見進出都有報文匹配 2、udp協議隱含擴展 -p udp : udp報文相關的拓展匹配 --dport --sport 放行本機的tftp服務 # iptables -A INPUT -s 192.168.0.0/16-d 192.168.130.251 -p udp --dport 69 -j ACCEPT # iptables -A OUTPUT -s 192.168.130.251 -d 192.168.0.0/16 -p udp --sport 69 -j ACCEPT 放行本機DNS服務 # iptables -A INPUT -s 192.168.0.0/16 -d 192.168.130.51 -p udp --dport 53 -j ACCEPT # iptables -A OUTPUT -s 192.168.130.251 -d 192.168.0.0/16 -p udp --sport 53 -j ACCEPT 3、ICMP協議的隱含擴展 -p icmp : icmp協議相關拓展 --icmp-type 8: ping 請求 0:ping 響應
4、iptables顯示擴展:必須指定擴展模塊
1、multiport:多端口匹配模塊,一次可以指定最多15離散端口。 -m multiport --source-ports,--sports port[,port|,port:port] : 指定源端口 --destination-port, --dports: 指定目標端口 --ports: 指定源端口和目標端口 #示例:開放本機所在網絡,ssh和web服務。 # iptables -A INPUT -s 192.168.0.0/16 -d 192.168.0.0/16 -p tcp -m multiport --dport 22,80 -j ACCEPT # iptables -A OUTPUT -s 192.168.130.251 -d 192.168.0.0/16 -p tcp -m multiport --sport 22,80 -j ACCEPT 2、iprange:匹配IP地址範圍 -m iprange: [!] --src-range from[-to] [!] --dst-range from[-to] #示例:開放本機ssh給192.168.130.1-192.168.130.100訪問 # iptables -A INPUT -d 192.168.130.251 -p tcp --dport 22 -m iprange --src-range 192.168.130.1-192.168.130.100 -j ACCEPT # iptables -A OUTPUT -s 192.168.130.251 -p tcp --sport 22 -m iprange --dst-range 192.168.130.1-192.168.130.100 -j ACCEPT 3、time:指定時間範圍匹配 -m time --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] --timestart hh:mm[:ss] --timestop hh:mm[:ss] [!] --weekdays day[,day...] #示例:在工作時間開放samba(tcp,901端口)服務 # iptables -A INPUT -d 192.168.130.251 -p tcp --dport 901 -m time --weekday Mon,Tus,Wed,Thu,Fri --timestart 09:00:00 --timestop 18:00:00 -j ACCEPT # iptables -A OUTPUT -s 192.168.130.251 -p tcp --sport 901 -j ACCEPT 4、string:字符串過濾 -m string --algo {bm|kmp}:字符匹配查找時使用的算法 --string "STRING" : 要查找的字符串 --hex-string "HEX-STRING": 要查找的字符,先編碼成16進制格式,可以提高查詢效率 示例:禁止本機的web報文,包含‘hello’字符 # iptables -A INPUT -s 192.168.0.0/16 -d 192.168.130.251 -p tcp -m string --algo bm --string "hello" -j DROP # iptables -A OUTPUT -s 192.168.130.251 -p tcp --sport 80 -j ACCEPT 5、connlimit:每個IP對指定服務的最大併發連接數 -m connlimit --connlimit-above [n]:連接的數量大於n --connlimit-upto [n]:連接的數量小於等於n 6、limit:報文速率控制 -m limit --limit #/[/second|/minute|/hour|/day] 限制速率 --limit-burst # 峯值速率 舉例: 防禦DDos*** # iptables -I INPUT -d 192.168.130.251 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 10 -j ACCEPT 在另一臺主機上,使用hping3命令發起*** # hping -1 -c 10000 -i u1 192.168.130.251 7、state:狀態匹配 -m state --state NEW:新發出的請求;連接追蹤模版中不存在此連接相關的條目 ESTABLISHED:已經建立的連接 RELATED:與現有連接有關聯的連接 INVALID:無法識別的連接,異常連接 狀態匹配是由ip_conntrack, nf_conntrack兩個模塊實現的。 # cat /proc/sys/net/nf_conntrack_max 定義了連接追蹤的最大值,因此,建議按需調大此值; # cat /proc/net/nf_conntrack 記錄了當前追蹤的所有連接 # cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established 記錄建立的連接超時時間 法則: 1. 對於進入的狀態爲ESTABLISHED都應該放行; 2. 對於出去的狀態爲ESTABLISHED都應該放行; 3. 嚴格檢查進入的狀態爲NEW的連接; 4. 所有狀態爲INVALIED都應該拒絕; 示例:放行工作於被動模式下的FTP服務 1. 確保iptables加載ftp協議支持的模塊:ip_nat_ftp, ip_conntrack_ftp 編輯/etc/sysconfig/iptables-config文件,定義如下參數: IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp" 2. 開放命令連接端口,tcp 21號端口 # iptables -A INPUT -d 192.168.130.251 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT 3. 放行請求報文的RELATED和ESTABLISHED狀態,放行響應報文的ESTABLISHED狀態; # iptables -A INPUT -d 192.168.130.251 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT # iptables -A OUTPUT -s 192.168.130.251 -p tcp -m state --state ESTABLISHED -j ACCEPT 如果只開放命令連接的話,依然可以進行身份認證,但是無法下載,或者查看目錄
5、INPUT和OUTPUT默認策略
1. 限制本地主機的web服務器在週一不允許訪問;新請求的速率不能超過100個每秒;web服務器包含了admin字符串的頁面不允許訪問;web服務器僅允許響應報文離開本機; # iptables -A INPUT -d 192.168.130.251 -p tcp --dport 80 -m state --state NEW -m limit --limit 100/second -m time ! --weekdays Mon -j ACCEPT # iptables -A INPUT -d 192.168.130.251 -p tcp --dport 80 -m state --state ESTABLISHED -j ACCEPT # iptables -A OUTPUT-s 192.168.130.251 -p tcp --sport 80 -m state --state ESTABLISHED -m string --algo kmp ! --string "admin" -j ACCEPT 2. 在工作時間,即週一到週五的8:30-18:00,開放本機的ftp服務給192.168.130.0網絡中的主機訪問;數據下載請求的次數每分鐘不得超過5個 # iptables -R INPUT 2 -d 192.168.130.251 -s 192.168.130.0/24 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --timestop 18:00:00 -j ACCEPT # iptables -R INPUT 3 -d 192.168.130.251 -s 192.168.130.0/24 -p tcp -m state --state RELATED -m limit --limit 5/min -j ACCEPT # iptables -A INPUT -d 192.168.130.251 -s 192.168.130.0/24 -p tcp -m state --state ESTABLISHED -j ACCEPT # iptables -A OUTPUT -d 192.168.130.0/24 -s 192.168.130.251 -p tcp -m state --state ESTABLISHED -j ACCEPT 3. 開放本機的ssh服務給192.168.130.1-192.168.130.100中的主機,新請求建立的速率一分鐘不得超過2個;僅允許響應報文通過其服務端口離開本機; # iptables -A INPUT -d 192.168.130.251 -p tcp --dport 22 -m state --state NEW -m iprange --src-range 192.168.130.1-192.168.130.100 -m limit --limit 2/min -j ACCEPT # iptables -A INPUT -d 192.168.130.251 -p tcp --dport 22 -m state --state ESTABLISHED -m iprange --src-range 192.168.130.1-192.168.130.100 -j ACCEPT # iptables -A OUTPUT -s 192.168.130.251 -p tcp --sport 22 -m iprange --dst-range 192.168.130.1-192.168.130.100 -m state --state ESTABLISHED -j ACCEPT 4. 拒絕TCP標誌位全部爲1及全部爲0的報文訪問本機; # iptables -A INPUT -d 192.168.130.251 -p --tcp-flags ALL ALL -j DROP
六、iptables當作網絡防火牆的一些設置
1、FORWARD鏈限定本機路由功能
1、開啓路由轉發 # echo 1 > /proc/sys/net/ipv4/ip_forward 2、限定需要在FORWARD鏈上面寫規則 舉例: 三臺主機,vm1,vm2,vm3 vm1: IP地址,192.168.130.10 vm2: IP地址,192.168.130.1 另一塊網卡爲172.16.100.1 vm3:IP地址,172.16.100.200 只開通vm1和vm3之間的ping 請求 ## 設置vm1主機 # route add default gw 192.168.130.1 ## 設置vm3主機 # route add default gw 172.16.100.1 ## 設置vm2主機 # echo 1 /proc/sys/net/ipv4/ip_forward # iptables -t filter -A FORWARD -s 192.168.130.10 -d 172.16.100.200 -p icmp -j ACCEPT # iptables -t filter -A FORWARD -s 172.16.100.200 -d 192.168.130.10 -p icmp -j ACCEPT # iptables -P FORWARD DROP