Skip to content

Instantly share code, notes, and snippets.

@10sr
Last active August 29, 2015 14:07
Show Gist options
  • Select an option

  • Save 10sr/2a4c7e37589f8cc1e1e1 to your computer and use it in GitHub Desktop.

Select an option

Save 10sr/2a4c7e37589f8cc1e1e1 to your computer and use it in GitHub Desktop.
iptables

iptables

IP パケットのフィルタリングのルールを設定する。 Linux で使える。

類似なものとして firewall なるものがある。 Centos7 などで採用されており、裏側で iptables を使っている(らしい)。

Basics

まず、数種類の table がある。通常 filter テーブルを操作することが多く、 iptables コマンド実行時にテーブルの指定を省略すると filter テーブルに対して操作が行われる。 filter テーブルでは、遮断・通過させるパケットを決定する。 その他 nat, mangle などのテーブルがあり、 -t オプションによって操作するテーブルを指定できる。

それぞれのテーブルにはいくつかの chain がある。チェーンの種類には INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING などがあるが、一つのテーブルですべてのチェーンを持っているわけではない。 Filter テーブルには INPUT, OUTPUT, FORWARD の3つのチェーンがある。

また、 -N オプションによりユーザ定義チェーンを作成することができる。作成したチェーンは、ルール定義時に -j オプションのターゲットとして指定できる。

各チェーン上でルールは sequential に並んでおり、各パケットについて一番はじめにマッチしたルールによってそのパケットの処理が決定される。 そのため、ルールの設定時にはルールを末尾に追加する -A オプションを使うことが多い。 どのルールにもマッチしなかった場合、そのチェーンの policy によってパケットの処理が決定される。 ポリシーは、 -P オプションによって設定される。

Save/Restore Rules

iptables コマンドによってルールを書き換えた場合、

# iptables-save > /etc/iptables/iptables.rules

などとすることでそれをファイルに保存する。逆に、このファイルを直接書き換えた場合、及びシステムの起動時は

# iptables-restore < /etc/iptables/iptables.rules

とすることで保存されたルールを読み込むことができる。 起動時にこの操作を行うサービスが多くのシステムで存在するので、適宜 systemctl enable iptables などで有効化する。 このサービスはルールの読み込みを行うのであって、このサービスの有無によって iptables によるフィルタリングが有効化・無効化されるわけではない (systemctl disable iptables としているシステムでも、直接 iptables コマンドでルールを操作すれば、それは(再起動するまで)有効になる)。

Examples

filter テーブル INPUT チェーンのポリシーを DROP とする(どのルールにもマッチしなかったすべての内向きパケットを破棄する)

# iptables -P INPUT DROP

http アクセスを許可する

# iptables -A INPUT -p tcp --dport http -j ACCEPT

lo interface を通るパケットを許可する

# iptables -A INPUT -i lo -j ACCEPT

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment