iptables令不少小夥伴腦闊疼,下面咱們來講說如何使用iptables。算法
經過iptables --help
查看一下iptables用法shell
[root@note1 ~]# iptables --help iptables v1.4.21 Usage: iptables -[ACD] chain rule-specification [options] iptables -I chain [rulenum] rule-specification [options] iptables -R chain rulenum rule-specification [options] iptables -D chain rulenum [options] iptables -[LS] [chain [rulenum]] [options] iptables -[FZ] [chain] [options] iptables -[NX] chain iptables -E old-chain-name new-chain-name iptables -P chain target [options] iptables -h (print this help information)
iptables [-t table] COMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]
bash
iptables命令由 表 + 命令 + 鏈 + 匹配條件 + 處理動做
組成服務器
iptables由四表五鏈組成。每一個表分別實現不一樣的功能,每一個表擁有不一樣的鏈,鏈表明規則實現的位置。網絡
四表分別爲:app
五鏈分別爲:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。ssh
不一樣表支持的鏈:curl
添加規則時的考量點:tcp
鏈:鏈上的規則次序,即爲檢查的次序;所以,隱含必定的應用法則:ide
使用iptables命令時若不使用-t
指明操做哪張表,默認操做filter表。
iptables命令有三大類,查看,鏈管理,規則管理
-t : 查看的表
-n :不進行 IP 與 HOSTNAME 的反解
-v :列出更多的信息,包括經過該規則的封包總位數、相關的網絡接口等.
-L :列出目前的 table 的規則.
-S :查看規則定義,
--line-number用於查看規則號.
#使用iptables查看規則 [root@note1 ~]# iptables -vnL --line-number Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 467 29128 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 41 packets, 4276 bytes) num pkts bytes target prot opt in out source destination [root@note1 ~]# [root@note1 ~]# iptables -vnL INPUT --line-number Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 502 31476 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 [root@note1 ~]# #使用-S選項查看iptables的規則定義 [root@note1 ~]# iptables -S -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-N:new, 自定義一條新的規則鏈;
iptables -N test
-X:delete,刪除自定義的規則鏈;
注意:僅能刪除用戶自定義的引用計數爲0的空的鏈;
iptables -X test
-E:重命名自定義鏈;引用計數不爲0的自定義鏈不可以被重命名,也不能被刪除;
iptables -N testrn iptables -E testrn testrename
-P:Policy,設置默認策略;對filter表中的鏈而言,其默認策略有:
使用需謹慎,因爲我測試時,沒有先增長一條放行ssh的規則,因此在我將filter的INPUT鏈默認策略改成DROP後,我已經沒法經過Xshell連接虛擬機了,須要進入VMware放行ssh。
iptables -P INPUT DROP
增長了放行規則後,咱們已經成功使用Xshell從新連上了主機
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
使用命令添加默認策略
#先放行ssh,INPUT鏈及OUTPUT鏈都要放行。 iptables -A INPUT -d 176.16.128.1 -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -s 176.16.128.1 -p tcp --sport 22 -j ACCEPT #添加新規則的時候要插入在默認拒絕規則前,除這些規則外的都將拒絕。 iptables -A INPUT -d 176.16.128.1 -j REJECT iptables -A OUTPUT -s 176.16.128.1 -j REJECT #設置鏈上的默認策略爲容許。 iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT
-A:append,在已有規則後追加規則;
# 在note1節點增長一條拒絕80端口的規則 [root@note1 local]# iptables -A INPUT -p tcp --dport 80 -j REJECT # 咱們能夠看到因爲是使用追加命令追加的規則,這條規則的位置爲2 [root@note1 local]# iptables -vnL --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 4208 225K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 2 2 120 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable # 在主機點訪問note1節點的80端口 [root@master ~]# curl note1:80 curl: (7) Failed connect to note1:80; 拒絕鏈接 [root@master ~]#
-R:replace,替換指定鏈上的指定規則;
# 使用-R命令修改拒絕80端口的規則爲接受訪問 [root@note1 local]# iptables -R INPUT 2 -p tcp --dport 80 -j ACCEPT # 查看iptables [root@note1 local]# iptables -vnL --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 4881 271K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 # 在master節點訪問80端口,能夠看到網頁的內容了。 [root@master ~]# curl note1:80 <h1>I'm Note1</h1> [root@master ~]#
-I:insert, 插入,要指明位置,省略時表示第一條;
# 使用iptables -I不指定位置插入規則。 [root@note1 ~]# iptables -I INPUT -p tcp --dport 3306 -j ACCEPT # 查看iptables,顯示新增長的規則爲第一條。 [root@note1 ~]# iptables -vnL INPUT --line-number Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 2 616 38140 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 3 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 [root@note1 ~]# #使用iptables -I指定在第二條插入規則。 [root@note1 ~]# iptables -I INPUT 2 -p tcp --dport 443 -j ACCEPT [root@note1 ~]# iptables -vnL INPUT --line-number Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 3 810 50540 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 [root@note1 ~]#
-D:delete,刪除規則按照規則序號或規則自己
[root@note1 ~]# iptables -vnL INPUT --line-number Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 3 835 52340 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 [root@note1 ~]# iptables -D INPUT 2 [root@note1 ~]# iptables -vnL INPUT --line-number Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 2 882 55100 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 3 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 [root@note1 ~]#
[root@note1 ~]# iptables -vnL INPUT --line-number Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 2 882 55100 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 3 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 [root@note1 ~]# iptables -D INPUT -p tcp --dport 3306 -j ACCEPT [root@note1 ~]# iptables -vnL INPUT --line-number Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 1016 62940 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 [root@note1 ~]#
iptables的每條規則都有兩個計數器:
[root@note1 ~]# iptables -vnL INPUT --line-number Chain INPUT (policy ACCEPT 11 packets, 774 bytes) num pkts bytes target prot opt in out source destination 1 1028 63752 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 [root@note1 ~]# iptables -Z INPUT [root@note1 ~]# iptables -vnL INPUT --line-number Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 6 364 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 [root@note1 ~]#
[root@note1 ~]# iptables -vnL INPUT --line-number Chain INPUT (policy ACCEPT 5 packets, 180 bytes) num pkts bytes target prot opt in out source destination 1 46 2728 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 [root@note1 ~]# iptables -F INPUT [root@note1 ~]# iptables -vnL INPUT --line-number Chain INPUT (policy ACCEPT 6 packets, 364 bytes) num pkts bytes target prot opt in out source destination [root@note1 ~]#
無需加載任何模塊,由iptables/netfilter自行提供;
[!] -s, --source address[/mask][,...]:檢查報文中的源IP地址是否符合此處指定的地址或範圍; [!] -d, --destination address[/mask][,...]:檢查報文中的目標IP地址是否符合此處指定的地址或範圍;全部地址:0.0.0.0/0 [!] -p, --protocol protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or "all" 最經常使用的協議tcp、udp、icmp; [!] -i, --in-interface 數據報文流入的接口;只能應用於數據報文流入的環節,只能應用於PREROUTING,INPUT和FORWARD鏈; [!] -o, --out-interface 數據報文流出的接口;只能應用於數據報文流出的環節,只能應用於FORWARD、OUTPUT和POSTROUTING鏈;
[!]中的歎號表示取反的意思
隱式擴展:不須要手動加載擴展模塊;由於它們是對協議的擴展,因此在使用-p選項指明瞭特定的協議時,就表示已經指明瞭要擴展的模塊,無需再同時使用-m選項指明擴展模塊的擴展機制。
[!] --source-port, --sport port[:port]: 匹配報文的源端口;能夠是端口範圍; [!] --destination-port, --dport port[:port]: 匹配報文的目標端口;能夠是端口範圍; [!] --tcp-flags mask comp mask是咱們應該檢查的標誌,以逗號分隔,例如 SYN,ACK,FIN,RST comp是必須設置的標誌,例如SYN 例如:「--tcp-flags SYN,ACK,FIN,RST SYN」表示,要檢查的標誌位爲SYN,ACK,FIN,RST四個,其中SYN必須爲1,餘下的必須爲0; [!] --syn:用於匹配第一次握手,至關於」--tcp-flags SYN,ACK,FIN,RST SYN「;
[!]歎號表示取反的意思
[!] --source-port, --sport port[:port]: 匹配報文的源端口;能夠是端口範圍; [!] --destination-port, --dport port[:port]: 匹配報文的目標端口;能夠是端口範圍;
[!]歎號表示取反的意思
[!] --icmp-type {type[/code]|typename}
[!]歎號表示取反的意思
類型爲8:請求回送echo-request(Ping 請求)
類型爲0:回送應答echo-reply(Ping 應答)
咱們設置INPUT放行icmp-type類型爲0的報文,OUTPUT放行icmp-type類型爲8的報文,默認規則設置爲拒絕,這樣就能夠只容許咱們ping其餘主機,不容許其餘主機ping咱們。
#由於要增長默認拒絕規則,因此先放行ssh [root@note1 ~]# iptables -A INPUT -d 176.16.128.1 -p tcp --dport 22 -j ACCEPT [root@note1 ~]# iptables -A OUTPUT -s 176.16.128.1 -p tcp --sport 22 -j ACCEPT #增長默認拒絕規則 [root@note1 ~]# iptables -A INPUT -d 176.16.128.1 -j REJECT [root@note1 ~]# iptables -A OUTPUT -s 176.16.128.1 -j REJECT [root@note1 ~]# iptables -vnL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 299 19206 ACCEPT tcp -- * * 0.0.0.0/0 176.16.128.1 tcp dpt:22 0 0 REJECT all -- * * 0.0.0.0/0 176.16.128.1 reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 165 15559 ACCEPT tcp -- * * 176.16.128.1 0.0.0.0/0 tcp spt:22 0 0 REJECT all -- * * 176.16.128.1 0.0.0.0/0 reject-with icmp-port-unreachable #如今咱們嘗試ping,因爲ping未在iptables中設置因此ping請求沒法發送。 [root@note1 ~]# ping 176.16.128.8 PING 176.16.128.8 (176.16.128.8) 56(84) bytes of data. ping: sendmsg: 不容許的操做 ping: sendmsg: 不容許的操做 ping: sendmsg: 不容許的操做 ^C --- 176.16.128.8 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 1999ms #如今咱們在OUTPUT鏈上增長一條容許發送ping請求的規則 [root@note1 ~]# iptables -I OUTPUT 2 -s 176.16.128.1 -p icmp --icmp-type 8 -j ACCEPT #嘗試ping,發現請求能夠發送了,可是未有響應回來 [root@note1 ~]# ping 176.16.128.8 PING 176.16.128.8 (176.16.128.8) 56(84) bytes of data. #咱們使用tcpdump抓包,發現ping請求是有響應回來的。是INPUT鏈沒有放行。 [root@note1 ~]# tcpdump -i eno16777736 icmp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eno16777736, link-type EN10MB (Ethernet), capture size 262144 bytes 20:45:00.605683 IP note1 > master: ICMP echo request, id 4276, seq 64, length 64 20:45:00.605962 IP master > note1: ICMP echo reply, id 4276, seq 64, length 64 20:45:01.606935 IP note1 > master: ICMP echo request, id 4276, seq 65, length 64 20:45:01.607533 IP master > note1: ICMP echo reply, id 4276, seq 65, length 64 ^C 8 packets captured 8 packets received by filter 0 packets dropped by kernel [root@note1 ~]# #咱們在iptables的INPUT鏈放行ping請求的響應。 [root@note1 ~]# iptables -I INPUT 2 -d 176.16.128.1 -p icmp --icmp-type 0 -j ACCEPT #至此咱們已經ping通了其餘主機。 [root@note1 ~]# ping 176.16.128.8 PING 176.16.128.8 (176.16.128.8) 56(84) bytes of data. 64 bytes from 176.16.128.8: icmp_seq=228 ttl=64 time=0.687 ms 64 bytes from 176.16.128.8: icmp_seq=229 ttl=64 time=0.432 ms ^C --- 176.16.128.8 ping statistics --- 231 packets transmitted, 4 received, 98% packet loss, time 230101ms rtt min/avg/max/mdev = 0.432/0.804/1.443/0.382 ms [root@note1 ~]#
若要容許其餘主機也能ping咱們。在INPUT鏈中追加一條放行icmp-type類型爲8的報文,OUTPUT放行icmp-type類型爲0的報文,這樣就均可以ping通了。
顯式擴展:必須使用-m選項指明要調用的擴展模塊的擴展機制;
使用
man iptables-extensions
來查看顯示擴展的用法。
以離散或連續的方式定義多端口匹配條件,最多15個;
[!]--source-ports, --sports port[,port|,port:port]...:指定多個源端口; [!]--destination-ports, --dports port[,port|,port:port]...:指定多個目標端口;
[!]歎號表示取反的意思
咱們說過iptables要儘可能將那些可由一條規則描述的多個規則合併起來,不但能夠更簡潔,這樣也能夠提升報文經過的效率。
#使用iptables放行21,22,23,80,139,443,445,3306等端口。 iptables -A INPUT -p tcp -m multiport --dports 21:23,80,139,443,445,3306 -j ACCEPT
以連續地址塊的方式來指明多IP地址匹配條件;
[!] --src-range from[-to] #源地址區間 [!] --dst-range from[-to] #目標地址區間
[!]歎號表示取反的意思
設置放行176.16.128.5-176.16.128.10區間的IP能夠訪問主機
[root@note1 init.d]#iptables -I INPUT 2 -p icmp --icmp-type 8 -m iprange --src-range 176.16.128.5-176.16.128.10 -j ACCEPT [root@note1 init.d]#iptables -I OUTPUT 2 -p icmp --icmp-type 0 -s 176.16.128.1 -j ACCEPT #使用176.16.128.2 Ping主機,是沒有迴應的。 [root@note2 ~]# ping 176.16.128.1 PING 176.16.128.1 (176.16.128.1) 56(84) bytes of data. ^C --- 176.16.128.1 ping statistics --- 11 packets transmitted, 0 received, 100% packet loss, time 10076ms [root@note2 ~]# #使用176.16.128.8 Ping主機,在ip區間內是能夠收到回覆的。 [root@master ~]# ping 176.16.128.1 PING 176.16.128.1 (176.16.128.1) 56(84) bytes of data. 64 bytes from 176.16.128.1: icmp_seq=1 ttl=64 time=0.539 ms 64 bytes from 176.16.128.1: icmp_seq=2 ttl=64 time=0.922 ms ^C --- 176.16.128.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1020ms rtt min/avg/max/mdev = 0.539/0.730/0.922/0.193 ms [root@master ~]#
指定數據包到達時間/日期範圍的匹配條件。
--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;
[!]歎號表示取反的意思
通常時間或與周幾聯用,或時間與每個月幾號聯用。日期通常不經常使用。
#INPUT鏈放行工做區域176.16.128.5-176.16.128.10的主機在週一至週五的早9點到晚5點能夠訪問telnet服務。 iptables -I INPUT 2 -d 176.16.128.1 -p tcp --dport 23 -m iprange --src-range 176.16.128.5-176.16.128.10 -m time --timestart 9:00:00 --timestop 17:00:00 --weekdays 1,2,3,4,5 --kerneltz -j ACCEPT #OUTPUT鏈放行telnet服務。 iptables -I OUTPUT 2 -s 176.16.128.1 -p tcp --sport 23 -j ACCEPT
該模塊使用某種模式匹配策略來匹配給定的字符串。
--algo {bm|kmp} #匹配算法 [!] --string pattern #要過濾的字符串 [!] --hex-string pattern #要檢查的字符串的十六進制編碼 --from offset #從報文的哪一個位置開始檢查 --to offset #從報文的哪一個位置結束檢查
[!]歎號表示取反的意思。
只對明文編碼的協議生效。
# 出棧報文中包含字符串gay拒絕訪問。 iptables -I OUTPUT -m string --algo bm --string "gay" -j REJECT
容許您限制每一個客戶端地址與服務器的並行鏈接數。
--connlimit-upto n #上限 小於等於 --connlimit-above n #下限 大於等於
取決於默認規則是什麼,默認規則是拒絕,使用upto,設置低於就容許,不低於就被默認規則所匹配。
# 設置每一個客戶端ssh的鏈接不大於2個。 iptables -I INPUT -p tcp -d 176.16.128.1 --dport 22 -m connlimit --connlimit-upto 2 -j ACCEPT
此模塊使用令牌桶限制請求的速率。
--limit rate[/second|/minute|/hour|/day] #每秒、每分、每小時、天天多少個。 --limit-burst number #一批最多個數、峯值(桶大小)
限制本機某tcp服務接收新請求的速率:--syn, -m limit
# 限制主機Ping請求每分鐘20次,峯值發三次。 [root@note1 sysconfig]# iptables -I INPUT 2 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 3 -j ACCEPT [root@note1 sysconfig]# iptables -I OUTPUT 2 -p icmp --icmp-type 0 -j ACCEPT [root@note1 sysconfig]# iptables -vnL Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 893 57538 ACCEPT tcp -- * * 0.0.0.0/0 176.16.128.1 tcp dpt:22 #conn src/32 <= 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8 limit: avg 20/min burst 3 0 0 ACCEPT tcp -- * * 0.0.0.0/0 176.16.128.1 multiport dports 80,443,3306 2 104 REJECT all -- * * 0.0.0.0/0 176.16.128.1 reject-with icmp-port-unreachable Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 547 39791 ACCEPT tcp -- * * 176.16.128.1 0.0.0.0/0 multiport sports 22,80,443,3306 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 0 10 848 REJECT all -- * * 176.16.128.1 0.0.0.0/0 reject-with icmp-port-unreachable [root@note1 sysconfig]# #Ping主機,觀察應答的時間,得出已經成功限制Ping請求速率。 [root@master ~]# ping 176.16.128.1 PING 176.16.128.1 (176.16.128.1) 56(84) bytes of data. 64 bytes from 176.16.128.1: icmp_seq=1 ttl=64 time=0.692 ms 64 bytes from 176.16.128.1: icmp_seq=2 ttl=64 time=0.684 ms 64 bytes from 176.16.128.1: icmp_seq=3 ttl=64 time=0.722 ms 64 bytes from 176.16.128.1: icmp_seq=4 ttl=64 time=0.706 ms 64 bytes from 176.16.128.1: icmp_seq=7 ttl=64 time=1.10 ms 64 bytes from 176.16.128.1: icmp_seq=10 ttl=64 time=1.89 ms 64 bytes from 176.16.128.1: icmp_seq=13 ttl=64 time=0.983 ms ^C --- 176.16.128.1 ping statistics --- 14 packets transmitted, 7 received, 50% packet loss, time 13093ms rtt min/avg/max/mdev = 0.684/0.969/1.893/0.409 ms [root@master ~]#
state模塊容許訪問此數據包的鏈接跟蹤狀態。
#僅放行哪些鏈接的狀態。 [!] --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]
ACCEPT 容許
DROP 丟棄
--reject-with type
--log-level
--log-prefix
默認日誌保存於/var/log/messages
返回調用者;
自定義鏈作爲target:
保存:iptables-save > /PATH/TO/SOME_RULE_FILE
重載:iptabls-restore < /PATH/FROM/SOME_RULE_FILE
-n, --noflush
:不清除原有規則-t, --test
:僅分析生成規則集,但不提交
保存規則:service iptables save
保存規則於/etc/sysconfig/iptables
文件,覆蓋保存;
重載規則:service iptables restart
默認重載/etc/sysconfig/iptables
文件中的規則
配置文件:/etc/sysconfig/iptables-config
(1) 自定義Unit File,進行iptables-restore
(2) firewalld服務;
(3) 自定義腳本;