.
Network / OS => ゲートウェイサーバ構築 > 8.IPマスカレードの設定を行う ~ iptables
Linux 活用ガイド:目次

サーバ構築ガイド

レンタル ガイド

ショップ 構築ガイド

情報漏洩対策

IPマスカレードの設定を行う ~ iptables

IPマスカレードの設定

eth1 に接続された ローカル クライアント 192.168.1.0/24 をインターネットへ接続できるように、iptables に新しい natテーブル PREROUTINGチェーンを追加します。ここでは、ADSL回線のように動的に割当てられるルーター(PPPoE) のケースと異なり、eth1(192.168.1.56)静的 IPアドレスをマッピング が目的なので、送信元のアドレス変換を行う事になります。

Linux IPマスカレード イメージ

以下の iptables コマンドを実行します。nat テーブルを指定する必要があるので注意して下さい。

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

これで eth1 → eth0 への送信元のアドレスは、eth0 に割当てられた 192.168.0.56 に変換され、eth0(192.168.0.56) のゲートウェイである ルーター(192.168.0.1) へ通り抜けるようになります。 IPマスカレード であるため、192.168.1.0/24 からの同時接続が行えます。

設定内容をファイルに出力する

iptables 起動時に変更が有効になるように、以下のコマンドで /etc/sysconfig/iptables に書き出します。

# service iptables save

現在適用されているフィルタを調べる

現在適用されているパケットフィルタリングを調べるには以下のコマンドを使用します。

# iptables -L

■使用したテーブル ~利用できるテーブルは以下の三種類
※ 詳細は man iptables を参照してください。

  利用できる組込みチェーン
filter INPUT / FORWARD / OUTPUT
テーブルを指定しなかった場合、filter テーブルにルールが追加されます。
nat PREROUTING / OUTPUT / POSTROUTING
IPアドレスを変換する時に使用するテーブルで、IPマスカレード等の設定を行うときに利用します。
mangle PREROUTING / OUTPUT
特定のパケットを変換する場合に利用するテーブル。

■使用したチェーン
※ 詳細は man iptables を参照してください。
※ その他、ルール、コマンド、パラメータ等は man iptabales を参照して下さい。

INPUT 受信パケット
OUTPUT 送信パケット
FORWARD 転送パケット
PREROUTING 受信時にIPアドレスを変換するチェイン
POSTROUTING 送信時にIPアドレスを変換するチェイン

再度、/etc/sysconfig/iptables を開いて確認すると natテーブルが1 ~ 8 行目に新たに追加されていることが確認できます。

  1. # Generated by iptables-save v1.2.11 on Fri Jun 10 19:41:45 2005
  2. *nat
  3. :PREROUTING ACCEPT [2:104]
  4. :POSTROUTING ACCEPT [0:0]
  5. :OUTPUT ACCEPT [0:0]
  6. -A POSTROUTING -o eth0 -j MASQUERADE
  7. COMMIT
  8. # Completed on Fri Jun 10 19:41:45 2005
  9. # Generated by iptables-save v1.2.11 on Fri Jun 10 19:41:45 2005
  10. *filter
  11. :INPUT DROP [0:0]
  12. :FORWARD DROP [0:0]
  13. :OUTPUT ACCEPT [8:928]
  14. :RH-Firewall-1-INPUT - [0:0]
  15. -A INPUT -j RH-Firewall-1-INPUT
  16. -A FORWARD -j RH-Firewall-1-INPUT
  17. -A RH-Firewall-1-INPUT -i lo -j ACCEPT
  18. -A RH-Firewall-1-INPUT -i eth1 -j ACCEPT
  19. -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
  20. -A RH-Firewall-1-INPUT -p ipv6-crypt -j ACCEPT
  21. -A RH-Firewall-1-INPUT -p ipv6-auth -j ACCEPT
  22. -A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
  23. -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
  24. -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  25. -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
  26. -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
  27. -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
  28. -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
  29. -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
  30. COMMIT
  31. # Completed on Fri Jun 10 19:41:45 2005

この一連の作業では、eth1(192.168.1.56) からの接続は、eth0(192.168.0.56) へマッピングを行う事でルーターからはeth0(192.168.0.56) が接続しているのと同じ状態を作り出しています。逆に、eth0 からは eth1 へ対しては異なるセグメントであるため接続する事が出来ません。

  • ○ eth1(192.168.1.56)  → eth0(192.168.0.56)
  • × eth0(192.168.0.56)  → eth1(192.168.1.56)
 

iptablesコマンドで追加したので再起動の必要はなく、反映されているはずです。それぞれのセグメントから実際にPING コマンドを使って通信状態を確認します。

iptablesコマンドで追加したので再起動の必要はなく、反映されているはずです。それぞれのセグメントから実際にPING コマンドを使って通信状態を確認します。

確認作業

ぞれぞれのネットワークからPINGを打って通信状態を確認します。

eth0(192.168.0.0/24)  → eth1(192.168.1.56)

一般家庭向けのルーターによっては、ルーターから ping を実行できる製品もあります。それぞれのセグメントからPING、ポートスキャンをかけるなりして、確認してください。 もし、PINGが通るのであれば、大問題です。

eth1(192.168.1.0/24) → eth0(192.168.0.56)

ローカルホスト(192.168.1.34) から ルーター(192.168.0.1)へ向けて ping を打ってみます。iptables で正しくフォワーディングされれば、ping が通るはずです。

# ping 192.168.0.1
Pinging 192.168.0.1 with 32 bytes of data:
Reply from 192.168.0.1: bytes=32 time<10ms TTL=126
Reply from 192.168.0.1: bytes=32 time<10ms TTL=126
Reply from 192.168.0.1: bytes=32 time<10ms TTL=126
Reply from 192.168.0.1: bytes=32 time<10ms TTL=126

このように ping が通れば、192.168.1.0/255.255.255.0 セグメントからは自由にインターネットが行える事が確認できます。

注意!!

ここでは、分かりやすくするために、 「セキュリティレベル」 GUI を利用しましたが、もう二度とこの 「セキュリティーレベル」 は開かないで下さい。もし、開いて保存してしまうと、折角作成したフィルター内容が、元にもどってしまいます。

これのこと↓

セキュリティレベルの設定画面

これらの事からも、慣れてくれば 「シェルスクリプトによるiptablesコマンドを実行する」 で管理しコマンド操作で制御する方がよいかと思います。

また、ここで行った外部ファイルの設定と併用することも出来ます。この場合、メモリに適用される内容が先に評価される事になります。

ファイアーウォールについては、ここでは詳しくは説明しませんが、次のページでは、取敢えず行っておいたほうが良い事と、ファイアーウォールは全能ではない理由について触れておきます。

bottom_mark
ページ最上部
ページ最上部 前のページ