- PR -

iptables の RETURN の使い方

投稿者投稿内容
coolkun
ベテラン
会議室デビュー日: 2003/11/18
投稿数: 70
投稿日時: 2004-06-03 11:12
iptables の RETURN の使い方を教えて下さい。
調べてみると“チェイン内のルール評価を終了”
となっているのですが、いまいちよく分かりません。
よろしくお願いします。
cn009
ベテラン
会議室デビュー日: 2004/05/13
投稿数: 72
投稿日時: 2004-06-03 16:34
iptablesのユーザ定義チェイン
http://www.linux.or.jp/JF/JFdocs/packet-filtering-HOWTO-7.html#ss7.4
で説明されているように、ユーザ定義チェインを作り、ジャンプさせることが出来ます。

そのチェインのルールの評価が全てすめば、自動的に呼び出し元のチェインに戻ってくるのですが、
すぐに呼び出し元のチェインに戻りたいこともあるでしょう。

そういった場合に RETURN を使えば、そのチェインの残りのルールを評価せずに
すぐに呼び出しもとのチェインに戻れるのだと思います。

私はユーザ定義チェインを使ったことが無いので、あまり自信が無いですが
coolkun
ベテラン
会議室デビュー日: 2003/11/18
投稿数: 70
投稿日時: 2004-06-04 16:00
RETURNについて説明してあるものを見てみると、そのように書いてありますよね。

RETURNターゲット
チェインの末尾まで落っこちるのと同じ効果がある。
組み込み済みチェイン内のルールの場合・・・そのチェインのポリシーが実行される。
ユーザ定義チェイン内のルールの場合 ・・・そのチェインを呼び出したチェインに戻り、呼び出し元のルールの直後から検査が続行される。

文章でいうとこんな感じでしょうか。。
ただiptablesを実際、記述した場合、どんな感じなのかちょっとよく分かりません。

iptablesの例を書いて頂きたいのですが。。
cn009
ベテラン
会議室デビュー日: 2004/05/13
投稿数: 72
投稿日時: 2004-06-04 20:29
引用:

文章でいうとこんな感じでしょうか。。
ただiptablesを実際、記述した場合、どんな感じなのかちょっとよく分かりません。



やはりそうですよね。
短くてユーザ定義チェインならではの良い例が思いつかなかったんです。
なんとか意味のあるルールを思いつきました。

iptables -N chk_mac
iptables -A chk_mac -m mac --mac-source 02:04:06:08:0a:0c -j RETURN
iptables -A chk_mac -m mac --mac-source 02:04:06:08:0a:0e -j RETURN
iptables -A chk_mac -j LOG --log-prefix "nonregistered MAC addr "
iptables -A chk_mac -j DROP

iptables -A INPUT -i eth0 -j chk_mac
iptables -A FORWARD -i eth0 -j chk_mac

こんな感じでしょうか。
coolkun
ベテラン
会議室デビュー日: 2003/11/18
投稿数: 70
投稿日時: 2004-06-10 11:40
返信ありがとうございます。
例を記述して頂きましたが、

iptables -A chk_mac -m mac --mac-source 02:04:06:08:0a:0c -j RETURN
iptables -A chk_mac -m mac --mac-source 02:04:06:08:0a:0e -j RETURN

とする場合と

iptables -A chk_mac -m mac --mac-source 02:04:06:08:0a:0c -j ACCEPT
iptables -A chk_mac -m mac --mac-source 02:04:06:08:0a:0e -j ACCEPT

とする場合の違いが分からないのですが。。

RETURN としなくても、ACCEPT で良いような気がするのですが。。

RETURN・・・ ユーザ定義チェイン内であれば呼び出し元に返り、組み込み済みチェインであればチェインポリシーが適用される。

と調べるとあるのですが、 呼び出し元に返るというのはどこになるのでしょうか?


[ メッセージ編集済み 編集者: coolkun 編集日時 2004-06-10 11:53 ]
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-06-10 15:04
引用:
coolkunさんの書き込み (2004-06-10 11:40) より:
iptables -A chk_mac -m mac --mac-source 02:04:06:08:0a:0c -j RETURN
iptables -A chk_mac -m mac --mac-source 02:04:06:08:0a:0e -j RETURN

とする場合と

iptables -A chk_mac -m mac --mac-source 02:04:06:08:0a:0c -j ACCEPT
iptables -A chk_mac -m mac --mac-source 02:04:06:08:0a:0e -j ACCEPT

