このスクリプトの目的は、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
これを可能にします。