Firewall+IP masquerading on GNU/Linux (Vine2.5)
Introduction
GNU/Linux workstation で Firewall を立てる事にする.理由は
- Security
- flexibility (workstation をたすのに IP をいちいち当局からもらう必要がない.)
- IP address 浪費の防止.
- 専用の router に比べての firewall ruleset の変更のしやすさ.
- 消費電力は専用の router の方が低いと思われがちであるが,
モニター無しで稼働させるのでむしろ GNU/Linux WS の方が低いようである.
(Linux Journal 参照)
Server software: GNU/Linux (Vine2.5, kernel 2.4.18) + iptables.
HW: Duron 800MHz, 256MB RAM, HDD 20GB, 価格: 5 万円
実際にはこれでも十分すぎる機種である.
Linux journal の記事とかを見ても 100Mbps の性能自体が
P500MHz 程度の機種で既に saturate されていることが調べられている.
現実には 100Mbps の性能をフルに発揮できる internet connection 自体まずない.
また, firewall 自体 HDD 無で floppy 一枚でも十分走らせられる (cf.
LRP).
参考文献:
準備
実は準備の部分が一番大変である.
- Vine Linux 2.5 を install. Vine 2.5 を含め,最近の GNU/Linux
の distribution は通常の firewall 構築のために kernel rebuild
する必要はまずない.
- まず NIC (ネットワークカード) 二枚 と HUB を用意.
(私の場合は Corega の 1,000 円程度の NIC 二枚と 3,000 円程度の
8port hub)
- NIC は kudzu が自動認識するのでいじる必要なし.
- firewall なので setup より iptables は boot
時にスタートするようにして余計なサービスを皆ストップ.
当然,login も text mode.
(http, かな漢字変換,autofs, 等全て要らない.)
- ifcfg-eth0 を ifcfg-eth1 にコピーして eth1 を設定.
IPADDR を internal IP address
private address, 10.x.x.x, 192.168.0.x 等々を使う,
GW を eth0 の external IP address にする,という点だけ変更.
後は同じ.(BCAST を設定していればそれも直す.)
# /etc/init.d/network start
で設定を反映させる.
(ここでは明らかなように eth0 を外の network につなげて eth1 を
internal network につなげている.これが普通だと思う.)
2 枚目の NIC の設定については Firewall/IP Masquerading
関係の書類に書いていないことが多いので忘れないように.
全体のイメージ図
簡単な防火壁の概念図
outside network
^
|
|eth0 external IP (global)
--------
|firewall| <- running GNU/Linux with iptables
--------
|eth1 internal IP (private)
|
--------
| hub |
--------
| | |
--- --- ---
|WS1||WS2||WS3| ...
--- --- ---
IP Masquerading
To be written ...
チェック
- まず IP masquerading ができていることを check:
例えば外の site へ ssh. w で firwall の site から ssh している
事になっていることを確認.
(ping は通常の設定で
packet filtering で落ちている可能性があるので注意.)
- iptables -L で rule のチェック.
Firewall Ruleset の詳細
[IP external] = firewall の 外向けの global IP
- IP Masquerading (NAT) をして firewall 内の host の外向けのデータを外へ.
% iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to [IP external]
以下の command も必要かも知れない.
% echo 1 > /proc/sys/net/ipv4/ip_forward
- Redhat 系では firewall rule は
% iptables-save > /etc/sysconfig/iptables
で reboot 時に iptables が読み込んでくれるはずである.
考察/感想
Home page for Kenichiro AOKI <
ken at phys-h.keio.ac.jp>
Last modified: Thu Jul 14 16:44:03 JST 2005