Linux iptables常用命令的使用


為什么會有本文

因為最近幫一個朋友布署一個上網梯子,他那邊本來用的是v2ray,但是他想用ssr,但是安裝配置ssr過程中出了很多問題,比如linux內核版本4.9有點老,不支持bbr加速、無法連接socket、啟動了連接不上等一系列問題,趁着有時間,就幫他看看,幫他升級了內核,改的防火牆…… 在修改防火牆的時候,發現iptables中的知識點好多,既然碰到了,就稍微記一點常用的用法,以待查驗。

主要內容

語法:

iptables (選項) (參數)

iptables命令選項輸入順序:

iptables -t 表名 <-A/I/D/R> 規則鏈名 [規則號] <-i/o 網卡名> -p 協議名 <-s 源IP/源子網> --sport 源端口 <-d 目標IP/目標子網> --dport 目標端口 -j 動作

參數說明:

表名包括

  • raw:高級功能,如:網址過濾。
  • mangle:數據包修改(QOS),用於實現服務質量。
  • net:地址轉換,用於網關路由器。
  • filter:包過濾,用於防火牆規則。

規則鏈名包括

  • INPUT鏈:處理輸入數據包。
  • OUTPUT鏈:處理輸出數據包。
  • PORWARD鏈:處理轉發數據包。
  • PREROUTING鏈:用於目標地址轉換(DNAT)。
  • POSTOUTING鏈:用於源地址轉換(SNAT)。

動作包括

  • ACCEPT:接收數據包。

  • DROP:丟棄數據包。

  • REDIRECT:重定向、映射、透明代理。

  • SNAT:源地址轉換。

  • DNAT:目標地址轉換。

  • MASQUERADE:IP偽裝(NAT),用於ADSL。

  • LOG:日志記錄。

常用命令

查看現在iptables規則:

iptables -L -n -v

清空配置:

iptables -F #清楚規則鏈中已有的條目;使用iptables -F 要小心,搞不好,你就馬上同服務器斷開連接了
iptables -X #刪除沒有用戶配置文件相關的chain
iptables -Z #清空規則鏈中的數據包計算器和字節計數器;

使用清空配置要小心,可參考https://blog.csdn.net/ingiaohi/article/details/70559425

用規則配置:

#配置,禁止進,允許出,允許回環網卡
iptables -P INPUT DROP
iptables -A OUTPUT -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
#允許ping
iptables -A INPUT -p icmp -j ACCEPT
#允許ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#允許ftp
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#允許ftp被動接口范圍,在ftp配置文件里可以設置
iptables -A INPUT -p tcp --dport 20000:30000 -j ACCEPT
#學習felix,把smtp設成本地
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT -s 127.0.0.1
iptables -A INPUT -p tcp -m tcp --dport 25 -j REJECT
#允許DNS
iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
#允許http和https
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#允許已建立的或相關連的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#禁止其他未允許的規則訪問
iptables -A INPUT -j REJECT #(注意:如果22端口未加入允許規則,SSH鏈接會直接斷開。)
iptables -A FORWARD -j REJECT

屏蔽ip——使用-I參數

iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽單個IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整個段即從123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即從123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即從123.45.6.1到123.45.6.254的命令是

刪除已添加的iptables規則——使用-D參數

#假設之前用iptables -A INPUT -s 192.168.1.4 -j DROP 添加的規則
iptables -D INPUT -s 192.168.1.4 -j DROP
#或者
#查出當前規則的列表,使用當前列表下的序號:由下至下順序
iptables -D INPUT 3 #這里是刪除第三條

修改規則——使用-R參數

#假設之前用iptables -A INPUT -s 192.168.1.4 -j DROP 添加的規則
iptables -R INPUT -s 192.168.1.4 -j DROP
#或者
#查出當前規則的列表,使用當前列表下的序號:由下至下順序
iptables -R INPUT 3 -j ACCEPT

規則永久生效:包括重啟

service iptables save #保存
service iptables restart #重啟iptables防火牆

備份與還原

#保存配置
iptables-save > /etc/iptables #(注意:后邊這個文件路徑可以自選)
#還原配置
iptables-restore < /etc/iptables #(注意:后邊這個文件路徑可以自選,要是前邊備份文件的位置)

關於不重啟規則不生效的解決

使用iptables命令操作的規則僅對當前會話有效,規則存在於內存中,如果重啟就會丟失規則,上邊提到永久生效的方法,經測試debian下沒有成功,所以這里額外記述一些解決方案

本方法的原理是使用重啟后系統會掃描並執行指定文件夾下的腳本,在腳本內執行還原之前保存的規則文件

step1

#保存規則
iptables-save > /etc/iptables/iptables-script

step2

#在/etc/network/if-pre-up.d目錄下創建腳本
vim /etc/network/if-pre-up.d/auto_restore_iptables

step3

#添加如下內容,其中后邊的路徑為保存的規則文件路徑
#!/bin/sh
/sbin/iptables-restore < /etc/iptables/iptables-script
#保存退出

step4

#為腳本添加可執行權限
sudo chmod +x /etc/network/if-pre-up.d/auto_restore_iptables

至此,已經完成開機自動還原規則的操作了


那么增、刪、改等操作就簡單了

#1.使用命令修改規則
#2.保存規則
iptables-save > /etc/iptables/iptables-script

--End--

本文內容來自網絡,如有雷同,不勝榮幸


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM