iptables的起源發展防火牆的工作原理等這裡我們就不在複述。這裡主要記錄下日常運維過程中關於iptables的命令,引數及實際運用。
iptables -f 清除預設表filter中的所有規則鏈的規則
iptables -x 清除預設表filter中使用者自定鏈中的規則
iptables -p :設定預設策略的
iptables -z:清空鏈,及鏈中預設規則的計數器
iptables -n:new 支援使用者新建乙個鏈
iptables -l -n 檢視規則
-a:追加,在當前鏈的最後新增乙個規則
-i num : 插入,把當前規則插入為第幾條。
-i 3 :插入為第三條
-o 指定資料報傳出的那個網路介面。經常與output鏈配合
-p 指定規則使用的協議
常用 tcp,udp,icmp,all
-s 指定**ip或者網路,可以整個段,可以單個ip
例如 192.168.31.0/24 192.168.31.2
規則前加 !表示取反 例如:
iptables -a input -i eth0 -p tcp --dport=80 -s 192.168.31.0/24 -j accept
這表示允許192.168.31.0網段的機器通過eth0網絡卡訪問本機80埠
iptables -a input -i eth0 -p tcp --dport=80 -s !192.168.31.0/24 -j accept
這就表示不允許了 因為!取反
-d 與-s類似功能
-j 需要執行的動作
主要有accept,drop,reject,redirect
-i 指定資料報進入的那個網絡卡。
如 eth0,lo 此引數一般配合input鏈使用
-m 指定使用的模組
例如: multiport(啟用多埠擴充套件)
state(狀態監測)
limit(限制)
mac(網絡卡實體地址)
.......
-r num:replays替換/修改第幾條規則
格式:iptables -r 3 …………
-d num:刪除,明確指定刪除第幾條規則
-p 指定鏈策略
-t 指定鍊錶
例如允許所有資料流出
iptables -p output accept (不指定-t 預設為filter表)
–sport 限制**的埠號
tcp連線實際是兩個埠建立連線。
所以**埠號就是別人訪問你這個服務時他的埠號
–dport 恰恰相反.也就是你服務的埠號。所以我們基本使用的都是dport
-m state –state 《狀態》
有數種狀態,狀態有:
- invalid:無效的封包,例如資料破損的封包狀態
- established:已經聯機成功的聯機狀態;
- new:想要新建立聯機的封包狀態;
- related:表示這個封包是與我們主機傳送出去的封包有關, 可能是響應封包或者是聯機成功之後的傳送封包!這個狀態很常被設定,因為設定了他之後,只要未來由本機傳送出去的封包,即使我們沒有設定封包的 input 規則,該有關的封包還是可以進入我們主機, 可以簡化相當多的設定規則。
iptables -a input -m state --state established,related -j accept
iptables -p output accept
iptables -a input -i lo -j accept
一般當我們需要建立一些臨時規則時 一般會在開頭加上這3句
這樣的作用:
不影響現有的傳入資料。而且也不用擔心開放了之前拒絕的埠
不影響流出資料
不影響本地lo環路資料(訪問本地127.0.0.1)
常用的規則配置:
允許192.168.31.0網段訪問80埠
iptables -a input -p tcp --dport 80 -s 192.168.31.0/24 -j accept
不允許
iptables -a input -p tcp --dport 80 -s !192.168.31.0/24 -j accept
或iptables -a input -p tcp --dport 80 -s 192.168.31.0/24 -j drop
只允許 mac位址為aa:bb:cc:dd:ee:ff 的機器訪問本地ssh埠
iptables -a input -m mac --mac-source aa:bb:cc:dd:ee:ff -p tcp --dport 22 -j accept
將80埠重定向到8080埠
iptables -t nat -a prerouting -p tcp --dport 80 -j redirect --to-ports 8080
443埠限流,每秒最多150個連線(防ddos)
iptables -a input -i eth0 -p tcp --dport 443 -m limit --limit 150/s --limit-burst 150 -j accept
防syn_flood
iptables -n syn-flood (新建一條鏈)
iptables -a input -p tcp --syn -j syn-flood
iptables -a syn-flood -p tcp -m limit --limit 2/s --limit-burst 50 -j return
iptables -a syn-flood -j drop
單個ip最大併發數50
iptables -i input -p tcp --dport 80 -m connlimit --connlimit-above 50 -j reject
對訪問本機的22埠進行限制,每個ip每小時只能連線5次,超過的拒接,1小時候重新計算次數
iptables -a input -p tcp --dport 22 -m state --state new -m recent --name sshpool --rcheck --seconds 3600 --hitcount 5 -j drop
iptables -a input -p tcp --dport 22 -m state --state new -m recent --name sshpool --set -j accept
(上面recent規則只適用於預設規則為drop中,如果要適用預設accept的規則,需要--set放前面 並且無-j accept)
預防cc攻擊
tcpdump -tnn dst port 80 -c 100 | awk -f"." '' | sort | uniq -c | sort -n -r |head -20
查詢發包最多的ip
iptables -i input -s ip -j reject
封掉
iptables技巧之常用命令
1,如何實現基於乙個網段的連續的ip的驗證?因為託管機房分配給我們的ip位址通常是連續的,所以會有這個需求 需要使用iprange模組 如下 a input m iprange src range 192.168.6.106 192.168.6.129 j accept 2,備註 2.4核心的ipt...
iptables常用配置
常用的iptables模板 bin sh iptables f iptables x iptables f t mangle iptables t mangle x iptables f t nat iptables t nat x iptables p input drop iptables p ...
iptables常用配置
常用的iptables模板 bin sh iptables f iptables x iptables f t mangle iptables t mangle x iptables f t nat iptables t nat x iptables p input drop iptables p ...