- PR -

IPCHAINSについて

投稿者投稿内容
かず
会議室デビュー日: 2002/06/05
投稿数: 3
投稿日時: 2002-06-06 10:13
はじめまして!
IPCHAINSを使ったFWで困っています。

構成は
Router
WAN側:222.222.222.1
DMZ側:222.222.222.2
LAN側:192.168.1.254

DMZ server(DNS/MAIL)
222.222.222.3

Local Sever(DNS/MAIL)
192.168.1.250

チェインは
:input ACCEPT
:forward ACCEPT
:output ACCEPT
:good-dmz -
:bad-dmz -
:good-bad -
:Dmz-good -
:Dmz-bad -
:bad-good -
:icmp-acc -
:bad-if -
:Dmz-if -
:good-if -
-A input -s 0.0.0.0/0.0.0.0 -d 222.222.222.1/255.255.255.255 -j bad-if
-A input -s 0.0.0.0/0.0.0.0 -d 222.222.222.2/255.255.255.255 -j dmz-if
-A input -s 0.0.0.0/0.0.0.0 -d 192.168.5.254/255.255.255.255 -j good-if
-A forward -s 192.168.1.0/255.255.255.0 -d 0.0.0.0/0.0.0.0 -i eth1 -j good-dmz
-A forward -s 192.168.1.0/255.255.255.0 -d 0.0.0.0/0.0.0.0 -i eth2 -j good-bad
-A forward -s 222.222.222.0/255.255.255.248 -d 0.0.0.0/0.0.0.0 -i eth2 -j dmz-bad
-A forward -s 222.222.222.0/255.255.255.248 -d 0.0.0.0/0.0.0.0 -i eth0 -j dmz-good
-A forward -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -i eth1 -j bad-dmz
-A forward -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -i eth0 -j bad-good
-A good-dmz -s 0.0.0.0/0.0.0.0 -d 222.222.222.3/255.255.255.255 25:25 -p 6 -j ACCEPT
-A good-dmz -s 0.0.0.0/0.0.0.0 -d 222.222.222.3/255.255.255.255 110:110 -p 6 -j ACCEPT
-A good-dmz -s 0.0.0.0/0.0.0.0 -d 222.222.222.3/255.255.255.255 53:53 -p 17 -j ACCEPT
-A good-dmz -s 0.0.0.0/0.0.0.0 -d 222.222.222.3/255.255.255.255 53:53 -p 6 -j ACCEPT
-A good-dmz -s 0.0.0.0/0.0.0.0 -d 222.222.222.3/255.255.255.255 80:80 -p 6 -j ACCEPT
-A good-dmz -s 0.0.0.0/0.0.0.0 -d 222.222.222.3/255.255.255.255 443:443 -p 6 -j ACCEPT
-A good-dmz -s 0.0.0.0/0.0.0.0 -d 222.222.222.3/255.255.255.255 873:873 -p 6 -j ACCEPT
-A good-dmz -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -p 1 -j icmp-acc
-A bad-dmz -s 0.0.0.0/0.0.0.0 -d 222.222.222.3/255.255.255.255 25:25 -p 6 -j ACCEPT
-A bad-dmz -s 0.0.0.0/0.0.0.0 -d 222.222.222.3/255.255.255.255 110:110 -p 6 -j ACCEPT
-A bad-dmz -s 0.0.0.0/0.0.0.0 -d 222.222.222.3/255.255.255.255 53:53 -p 17 -j ACCEPT
-A bad-dmz -s 0.0.0.0/0.0.0.0 -d 222.222.222.3/255.255.255.255 53:53 -p 6 -j ACCEPT
-A bad-dmz -s 0.0.0.0/0.0.0.0 -d 222.222.222.3/255.255.255.255 80:80 -p 6 -j ACCEPT
-A bad-dmz -s 0.0.0.0/0.0.0.0 -d 222.222.222.3/255.255.255.255 443:443 -p 6 -j ACCEPT
-A bad-dmz -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -p 1 -j icmp-acc
-A good-bad -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 80:80 -p 6 -j MASQ
-A good-bad -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 443:443 -p 6 -j MASQ
-A good-bad -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 9007:9007 -p 6 -j MASQ
-A good-bad -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 22:22 -p 6 -j MASQ
-A good-bad -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 33434:33500 -p 17 -j MASQ
-A good-bad -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 21:21 -p 6 -j MASQ
-A good-bad -s 0.0.0.0/0.0.0.0 8:8 -d 0.0.0.0/0.0.0.0 -p 1 -j MASQ
-A good-bad -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j REJECT -l
-A dmz-good -s 222.222.222.3/255.255.255.255 25:25 -d 0.0.0.0/0.0.0.0 -p 6 -j ACCEPT ! -y
-A dmz-good -s 222.222.222.3/255.255.255.255 110:110 -d 0.0.0.0/0.0.0.0 -p 6 -j ACCEPT ! -y
-A dmz-good -s 222.222.222.3/255.255.255.255 53:53 -d 0.0.0.0/0.0.0.0 -p 17 -j ACCEPT
-A dmz-good -s 222.222.222.3/255.255.255.255 53:53 -d 0.0.0.0/0.0.0.0 -p 6 -j ACCEPT ! -y
-A dmz-good -s 222.222.222.3/255.255.255.255 80:80 -d 0.0.0.0/0.0.0.0 -p 6 -j ACCEPT ! -y
-A dmz-good -s 222.222.222.3/255.255.255.255 443:443 -d 0.0.0.0/0.0.0.0 -p 6 -j ACCEPT ! -y
-A dmz-good -s 222.222.222.3/255.255.255.255 873:873 -d 0.0.0.0/0.0.0.0 -p 6 -j ACCEPT ! -y
-A dmz-good -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -p 1 -j icmp-acc
-A dmz-bad -s 222.222.222.3/255.255.255.255 25:25 -d 0.0.0.0/0.0.0.0 -p 6 -j ACCEPT
-A dmz-bad -s 222.222.222.3/255.255.255.255 53:53 -d 0.0.0.0/0.0.0.0 -p 17 -j ACCEPT
-A dmz-bad -s 222.222.222.3/255.255.255.255 53:53 -d 0.0.0.0/0.0.0.0 -p 6 -j ACCEPT
-A dmz-bad -s 222.222.222.3/255.255.255.255 80:80 -d 0.0.0.0/0.0.0.0 -p 6 -j ACCEPT ! -y
-A dmz-bad -s 222.222.222.3/255.255.255.255 443:443 -d 0.0.0.0/0.0.0.0 -p 6 -j ACCEPT ! -y
-A dmz-bad -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -p 1 -j icmp-acc
-A icmp-acc -s 0.0.0.0/0.0.0.0 3:3 -d 0.0.0.0/0.0.0.0 -p 1 -j ACCEPT
-A icmp-acc -s 0.0.0.0/0.0.0.0 4:4 -d 0.0.0.0/0.0.0.0 -p 1 -j ACCEPT
-A icmp-acc -s 0.0.0.0/0.0.0.0 11:11 -d 0.0.0.0/0.0.0.0 -p 1 -j ACCEPT
-A icmp-acc -s 0.0.0.0/0.0.0.0 12:12 -d 0.0.0.0/0.0.0.0 -p 1 -j ACCEPT
-A bad-if -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 61000:65095 -p 6 -j ACCEPT
-A bad-if -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 61000:65095 -p 17 -j ACCEPT
-A bad-if -s 0.0.0.0/0.0.0.0 0:0 -d 0.0.0.0/0.0.0.0 -p 1 -j ACCEPT
-A bad-if -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j icmp-acc
-A dmz-if -s 222.222.222.3/255.255.255.255 53:53 -d 0.0.0.0/0.0.0.0 -p 6 -j ACCEPT ! -y
-A dmz-if -s 222.222.222.3/255.255.255.255 53:53 -d 0.0.0.0/0.0.0.0 -p 17 -j ACCEPT
-A dmz-if -s 0.0.0.0/0.0.0.0 8:8 -d 0.0.0.0/0.0.0.0 -p 1 -j ACCEPT
-A dmz-if -s 0.0.0.0/0.0.0.0 0:0 -d 0.0.0.0/0.0.0.0 -p 1 -j ACCEPT
-A dmz-if -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j icmp-acc
-A good-if -s 0.0.0.0/0.0.0.0 8:8 -d 0.0.0.0/0.0.0.0 -p 1 -j ACCEPT
-A good-if -s 0.0.0.0/0.0.0.0 0:0 -d 0.0.0.0/0.0.0.0 -p 1 -j ACCEPT
-A good-if -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j icmp-acc

