關(guān)于iptables的常用技巧方法

前序

iptables的起源發(fā)展防火墻的工作原理等這里我們就不在復(fù)述。這里主要記錄下日常運維過程中關(guān)于iptables的命令,參數(shù)及實際運用。

鏈路管理命令

iptables -F 清除預(yù)設(shè)表filter中的所有規(guī)則鏈的規(guī)則

iptables -X 清除預(yù)設(shè)表filter中使用者自定鏈中的規(guī)則

iptables -P :設(shè)置默認策略的

iptables -Z:清空鏈,及鏈中默認規(guī)則的計數(shù)器

iptables -N:NEW 支持用戶新建一個鏈

iptables -L -n 查看規(guī)則

鏈表規(guī)則管理命令

-A:追加,在當(dāng)前鏈的最后新增一個規(guī)則

-I num : 插入,把當(dāng)前規(guī)則插入為第幾條。

-I 3 :插入為第三條

-o 指定數(shù)據(jù)包傳出的那個網(wǎng)絡(luò)接口。經(jīng)常與OUTPUT鏈配合

-p 指定規(guī)則使用的協(xié)議

常用 tcp,udp,icmp,all

-s 指定來源ip或者網(wǎng)絡(luò),可以整個段,可以單個ip

例如 192.168.31.0/24 192.168.31.2

規(guī)則前加 !表示取反 例如:

iptables -A INPUT -i eth0 -p tcp --dport=80 -s 192.168.31.0/24 -j ACCEPT

這表示允許192.168.31.0網(wǎng)段的機器通過eth0網(wǎng)卡訪問本機80端口

iptables -A INPUT -i eth0 -p tcp --dport=80 -s !192.168.31.0/24 -j ACCEPT

這就表示不允許了 因為!取反

-d 與-s類似功能

-j 需要執(zhí)行的動作

主要有ACCEPT,DROP,REJECT,REDIRECT

-i 指定數(shù)據(jù)包進入的那個網(wǎng)卡。

如 eth0,lo 此參數(shù)一般配合INPUT鏈?zhǔn)褂?

-m 指定使用的模塊

例如: multiport(啟用多端口擴展)
     
      state(狀態(tài)監(jiān)測)
    
      limit(限制)
    
      mac(網(wǎng)卡物理地址)
      .......

-R num:Replays替換/修改第幾條規(guī)則

格式:iptables -R 3 …………

-D num:刪除,明確指定刪除第幾條規(guī)則

設(shè)置預(yù)置規(guī)則

-P 指定鏈策略

-t 指定鏈表

例如允許所有數(shù)據(jù)流出

iptables -P OUTPUT ACCEPT (不指定-t 默認為filter表)

--sport與--dport

--sport 限制來源的端口號
tcp連接實際是兩個端口建立連接。
所以來源端口號就是別人訪問你這個服務(wù)時他的端口號

--dport 恰恰相反.也就是你服務(wù)的端口號。所以我們基本使用的都是dport

狀態(tài)檢測

-m state --state <狀態(tài)>
有數(shù)種狀態(tài),狀態(tài)有:

  • INVALID:無效的封包,例如數(shù)據(jù)破損的封包狀態(tài)
  • ESTABLISHED:已經(jīng)聯(lián)機成功的聯(lián)機狀態(tài);
  • NEW:想要新建立聯(lián)機的封包狀態(tài);
  • RELATED:表示這個封包是與我們主機發(fā)送出去的封包有關(guān), 可能是響應(yīng)封包或者是聯(lián)機成功之后的傳送封包!這個狀態(tài)很常被設(shè)定,因為設(shè)定了他之后,只要未來由本機發(fā)送出去的封包,即使我們沒有設(shè)定封包的 INPUT 規(guī)則,該有關(guān)的封包還是可以進入我們主機, 可以簡化相當(dāng)多的設(shè)定規(guī)則。
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -P OUTPUT  ACCEPT

iptables -A INPUT -i lo -j ACCEPT

一般當(dāng)我們需要建立一些臨時規(guī)則時 一般會在開頭加上這3句

這樣的作用:

不影響現(xiàn)有的傳入數(shù)據(jù)。而且也不用擔(dān)心開放了之前拒絕的端口

不影響流出數(shù)據(jù)

不影響本地Lo環(huán)路數(shù)據(jù)(訪問本地127.0.0.1)

常用的規(guī)則配置:

允許192.168.31.0網(wǎng)段訪問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最大并發(fā)數(shù)50

iptables -I INPUT -p tcp --dport 80 -m connlimit  --connlimit-above 50 -j REJECT

對訪問本機的22端口進行限制,每個ip每小時只能連接5次,超過的拒接,1小時候重新計算次數(shù)

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規(guī)則只適用于默認規(guī)則為DROP中,如果要適用默認ACCEPT的規(guī)則,需要--set放前面 并且無-j ACCEPT)

預(yù)防cc攻擊

 tcpdump -tnn dst port 80 -c 100 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -n -r |head -20
 
 查找發(fā)包最多的ip
 
 iptables -I INPUT -s ip -j REJECT 
 
 封掉
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容