Firewall+natd+dhcpの設定
内容は無保証です。自分の責任で行なって下さい(^^;)
ご家庭内LANをインターネットに接続する場合、Firewall+natd+dhcpの機能をもった
ルータが欲しいというのは良くあるお話です。最近私が構築した事例を紹介します。
構築したネットワークは以下の図のようなものでした。

上位回線は常時接続型のもので、PCにグローバルアドレスが割り振られています。ゲートウェイとなるPCにはFreeBSD3.4-stable(SMP)がインストールされており、これに対してFirewall, natd, dhcpサーバを構築します。ハードウェアはDECの21140が外向けのネットワークカードとして使用されていたのでこれをそのまま使用しました。当然ゲートウェイとして使用するので内向け用にIntelのPRO/100+を新たに追加しました。
カーネルコンフィグレーション
まずファイヤーウォールを設定するにはカーネルを対応させなければならないので、以下のようなオプションを付加しコンパイル、インストールします。
options IPFIREWALL #firewall
options IPFIREWALL_VERBOSE #print information about
options IPDIVERT
options "IPFIREWALL_VERBOSE_LIMIT=100" #limit verbosity
pseudo-device bpfilter 8
当然ネットワークカードを2枚使用しているのでカーネルコンフィグには
device de0 # DEC/Intel DC21x4x (``Tulip'')
device fxp0 # Intel EtherExpress PRO/100B (82557, 82558)
があります。当然ここで紹介するネットワークカードと違うものを使用する場合、そのネットワークカードに対応したdeviceを指定します。
rc.confの設定
カーネルが再構築できたら、今度は/etc/rc.confを設定します。ここではネットワークカードを2枚使用していることを定義するほかにnatdとFirewallの起動および起動オプションも設定します。
#ホストネーム
hostname="AAA.BBB.CCC.jp"
#ネットワークインターフェースの指定
network_interfaces="lo0 de0 fxp0"
#グローバル側のネットワークカード
ifconfig_de0="inet AAA.BBB.CCC.DDD netmask 255.255.255.0"
#プライベート側のネットワークカード
ifconfig_fxp0="inet aaa.bbb.ccc.ddd netmask 255.255.255.0"
#sendmailの起動スイッチ。必要でしたらYESにする。
sendmail_enable="NO"
#ゲートウェイとして動作させる。
gateway_enable="YES"
#NATDを動作させる。
natd_enable="YES"
#natdで外向けのネットワークカードを指定
natd_interface="de0"
#NATDの設定ファイル名を指定
natd_flags="-f /etc/natd.conf"
#Firewallの起動スイッチ
firewall_enable="YES"
#Firewallのタイプを指定。
firewall_type="simple"
#黙っているか喋りまくるか指定する。
firewall_quiet="NO"
/etc/natd.confの設定
/etc/natd.confにてnatdの設定を行ないます。通常は以下の通りで大丈夫でしょう。(本当かぁ?)
log no
verbose no #yesにすると詳しいログがとれるがバックグラウンドでは動かない
deny_incoming no
log_denied yes
use_sockets yes
same_ports yes
port 8668
unregistered_only yes
rc.firewallの設定
elif [ "${firewall_type}" = "simple" ]; then
からelif [ "${firewall_type}" != "UNKNOWN" -a -r "${firewall_type}" ]; then
の上までを以下の通りに書き換えます。
# set these to your outside interface network and netmask and ip
oif="de0"
onet="AAA.BBB.CCC.0"
omask="255.255.255.0"
oip="AAA.BBB.CCC.DDD"
# set these to your inside interface network and netmask and ip
iif="fxp0"
inet="aaa.bbb.ccc.0"
imask="255.255.255.0"
iip="aaa.bbb.ccc.ddd"
# Stop spoofing
$fwcmd add deny all from ${inet}:${imask} to any in via ${oif}
$fwcmd add deny all from ${onet}:${omask} to any in via ${iif}
# こちらからセッションを張るものは許可する
$fwcmd add pass tcp from any to any established
# 外側からの25番ポートへの接続を不可
#### Can not use sendmail
#$fwcmd add pass tcp from any to ${oip} 25 setup
$fwcmd add deny tcp from any to ${oip} 25 setup via ${oif}
#SSH を許可する
$fwcmd add pass tcp from any to ${oip} 22 setup
# Tracerouteを使用可能にする。
$fwcmd add pass udp from ${oip} to any 33434-33523
# 外側のネットワークカードに来るtcpは許可しない。しかもログをとる。
$fwcmd add deny log tcp from any to any in via ${oif} setup
# すべてのTCPコネクションを許す。(内向け用)
$fwcmd add pass tcp from any to any setup
# DNSの問い合わせを許す。
$fwcmd add pass udp from any 53 to any
$fwcmd add pass udp from any to any 53
# NTPを許す。
$fwcmd add pass udp from any 123 to ${oip}
$fwcmd add pass udp from ${oip} to any 123
# PINGは許す。
$fwcmd add pass icmp from any to any via ${iif}
$fwcmd add pass icmp from any to any out via ${oif}
$fwcmd add pass icmp from any to any in via ${oif}
$fwcmd add allow icmp from ${oip} to any
$fwcmd add allow icmp from any to ${oip}
$fwcmd add deny log icmp from any to any
#DHCPを許す。
$fwcmd add allow udp from any to ${iip} 67 via ${iif}
$fwcmd add allow udp from any to ${iip} 68 via ${iif}
$fwcmd add allow udp from ${iip} to any via ${iif}
DHCPの設定
DHCPの設定はこちらを参照してください。
yukiya@ee.t-kougei.ac.jp
Last modified: Fri Jun 23 23:42:43 JST 2000