rurihabachi
Last update: 2013/11/25  
    仮 想 マ シ ン で Fedora サ ー バ       ◇◇◇  お金をかけずに簡単簡潔  ◇◇◇  サーバ構築公開手順 覚書き  ◇◇◇
 
 
サーバ構築メニュー  
     1. はじめに
     2. 構築前の準備
     3. サーバの役割り
  » 4. サーバの計画
  » 5. 仮想マシンの準備
  » 6. Fedoraの準備
  » 7. サーバの基本設定
  « 8. ファイアウォール
       iptablesとは
       事前準備とルータ
       iptablesの設定例
  » 9. ウェブサーバ
  » 10. Apache Wicket
  » 11. メールサーバ
  » 12. セキュリティ
     13. サーバの公開


  サーバ構築Top  > 8.ファイアウォールサーバの構築  > (3)iptablesの設定例
    8. ファイアウォールサーバの構築
続いてiptablesのルールを登録していきます。

    (3) iptablesの設定例

ここでは、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行を書き込みます。 これは、このファイルでスクリプト処理を実行できるようにするためのお約束のようなものになります。

  #!/bin/sh

これで準備ができましたので、続いてiptablesコマンドを順に追加していきましょう。

まずはじめに、既存のルールを全て初期化するコマンドを書き込みます。

  iptables -F
  iptables -t nat -F

次に、既存のユーザ定義チェインを全て削除します。

  iptables -X

以上で初期化されます。

続いてデフォルトのポリシーを設定します。 全てのチェインについて、デフォルトポリシーを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による監視に記載した内容の中から、必要なルールを随時追加登録してください。

ファイアウォールサーバの準備ができましたら、次はウェブサーバを導入しましょう。



前のページへ <    メニューへ戻る    > 9.ウェブサーバ

8.ファイアウォールサーバの構築 :
 
   (1)iptablesとは
   (2)事前準備とルータの設定
  ›(3)iptablesの設定例
 
Copyright (C) 2011-2019 rurihabachi. All rights reserved.