#-A forward -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j DENY
#-A forward -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j DENY -l
#-A good-dmz -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j DENY -l
#-A dmz-bad -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j DENY -l
#-A bad-dmz -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j DENY
#-A dmz-good -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j DENY -l
#-A dmz-bad -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j DENY -l
#-A bad-good -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j REJECT
-A bad-if -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -i ! eth2 -j DENY -l
-A bad-if -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j DENY
-A dmz-if -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -i ! eth1 -j DENY
-A dmz-if -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j DENY -l
-A good-if -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -i ! eth0 -j DENY
-A good-if -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j DENY -l

ちなみに#を外すと全てのサービスが止まってしまいました・・・
なにが悪いのかわかりません。
必要はサービスは入れていると思うのですが・・・・
宜しくお願い致します。

[ メッセージ編集済み 編集者: かず 編集日時 2002-06-06 10:17 ]
ふじい
大ベテラン
会議室デビュー日: 2002/05/07
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2002-06-06 19:02
こんにちは、藤井と申します。

この場所でこれから、ipchainsのデバッグが行われると思うと、背筋が寒くなります。

デバッグのやり方をお教えしますので、それで試してみませんか?

・最小限のところ以外はコメントアウトし、少しずつコメントを外していって、どこで止まっているかを特定する。

