
我正在嘗試設定一些規則來阻止 TCP(SSH 和 FTP)上除 21 和 22 之外的所有連接埠。但是,當我嘗試運行此腳本時,我的實例被鎖定並且無法存取它。這是腳本:
# Flush the FW Rules
iptables -F
iptables -X
# Block all traffic
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# Allow SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
# Allow FTP
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -j ACCEPT
# Allow ICMP (ping)
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
在腳本中,它設定了 SSH 和 FTP 的傳入和傳出請求,但為什麼我無法存取它?
答案1
- 對於
OUTPUT
鏈中的規則,您應該指定來源連接埠比對 (--sport
),而不是目標連接埠 (--dport
)。 - 無論如何,
DROP
連鎖政策OUTPUT
並不是常見的做法。 - 閱讀 iptables 教學課程和範例規則集。
- 為了避免失去連接,更好的使用
iptables-save
和iptables-apply
工具。
答案2
您應該設定狀態跟踪,並丟失線路-A OUTPUT ... -j ACCEPT
。
IPTABLES -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
IPTABLES -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
IPTABLES -I OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
很高興看到您正在使用顯式出口過濾,但實施起來需要更多工作。