• このエントリーをはてなブックマークに追加

【linux豆知識】iptables入門

  • このエントリーをはてなブックマークに追加

FireWall

zaco muraです。

自分がサーバエンジニアになる前には、「ファイアウォール」というものに対してなんだかすごいイメージを持っていました。何かわからないけど、高度な技術で攻撃を防御するすごい機能。。。実際そういうモノもあるんだと思いますが、linuxでファイアウォールといえばもっぱらiptablesですね。そんなiptablesの使い方とか概要を書いてきます。(自分の理解を書いているので、間違っていたらご指摘頂けると幸いです)

iptablesって?

その名の通り、ip(のパケットの制御を書いておく)tablesです。IPパケットのいろいろな情報を元に転送したり破棄したりNATしたりという処理を行います。類似のものとしてL2のブリッジ上で動作するebtables(Ethernet Bridge tables)なんてものもあります。
基本的には1パケットずつに対して書かれたルールに則って処理をしていきますが、TCPのようにstatefulなパケットの処理もできます。

どんなことができるの?

だいたい以下の様な感じです。

・パケットの破棄
・パケットの転送
・受信/送信パケットのIP情報の書き換え(=NAT)
・パケット受信時のログ出力
・帯域制御

どんな時に使うの?

自分の経験では

・不正な攻撃に対する防御(使わないポートに対するパケットを破棄する目的)
・ルータとして使う時(NAT)
・どんなパケットが来ているかのチェックのため、ログ出力させる

に使います。特に多いのは不正攻撃への防御ですかね。

どうやって使うの?

コマンドラインから操作可能です。基本構文は

# iptables -t ${テーブル} -${操作内容} ${ターゲットとするチェイン} -j ${行いたい動作}

のようになります。
ここでテーブルとかチェインとか、iptablesの専門用語が出てきました。個人的にはこういう呼び名が何を意味するのかイメージしづらい気がしていて、とっつきにくい印象の原因なのかなと思っていますが、自分なりの理解を説明したいと思います。

テーブルって?チェインって?

テーブルやチェインというのは、iptablesが処理を行う箇所や処理内容を指定するための名称です。

テーブルというのは最上位の概念で、よく使うのはfilterテーブルです。パケットの破棄や許可はこのテーブルを使います。
次に、natテーブルもよく使います。ここではその名の通りNAT/NAPTを行う場合に使います。

次にチェインというのは処理を行う箇所の呼び方のことです。ちょっとわかりづらいですね。
例えば入力パケットに対して処理を行うのはINPUTチェインで、出力パケットに対して行うのはOUTPUTチェインです。
パケットは受信してから複数のチェインを通過して最終的にOSやユーザプログラムで処理されます。
これらのチェインは各テーブルに属しています。INPUTチェインやOUTPUTチェインはfilterテーブル、PREROUTINGチェインやPOSTROUTINGチェインはnatテーブルです。

よくある使い方

1.入力パケットの破棄

### eth0に届いたicmpパケットを破棄する
# iptables -t filter -I INPUT -j DROP -p icmp -i eth0

2.入力パケットの許可

### eth0に届いたicmpパケットを許可する
# iptables -t filter -I INPUT -j ACCEPT -p icmp -i eth0

3.パケット受信時にログ出力する

### eth0にicmpパケットが届いた場合、ログ出力する
iptables -t filter -I INPUT -j LOG -p icmp -i eth0

### 以下のようにログが出力される
# tail /var/log/messages
Oct 28 12:32:56 server01 kernel: IN=eth0 OUT= MAC= SRC=192.168.0.1 DST=192.168.0.2 LEN=60 TOS=0x00 PREC=0x00 TTL=121 ID=12403 PROTO=ICMP TYPE=8 CODE=0 ID=1 SEQ=5

4.転送パケットをNAPTする

### 1つのIPを複数のホストで使うNAPTを行う
# iptables -t nat -I POSTROUTING -j MASQUERADE

その他注意点など

・iptablesはルールの順番に実施していくので、より優先度の高い処理は -I でルールの上位に、優先度の低い処理は -A でルールの下位に入れる必要がある
・DROP系の処理を入れるときは特に順番に注意する。(間違って遠隔ログインできなくなり、データセンタまで走ったのはいい思い出。。)
・コマンドラインで入力した場合、再起動で消えてしまうので、iptables-save などで設定を保存する
・FTPのようにペイロードにIP情報がある場合、デフォルトではNATが機能しない。(FTP用のカーネルモジュールが必要だったはず)

参考

http://oxynotes.com/?p=6361#5
http://www.atmarkit.co.jp/ait/articles/0111/23/news003.html

スポンサーリンク
Sponsords Link
  • このエントリーをはてなブックマークに追加

ZacoDesign

スポンサーリンク
Sponsords Link