これが基本です。今回はそこまではされているようです。もう少し進めてコメントアウトしたやつを一つずつ外していき、具体的にどの行でパケットが止められているか特定してください。

これが分かりやすいのは、もしWebサーバーが動いていたら、

/sbin/ipchains -L -v > Webサーバーが見れるディレクトリ/status.txt

などとし、Webブラウザから見てください。文字の大きさをかなり小さくすると見やすくてグッドです。

とりあえずこれでどうにかなるでしょう。頑張ってください。

さて、具体的にどこが悪いのかわかったんだが、なぜか通らない、というようなことがあるかもしれません。

そういうときはパケットをそのまま除いてみましょう。
たとえば、インターフェースeth0で、80番のパケットがどうしても通らないときは

# tcpdump -i eth0 | grep http

で見ることができます。grepのあとの文字列は/etc/servicesで確認できます。

入り口と出口のインターフェースでそれぞれやると、大体理由がわかります。


話は変わりますが、パケットフィルタリングに関する書籍などをもう少し読まれた方がいいと思います。

たとえば、最初の方で
:input ACCEPT
:forward ACCEPT
utput ACCEPT
とやっているので、フィルタリングが設定されているわずかの間に進入されるかもしれないし、途中で何か失敗したら、フィルタリングが実行されないまま上の設定だけ有効になる危険性もあるでしょう。

なので
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -A INPUT -i ! lo -j DROP
iptables -A FORWARD -j DROP
iptables -A OUTPUT -o ! lo -j DROP

として、フィルタリングの設定が終わったあとで

iptables -D INPUT -i ! lo -j DROP
iptables -D FORWARD -j DROP
iptables -D OUTPUT -o ! lo -j DROP
で有効にするとか(iptablesの例ですみません、もうipchainsは現役ではないです)。

ただパケットをフィルタリングするのと、侵入者を入れないようにするテクニックは違います。当然Linux本体の起動スクリプトなども関係してきます。

http://www.linux.or.jp/JF/
こちらの関連書類中にもかなりいろんなテクニックが紹介されてます。ぜひ熟読することをお勧めします。
かず
会議室デビュー日: 2002/06/05
投稿数: 3
投稿日時: 2002-06-07 16:28
返信ありがとうございます。

一応、↓ここを見てやったのですが・・・・
http://nucba.www.linux.or.jp/JF/JFdocs/IPCAINS-HOWTO-7.html

デバッグしてみたいと思います。

また、疑問点が有りましたら、宜しくお願い致します!
ふじい
大ベテラン
会議室デビュー日: 2002/05/07
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2002-06-10 13:32
こんにちは、藤井です。

たとえばここに、僕が言ってたのが載ってましたね。
http://nucba.www.linux.or.jp/JF/JFdocs/IPCHAINS-HOWTO-5.html#ss5.6

具体的にどの行でパケットが止まるのか、確定できましたか?

また、僕も昔はipchainsでやっていたのですが、DMZをつくるってことは、リバースIPマスカレードをやるはずですよね。

ipmasqadm使わないと、外側からDMZにパケットを誘導できないと思うのですが、いかがでしょうか?

たとえば80番をDMZ側に誘導するのは
ipmasqadm portfw -a -P tcp -L 222.222.222.1 80 -R 222.222.222.2 80

とかするはずですが。

