Just MyShopへ
Princo.org は Justsystem を応援します
技術関連情報サイト http://wiki.princo.org/ をオープンしました.
dum
logo01 logo02
Linux Tips
TOP > tips > netfilter.html
メニュー

Just MyShopへ
Justsystem
応援します!
border01 border02 border03
border04

netfilter(iptables)でマスカレード,フィルタリング,NAT

はじめに

iptables は2.4.xカーネル標準のルーティングソフトウェア(?)です。 NAT/マスカレード/フィルタリング など、いろいろな事ができます。

数少ないグローバルIP環境での、安全でかつ効率的なDMZ ネットワーク構成を netfilterで実現します。

掲載文書

  • 中 → 外 マスカレード
  • 外 → 中 NAT
  • 外 → 中 INPUTフィルタ
  • 外 → 中 FORWARDフィルタ

中 → 外 マスカレード

目的

1個のグローバルIPを使ってLAN内のPC全員で対外接続(web閲覧やFTP接続など)します。

想定ネットワーク構成図

下図のネットワーク構成を想定して、設定を行います。

    モデムなど
        ↑
+-------------------+
|eth0 1.2.3.4       |
|- - - - - - - - - -| ← Linux Router
|eth1 192.168.1.254 |
+-------------------+
         |
       [HUB]
         |
         |-[pc]eth0 192.168.1.10(default gw: 192.168.1.254)
         |
         |-[pc]eth0 192.168.1.11(default gw: 192.168.1.254)
         |
         |-[pc]eth0 192.168.1.12(default gw: 192.168.1.254)

設定方法

# modprobe iptable_nat
# modprobe ip_conntrack_ftp
# modprobe ip_nat_ftp
# echo "1" > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

このように実行すれば、配下の端末 (192.168.1.10〜192.168.1.12)が、外に出られるように なります。

そのまま /etc/rc.local に記述すれば、起動時に自動で実行させることが可能です。

ppp/pppoe接続の人は eth0 を ppp0 等に読み替えればそのまま使えます。

配下のクライアントPCでは、defaultgwを192.168.1.254に 設定しなければなりません。

外 → 中 NAT

目的

グローバルIPが1つのLAN環境で、 内部のウェブサーバを外部から見えるようにする。

想定ネットワーク構成図

下図のネットワーク構成を想定して、設定を行います。

  モデムなど
        ↑
+-------------------+
|eth0 1.2.3.4       |
|- - - - - - - - - -| ← Linux Router
|eth1 192.168.1.254 |
+-------------------+
         |
       [HUB]
         |
         |-[server]eth0 192.168.1.100 (default gw: 192.168.1.254)
         |   ↑これが外部に公開したいWWWサーバ
         |
         |-[pc]eth0 192.168.1.10(default gw: 192.168.1.254)
         |
         |-[pc]eth0 192.168.1.11(default gw: 192.168.1.254)
         |
         |-[pc]eth0 192.168.1.12(default gw: 192.168.1.254)

設定方法

# modprobe iptable_nat
# modprobe ip_conntrack_ftp
# modprobe ip_nat_ftp
# echo "1" > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#
# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT --to 192.168.1.100:80

このように実行すれば、 IP: 1.2.3.4 port 80(www) 宛の リクエストが 192.168.1.100 の port 80 にFORWARDされます。

そのまま /etc/rc.local に記述すれば、起動時に自動で実行させることが可能です。

ppp/pppoe接続の人は eth0 を ppp0 等に読み替えればそのまま使えます。

外 → 中 INPUTフィルタ

目的

標準の設定だと、外部の第三者が自由にsshやtelnet接続を 試行することが可能なままです。

グローバルIPを持つLinuxは、必ず何らかの方法で 不正なリクエストを排除すべきです。

LAN内以外からLinux Routerにssh出来ないようにします。

想定ネットワーク構成図

下図のネットワーク構成を想定して、設定を行います。

  モデムなど
      ↑    |
      |     | (port:22=NG)
      |    ↓
      |    ×
+-------------------+
|eth0 1.2.3.4       |
|- - - - - - - - - -| ← Linux Router
|eth1 192.168.1.254 |
+-------------------+
       |   ↑
       |   |(port:22=OK)
       |   |
       [HUB]
         |
         |-[server]eth0 192.168.1.100 (default gw: 192.168.1.254)
         |
         |-[pc]eth0 192.168.1.10(default gw: 192.168.1.254)
         |
         |-[pc]eth0 192.168.1.11(default gw: 192.168.1.254)
         |
         |-[pc]eth0 192.168.1.12(default gw: 192.168.1.254)

Linux Routerの eth1側からのSSHは許可し、 eth0側からの接続を拒否します。

設定方法

# modprobe iptable_nat
# modprobe ip_conntrack_ftp
# modprobe ip_nat_ftp
# echo "1" > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#
# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT --to 192.168.1.100:80
#
# iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
# iptables -A INPUT -p tcp -s 0/0 --dport 22 -j DROP

このように実行すれば、発信元アドレス(-s)が192.168.1.0/24の人だけ port 22 のローカルプロセスを使用でるようになり、 グローバル(モデム)側から port 22 へ接続出来なくなります。

そのまま /etc/rc.local に記述すれば、起動時に自動で実行させることが可能です。

ppp/pppoe接続の人は eth0 を ppp0 等に読み替えればそのまま使えます。

外 → 中 FORWARDフィルタ

目的

外部の特定のIPアドレス(ここでは210.10.10.10)からのみ、LAN内のウェブサーバを見えるようにします。

想定ネットワーク構成図

下図のネットワーク構成を想定して、設定を行います。

  モデムなど
        ↑
+-------------------+
|eth0 1.2.3.4       |
|- - - - - - - - - -| ← Linux Router
|eth1 192.168.1.254 |
+-------------------+
         |
       [HUB]
         |
         |-[server]eth0 192.168.1.100 (default gw: 192.168.1.254)
         |   ↑これWWWサーバー
         |     210.10.10.0/24 の人しか見えない
         |
         |-[pc]eth0 192.168.1.10(default gw: 192.168.1.254)
         |
         |-[pc]eth0 192.168.1.11(default gw: 192.168.1.254)
         |
         |-[pc]eth0 192.168.1.12(default gw: 192.168.1.254)

設定方法

# modprobe iptable_nat
# modprobe ip_conntrack_ftp
# modprobe ip_nat_ftp
# echo "1" > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#
# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT --to 192.168.1.100:80
#
# iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
# iptables -A INPUT -p tcp -s 0/0 --dport 22 -j DROP
#
# iptables -A FORWARD -p tcp -s 210.10.10.0/24 -d 192.168.1.100 --dport 80 -j ACCEPT
# iptables -A FORWARD -p tcp -s 0/0 -d 192.168.1.100 --dport 80 -j DROP

このように実行すれば、発信元アドレス(-s)が210.10.10.0/24の人だけ LANのウェブサーバが見えるようになり、 その他のグローバルIPからは見えなくなります。 同様に、POP,SMTP,DNS,その他のプロトコルも port 番号を変えればそのまま使えます。

そのまま /etc/rc.local に記述すれば、起動時に自動で実行させることが可能です。

ppp/pppoe接続の人は eth0 を ppp0 等に読み替えればそのまま使えます。

dum
border05 dum dum

(c) 2002 Princo.org