|
|
|
|
|
|
|
フレッツADSL対応ルータの作製(NAT+IPFW) |
|
|
とりあえず、SecureServerを構築しましたので、それを使い、最近普及しているADSL接続でFreeBSDを使ったFireWallを作りましょ!。
ADSLはNTTのフレッツADSLを使用しています。他社の場合は適時変更してください。
まずFireWallですが、IPフィルタリングは、IPFWを使用します。そして、NAT機能はppp内蔵NATではなく、natdで構築します。
IPFW+NATでの使用には、カーネルの再構築が必要になります。FreeBSDのInstal時にkernel-developerでインストールしてあればokです。カーネルソースを入れてない方は、/stand/sysinstallからCustomを選び、srcのsysをチェックし入れてください。
前提とし、このサイトの"SecureServerの構築"が終了しているものとして進めます。
復習ですが、内側インターフェースはde0、外側インターフェースをed0とし、de0には192.168.0.1/24が付与され、hostnameはdemoserverです。
それでは始めます。ステップは以下のようになります。
1.カーネルの再構築
2.ppp.confの設定
3.ADSL接続テスト
4.ADSL接続の設定
5.NATの設定
6.IPFWの設定
7.参考資料
1.カーネルの再構築
まず、PPPoE,IPFW,NATをカーネルに組み込むため、カーネルの再構築を行います。
カーネルの再構築を行うには、カーネルオプションなどをコンフィグレーションファイルに記述します。
以下は、rootで作業します。
まず、コンフィグレーションファイルの場所に移動します。
[demoserver]#cd /sys/i386/conf
GENERICコンフィグレーションファイルを、別の名前でコピーします。今回は、firewallという名前にしました。
[demoserver]#cp GENERIC firewall
firewallコンフィグレーションファイルの編集
firewallコンフィグレーションを開いて、まずident行を変更します。
・ident行変更前
ident GENERIC
・ident行変更後
ident firewall
次に、以下を追加しPPPoEを組み込みます。
options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_PPPOE
options NETGRAPH_SOCKET
次に、以下を追加しipfwを組み込みます。
options IPFIREWALL
Logをとりますので、以下も追加。
options IPFIREWALL_VERBOSE
Logのリミットを決めます。これがないと、LogでHDがいっぱいになっちゃいます。
options IPFIREWALL_VERBOSE_LIMIT=500
次に、NAT機能を実現するnatdを組み込みます。
optins IPDIVERT
尚、ADSLではtunデバイスを使用しますので、tunデバイスが無効になっていないか以下の行で確認します。デフォルトでは有効になっています。
pseudo-device tun
以上でコンフィグレーションファイルの編集が終了ですので、コンパイルします。
[demoserver]#config firewall
[demoserver]#cd ../../compile/firewall
[demoserver]#make depend ; make
エラーなくコンパイルが終了したら、カーネルをインストールします。
[demoserver]#make install
インストールした新しいカーネル(firewall)で起動させます。
[demoserver]#shutdown -r now
もし再起動に失敗したら、
Hit [Enter] to boot immediately, or any other key for command prompt.
のところで、ENTERキーを押し、
#unload
#load kernel.GENERIC
>boot
と入力し、GENERIC.Kernelで起動して、コンフィグレーションファイルの編集からやり直してみてください。
---------------------NAT+IPFWによるFireWall構築のTOPへ----------------------
2.ppp.confの設定
カーネルの構築ができましたので、各設定に入ります。まずはpppの設定です。
ADSLの通信は、PPPoE(pppオーバーイーサネット)です。名前の通りPPP接続をイーサネットにトンネルする方式ですので、外向きのインターフェースで接続の設定をするのではなく、PPPで接続の設定をします。
pppの設定は/etc/ppp/ppp.confファイルを編集します。
設定は以下の通りです。default:,ADSL:,provider:行は必ず行の先頭から入力してください。それ以外の行は1つ以上の空白またはTABから入力してください。
また、ADSL:,provider:の部分は好きな名前に変えてください。
尚、外向きのインターフェースは、ed0です。自分のマシンでインターフェースがわからない場合は、/sbin/dmesgや、/sbin/ifconfigで調べられます。
default:
set device PPPoE:ed0
set MRU 1454
set MTU 1454
set log Phase Chat IPCP CCP tun command
add default HISADDR
accept CHAP
enable dns
ADSL:
set authname flets@flets
set authkey flets
provider:
set authname ISP_USER_NAME
set authkey ISP_PASSWORD
設定の内容ですが、deviceでは、外向きのインターフェースed0を指定しています。
MRU/MTUは、文献によっては1490に設定する。とありますが、フレッツADSLでは、1454にすべきとされています。
1454より大きいとパケットの分断が起き、通信が正常に行われない場合があるそうです。
ADSL:のauthname,authkeyはフレッツADSLでは以下のようになります。
NTT東日本
authname guest@flets
authkey guest
NTT西日本
authname flets@flets
authkey flets
provider:のauthname,authkeyはISPからもらったユーザー名と、パスワードをそれぞれ入れます。
authname ISPユーザー名
authkey ISPパスワード
enable dns行は、ISPからDNSを自動で割り当てる場合に記述します。
手動で設定する場合は、enable dns行は設定せず、/etc/resolv.confに以下を追加します。
nameserver ****.****.****.****#ISPから指定されたIPアドレス
---------------------NAT+IPFWによるFireWall構築のTOPへ----------------------
3.ADSL接続テスト
設定が終わったので、ISPに接続してみます。
[demoserver]#ppp -ddial provider
*providerは、ppp.confで設定したprovider:です。変更してある場合は、適時変更してください。
設定ファイルにエラーがなくPPPが起動できると以下のメッセージが出力されます。
Working in ddial moda
Using interface: tun0
接続を確認するには、以下のコマンドを使用します。
[demoserver]#ifconfig tun0
*tun0はPP起動時のUsing interface:で出力されたもの
ppp接続の切断
[demoserver]#ps -aux|grep ppp
でプロセス番号を調べ
[demoserver]#kill プロセス番号
で切断します。
うまく行かないときは、外向きインターフェース(この場合ed0)を手動で先に起動し、PPP接続をしてみてください。
[demoserver]#ifconfig ed0 up
*一部のインターフェースでは、PPP接続時自動に有効にならない場合があるようです。
---------------------NAT+IPFWによるFireWall構築のTOPへ----------------------
4.ADSL接続の設定
FreeBSDを起動するたびに、手動でPPP接続するのは、あまりにもアホらしい。
と言うことで、起動時自動に接続するよう設定します。
/etc/rc.confに以下を追加します。
ppp_enable="YES"
ppp_mode="ddial"
ppp_profile="provider"
ここで、ppp_profileですが、ppp.confのprovider:のところを入れてください。
尚、pppの内蔵NAT機能が有効になりますが、natdでNAT機能を実現するため、ここでは無効にします。
/etc/rc.confに以下を追加。
ppp_nat="NO"
また、このマシンは内側のインターフェースと外側のインターフェース間でデータを中継しないといけないので(ルータですから、)、/etc/rc.confに以下を追加します。
gateway_enable="YES"
再起動して、ADSL接続ができているか確認します。
shutdown -r now
---------------------NAT+IPFWによるFireWall構築のTOPへ----------------------
5.NATの設定
ここでは、NATを設定します。これで内側にプライベートアドレスを持ったPCを、HUBを介して接続すれば、グローバルアドレス1つでインターネットに複数台同時に接続できるようになります。
内側のPCには、DefaultGatewayとして、このマシンの内側インターフェース(de0)のIPアドレスを指定します。(この場合192.168.0.1)
まず、NATの定義ファイルを作成します。
今回は/etc/natd.confとしました。内容は以下の通りです。
log no
verbose no
deny_incoming no
log_denied yes
log_facility security
use_sockets yes
same_ports yes
unregistered_only yes
NATをFreeBSD起動時に有効にするには、/etc/rc.confに以下を追加します。
*interfaceには外側を指定します。が、ADSL接続なのでed0では無く、tun0を指定します。
natd_enable="YES"
natd_interface="tun0"
natd_flags="-f /etc/natd.conf"
また、この設定では内側から外側のFTPサーバに接続する場合は、PASSIVEモードのみになります。
尚、内側にWEBサーバなどを立てたい場合は(たとえばWEBサーバのIPが192.168.0.10だった場合)、/etc/natd.confに以下の行を追加します。
redirect_port tcp 192.168.0.10:80 80
*当然このあと設定するIPFWでもパケット通過許可が必要になります。
---------------------NAT+IPFWによるFireWall構築のTOPへ----------------------
6.IPFWの設定
さて、ようやくFireWall(IPFW)の設定です。
FireWallですから、外側(ADSL)から来るパケットの何を内側へ通過の許可をするか、なにを不許可にするか、または、内側からなにを外側へ通過許可するか、なにを不許可にするか設定します。
今回は/etc/ipfw.confとしました。内容は以下の通りです。
ipfw.conf
設定情報を作成しましたので、FireWallをFreeBSD起動時に有効になるようにします。
/etc/rc.confに以下を追加します。
firewall_enable="YES"
firewall_script="/etc/ipfw.conf"
再起動すると、NAT,FireWallが動作しているはずです。
---------------------NAT+IPFWによるFireWall構築のTOPへ----------------------
7.参考資料
こちらから、natdの基本オプションを参照できます。
こちらから、ipfwの基本コマンドを参照できます。
こちらから、ipfwの基本ルールを参照できます。
|
|
|
|
|
|
|
Producted by Tomoya Sakurai
|
|
|