web-dev-qa-db-ja.com

VPNのみを許可するようにiptablesでファイアウォールを設定する

OpenVPNでIPredator VPNを使用していますが、接続が切断された場合、VPNなしではインターネットからデータを送信しません。 iptablesとrangeでそれができると聞きました。どうやってやるの?また、VPNが割り当てているIPの範囲を確認するにはどうすればよいですか?

8
Paul Woitaschek

VPNを開始する前に、netstat -rnおよびifconfig -aのコピーを取得してください。 VPNを開始すると、これら2つのコマンドの違いにより、VPNがルートに関して作成するネットワークと、それらのネットワークの可視性を得るために割り当てられているIPがわかります。また、VPNを提供するサーバーのIPを取得する必要があります(またはトラフィックto VPNサーバーがIPに到達しません)。また、VPNサーバーがudpではなくtcpを使用していると想定しています。tcpを使用している場合は、2番目のルールを更新してそれを反映する必要があります。

これらを取得したら、OUTPUTルールをiptablesに追加して、ホストに許可するものを設定します

 iptables -F OUTPUT
 iptables -I OUTPUT -d VPNSERVER -p udp -j ACCEPT -m comment --comment "Allow traffic to VPN SERVER"
 iptables -I OUTPUT -s VPNIP -d VPNNETWORK/CIDR -j ACCEPT -m comment --comment "Allow all traffic to VPN newtork"
 iptables -I OUTPUT -j DROP -m comment --comment "Drop all other traffic"

iptables -F OUTPUTは既存のルールをフラッシュします。そのことに注意してください。ただし、元の質問が行ったことを実行するために必要です。

VPNSERVERはVPNサーバーのIPです。 VPNIPは、VPNによって割り当てられたIPです。 VPNNETWORK/CIDRは、netstat -rnのような10.1.0.0/24のようなルーティングネットワークになります

これらのルールをデバッグする場合、一部のプロトコルでは追加のマッサージが必要になる可能性があるため、ドロップされているものをログに記録すると便利です。

 iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4 

PCからインターネットへのトラフィックOUTBOUNDを停止し、VPNサーバーとそれが提供するネットワークへのトラフィックのみを許可するには、これで十分です。

OPは、Arch Linuxにはnetstatまたはifconfigが同梱されていないことを指摘しています。その場合の選択肢は次のとおりです。

ip addr showはインターフェースを表示し、ip route showは現在のルートを表示します。

7
Drav Sloan