うんこルーターの作り方

実際に会社で動いているうんこルータを紹介します。
使用したソフトはfloppyfw。このソフトはフロッピー1枚で動作する、ファイアーフォール専用のLinuxです。
バージョンは1.9.20を使いました。
2002/10/5日現在では2.0.3が最新のようです。

ちなみに、RedHat7.3で作業しています。Kondara2.1ではうまくいきませんでした。

マシンのセッティング

floppyfwはフロッピーだけで動くので、ハードディスクもいりません。ノートパソコンで動かすとUPS(無停電電源装置)がもれなくというか、自動でついてくるので、おすすめです。ただ、PCMCIAの設定をしないといけないのでそこが面倒かもしれません。
私は、会社にデスクトップマシンが余っていたので、これを使いました。これにNICを2枚差しします。NICは自動認識されるものでないとドライバを追加する羽目になるので、NE2000互換のものや、floppyfwのホームページから対応しているものを調べてつけましょう。

フロッピーの用意


フロッピーを1枚用意して、ラベルに「うんこルーター」と書きます。

ソフトのダウンロード


floppyfwにはPPPoEもんとそうでないもんがあるのですが、今回はADSLにつないでブロードバンドルーターにしたいので、PPPoE版をダウンロードしてきます。ファイル名はfloppyfw-1.9.20-1680k-pppoe.imgです。ファイル名からわかるように、1680kの特殊なフォーマットでフロッピーを使用します。

フロッピーの作成


ダウンロードしてきたファイルは /tmp の中に入れてあるとします。
そしてフロッピーを入れて以下のコマンドを打ち込みます。


$ su -
# fdformat /dev/fd0u1680
 
# cd /tmp
# dd if=./floppyfw-1.9.20-1680k-pppoe.img of=/dev/fd0u1680
 

まずrootになり、フロッピーを1680kでフォーマット。その後にイメージファイルを書き込んでいます。

ネットワークの設定


上で作ったフロッピーを読み込ませて、ルートディレクトにあるconfigファイルを設定します。


マウント方法は
mount -t msdos /dev/fd0u1680 /mnt/floppy
 
設定する項目は以下の通り
 
OUTSIDE_IP=EXTERNAL
デフォルトではEXTERNALになっています。ADSLの場合はこのままでよし。
 
USER_IDENT=scoutroll
USER_PASSWORD=xxxxxxxxx

プロバイダーのアカウントを設定します。
 
INSIDE_IP=192.168.0.1
INSIDE_DEV=eth1
INSIDE_NETWORK=192.168.0.0
INSIDE_NETMASK=255.255.255.0
INSIDE_BROADCAST=192.168.0.255

上から、LAN側IPアドレス、LAN側デバイス、LAN側ネットワーク、LAN側ネットマスク、LAN側ブロードキャスト
 
HOSTNAME=STN
DOMAIN=scoutroll.net

ホスト名、ドメイン名
 

以上で、基本的な設定が出来ました。そこでためしに起動してみましょう。
eth0にADSL回線をつないで、フロッピーを入れて、電源を入れてみます。
「・・・Conected!」とでれば、接続成功です。

ファイアウォールの設定

とりあえず、接続は出来ました。
次に、ファイアーウォールの設定をしたいと思います。
floppyfwではiptablesが使えます。ある程度設定がしてあるので、コメントアウトするなり、追加するなりで簡単に記述できます。設定するファイルはルートディレクトリのfirewall.iniです。

マウント方法は
mount -t msdos /dev/fd0u1680 /mnt/floppy

会社で使う分には特に変更点はなかったのですが、ポート113だけ空けました。メール送信が不便だったので。

ポート113はidentdが使うポートです。一部のメールサーバーはコネクション確立時にidentdに問い合わせを行います。ここでポート113が閉じられていると、メールサーバーは処理がタイムアウトされるまで待ちます。結果、メールの送受信に、数十秒時間がかかることになります。

そこで、ポート113に入ってきたパケットは破棄し、TCP RST パケットを送り返すようにしています。

ポート113の設定
iptables -A INPUT -p tcp --dport 113 -i ${OUTSIDE_DEVICE} -j REJECT --reject-with tcp-reset
iptables -A OUTPUT -p tcp --sport 113 -i ${OUTSIDE_DEVICE} -j ACCEPT



以上で完成です。簡単だったと思います。