Firewall+IP masquerading on GNU/Linux (Vine2.5)

Introduction

GNU/Linux workstation で Firewall を立てる事にする.理由は
  1. Security
  2. flexibility (workstation をたすのに IP をいちいち当局からもらう必要がない.)
  3. IP address 浪費の防止.
  4. 専用の router に比べての firewall ruleset の変更のしやすさ.
  5. 消費電力は専用の 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).

参考文献:


準備

実は準備の部分が一番大変である.
  1. Vine Linux 2.5 を install. Vine 2.5 を含め,最近の GNU/Linux の distribution は通常の firewall 構築のために kernel rebuild する必要はまずない.
  2. まず NIC (ネットワークカード) 二枚 と HUB を用意. (私の場合は Corega の 1,000 円程度の NIC 二枚と 3,000 円程度の 8port hub)
  3. NIC は kudzu が自動認識するのでいじる必要なし.
  4. firewall なので setup より iptables は boot 時にスタートするようにして余計なサービスを皆ストップ. 当然,login も text mode. (http, かな漢字変換,autofs, 等全て要らない.)
  5. 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 ...

チェック

  1. まず IP masquerading ができていることを check: 例えば外の site へ ssh. w で firwall の site から ssh している 事になっていることを確認. (ping は通常の設定で packet filtering で落ちている可能性があるので注意.)
  2. iptables -L で rule のチェック.

Firewall Ruleset の詳細

[IP external] = firewall の 外向けの global IP
  1. 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
          
  2. 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