Linuxサーバ運用マニュアル

第2話「フリーソフトでファイアウォールを作ろう!(前編)」

ファイアウォールとは,ローカルのネットワークをインターネットなど他のネットワークを経由した攻撃から防ぐ目的で設置する,文字通り「防火壁」です。専用のハードウエアなどもありますが,高価なものが多いのが難点です(最近では安価なものも出てきてはいます)。そこで,Linuxとフリーソフトを用いてファイアウォールを構築してみましょう。フリーソフトでも,一定レベルの安全性を求めることは十分に可能です。

ファイアウォールを構築するには,インターネットとローカルネットを論理的に切り離し,直接アクセスを出来なくする必要があります。そして,データを中継するゲートウェイ・マシンにファイアウォールを構築して,必要なデータ以外を排除することで,セキュリティ上問題のあるデータを食いとめるのです。

ここでは,SOCKS5とDelegateとsendmailというフリーソフトを使って,ファイアウォールを構築する方法について解説しています。

セキュリティ基本方針決定

ファイアウォールを構築するためには,まず,セキュリティの基本方針を決めなければなりません。各サーバに対するアクセスと,ゲートウェイの中継について,方針を決定します。

また,方針を立てる際の前提を「インターネットには悪人がいっぱい」,「ローカルネットは善人ばかり」とします。この前提では,インターネット側からの攻撃は防ぎますが,ローカルネットからの攻撃に対しては無防備ということになります。一般的に,SOHOレベルの小規模ネットワークでは,見ず知らずの人物がローカルネットを使用することはほぼなく,ローカルネットからの攻撃はまずありえないと考えられるので,これで問題はないでしょう。

サーバに対するアクセスについてのポリシー

インターネットからのアクセスについて
ゲートウェイそのものに対するアクセス(telnetやftpなど)は,全面的に禁止します。その他のサーバへのアクセスについては後述します。
ローカルネットからのアクセスについて
ゲートウェイに対しても,その他のサーバに対しても,直接のアクセスを許可します。ただし,それぞれのアクセスについて,ユーザー毎のきめ細かいアクセス制限をかけ,それが必要なユーザーにのみアクセスを許すことにして行きます。

また,telnetについては,rootでの直接アクセスは禁止し,各ユーザーでログインした後で,suコマンドによって,管理者となるようにします。

ゲートウェイ・マシンの中継ポリシー

インターネットとローカルネットは切り離されたネットワークですが,運用に際して,データのやりとりは必須です。そこで,インターネットとローカルネットの間にゲートウェイを構築して,データを中継する必要があります。

なお,ファイアウォールとしてセキュリティを高めるため,サーバ運用に必要なデータ以外は中継してはいけません。中継が必要なものについても,ユーザーやアクセス元などで細かく制限をかけ,不要な中継を禁止します。

運用に際して中継が必要なプロトコル
プロトコルインターネットからローカルネットローカルネットからインターネット
WWW(http)WWWサーバのみ可
ftp ftpサーバのみ可/ユーザー,アクセス元限定
telnetWWWサーバのみ可/ユーザー,アクセス元限定不可
Mail(smtp/pop)Mailサーバのみ可/ユーザー,アクセス元限定不可

プライベート・アドレスの決定

インターネットで割り当てられているIPアドレス(グローバル・アドレス)とは異なるIPアドレスをローカルネット用に決定します。

10.0.0.0〜10.255.255.255
172.16.0.0〜172.31.255.255
192.168.0.0〜192.168.255.255

これらの範囲のアドレスが,プライベート・アドレスとして予約されているので,このうちのどれかを選択するのがいいでしょう。これらのIPアドレスは,インターネット上でルーティングされない(ことになっている)ので,誤って流出しても問題が起こりにくいのです。

ゲートウェイ・マシンのハードウェア構成

ゲートウェイ・マシンは,通常のサーバと異なり,外部(インターネット側)用と内部(ローカルネット側)用の,2枚のLANカードが必要になります。


まず,LANカードを2枚認識させます。

lilo(Linux Loader)起動時に,2枚目のLANカードを認識させる必要があるので /etc/lilo.conf に

append = "ether=0,0,eth1"

という行を追加します。次に

Linux> /sbin/lilo

というコマンドを実行して,liloの設定変更を有効にした後,マシンを再起動します。

起動画面をチェックして,2枚のLANカードがeth0とeth1と認識されていることを確認します。なお,dmesgコマンドで,起動後にメッセージを確認することもできます。


【注意】

2枚目のLANカードのドライバがカーネルに組み込まれていない場合,カーネルの再構築の必要があります。

IRQが重なっていると認識しないため,BIOSでのIRQの設定やプラグ&プレイの設定などを確認してみてください。

ゲートウェイ・マシンの設定

eth0にグローバル・アドレス,eth1にプライベート・アドレスを割り当てることにします。

ifconfigコマンドによってIPを割り当て,routeコマンドによって経路制御情報をカーネルに教えます。

Linux> /sbin/ifconfig eth0 210.154.87.18 netmask 255.255.255.240 broadcast 210.154.87.31
Linux> /sbin/ifconfig eth1 10.0.1.254 netmask 255.255.255.0 broadcast 10.0.1.255

