iptablesのユーザ定義チェインを変更する。

ユーザ定義チェインをコマンドで変更する方法がなかなか見つからなかったので。

追加

追加に関してはググるとすぐに見つかる。

iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
  # 80番ポートを開けて入ってくるパケットを通す

変更

以下を想定した変更方法。

  1. 22番ポートを開けてsshできるようにする
  2. 間違えて23番ポートを開けてしまう
  3. 22番ポートに直したい

それではコマンドを見ながら順を追って手順を説明。

ユーザ定義チェインを追加

iptables -A INPUT -m state --state NEW -p tcp --dport 23 -j ACCEPT
  # 22番ポートを許可するつもりが、間違えて23番ポートを許可してしまう

ユーザ定義チェインの確認

いったん内容の確認と、先ほど追加した定義が何番目にあるのか確認。

sudo iptables -L INPUT
  # Chain INPUT (policy DROP)
  # target     prot opt source               destination
  # ACCEPT     icmp --  anywhere             anywhere
  # ACCEPT     all  --  anywhere             anywhere
  # ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
  # ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:telnet

ユーザ定義チェインの変更

上から4番目に間違えて追加した定義があるので、4番目の変更を行う。

sudo iptables -R INPUT 4 -m state --state NEW -p tcp --dport 22 -j ACCEPT
  # 上から4番目に設定された23番ポートの定義を22番ポートを許可する設定に変更する

簡単にオプションの説明を。

  • 「-R INPUT」
    INPUTチェインを置換
  • 「4」
    対象の定義番号
  • 「-m state --state NEW -p tcp --dport 22 -j ACCEPT」
    定義したいルール

再度、ユーザ定義チェインの確認

正しく変更を行えたかどうか確認。

sudo iptables -L INPUT
  # Chain INPUT (policy DROP)
  # target     prot opt source               destination
  # ACCEPT     icmp --  anywhere             anywhere
  # ACCEPT     all  --  anywhere             anywhere
  # ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
  # ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh

削除

一応削除のコマンドについても触れたい。
要領については変更とほぼ同じで、オプションを変えるだけである。

sudo iptables -D INPUT 4
  # 22番ポートの定義が不要になったので削除する
sudo iptables -L INPUT
  # Chain INPUT (policy DROP)
  # target     prot opt source               destination
  # ACCEPT     icmp --  anywhere             anywhere
  # ACCEPT     all  --  anywhere             anywhere
  # ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED