Play FireWall with Linux 2.0.x


著者 : 鈴木 雄 <setter AT i-red DOT info>

この文書の使用による損害/被害等、(たとえ、*.gov から苦情が来ようと)
一切責任を持ちませんので、あなたの責任において、ご使用ください。
また、この内容に記述してあるスクリプトは、テストしていませんので、
ご注意ください。

BACK

--------------------------

Linux で FireWall サーバを構築するには、
#なんで、いまさら 2.0.x かなぁ...とは、言わないでください。

1.KernelのConfigと、Compile
(RedHatや、これをベースにしたディストリビューションでは、必要ないと思いますが)
2.ipfw
3.ipfwadm
4.IP-Masquerade
5.IP-Route
6.IP-autofw
7.hosts/services ファイル
8.その他、アプリケーション
に関して(ほかにもあると思いますが)、それなりの知識が必要になります。

ただ、
Kernel のコンパイルや、ipfwadm/IP-Masquerade(NAT)に関しては、いろいろな方が、
いろいろな場所で、とても親切に説明されていると思いますので、(感謝 m(__)m)
そちらや、man を参照してください。

それでは、本題に入ります。

まず、ちゃんと通るか確認するためのFireWallポリシーでチェックしてみましょう。

------------------------------------------------------
#!/bin/sh

# My Host Internal : fw-i [iii.iii.iii.iii]
# My Host External : fw-e [eee.eee.eee.eee]

# Section 1 : ポリシーを全部消去
/sbin/ipfwadm -I -f
/sbin/ipfwadm -O -f
/sbin/ipfwadm -F -f
/sbin/ipfwadm -A -f

# Section 2 : 何でも通過させてしまう無意味(いや、意味有るかも)なFireWallに設定
# これでは、非常に危険なので、安全な場所以外にはつながないようにしましょう。

/sbin/ipfwadm -F -p accept

# End of Script
------------------------------------------------------
これを設定したら、

Host iii.iii.iii.nnn で、

ping iii.iii.iii.xxx
ping iii.iii.iii.iii
ping eee.eee.eee.eee
ping eee.eee.eee.xxx

ftp eee.eee.eee.yyy
等で、チェック。

あと、できるならば、

Host eee.eee.eee.nnn で

ping eee.eee.eee.xxx
ping eee.eee.eee.eee
ping iii.iii.iii.iii
ping iii.iii.iii.xxx

等で、チェック。

なんて感じで、ちゃんと通るか確認。

次に、ちゃんと通らないか確認するためのFireWallポリシー
-------------------------------------------------------------
#!/bin/sh

# My Host Internal : fw-i [iii.iii.iii.iii]
# My Host External : fw-e [eee.eee.eee.eee]

# Section 1 : ポリシーを全部消去
/sbin/ipfwadm -I -f
/sbin/ipfwadm -O -f
/sbin/ipfwadm -F -f
/sbin/ipfwadm -A -f

# Section 2 : 何も通過させない理想的なFireWallに設定

/sbin/ipfwadm -F -p deny

# End of Script
-------------------------------------------------------------

これを設定したら、

Host iii.iii.iii.nnn で、

ping iii.iii.iii.xxx
ping eee.eee.eee.xxx

ftp eee.eee.eee.yyy
等で、チェック。

あと、できるならば、

Host eee.eee.eee.nnn で

ping eee.eee.eee.xxx
ping iii.iii.iii.xxx

等で、チェック。

なんて感じで、全部通らないことを確認。

------------------------------------------
実際のスクリプトは、以下のようになると思います。

#!/bin/sh

# もし、あなたが、Expertではないのならば、
# 一気にやらず、ひとつづつ確認しながら設定することをお勧めします。

# My Host Internal : fw-i [iii.iii.iii.iii]
# My Host External : fw-e [eee.eee.eee.eee]

# Section 1 : ポリシーを全部消去
/sbin/ipfwadm -I -f
/sbin/ipfwadm -O -f
/sbin/ipfwadm -F -f
/sbin/ipfwadm -A -f

# Section 2 : 何も通過させない理想的なFireWallに設定
/sbin/ipfwadm -F -p deny

# Section 3 : 自分すらも、隠してしまう。
/sbin/ipfwadm -O -a deny -S iii.iii.iii.iii/32 -D 0.0.0.0/0
/sbin/ipfwadm -I -a deny -S 0.0.0.0/0 -D iii.iii.iii.iii/32
/sbin/ipfwadm -O -a deny -S eee.eee.eee.eee/32 -D 0.0.0.0/0
/sbin/ipfwadm -I -a deny -S 0.0.0.0/0 -D eee.eee.eee.eee/32

#もっと、ゆるいせってい(必要に応じて、加減をする)。
#/sbin/ipfwadm -I -P tcp -a deny  -S 0.0.0.0/0 -D iii.iii.iii.iii/32 telnet
#/sbin/ipfwadm -I -P tcp -a deny  -S 0.0.0.0/0 -D eee.eee.eee.eee/32 telnet
#/sbin/ipfwadm -I -P tcp -a deny  -S 0.0.0.0/0 -D iii.iii.iii.iii/32 ftp
#/sbin/ipfwadm -I -P tcp -a deny  -S 0.0.0.0/0 -D eee.eee.eee.eee/32 ftp
#/sbin/ipfwadm -I -P icmp -a deny  -S 0.0.0.0/0 -D iii.iii.iii.iii/32
#/sbin/ipfwadm -I -P icmp -a deny  -S 0.0.0.0/0 -D eee.eee.eee.eee/32

# Section 4 : 中からのPingくらいは通そうかな。
/sbin/ipfwadm -F -P icmp -b -a accept -S iii.iii.iii.0/24 -D 0.0.0.0/0

# Section 5 : FireWall ポリシーの設定
/sbin/ipfwadm -F -P tcp -b -a accept -S iii.iii.iii.20/32 -D eee.eee.eee.10/32 delegate8080
/sbin/ipfwadm -F -P tcp -b -a accept -S iii.iii.iii.0/24 -D 0.0.0.0/0 pop
/sbin/ipfwadm -F -P tcp -b -a accept -S iii.iii.iii.0/24 -D 0.0.0.0/0 ftp
/sbin/ipfwadm -F -P tcp -b -a accept -S eee.eee.eee.100/32 -D iii.iii.iii.0/24 time
/sbin/ipfwadm -F -P tcp -b -a accept -S iii.iii.iii.40/32 -D eee.eee.eee.9/32 smtp
/sbin/ipfwadm -F -P tcp -b -a accept -S eee.eee.eee.100/32 -D iii.iii.iii.40/32 smtp
/sbin/ipfwadm -F -P tcp -b -a accept -S iii.iii.iii.40/32 -D eee.eee.eee.9/32 ident
/sbin/ipfwadm -F -P tcp -b -a accept -S eee.eee.eee.100/32 -D iii.iii.iii.40/32 ident

/sbin/ipfwadm -F -P tcp -b -a accept -S iii.iii.iii.200/32 -D eee.eee.eee.9/32 telnet
/sbin/ipfwadm -F -P tcp -b -a accept -S iii.iii.iii.200/32 -D eee.eee.eee.10/32 telnet

# Section 6 : Accounting (ログをとるもの)設定
/sbin/ipfwadm -A out -S 0.0.0.0/0 -D iii.iii.0.0/16
/sbin/ipfwadm -A in  -S 0.0.0.0/0 -D iii.iii.0.0/16
/sbin/ipfwadm -A out -S iii.iii.0.0/16 -D 0.0.0.0/0
/sbin/ipfwadm -A in  -S iii.iii.0.0/16 -D 0.0.0.0/0

# End of Script
--------------------------------------------------------------------

FireWallに、完璧なものは有りませんし、Computer Virus には、歯が立ちません。
Linuxで構築できるFireWallもずいぶん良いものだと思いますが、完璧ではないことを
念頭に置いておいてください。