とする場合の違いが分からないのですが。。



後者は必ず ACCEPT ですが、前者は -j chk_mac した所に戻って
それ以降の指定しだいです。


引用:
RETURN・・・ ユーザ定義チェイン内であれば呼び出し元に返り、組み込み済みチェインであればチェインポリシーが適用される。

と調べるとあるのですが、 呼び出し元に返るというのはどこになるのでしょうか?



組み込み済みチェインは、システム (iptables 内部) に戻るとでも
考えれば良いのではないでしょうか。
で、その時の動作はポリシーに従うと。
cn009
ベテラン
会議室デビュー日: 2004/05/13
投稿数: 72
投稿日時: 2004-06-10 15:07
説明不足で混乱させてしまったようですみません。
あの使用例は設定のうちでユーザ定義チェインを使う部分だけです。
前後に他のルールが設定されていると思ってください。

あの使用例が設定の全てだとすると、確かにRETURNでもACCEPTでも違いが無いですね。
それにわざわざユーザ定義チェインを使う必要も無いですね。

ユーザ定義チェインを呼び出しているルールの後に他のルールが続く場合は
単にACCEPTとしてしまうと、残りのルールで評価されないので困ります。

呼び出し元に戻るというのがどこかという話ですが、
ユーザ定義チェインは他のチェインから呼び出されるので、その呼び出し元のチェインの次のルールに進みます。

チェインのルールの評価順序はiptablesコマンドの実行順とは必ずしも一致しない
(-I 等を使った場合など)ということに気をつけてください。
coolkun
ベテラン
会議室デビュー日: 2003/11/18
投稿数: 70
投稿日時: 2004-06-10 17:19
すみません、ちょっとよく分からなくなってしまったので思い切ってiptables の全体を記述してみますね。

#!/bin/sh

# 設定の初期化
iptables -F

# SNAT (LAN → インターネット)
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to ***.***.**.***

# ポリシーの設定
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# ICMP DoS攻撃 対策
iptables -N icmp-dos
iptables -A icmp-dos -m limit --limit 16/s --limit-burst 5 -j ?????
iptables -A icmp-dos -j LOG --log-prefix "### ICMP DoS攻撃 ###"
iptables -A icmp-dos -j DROP
iptables -A INPUT -i ppp0 -p icmp --icmp-type echo-request -j icmp-dos
iptables -A FORWARD -i ppp0 -p icmp --icmp-type echo-request -j icmp-dos

# Stealth scan 対策
iptables -N stealth-scan
iptables -A stealth-scan -m limit --limit 1000/s --limit-burst 5 -j ?????
iptables -A stealth-scan -j LOG --log-prefix "### Stealth scan ###"
iptables -A INPUT -i ppp0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j stealth-scan
iptables -A FORWARD -i ppp0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j stealth-scan

# ローカルループバック
iptables -A INPUT -i lo -j ACCEPT

# ICMP
iptables -A INPUT -p icmp -j ACCEPT

# -------------- 略 -------------------

# DROP LOG INPUT
iptables -A INPUT -j LOG --log-prefix "# DROP LOG INPUT #"

# DROP LOG FORWARD
iptables -A FORWARD -j LOG --log-prefix "# DROP LOG FORWARD #"


こんな感じですが、

iptables -A icmp-dos -m limit --limit 16/s --limit-burst 5 -j ?????

iptables -A stealth-scan -m limit --limit 1000/s --limit-burst 5 -j ?????

上記の?????のところをACCEPTにした方が良いのか、RETURNにした方がいいのか分かりません。

教えて頂けますでしょうか?


>ユーザ定義チェインを呼び出しているルールの後に他のルールが続く場合は
単にACCEPTとしてしまうと、残りのルールで評価されないので困ります。

なぜ残りのルールで評価されないのでしょうか?
ユーザ定義チェインは必ずRETURNにするということですか?


>ユーザ定義チェインは他のチェインから呼び出されるので、その呼び出し元のチェインの次のルールに進みます。

上記のiptablesではユーザ定義チェイン -N とターゲットとしてのユーザ定義が続けて記述されていますが、どうしても、
>他のチェインから呼び出される
>その呼び出し元のチェイン
の意味が分かりません。上記のiptablesのサンプルから具体的に教えて頂けますか?

[ メッセージ編集済み 編集者: coolkun 編集日時 2004-06-10 17:22 ]

スキルアップ/キャリアアップ(JOB@IT)