IPTables ルールは着信 SSH 接続を許可します。

IPTables ルールは着信 SSH 接続を許可します。

このスクリプトの目的は、localhost <-> localhostと着信SSHトラフィックを除いて、VPNを介したトラフィックのみを許可することです。ただし、SSH経由でスクリプトを実行すると接続が失われ、VMを再起動する必要があります。私のスクリプトに問題がありますか?

#!/bin/bash
iptables -F

#Allow over VPN
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A OUTPUT -o tun+ -j ACCEPT

#Localhost
iptables -A INPUT -s 127.0.0.1/8 -j ACCEPT
iptables -A OUTPUT -d 127.0.0.1/8 -j ACCEPT

#VPN
iptables -A INPUT -s 123.123.123.123 -j ACCEPT
iptables -A OUTPUT -d 123.123.123.123 -j ACCEPT

#SSH
iptables -A INPUT -p tcp --dport ssh -j ACCEPT

#Default Deny
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP

ベストアンサー1

あなたの#SSHルールは、sshが一方向の通信形式であることを示唆していますが、そうではありません。データが送信されていますそして退いてください。

クライアントのポート番号を事前に知ることができないため、これを処理する一般的な方法は、考慮される接続を許可することです。「確立された」または「関連する」確立された接続で。これを行うには、次のものが必要です。

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

DROPルールの前(ルールは順番に処理され、これら2つのルールはほとんどのパケットに適用されるため、一番上にあることをお勧めします)。

TCP接続がどのようにESTABLISHEDされるかについての説明ここ;デフォルトでは、サーバーがルールで許可されているパケットで応答するという事実が#SSH INPUTこれを可能にします。

おすすめ記事