検索
連載

Linuxで作るファイアウォール[準備編]ゼロから始めるLinuxセキュリティ(3)(2/2 ページ)

前回まででホストレベルのセキュリティ対策を行った。今回からはネットワークレベルに目を向けよう。まずはiptablesを使ったパケットフィルタリング機能でファイアウォールを構築する。今回はiptablesを使うための準備について解説する。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

ファイアウォールのための基本設定

 これからファイアウォールを構築していくわけですが、その前にいくつかやっておかなければならない作業があります。

カーネルの再構築

 Red Hat Linux 7.1 Jのカーネルは2.4系なのでiptablesに対応しているのですが、デフォルトではモジュールが組み込まれていないため再構築する必要があります。また、せっかくカーネルを再構築するのですから、ついでに最新版にしておきましょう。

 カーネルの最新版は、

からダウンロードできます(編注)。2001年10月11日現在の最新版はkernel 2.4.12です。

編注:特に理由がなければミラーサイトからダウンロードすることをお勧めする。カーネルのミラーサイトは、http://www.kernel.org/mirrors/で調べることが可能だ。

 ダウンロードしたら、カーネルのアップグレード作業を行います。以下に再構築の例を挙げますが、必ずしもここ例と同じ手順で行う必要はありません。重要なのは、iptablesを使うのに必要なモジュールをカーネルに組み込むことです(編注)。

編注:ここではmenuconfigを使っているが、xconfigなどでも構わない。カーネル2.4のインストール/再構築については、カーネル2.4.0導入活用術も参照。

$ tar -zxvf linux-2.4.12.tar.gz
$ cd linux
$ make menuconfig

 make menuconfigを実行すると、カーネルの設定画面になります。iptablesを組み込むには、まず「Networking options --->」を選択します。

(画像をクリックすると拡大表示します)
画面1 Networking options--->を反転させて[Enter]キーを押す(画像をクリックすると拡大表示します)

 次に、「Network packet filtering(replaces ipchains)」にチェックを入れます。

(画像をクリックすると拡大表示します)
画面2 Network packet filteringを選択(画像をクリックすると拡大表示します)

 下の方にある「IP: Netfilter Configuration --->」を選択します。

(画像をクリックすると拡大表示します)
画面3 IP: Netfilter Configuration--->で[Enter]キー(画像をクリックすると拡大表示します)

 ここから、iptablesに必要なモジュールを選択していきます。すべて選択しておけばよいでしょう。

(画像をクリックすると拡大表示します)
画面4 モジュールをすべて選択(画像をクリックすると拡大表示します)

 ここではiptablesに関連する部分だけを紹介しましたが、もちろん必要に応じてデバイスそのほかの設定も行っておいてください。設定が終わったらセーブします。これでカーネルをコンパイルする用意が整いました。

 次にコンパイル/インストール作業を行います。以下に手順の一例を挙げます。

# make dep; make clean
# make modules
# make modules_install
# installkernel 2.4.12 arch/i386/boot/bzImage System.map

 カーネルのコンパイルが正常に終了したら、新しいカーネルで起動するように/etc/lilo.confファイルを修正します。

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
linear
default=linux
image=/boot/vmlinuz-2.4.12
        label=linux
        read-only
        root=/dev/hda2
image=/boot/vmlinuz-2.4.2-2
        label=linux.old
        read-only
        root=/dev/hda2 

 /etc/lilo.confを書き換えただけでは有効になりません。ファイルの編集後、以下のコマンドを実行してLILOの新設定を有効にします。

# /sbin/lilo

 以上で、iptablesを組み込んだカーネルが起動するようになりました。

# reboot

などでファイアウォール用マシンを再起動します。

 再起動したら、新カーネルでフィルタリング機能とNAT機能が有効になっているかを確認します。以下のようにオプション付きでiptablesを実行します。

# iptables -L 
 
Chain INPUT (policy ACCEPT) 
target     prot opt source               destination 
 
Chain FORWARD (policy ACCEPT) 
target     prot opt source               destination 
 
Chain OUTPUT (policy ACCEPT) 
target     prot opt source               destination 
 
# iptables -L -t nat 
 
Chain PREROUTING (policy ACCEPT) 
target     prot opt source               destination 
 
Chain POSTROUTING (policy ACCEPT) 
target     prot opt source               destination 
 
Chain OUTPUT (policy ACCEPT) 
target     prot opt source               destination

 以上のように出力されればカーネルの再構築は完了です。うまくいかない場合は、もう一度カーネルを再構築してみてください。

仮想IPアドレスの割り当て

 図1からも分かるように、NIC(Network Interface Card)が2枚挿入されているマシンをファイアウォールにします。NICはLinuxに対応しているものを用意してください。eth0がグローバルアドレス側、eth1がプライベートアドレス側になります。ここでは、外側のインターフェイス(eth0)に仮想IPアドレスを割り当てます。

 Red Hat Linux 7.1Jの場合、NICの設定などは/etc/sysconfig/network-scripts以下のファイルで行います。ここにはifcfg-eth0というファイルが存在します。このファイルを起動時に読み込むことにより、インターフェイスにIPアドレスが割り当てられます。内容は次のようなものになります。

# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="none"
ONBOOT="yes"
IPADDR="172.16.0.100"
NETMASK="255.255.0.0"
IPXNETNUM_802_2=""
IPXPRIMARY_802_2="no"
IPXACTIVE_802_2="no"
IPXNETNUM_802_3=""
IPXPRIMARY_802_3="no"
IPXACTIVE_802_3="no"
IPXNETNUM_ETHERII=""
IPXPRIMARY_ETHERII="no"
IPXACTIVE_ETHERII="no"
IPXNETNUM_SNAP=""
IPXPRIMARY_SNAP="no"
IPXACTIVE_SNAP="no"

 では、OS起動時にeth0に対して仮想IPアドレスが割り当てられるようにしましょう。ifcfg-eth0を参考にして、/etc/sysconfig/network-scripts以下に新しいファイルを作成します。以下はifcfg-eth0:1の例です。

# cd /etc/sysconfig/network-scripts
# vi ifcfg-eth0:1
DEVICE=eth0:1
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.16.0.10
NETMASK=255.255.0.0

 ファイルを作成したら、Linuxを再起動して仮想IPアドレスが割り当てられているかどうかを確認します。

# ifconfig -a 
 
eth0   Link encap:Ethernet  HWaddr 00:01:02:87:70:6A
       inet addr:172.16.0.100  Bcast:172.16.255.255  Mask:255.255.0.0
       UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
       RX packets:143 errors:0 dropped:0 overruns:1 frame:0
       TX packets:55 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:100
       Interrupt:5 Base address:0xe800
 
eth0:1 Link encap:Ethernet  HWaddr 00:01:02:87:70:6A
       inet addr:172.16.0.10  Bcast:172.16.255.255  Mask:255.255.0.0
       UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
       Interrupt:5 Base address:0xe800
 
eth1   Link encap:Ethernet  HWaddr 00:D0:B7:6B:89:00
       inet addr:192.168.1.1  Bcast:192.168.0.255  Mask:255.255.255.0
       UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
       RX packets:0 errors:0 dropped:0 overruns:0 frame:0
       TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:100
       Interrupt:11 Base address:0xe400
 
lo     Link encap:Local Loopback
       inet addr:127.0.0.1  Mask:255.0.0.0
       UP LOOPBACK RUNNING  MTU:16436  Metric:1
       RX packets:0 errors:0 dropped:0 overruns:0 frame:0
       TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:0

 以上のようになっていれば成功です。試しに、仮想IPアドレスに対してpingを打ってみて応答があるか確認してみましょう()。同様にして、ほかのサーバに対する仮想IPアドレスも割り当てます。

注:eth0とeth0:1のHWaddrが同じになっていることも確認します。

ルールの設計

 以上で、カーネルとNICの準備は完了しました。後はiptablesの設定を残すのみとなったわけですが、どのような設定を行うのかが問題です。ルールの設計が不十分だと、せっかくのファイアウォールも無意味になってしまいます。また、セキュリティを強くしすぎて必要なサービスまで使えなくしてしまうと、不便な環境になってしまいます。何を何から守るのか、何が必要で何が不要なのかをしっかり検討して、各自の環境に最適なルールを設計しましょう。

 まず、どのようなルールにするのかを書き出してみます。実際に図に書き起こすと分かりやすくなります。対象ホストを書き、パケットの経路を矢印で表します。こうすると、パケットの流れがとても分かりやすくなるのでルールの設計が容易になります。

フィルタリングルール

 今回は、例として以下のようなフィルタリングルールを作成しました。図1と見比べてみてください。

  • Webサーバに対しては、どこからでも80/TCPによるアクセスを許可
  • メールサーバに対しては、どこからでも25/TCPによるアクセスを許可
  • DNSサーバに対しては、どこからでも53/UDPによるアクセスを許可
  • 各サーバ、ファイアウォールのメンテナンスを行うため、メンテナンス用ホストからの22/TCPによるアクセスを許可
  • 各サーバからファイアウォールの内側のインターフェイス(eth1)へのicmp echo-requestと、それに対するecho-replyを許可
  • 各サーバ、ファイアウォールの外側のインターフェイス(eth0)に対して、メンテナンス用ホストからのicmp echo-requestと、それに対するecho-replyを許可
  • ファイアウォールの外側のインターフェイス(eth0)へのicmp echo-requestと、それに対するicmp echo-replyを許可
  • 各サーバからの、ファイアウォールを介したSYNパケットのみでは外に出さない
  • 各サーバは同一セグメント上のホストに直接アクセスできず、必ずファイアウォールを通過させる
  • 上記以外はすべて不許可

NATルール

 もう1つ、NATルールも作成します。ここのポイントは、eth0に割り当てた仮想IPアドレスと、各サーバの実IPアドレスを結び付けていることです。これによって仮想IPアドレスによるアクセスが各サーバに転送されるようになります。

  • D-Address172.16.0.10は192.168.0.10に変換
  • D-Address172.16.0.20は192.168.0.20に変換
  • D-Address172.16.0.30は192.168.0.30に変換
  • S-Address192.168.0.10は172.16.0.10に変換
  • S-Address192.168.0.20は172.16.0.20に変換
  • S-Address192.168.0.30は172.16.0.30に変換
注:
D-Address:Destination IP Address
S-Address:Source IP Address

 以上でルールの設計は終わりです。次回は、このルールに従ってiptablesの設定を行います。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る