
我是 iptables 新手。我創建了一個重置 (reset.sh) iptables 的腳本,其他腳本 (ip-chains.sh) 創建類似輸入輸出鏈的鏈。在底部的同一個 scipr (ip-chains.sh) 中,我創建了一條規則,只是為了測試允許我用於 FTP 的傳入和傳出連接埠 2121。
問題是當我運行重置腳本時我可以訪問 FTP 伺服器,但當我運行 ip-chains.sh 腳本時我不能。我很困惑,因為我在同一個腳本檔案中有允許連接埠 2121 上的流量的規則。
我使用 eth1 連接到 FTP 伺服器 192.168.1.0,使用 eth2 連接到客戶端電腦。這是我的 ip-chains.sh 腳本:
#!/bin/bash
#Flush tables and set policies to drop
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#Create Logging Chain for accepted packets on INPUT CHAIN
iptables -N accept-input
#Rules for accept-input chain
iptables -A accept-input -j LOG --log-prefix "INPUT-ACCEPTED "
iptables -A accept-input -j ACCEPT
#Create Logging Chain for dropped packets on INPUT CHAIN
iptables -N drop-input
#Rules for drop-input chain
iptables -A drop-input -j LOG --log-prefix "INPUT-DROPPED "
iptables -A drop-input -j DROP
#Create Logging Chain for accepted packets on OUTPUT CHAIN
iptables -N accept-output
#Rules for accept-output chain
iptables -A accept-output -j LOG --log-prefix "OUTPUT-ACCEPTED "
iptables -A accept-output -j ACCEPT
#Create Logging Chain for dropped packets on OUTPUT CHAIN
iptables -N drop-output
#Rules for drop-output chain
iptables -A drop-output -j LOG --log-prefix "OUTPUT-DROPPED "
iptables -A drop-output -j ACCEPT
#Allow port 2121
iptables -A INPUT -i eth1 -p tcp -s 0/0 --dport 2121 -m state --state NEW,ESTABLISHED,RELATED -j accept-input
iptables -A OUTPUT -o eth1 -p tcp -d 0/0 --sport 2121 -m state --state ESTABLISHED,RELATED -j accept-input
iptables -A INPUT -i eth2 -p tcp -s 0/0 --dport 2121 -m state --state NEW,ESTABLISHED,RELATED -j accept-input
iptables -A OUTPUT -o eth2 -p tcp -d 0/0 --sport 2121 -m state --state ESTABLISHED,RELATED -j accept-input
#Log all DROPPED traffic
iptables -A INPUT -j drop-input
iptables -A OUTPUT -j drop-output
iptables -L -n
答案1
小心,當您刷新規則時,iptables -F
您會刷新所有規則,但不會刷新您的策略!因此,如果您有的話,policy DROP
您很容易被鎖定在系統之外!
通常,將鏈的最後policy ACCEPT
一條規則設定為更安全。DROP
或者,當您遠端工作時,您的防火牆每五到十分鐘設定一個cron
作業;這樣您在任何情況下都可以存取您的系統。policy ACCEPT
iptables -F
在您的腳本中iptables -p FORWARD DROP
,您沒有從eth1
到 的規則eth2
,反之亦然。您必須iptables -p FORWARD ACCEPT
在前向鏈中設定或添加一些規則來解決您的問題,例如:
iptables -A FORWARD -p tcp -i eth1 -o eth2 -s 2121 -d 2121 -j ACCEPT;
iptables -A FORWARD -p tcp -i eth2 -o eth1 -s 2121 -d 2121 -j ACCEPT;
答案2
使用 -v 查看資料包到達的位置...
iptables --list -n -v