連載
» 2005年07月05日 00時00分 公開

習うより慣れろ! iptablesテンプレート集(4):番外編:iptables活用Tips集 (3/4)

[鶴長鎮一,@IT]

Tips 3
shスクリプトでiptablesを設定する利点

 iptables-saveで保存したデータは、テキスト形式のため編集が可能です。しかしテーブルごと、チェインごとに整理されているため可読性が悪くなっています。そうした点ではshスクリプトが優れています。また、shスクリプトはビルトインコマンドや外部コマンドなどを駆使することで、動的なパラメータを設定することもできます。

 例として、テンプレートで使用していた自アドレスの指定を見てみましょう。

4  myhost='192.168.20.200'

 固定IPアドレスを使用している場合は何も苦労はありませんが、DHCPによる割り当てでIPアドレスが動的に変化する場合は、以下のようにして自アドレスを知ることができます。

myhost=`ifconfig eth0 | grep "inet addr" | awk '{print $2}' | sed 's/addr://'`

 上の例は、ifconfigコマンドの出力を利用しています。インターフェイスがeth0以外場合は、適宜修正を加えます。同じ要領で、ブロードキャストアドレスやネットマスク値を取得することもできます。

bcast=`ifconfig eth0 | grep "inet addr" | awk '{print $3}' | sed 's/Bcast://'`
ブロードキャストアドレスの取得
mask=`ifconfig eth0 | grep "inet addr" | awk '{print $4}' | sed 's/Mask://'`
ネットマスク値の取得

 shスクリプトの利点として、反復制御や条件分岐が利用できる点も挙げられます。例えば、テンプレート12では「-d」オプションで複数アドレスの指定ができないために、2度同じようなiptables指定を行いました。

56  iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 192.168.0.3 --dport 80 -j ACCEPT
57  iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 192.168.0.4 --dport 80 -j ACCEPT

 shスクリプトで反復制御と関数定義を利用することで、以下のようにすることができます。

func_test(){
    for ip in $@; do
        iptables -A FORWARD -i eth0 -o eth1 -p tcp -d $ip --dport 80 -j ACCEPT
    done
}
func_test 192.168.0.3 192.168.0.4

 テンプレート12ではIPアドレスを2つしか指定していなかったため、上記のように関数化するメリットはあまりありませんが、IPアドレスの数が多くなればメリットが生きてきます。

Copyright © ITmedia, Inc. All Rights Reserved.

編集部からのお知らせ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。