- PR -

iptablesの設定

1
投稿者投稿内容
lagna
常連さん
会議室デビュー日: 2003/11/06
投稿数: 27
投稿日時: 2007-09-04 15:10
iptablesの設定で、お聞きしたいことがあり、投稿させていただきました。
下記が、sysconfigのiptableのファイルなのですが、
まず、RH-Firewall-1-INPUT に入り、それから許可されているもの(対象サーバーはWEBの80と443、mysqlで構成されたWEBサーバーで、RedHatEs4です)がそれぞれACCEPTされるというのは理解できるのですが、やりたいことは、

@INOUTに対してドロップされたもの、REJECTされたものをそれぞれ別のファイルとしてをすべてログに吐き出したい
AINPUTに対してWEBの80番443番以外で、ACCEPTされたものをログに取得したい(WEB閲覧以外で、ACCEPTがあるようなものを調査したい→WEBサービスしか立ててないので)

この二点を追加するために下記のiptableをどのように書き換えればいいのでしょうか・・・。

:RH-Firewall-1-INPUT - [0:0]
の跡に
-A INPUT -j LOG --log-prefix "[IPTABLES INPUT] : " --log-level debug
を追加すると当然、WEBで正常閲覧できたログが取れてしまい、位置の問題なのでしょうか・・・ドロップしたもののみという指定がどのようにしたらよいのかよくわかっていない状態です。

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
UTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
F/A
ぬし
会議室デビュー日: 2006/03/18
投稿数: 312
お住まい・勤務地: Tokyo
投稿日時: 2007-09-04 20:54
iptablesというのは上から順番に評価されていって、
そのパケットが該当する条件式だった場合そのルールによって処理されます。
そのパケットはそれより後方のルールは処理されません。

という動きになるようです。

まぁ極端な話、
--dport 80 -j ACCEPT
--dport 80 -j REJECT
って書かれていればACCEPTになって、

--dport 80 -j REJECT
--dport 80 -j ACCEPT
って書かれていれば、REJECTするという事です。

ログというのはその段階で該当したパケットのログが記録されます。
(ログの場合だけは特別で記録のみを行いそれ以降のルールも評価します)

こちらも極端な話、
--dport 80 -j ACCEPT
--dport 80 -j LOG
と書かれている場合には、何も記録されません。

--dport 80 -j LOG
--dport 80 -j ACCEPT
と書く必要があるわけです。

なお、
--dport 80 -j LOG
--dport 80 -j REJECT
と書いてもログが残ります。


また、上記の動作からも分かるように
LOGルール自身はその後そのパケットが最終的にどうなったかを知りえないので、
難しい条件でログを取るのなら、順序やら条件式を
細かく指定しないと実現出来ないと思います。

ただ、個人的には基本的な方法しか知らないので、
何かしら素晴らしいテクニックがあるかもしれません。

[ メッセージ編集済み 編集者: F/A 編集日時 2007-09-04 20:57 ]
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2007-09-04 20:56
DROP、REJECTターゲットを適用しているものを、
ログを取ってDROP、ログを取ってREJECTというチェインを作成した上で、
それらをターゲットとして適用するような構成に変えてみては?

大分前に書いた文章を引用しておきます。
引用:

・即ターゲットに送らず、LOGターゲットを活用する
 これは上記のiptables設定マシンでの調査とほぼ同等のことをするために、です。
 即ACCEPTやDROPしたんじゃ、どんな通信を処理したんだか分かりません。
 たとえば
  iptables -A INPUT <条件> -j accept
 とするところを、あらかじめ
  iptables -N log-accept
  iptables -A log-accept -j log <logターゲット関連のオプション>
  iptables -A log-accept -j accept
 などという「ログ取得してからaccept」という処理を行うユーザ定義チェインを作成しておいて
  iptables -A INPUT <条件> -j log-accept
 という感じで処理してやれば、syslogにどんな通信が処理されたのかログが残ります。






-----
引用:

:RH-Firewall-1-INPUT - [0:0]
の跡に
-A INPUT -j LOG --log-prefix "[IPTABLES INPUT] : " --log-level debug
を追加すると当然、WEBで正常閲覧できたログが取れてしまい、位置の問題なのでしょうか・・・ドロップしたもののみという指定がどのようにしたらよいのかよくわかっていない状態です。


パラメータとして何も定義してない
=すべての通信をLOGターゲットに送ってるんですから、
処理の根本を誤解してると思います。


この辺の概念、iptablesの処理フローが腑に落ちてるとすぐ理解できるんですが、
最初からそう分かるもんでもないとも思ってます。
参考になるWebもあると思いますが、下記書籍をお勧めしておきます。
[Red Hat Linux Firewalls]
http://www.amazon.co.jp/Red-Hat-Linux-Firewalls-%E3%83%9E%E3%83%83%E3%82%AB%E3%83%BC%E3%83%86%E3%82%A3/dp/4797322691
_________________
Mattun
Microsoft MVP for Directory Services
(Oct 2006-Sep 2007)
lagna
常連さん
会議室デビュー日: 2003/11/06
投稿数: 27
投稿日時: 2007-09-05 11:46
さっそくの返信ありがとうございます。
 iptableの設定についていろいろ調べました。

 上から順に処理がされていくのですね。。。

 処理前に 
 ルール LOG --log-prefix "[メモ] " --log-level debug
 という感じで作成していくと無事にログが取れました。

 アドバイスのほどありがとうございました。ログにもルールが適応できるということで、ハナッから間違っていたようです・・・(苦笑
1

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