web-dev-qa-db-ja.com

iptablesを使用したStrongswanVPN着信パケットのフィルタリング

DebianSqueezeマシンでStrongswanVPNサーバーを使用しています。着信VPNクライアントは192.168.99.0/24サブネットのIPを取得します。

私はこのVPNを主に暗号化されていないWLANを使用するときに暗号化するために使用しているので、iptablesを使用してインターネットにソースNATを実行しています(サーバーには静的ipv4アドレスがあるため、ソースNATを優先します) 。)

現時点では、次のiptablesコマンドを使用しています

# used for StrongSWAN
iptables -t nat -I POSTROUTING -s 192.168.99.0/24 -o eth0 -j SNAT --to-source <public IP adress of server>

私の質問は、このルールを使用すると、この192.168.99.0/24サブネットから着信するすべてのトラフィックが受け入れられ、NATされるようになりました。このルールでは、このVPNトンネルを介してサーバーに入ったトラフィックのみが受け入れられることを具体的に説明します。

2つのネットワークデバイスを使用する従来のルーター設定では、着信デバイスをチェックしてそれを実現します。 Strongswanに同等のもの(仮想ネットワークデバイスなど)はありますか?

トンネルを介してサーバーに到達したパケットをフィルターで除外して、これらのパケットのみがNATされるようにするにはどうすればよいですか?

1
GorillaPatch

IPsecポリシーとの関係に基づいてパケットを照合するiptablesのポリシーモジュールを確認する必要があります(詳細については、man 8 iptablesまたはman 8 iptables-extensionsを参照してください)。

モジュールが最適に適用される方法は、ファイアウォールの残りの部分がどのように構成されているか、および正確な要件が何であるかによって異なります。たとえば、INPUTおよびFORWARDチェーンのデフォルト(ファイアウォール)ポリシーをDROPに設定します(SSH経由で行う場合は、マシンからロックアウトされる可能性があるため注意してください) )次に、strongSwanのデフォルトのアップダウンスクリプト(leftfirewall=yes)を使用すると、基本的に、IPsecトンネルに関連するすべての処理が実行されます。スクリプトは、適切な入力および転送ルールを(ポリシーモジュールを使用して)自動的に追加し、IPsecトンネルを介したトンネルサブネットとの間のトラフィックのみを許可します(実際、ロードウォリアーの場合、割り当てられたIPのみが許可され、サブネット全体は許可されません) 。

上記を実行したくない場合は、いくつかのルールを手動で追加できます。次のオプションを使用すると、任意のIPsec接続を介して到着したパケットを照合できます(方向を指定するには、--dir in|outを使用します)。

-m policy --dir in --pol ipsec

したがって、IPsec経由で到着しなかったサブネットからの送信元IPを持つパケットを単にドロップしたい場合は、次のルールを追加できます。

iptables -A INPUT -s 192.168.99.0/24 ! -m policy --dir in --pol ipsec -j DROP 
iptables -A FORWARD -s 192.168.99.0/24 ! -m policy --dir in --pol ipsec -j DROP
5
ecdsa