連載
» 2010年08月23日 00時00分 公開

知らなきゃ損するiptablesのTipsiptablesテンプレート集 改訂版(8)(2/3 ページ)

[鶴長鎮一,@IT]

Tips 4:iptablesの設定にシェルスクリプトを活用する

 iptables-saveで保存したデータはテキスト形式のため編集可能ですが、あまり可読性はよくありません。設定内容をたびたび修正するならば、シェルスクリプトが便利です。またシェルスクリプトを駆使すれば、動的なパラメータを設定したり、条件式を使って処理を分岐させたり反復させたりできます。

 例えばホスト自身のIPアドレスを指定する際、あらかじめ分かっていれば問題ないのですが、DHCP割り当てのようにIPアドレスが動的に変化する場合には、どんなIPアドレスが割り当てられるか特定できません。そこでシェルスクリプトのメリットを生かして次のような1行を用いて設定します。

myhost='192.168.20.200'
                ↓
  myhost=`ifconfig eth0 | grep "inet addr" | awk '{print $2}' | sed 's/addr://'`
ホスト自身のIPアドレスを指定する

 上の例は、ifconfigコマンドの出力を利用しています。インターフェイスがeth0以外場合は、適宜修正を加えます。ifconfigの表示に日本語が使われている場合には次のような1行を用います。

myhost=`ifconfig eth0 | grep "inetアドレス" | awk '{print $1}' | sed 's/inetアドレス://'`
ホスト自身のIPアドレスを指定する(ifconfigの表示に日本語が使われている場合)

 また同じ要領で、ブロードキャストアドレスやネットマスク値を取得することもできます。

bcast=`ifconfig eth0 | grep "inet addr" | awk '{print $3}' | sed 's/Bcast://'`
  (ブロードキャストアドレスの取得※)
mask=`ifconfig eth0 | grep "inet addr" | awk '{print $4}' | sed 's/Mask://'`
  (ネットマスク値の取得※)
  ※ifconfigの出力に日本語が使用されている場合は修正が必要です。
ブロードキャストアドレスやネットマスク値の取得

 同じような設定をIPアドレスを変えて何度も繰り返す際には、シェルスクリプトの反復制御や条件分岐を使って次のように書き換えることができます。

/sbin/iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 192.168.0.2 --dport 80 -j ACCEPT
  /sbin/iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 192.168.0.3 --dport 80 -j ACCEPT
  /sbin/iptables -A FORWARD -i eth0 -o eth1 -p tcp -d 192.168.0.4 --dport 80 -j ACCEPT
 
                        ↓
 
  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.2 192.168.0.3 192.168.0.4

Tips 5:ヘルプを活用する

 iptablesにはさまざまなコマンドラインオプションが用意されています。iptablesに「-h」オプションを加えることでヘルプを表示できます。

# /sbin/iptables -h
通常のヘルプを表示する

 さらに拡張モジュールを利用すると、指定するコマンドラインオプションや引数も拡張されます。その場合「-m モジュール名 -h」とすることで、モジュール特有のヘルプを表示させることができます。

# /sbin/iptables -m tos -h
  (省略)
  tos match options:
  [!] --tos value[/mask]    Match Type of Service/Priority field value
  [!] --tos symbol          Match TOS field (IPv4 only) by symbol
                          Accepted symbolic names for value are:
                            (0x10) 16 Minimize-Delay
                            (0x08)  8 Maximize-Throughput
                            (0x04)  4 Maximize-Reliability
                            (0x02)  2 Minimize-Cost
                            (0x00)  0 Normal-Service
  (tosモジュール特有のヘルプを表示)
モジュール特有のヘルプを表示する

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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