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--
本文內容來自網路,如有雷同,不勝榮幸