ここでは、
4(2) ネットワークの計画で検討した計画例に従って、iptablesの設定を行っていきます。
(注)以下の設定例は、主にファイアウォールサーバで登録するルールのうち、基本的なものです。
他のサーバ上で登録するルールの詳細については、各サーバ毎のページにも記載しています。
また、セキュリティをより高めるための諸ルールについては、
12(1) iptablesによる監視のページも参照ください。
まずはじめに、IPアドレスなどの計画表を再確認します。
|
ネットワークアドレス
|
サブネットマスク
|
使用可能アドレス範囲
|
ブロードキャスト
|
<1>
|
10.100.1.0
|
255.255.255.248
|
10.100.1.1~6
|
10.100.1.7
|
<2>
|
172.16.10.0
|
255.255.255.224
|
172.16.10.1~30
|
172.16.10.31
|
ここで、
<1> ・・・ ルータとファイアウォールサーバの間のサブネット
<2> ・・・ ウェブサーバとメールサーバが配置されるサブネット
|
IPアドレス
|
サブネットマスク
|
デフォルトゲートウェイ
|
ルータ
|
LAN側
|
10.100.1.1
|
255.255.255.248
|
-
|
ファイアフォール サーバ
|
ルータ側
|
10.100.1.2
|
255.255.255.248
|
10.100.1.1
|
サーバ側
|
172.16.10.1
|
255.255.255.224
|
-
|
ウェブサーバ
|
172.16.10.2
|
255.255.255.224
|
172.16.10.1
|
メールサーバ
|
172.16.10.3
|
255.255.255.224
|
172.16.10.1
|
上記の計画例に従って、必要なルール等を決めていきます。
ルールを書き込むために前ページで作成したiptables.shを開きます。
[root@testserver ~]# vi /root/tmp/iptables.sh
|
空のファイルを開いたら、先頭のところに下記の1行を書き込みます。
これは、このファイルでスクリプト処理を実行できるようにするためのお約束のようなものになります。
これで準備ができましたので、続いてiptablesコマンドを順に追加していきましょう。
まずはじめに、既存のルールを全て初期化するコマンドを書き込みます。
iptables -F
iptables -t nat -F
|
次に、既存のユーザ定義チェインを全て削除します。
以上で初期化されます。
続いてデフォルトのポリシーを設定します。
全てのチェインについて、デフォルトポリシーをDROP(拒否)とします。
これは最も安全な設定となります。
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
|
ただし、ループバックインタフェース(自分自身)からの入出力は許可します。
iptables -A INPUT -p ALL -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -p ALL -o lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
|
また、外部から入ってくるパケットのうち、既に一度安全性が確認された通信に関連するパケットついては、下記のルールで通信を許可することができます。
iptables -A INPUT -p ALL -d 10.100.1.2 -m state --state ESTABLISHED,RELATED -j ACCEPT
|
"ESTABLISHED,RELATED"の部分にはスペースを入れないようにします。
次に、転送設定をします。
先にユーザ定義のチェインを1つ作成しておきましょう。
iptables -N ACC_TCP
iptables -A ACC_TCP -p tcp --syn -j ACCEPT
iptables -A ACC_TCP -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A ACC_TCP -p tcp -j DROP
|
ここではユーザ定義チェインの名前をACC_TCPとしましたが、名前は任意のものでOKです。
上のユーザ定義チェインでは、TCP接続の開始要求パケット(syn)と、一度接続が確立された関連パケットは許可しますが、それ以外のパケットは拒否するというルールを記述しています。
転送設定としては、まず、内部ネットワークから外部へ転送するパケットのアドレス変換を行います。
iptables -t nat -A POSTROUTING -s 172.16.10.0/27 -o eth0 -j SNAT --to-source 10.100.1.2
|
上のルールでは、内部ネットワークから来たパケットをeth0から外部へ転送する際に、発信元IPを10.100.1.2に書き換えています。
172.16.10.0/27とは、172.16.10.0から始まりサブネットマスク/27=255.255.255.224のサブネットのことです。
(このように、-sオプションにはIPアドレスの範囲を指定することも可能です。)
-j SNATは送信元IPアドレスを書き換える処理を指定するコマンドです。
続いて転送処理の許可ルールを追加します。
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
|
次に、外部から来るパケットのうち内部サーバへ転送するものについて、宛先アドレスの変換を行います。
iptables -t nat -A PREROUTING -d 10.100.1.2 -p tcp --dport 80 -j DNAT --to 172.16.10.2
|
上記はウェブサーバに転送するものです。
宛先ポートが80(http)のパケットの宛先を、ウェブサーバのIPアドレスに書き換えています。
-j DNATオプションは宛先IPアドレスを書き換えます。
(注)ウェブサーバで80以外のポート番号を使用する場合は、運用状況にあわせてルール内のポート番号も変更します。
次はウェブサーバへ転送する分のアドレス変換です。
iptables -t nat -A PREROUTING -d 10.100.1.2 -p tcp --dport 25 -j DNAT --to 172.16.10.3
iptables -t nat -A PREROUTING -d 10.100.1.2 -p tcp --dport 110 -j DNAT --to 172.16.10.3
iptables -t nat -A PREROUTING -d 10.100.1.2 -p tcp --dport 143 -j DNAT --to 172.16.10.3
|
ポート番号25はSMTP、110はPOP3、143はIMAPで、いずれもメールサーバで使用します。
(詳しくはメールサーバのページを参照してください。)
上記以外に、443(https)、465(SMTPS)、993(IMAPS)、995(POP3S)なども使用する場合はそれぞれルールを追加します。
このあたりは、メールサーバの構築時に逐次変更していくことになります。
最後に、各内部サーバへの転送許可ルールを追加します。
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 172.16.10.2 --dport 80 -j ACC_TCP
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 172.16.10.3 --dport 25 -j ACC_TCP
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 172.16.10.3 --dport 110 -j ACC_TCP
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 172.16.10.3 --dport 143 -j ACC_TCP
|
一行目はウェブサーバへの転送、それ以外はメールサーバへの転送です。
ターゲットには、先に作成しておいたユーザ定義チェインを指定しています。
こちらも必要があれば443(https)、465(SMTPS)、993(IMAPS)、995(POP3S)などに対するルールを追加します。
以上でファイアウォールサーバ用のコマンドが書き込めましたので、Esc+:wqでiptables.shファイルへの記入内容を保存します。
続いて、コマンドを書き込んだスクリプトを実行します。
これにより、iptables.shに書き込んだ各ルールが登録されます。
[root@testserver ~]# /root/tmp/iptables.sh
|
最後に設定を保存して、サービスを再起動します。
[root@testserver ~]# service iptables save
[root@testserver ~]# service iptables restart
|
以上でファイアウォールサーバの設定は終わりです。
ファイアウォール機能をきちんと構築するには他の各サーバ上でも同様にiptablesの設定を行う必要があります。
以下に各サーバの基本設定例(iptables.shへの記述例)をまとめています。
("#"から始まる行はコメント文です。)
ファイアウォールサーバの設定例(再掲):
#!/bin/sh
#Clear all rules and policies
iptables -F
iptables -t nat -F
#Clear all user defined chains
iptables -X
#Default policies
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#Loopback interface
iptables -A INPUT -p ALL -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -p ALL -o lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
#Established and related packets
iptables -A INPUT -p ALL -d 10.100.1.2 -m state --state ESTABLISHED,RELATED -j ACCEPT
#User defined chains
iptables -N ACC_TCP
iptables -A ACC_TCP -p tcp --syn -j ACCEPT
iptables -A ACC_TCP -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A ACC_TCP -p tcp -j DROP
#Source address translation
iptables -t nat -A POSTROUTING -s 172.16.10.0/27 -o eth0 -j SNAT --to-source 10.100.1.2
#Forwarding packets
iptables -A FORWARD -i eth1-o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
#Destination address translation (for Web server)
iptables -t nat -A PREROUTING -d 10.100.1.2 -p tcp --dport 80 -j DNAT --to 172.16.10.2
#Destination address translation (for Mail server)
iptables -t nat -A PREROUTING -d 10.100.1.2 -p tcp --dport 25 -j DNAT --to 172.16.10.3
iptables -t nat -A PREROUTING -d 10.100.1.2 -p tcp --dport 110 -j DNAT --to 172.16.10.3
iptables -t nat -A PREROUTING -d 10.100.1.2 -p tcp --dport 143 -j DNAT --to 172.16.10.3
#Forwarding packets to Web server
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 172.16.10.2 --dport 80 -j ACC_TCP
#Forwarding packets to Mail server
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 172.16.10.3 --dport 25 -j ACC_TCP
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 172.16.10.3 --dport 110 -j ACC_TCP
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 172.16.10.3 --dport 143 -j ACC_TCP
|
ウェブサーバの設定例:
#!/bin/sh
#Clear all rules and policies
iptables -F
#Clear all user defined chains
iptables -X
#Default policies
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
#Loopback interface
iptables -A INPUT -i lo -j ACCEPT
#Accept packets (port No.8009=tomcat)
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 8009 -j ACCEPT
#Established and related packets
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#User defined chains (log and then drop)
iptables -N LOG_DROP
iptables -A LOG_DROP -j LOG --log-level warning
iptables -A LOG_DROP -j DROP
#Log and drop packets (no log for Broadcast packets)
iptables -A INPUT -d 172.16.10.31 -j DROP
iptables -A INPUT -j LOG_DROP
|
メールサーバの設定例:
#!/bin/sh
#Clear all rules and policies
iptables -F
#Clear all user defined chains
iptables -X
#Default policies
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
#Loopback interface
iptables -A INPUT -i lo -j ACCEPT
#Accept packets
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 143 -j ACCEPT
#Established and related packets
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#User defined chains (log and then drop)
iptables -N LOG_DROP
iptables -A LOG_DROP -j LOG --log-level warning
iptables -A LOG_DROP -j DROP
#Log and drop packets (no log for Broadcast packets)
iptables -A INPUT -d 172.16.10.31 -j DROP
iptables -A INPUT -j LOG_DROP
|
◇ ◇ ◇
上記はファイアウォールの基本的な設定例ですが、iptablesの設定は、各サーバの構成を変更するつど、逐次更新していく必要があります。
次ページ以降、各サーバを構築した後は、その構成に従って必要なルールを追加または変更していくことになります。
また、実際にサーバを公開する際には、上記の基本ルールだけでは外部からの不正アクセスなどに対して十分には対応できません。
上記に加え、
12(1) iptablesによる監視に記載した内容の中から、必要なルールを随時追加登録してください。
ファイアウォールサーバの準備ができましたら、次はウェブサーバを導入しましょう。