Linux> /sbin/route add -net 210.154.87.16 netmask 255.255.255.240 eth0
Linux> /sbin/route add -net 10.0.1.0 netmask 255.255.255.0 eth1

これらは,起動時に/etc/rc.d/rc.inet1で設定されますので,上記の例を参考に書き換え,再起動します。


確認方法は,ifconfigコマンドを引数無しで実行し,IPアドレス,ネットマスクなどの値を確認します。

Linux> /sbin/ifconfig

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
          UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1

eth0      Link encap:Ethernet  HWaddr 00:40:33:56:7D:D4
          inet addr:210.154.87.18  Bcast:210.154.87.31  Mask:255.255.255.240
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth1      Link encap:Ethernet  HWaddr 00:40:33:A0:E4:95
          inet addr:10.0.1.254  Bcast:10.0.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

また,netstatコマンドに-rnオプションをつけて実行することで,経路情報を確認できます。localhost(127.0.0.0)と,デフォルト・ゲートウェイのほかに,ifconfigコマンドで設定したアドレスが確認できます。

Linux> netstat -rn

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
210.154.87.16   0.0.0.0         255.255.255.240 U      1500 0          0 eth0
10.0.1.0        0.0.0.0         255.255.255.0   U      1500 0          0 eth1
127.0.0.0       0.0.0.0         255.0.0.0       U      3584 0          0 lo
0.0.0.0         210.154.87.17   0.0.0.0         UG     1500 0          0 eth0

メールの中継の設定

メールについてはsendmailで中継することにしましょう。まずメールの送受信を簡単に図解します。

メール送信図
メール受信図

このような中継を実現するための設定例を以下に解説します。

sendmailの設定ファイルsendmail.cfは,CFを使用して作ると簡単です。ここではsendmail.cfの元になる設定ファイルsendmail.defを例にしています。

ゲートウェイ側のsendmailの設定について

sendmail.defの設定のうち,メールの中継に関連する部分をピックアップして説明します。

MX_SENDMAIL=yes
DNSを利用するかどうかの設定です。
ゲートウェイは,DNSを利用して外部にメールを配送するので,yesにします。
MY_DOMAIN='ash.or.jp'
MY_NAME='mail'
自分自身の名前です。
インターネットに接続されているので,インターネットでの名前を書きます。
ACCEPT_ADDRS=''
受け取るメール・アドレスを設定します。
ゲートウェイ自身はメールを受け取らない(メールサーバにすべて転送する)ので,ここには何も書きません。
STATIC_ROUTE_FILE='sendmail.route'
静的な配送先を設定します。
ここでは,sendmail.route内に配送先が書き込まれています。別ファイルで指定しておくと,ドメイン追加などの際にsendmail.cfを作り直す必要がなくなり,運用時の手間を減らすことができます。
sendmail.routeの内容
GW      smtp: mail.lo.ash.or.jp
DOM     ash.or.jp
これは,GW行で指定したmail.lo.ash.or.jp(ローカルのメールサーバ)のSMTPに,DOM行で指定したash.or.jpドメイン名のメールを送るという設定です。
DIRECT_DELIVER_DOMAINS=all
直接配送するドメイン名を設定します。
ゲートウェイは,外部にメールを配信しなければいけないので,allを指定します。

ローカル側のsendmailの設定について

sendmail.defの設定のうち,メール転送に関連する部分をピックアップして説明します。

MX_SENDMAIL=no
メールサーバは,基本的にすべてのメールをゲートウェイに送るだけなので,NOMX_SENDMAIL(DNSを利用しない)設定にしておきます。
MY_DOMAIN='lo.ash.or.jp'
MY_NAME='mail'
自分自身の名前です。ローカルネットなので,lo.ash.or.jpになります。
MY_ALIAS='mail.ash.or.jp'
自分自身の別名です。
ALIAS_REWRITE=no
別名を,メール配送時にOFFICIAL_NAMEに書き換えないようにする設定です。
ACCEPT_ADDRS='$m $w.$m ash.or.jp'
$mはMY_DOMAIN,$wはMY_NAMEで指定したものです。
内部へのメールしか受け取らない設定になっています。
DIRECT_DELIVER_DOMAINS='ash.or.jp'
ash.or.jp宛てのメールに関しては,直接配送します(ゲートウェイに送らない)
DEFAULT_RELAY='smtp:gwsv.lo.ash.or.jp'
DIRECT_DELIVER_DOMAINSで指定されなかったドメイン宛てのメールの転送先を設定します。
ゲートウェイのSMTPを指定しています。

確認方法は,テスト・メールを送信し,メール・ヘッダーを確認することで,ちゃんとゲートウェイが転送してることを確認します。メールサーバから,外部のメール・アドレスにメールを出し,外部からのメールを受け取れることを確認します。


【注意】

ゲートウェイは外部と直接つながる場所なので,sendmailは必ず最新のものを利用しましょう。また,SPAMメールの中継などをしないように,外部から外部へのメール転送は禁止するようにしましょう。


次回予告

次回は,「フリーソフトでファイアウォールを作ろう!(後編)」です。

DelegeteとSOCKS5の,具体的な設定方法を中心に,プロキシサーバの設定について解説します。

(ASHマルチメディア研究会/joe,はしもと)