これらの 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、Web サイトは 2.2.2.2、このサーバーは 3.3.3.3 です。すべての IPv6 接続をブロックします (私の PC は 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