○ iptablesのインストール 4 Xen

・xenのファイアウォール (iptables) の設定をします
・iptables-1.4.12.1をソースからインストールし、設定します
・xend,xendomainsの起動の前に設定します
・ドメイン0の設定です
・make はメンテナンスマシンで行っています

・ソースの取得、削除は省略します
・エディタ、ファイラーの操作は省略します
・ソースを展開したら説明文を読みましょう
・Enterキーを省略します

・ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
・設定ファイルで "#" で始まる行はコメントとして解釈されます

○関連サイト

:iptables-1.4.12.1.tar.bz2  (http://www.netfilter.org/)

○参照ファイル

パッケージの追加
最初の設定 (Xen)

○インストール環境

:OS CentOS 5.6
:kernel linux-2.6.18.8-xen
:selinux disabled
:インストール先 
:作業 /usr/src
:言語 LANG=en_US.UTF-8
:ユーザー rootで実行

・メンテナンスの場合は一般ユーザから行います



○iptables-1.4.12.1

○旧iptablesの削除

・自動起動スクリプトも削除されます
・必要なので、名前を変えて保存します

# cd /etc/init.d
[root@earth:/etc/init.d]
# cp iptables iptables-ORG && chmod 644 iptables-ORG
# cp ip6tables ip6tables-ORG && chmod 644 ip6tables-ORG
# rpm -e iptables iptables-ipv6

○iptablesのインストール

# cd /usr/src
[root@earth:/usr/src]
# tar jxvf iptables-1.4.12.1.tar.bz2
# chown -R root:root iptables-1.4.12.1
# cd iptables-1.4.12.1
[root@earth:/usr/src/iptables-1.4.12.1]
# make distclean
# ./configure CFLAGS="-O2 -march=pentium3" \
CPPFLAGS="-O2 -march=pentium3" \
--enable-devel --enable-libipq

・CFLAGS="-O2 -march=pentium3" (CPU最適化オプション)
・CPPFLAGS="-O2 -march=pentium3" (CPU最適化オプション)
・該当しない場合は指定しない

# make
# make install
# cd ..
[root@earth:/usr/src/src]
# tar jcvf iptables-1.4.12.1-110904.tar.bz2 iptables-1.4.12.1/

○キャッシュ情報の更新と確認

・/usr/local/libの設定がされているなら、ldconfigのみ実行します

# cd ~
[root@earth:~]
# echo /usr/local/lib >> /etc/ld.so.conf.d/usrlocal.conf
# ldconfig
# ldconfig -p | grep -e libip -e libxtable

○/sbinにシンボリックリンクを作ります

# cd /sbin
[root@venus:/sbin]
# ln -s /usr/local/sbin/ip6tables ip6tables
# ln -s /usr/local/sbin/ip6tables-restore ip6tables-restore
# ln -s /usr/local/sbin/ip6tables-save ip6tables-save
# ln -s /usr/local/sbin/iptables iptables
# ln -s /usr/local/sbin/iptables-restore iptables-restore
# ln -s /usr/local/sbin/iptables-save iptables-save

○フォワーディング設定

:/etc/sysctl.conf ファイルの修正

・フォワーディング設定

net.ipv4.ip_forward = 1

・指定されたファイルから読み込んだ内容を sysctl 設定にロードします

[root@earth:~]
# sysctl -p



○iptablesの設定 (rpmパッケージの起動スクリプトを使う)

・iptablesを新規インストールした場合は、保存したファイルをもどします

# cd /etc/init.d
[root@earth:/etc/init.d]
# mv iptables-ORG iptables
# chmod 755 iptables
# cd ../sysconfig
[root@earth:/etc/sysconfig]
# mv iptables-config.rpmsave iptables-config

○physdevサポートの確認

# iptables -m physdev --help
iptables v1.4.12.1

・省略

physdev match options:
 [!] --physdev-in inputname[+]          bridge port name ([+] for wildcard)
 [!] --physdev-out outputname[+]        bridge port name ([+] for wildcard)
 [!] --physdev-is-in                    arrived on a bridge device
 [!] --physdev-is-out                   will leave on a bridge device
 [!] --physdev-is-bridged               it's a bridged packet

○xen-firewallの実行と確認

xen-firewall (詳細別記)

・適当なディレクトリでxen-firewallスクリプトを実行します

# cd ~
[root@earth:~]
# source xen-firewall

・iptablesのチェック

# service iptables status

○設定の保存

[root@earth:~]
# service iptables save

・/etc/sysconfig/iptablesファイルとして保存されます


○/etc/sysconfig/iptables-configの修正

・自動でロードされないモデュールを既述します

IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"

○iptablesスクリプトの実行

[root@earth:~]
# service iptables start
# chkconfig --add iptables



○サーバ起動時のfirewall設定の流れ

iptables起動スクリプトの実行
/etc/sysconfig/iptables,iptables-configが読込まれる

 ↓

xend,xendomains起動スクリプトの実行
/etc/xen/scripts/vif-bridgeが実行され、
vif-common.shを読み込んで、新しいPHYSDEVチェーンが追加される

○vif-common.sh

・vif-bridgeスクリプトで読み込まれます
・xendomainsの起動で新しいvifデバイスの設定が追加されます

:/etc/xen/scripts/vif-common.sh

・省略

frob_iptable()
{
  if [ "$command" == "online" ]
  then
    local c="-I"
  else
    local c="-D"
  fi
  iptables "$c" FORWARD -m physdev --physdev-is-bridged --physdev-in "$dev" \
    "$@" -j ACCEPT 2>/dev/null &&
  iptables "$c" FORWARD -m physdev --physdev-is-bridged --physdev-out "$dev" \
    -j ACCEPT 2>/dev/null

  if [ "$command" == "online" -a $? -ne 0 ]
  then
    log err "iptables setup failed. This may affect guest networking."
  fi
}

・省略


○bridge接続の確認

・xxxxxxxxxxxxの部分にはMACアドレスが入ります

[root@earth:~]
# brctl show
bridge name    bridge id            STP enabled     interfaces
eth0           8000.xxxxxxxxxxxx    no              vif2.0
                                                    vif1.0
                                                    peth0

○xendomains起動後のiptablesルール

紫色部分 xendomainsの起動で追加された部分
・"service iptables restart"を実行する場合は、"service iptables save"で現況を保存し、
・restart後、手動で/etc/sysconfig/iptables (xendomainsで追加された部分) を修正し、
・サーバ起動時の状態に戻しておく

# Generated by iptables-save v1.4.12.1 on Sun Sep  4 00:34:32 2011
*nat
:PREROUTING ACCEPT [1:60]
:POSTROUTING ACCEPT [5:392]
:OUTPUT ACCEPT [5:392]
COMMIT
# Completed on Sun Sep  4 00:34:32 2011
# Generated by iptables-save v1.4.12.1 on Sun Sep  4 00:34:32 2011
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [134:15626]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.0.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 192.168.0.0/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -p tcp -m state --state NEW -m tcp --dport 922 -j ACCEPT
-A INPUT -s 192.168.0.1/32 -p tcp -m state --state NEW -m tcp --dport 3551 -j ACCEPT
-A INPUT -s 192.168.0.21/32 -p tcp -m state --state NEW -m tcp --sport 25 -j ACCEPT
-A FORWARD -m physdev --physdev-out vif2.0 --physdev-is-bridged -j ACCEPT
-A FORWARD -m physdev --physdev-in vif2.0 --physdev-is-bridged -j ACCEPT
-A FORWARD -m physdev --physdev-out vif1.0 --physdev-is-bridged -j ACCEPT
-A FORWARD -m physdev --physdev-in vif1.0 --physdev-is-bridged -j ACCEPT
-A FORWARD -m physdev --physdev-in peth0 -j ACCEPT
COMMIT
# Completed on Sun Sep  4 00:34:32 2011



○開発版のインストール(参考)

・gitで開発版をダウンロードしてインストールします

○gitのインストールと実行

# cd /usr/src
[root@venus:/usr/src]
# tar jxf git-1.7.6.1.tar.bz2
# chown -R root:root git-1.7.6.1
# cd git-1.7.6.1
[root@venus:/usr/src/git-1.7.6.1]
# ./configure
# make
# make install

・iptablesのダウンロード
・iptablesディレクトリが作られます

# cd /usr/src
[root@venus:/usr/src]
# git clone git://git.netfilter.org/iptables.git

・アップデートする場合

# cd /usr/src/iptables
[root@venus:/usr/src/iptables]
# git pull -v

○iptablesのインストール

# cd /usr/src/iptables
[root@venus:/usr/src/iptables]
# ./autogen.sh
# ./configure CFLAGS="-O2 -march=pentium3" \
CPPFLAGS="-O2 -march=pentium3" \
--enable-devel --enable-libipq
# make
# make install

○ Copyright(c) 528p.com All Rights Reserved.