web-dev-qa-db-ja.com

Linux:iptablesを使用した2つのネットワーク間のトラフィックのルーティング

OK、これは奇妙なネットワーク設定ですが、私はインターネットをあるネットワークから別のネットワークに接続しようとしています。

headless server ((((( wireless router (other network)-----internet
       |
       |
router (my network) ))))) wireless computers
   |   |   |
wired computers

つまり、基本的に、自分のネットワーク(eth0)と他のネットワーク(wlan0)の間のルーターとしてセットアップしたいヘッドレスLinuxボックスがあります。他のすべてを設定できるはずですが、iptablesの経験はあまりありません。

2つの有線ネットワーク間で以前に同じことを行ったことがありますが、ルールを書き留めたことはありません。

4
ecoutu

実際、基本的なルーティングにiptablesは本当に必要ありません-iptablesはフィルタリングとNAT(およびその他のもの)を支援します。

パケット転送は次の方法でアクティブにできます。

sysctl -w net.ipv4.conf.all.forwarding=1

/etc/sysctl.confにnet.ipv4.conf.all.forwarding=1を追加して、設定を固定します。

サーバー上でareフィルタリングする場合(iptables -nvLでこれを確認できます-FORWARDチェーンにフィルタリングしないACCEPTポリシーがある場合)、パケットを許可するルールを追加する必要がありますネットワーク間で転送される:

iptables -I FORWARD -i eth0 -o wlan0 -s wi.red.net.work/24 -d wire.less.net.work/24 -j ACCEPT
iptables -I FORWARD -i wlan0 -o eth0 -s wire.less.net.work/24 -d wi.red.net.work/24 -j ACCEPT

フィルタリングしていないが、したい場合(ちなみに、そうする必要があります。@ Red Tuxのコメントを参照してください。デフォルトでフィルタリングし、最小値のみを許可することをお勧めします)、前のルールと次のルールを追加します。

iptables -P FORWARD DROP

これによりポリシーが変更され、どのルールにも一致しないすべてのパケットが破棄されます。

また、実際のセキュリティを確保する場合は、おそらくINPUTチェーンでもフィルタリングする必要があります。このチェーンは、独自の1つと一致する宛先IP(つまり、着信接続(SSHなど))を使用してルーターに送信される要求を処理します。適切なデフォルトは次のとおりです。

iptables -I INPUT -i eth0 -s allowed.admin.ip.here -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -i lo -j ACCEPT
iptables -P INPUT DROP # make sure you've put your IP on the first rule before running this 
                       # or you'll lock you out of the server

これにより、有線ネットワークで設計されたホストからのSSHのみが許可され(警告に注意)、ループバックインターフェイス上のすべてのトラフィックが許可され(一部のソフトウェアで必要)、残りのトラフィックはすべて破棄されます。

ご覧のとおり、-p tcp|udp --dport Nを使用すると、一部のポートのみを許可できます。セキュリティを高めるために、FORWARDチェーンでもこれを行うことを検討する必要があります。

9
Eduardo Ivanec