我设置了这些 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