iptables は2.4.xカーネル標準のルーティングソフトウェア(?)です。
NAT/マスカレード/フィルタリング など、いろいろな事ができます。
数少ないグローバルIP環境での、安全でかつ効率的なDMZ
ネットワーク構成を netfilterで実現します。
1個のグローバルIPを使ってLAN内のPC全員で対外接続(web閲覧やFTP接続など)します。
このように実行すれば、配下の端末
(192.168.1.10〜192.168.1.12)が、外に出られるように なります。
そのまま /etc/rc.local に記述すれば、起動時に自動で実行させることが可能です。
ppp/pppoe接続の人は eth0 を ppp0 等に読み替えればそのまま使えます。
配下のクライアントPCでは、defaultgwを192.168.1.254に
設定しなければなりません。
このように実行すれば、 IP: 1.2.3.4 port 80(www) 宛の
リクエストが 192.168.1.100 の port 80 にFORWARDされます。
そのまま /etc/rc.local に記述すれば、起動時に自動で実行させることが可能です。
ppp/pppoe接続の人は eth0 を ppp0 等に読み替えればそのまま使えます。
標準の設定だと、外部の第三者が自由に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 等に読み替えればそのまま使えます。