我設定了這些 iptables 規則,它阻止了我的 ssh 存取(以及其他所有內容):
*filter
# Allow loopback
-I INPUT 1 -i lo -j ACCEPT
# Allow DNS
-A OUTPUT -p udp --dport 53 -j ACCEPT
# allow outbound connection to several website
-A OUTPUT -p tcp -d www.google.com -j ACCEPT
-A OUTPUT -p tcp -d example.com -j ACCEPT
-A OUTPUT -p tcp -d myotherwebsite.tld -j ACCEPT
#allow inbound connection after an allowed outbound
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#allow me and my website to communicate
-A INPUT -s 2.2.2.2/32 -j ACCEPT
-A INPUT -s 1.1.1.1/32 -j ACCEPT
-A INPUT -s 127.0.0.1/8 -j ACCEPT
-A INPUT -j LOG
-A OUTPUT -j LOG
#drop everything else
-P INPUT DROP
COMMIT
在此範例中,我的 IP 是 1.1.1.1,我的網站是 2.2.2.2,伺服器是 3.3.3.3 我阻止所有 ipv6 連線(我的電腦僅配置為 ipv4)。我幾乎可以肯定這些規則在過去有效,但現在不行了。
答案1
在您的鏈中新增一條規則OUTPUT
,允許已建立的連線的資料包。新增到規則集中的典型規則是:
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
對於 SSH 連接,這將與您在中描述的規則具有相同的目的你之前的回答。然而,它更通用,也適用於允許與INPUT
您將來可能添加的任何其他鏈規則相關的資料包的雙向流,而無需在OUTPUT
鏈中進一步明確規則。
答案2
似乎需要雙向規則,添加以下行確實允許我訪問我的伺服器:
-A OUTPUT -d 1.1.1.1/32 -j ACCEPT