とここまで書いて、もう一度よく見直してみたのですが、これ無理です。(^-^;

DMZにプロバイダーから割り当てられた固定IPを割り当てるのなら、このやり方では難しいです。

こうしてみたらいかがですか?

DMZには192.168.2.0/24の様な別のサブネットを割り当てて、WAN側のインターフェースに割り当てられているIPをすべて割り当てます。一つのNICに複数のIPを割り当てるわけです。そして、ipmasqadmでIP毎に適切なサーバーに誘導する。

このほうがたぶん分かりやすいですよ。また内部のネットワークと外側に見せるネットワーク構造も別にできます。
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2002-06-10 14:28
 ん?かず さんが
http://nucba.www.linux.or.jp/JF/JFdocs/IPCHAINS-HOWTO-7.html
を見て設定したのであれば、ppp0、DMZともにグローバルのアドレスであるはずなので、ipmasqadm は必要ないのではないでしょうか。

 また、ipmasqadm は、何故かあらゆるサイトでデッドリンクになっていますのでなかなか手に入りません。。手に入るサイトがございましたら私にもお教えいただければ光栄です。

 かずさん。NIC3枚マシンのルーティングテーブルはどうなってますか?
#route
をして出してください。
ふじい
大ベテラン
会議室デビュー日: 2002/05/07
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2002-06-10 18:23
こんにちは、藤井です。

たぶんですね、
-A forward -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -i eth1 -j bad-dmz
-A forward -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -i eth0 -j bad-good

いったいどれがeth1なのかよくわからないんですが、この振り分け方が適切でないので、

#-A forward -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j DENY
#-A forward -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j DENY -l

ここで止まると思うんですよ。

ここがよくわからないんだったら、いっそ別のサブネットに分けた方が分かりやすいと思ったんですが。

そうでもないですかね?

ぼくなら、

外側のインターフェースをeth2、DMZをeth1、内側をeth0、
内側からDMZを in-dmz
内側から外側を in-out
DMZから外側を dmz-out
DMZから内側を dmz-in
外側からDMZを out-dmz
外側から内側を out-in
とすると、

ipchains -A forward -s 192.168.1.0/255.255.255.0 -i eth1 -j in-dmz
ipchains -A forward -s 192.168.1.0/255.255.255.0 -i eth2 -j in-out
ipchains -A forward -s 222.222.222.2 -i eth2 -j dmz-out
ipchains -A forward -s 222.222.222.2 -i eth0 -j dmz-in
ipchains -A forward -i eth1 -j out-dmz
ipchains -A forward -i eth0 -j out-in

って感じにしますね。

いずれにせよ、実際のマシンに触らないとデバッグなんて不可能だと思いますが。(^-^;
ふじい
大ベテラン
会議室デビュー日: 2002/05/07
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2002-06-10 19:21
藤井です。ちと補足で

引用:

-A forward -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -i eth1 -j bad-dmz
-A forward -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -i eth0 -j bad-good

いったいどれがeth1なのかよくわからないんですが、この振り分け方が適切でないので、



その前の、

-A forward -s 222.222.222.0/255.255.255.248 -d 0.0.0.0/0.0.0.0 -i eth2 -j dmz-bad
-A forward -s 222.222.222.0/255.255.255.248 -d 0.0.0.0/0.0.0.0 -i eth0 -j dmz-good

ここで、外から入ってくるパケットとDMZゾーンのパケットがごちゃごちゃになります。
DMZと外側のインターフェースが同じサブネットにありますから。

で次には行かないという感じじゃないですか?
ふじい
大ベテラン
会議室デビュー日: 2002/05/07
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2002-06-10 19:24
こんにちは、藤井と申します。

引用:

okumuraさんの書き込み (2002-06-10 14:28) より:
 ん?かず さんが
http://nucba.www.linux.or.jp/JF/JFdocs/IPCHAINS-HOWTO-7.html
を見て設定したのであれば、ppp0、DMZともにグローバルのアドレスであるはずなので、ipmasqadm は必要ないのではないでしょうか。



おっしゃる通りです。僕の勘違いでした。


引用:

 また、ipmasqadm は、何故かあらゆるサイトでデッドリンクになっていますのでなかなか手に入りません。。手に入るサイトがございましたら私にもお教えいただければ光栄です。



どうやら元サイトが無くなったらしいです。ミラーとSRPMですが、
http://www.e-infomax.com/ipmasq/juanjox/
http://www.megaloman.com/~hany/_data/SRPM/ipmasqadm-0.4.1-3.src.rpm


引用:

 かずさん。NIC3枚マシンのルーティングテーブルはどうなってますか?
#route
をして出してください。



NICがどれがどれだかわからないのですが、どうやら
外側がeth2
DMZ側がeth1
内側がeth0
みたいですね。

ルーティングの問題かもしれませんが。

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