- - PR -
ファイヤーウォールの設定
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-10-18 15:41
はじめまして、こんな構成のネットワーク
構築しています、誰か実現された方はいら っしゃいますか? ┌───────┐ │インターネット│ └───┬───┘ ┌───┴───┐ │ADSLモデム│ └───┬───┘ ┌───┴───┐ │ダイアルアップ│ │ ルーター │ └───┬───┘ ┌───┴───┐ │ FW │ └┬──┬──┬┘ │ │ │ ┌┴┐┌┴┐┌┴┐ │D││P││P│ │B││C││C│ │サ││1││2│ │ー││ ││ │ │バ││ ││ │ └─┘└─┘└─┘ FW OS:Redhat9 ネットワーク:LANカード4枚 フィルタリング:iptables DBサーバ OS:Redhat9 DB:PostgreSQL(7.3.2-3) やりたいこと 1.FWで外部からのアクセスの制限。 2.FWで外部攻撃からの防御。 3.外部から直接DBサーバをアクセス。 4.PC1,PC2の外部へのアクセス許可。 現在出来ていること 1.FWで外部からのアクセスの制限。 2.FWで外部攻撃からの防御。 問題があるが何とか動作している(?)事 4.PC1,PC2の外部へのアクセス許可。 問題:外部FTPサーバへのログインまでは 成功するがlsコマンドなどでレスポ ンスが帰ってこない。 実現出来ていないこと 3.外部から直接DBサーバをアクセス。 何方か3,4の問題を解決された方は 教えてください。 iptablesの定義は次のスクリプトで行いました。 #外部向けアダプタ EXTDEV=eth0 EXTIP="192.168.0.240" EXTBASE="192.168.0.0" EXTBCAST="192.168.0.255" EXTGATE="192.168.0.254" #DB向けアダプタ DBDEV=eth1 DBIP="192.168.1.240" DBBASE="192.168.1.0" DBBCAST="192.168.1.255" DBNET="192.168.1.0/24" #PC1向けアダプタ PRODEV=eth2 PROIP="192.168.2.240" PROBASE="192.168.2.0" PROBCAST="192.168.2.255" PRONET="192.168.2.0/24" #PC2向けアダプタ SYAGDEV=eth3 SYAGIP="192.168.3.240" SYAGBASE="192.168.3.0" SYAGBCAST="192.168.3.255" SYAGNET="192.168.3.0/24" #固定定数 LOGOPT="--log-level=3 -m limit --limit 3/minute --limit-burst 3" SYNOPT="-m limit --limit 5/second --limit-burst 10" #ファイヤーウォールの設定を全て破棄 iptables -F #ルーティングテーブルを破棄 iptables -t nat -F POSTROUTING iptables -t nat -F PREROUTING #外部からの接続ホストを定義 iptables -t nat -A PREROUTING -i $EXTDEV -p tcp --dport 5432 -j DNAT --to 192.168.1.33 iptables -t nat -A PREROUTING -i $EXTDEV -p udp --dport 5432 -j DNAT --to 192.168.1.33 #内部からの接続はマスカレードで全て許可 iptables -t nat -A POSTROUTING -o $EXTDEV -s $DBNET -j MASQUERADE iptables -t nat -A POSTROUTING -o $EXTDEV -s $PRONET -j MASQUERADE iptables -t nat -A POSTROUTING -o $EXTDEV -s $SYAGNET -j MASQUERADE #INPUTテーブル定義 iptables -F INPUT iptables -P INPUT ACCEPT #外部アクセス許可ポートの定義(優先順位高) #PostgeSQL iptables -A INPUT -i $EXTDEV -p tcp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 5432 -j ACCEPT iptables -A INPUT -i $EXTDEV -p udp -s 0.0.0.0/0 -d 0.0.0.0/0 --dport 5432 -j ACCEPT iptables -A INPUT -i $EXTDEV -p tcp --sport 5432 -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -i $EXTDEV -p udp --sport 5432 -m state --state ESTABLISHED -j ACCEPT #ループバックは許可 iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #CodeRedと思わしき攻撃を防御する。(外部モジュールが必要なので現在断念) #iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --string "cmd.exe" #iptables -I INPUT -j LOG -p tcp -s 0.0.0.0/0 -m string --string "cmd.exe" -m limit --limit 1/hour #外部デバイス向けに届いたパケットの規制 iptables -A INPUT -p tcp --dport ident -j REJECT --reject-with tcp-reset -i $EXTDEV iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -i $EXTDEV iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT -i $EXTDEV #内部デバイス向けの設定 iptables -A INPUT -j ACCEPT -i $DBDEV iptables -A INPUT -j ACCEPT -i $PRODEV iptables -A INPUT -j ACCEPT -i $SYAGDEV #Internetからの送信元IPアドレスがプライベートアドレスのパケットを破棄 iptables -A INPUT -i $EXTDEV -s 10.0.0.0/8 -j DROP iptables -A INPUT -i $EXTDEV -s 172.16.0.0/12 -j DROP #iptables -A INPUT -i $EXTDEV -s 192.168.0.0/16 -j DROP #Internetからの宛先IPアドレスがプライベートアドレスのパケットを破棄 iptables -A INPUT -i $EXTDEV -d 10.0.0.0/8 -j DROP iptables -A INPUT -i $EXTDEV -d 172.16.0.0/12 -j DROP #iptables -A INPUT -i $EXTDEV -d 192.168.0.0/16 -j DROP #ブロードキャストパケットを破棄 iptables -A INPUT -i $EXTDEV -d 255.255.255.255 -j DROP iptables -A INPUT -i $EXTDEV -d 224.0.0.1 -j DROP #接続戻りパケットを許可する iptables -A INPUT -i $EXTDEV -m state --state ESTABLISHED -j ACCEPT #不正データはログを記録 iptables -A INPUT -j LOG --log-prefix "IPT INPUT: " $LOGOPT #不明なデバイスからのパケットは破棄する。 iptables -P INPUT DROP #FORWARD iptables -F FORWARD iptables -P FORWARD DROP iptables -t filter -A FORWARD -i eth0 -o eth1 -p udp --dport 5432 -j ACCEPT iptables -t filter -A FORWARD -i eth0 -p tcp --dport 5432 -j ACCEPT #内部デバイスと外部デバイスは双方向通信可能にする。 #外部=>内部 iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT -i $EXTDEV -o $DBDEV iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT -i $EXTDEV -o $PRODEV iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT -i $EXTDEV -o $SYAGDEV #内部=>外部 iptables -A FORWARD -m state --state NEW,ESTABLISHED -j ACCEPT -i $DBDEV -o $EXTDEV iptables -A FORWARD -m state --state NEW,ESTABLISHED -j ACCEPT -i $PRODEV -o $EXTDEV iptables -A FORWARD -m state --state NEW,ESTABLISHED -j ACCEPT -i $SYAGDEV -o $EXTDEV #不正データはログを記録 iptables -A FORWARD -j LOG --log-prefix "IPT FORWARD: " $LOGOPT iptables -A FORWARD -j DROP #OUTPUT iptables -F OUTPUT iptables -P OUTPUT ACCEPT #ループバックは許可 iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #Windows特有ポートの通信は外部に送信しない。 iptables -A OUTPUT -p tcp --dport 135:139 -j DROP -o $EXTDEV iptables -A OUTPUT -p udp --dport 135:139 -j DROP -o $EXTDEV iptables -A OUTPUT -p tcp --dport 445 -j DROP -o $EXTDEV iptables -A OUTPUT -p udp --dport 445 -j DROP -o $EXTDEV #フィルタリング結果をファイルに格納 chmod 600 /etc/sysconfig/iptables /sbin/service iptables save chmod 400 /etc/sysconfig/iptables iptables -L -v service iptables status |
|
投稿日時: 2003-10-18 21:34
PostgeSQLのことは知りませんが...
FTPは、何らかの手を打たなくては通りません。 ・クライアントをパッシブモードで使用する(サーバ側が対応している 必要がありますが、ほとんどは大丈夫でしょう) あるいは、 ・外部からTCP20番への接続要求を受け入れるようにiptablesを設定する この場合はNAPTが問題になるので、モジュールを追加する必要があります。 きれいな解決としては、 ・モジュールを追加してFTPサーバ側からの接続開始がRELATEDとして 認識されるようにする この場合も、NAPT越えが問題になるので、そちらにもモジュールが必要かと。 それから、ICMPをほとんど通してないですが、もっと通したほうが無難です。 外部からの接続開始を*非常に*厳しく制限しているわりに、内部からの 接続開始については緩いので、アンバランスな印象を受けます。 |
|
投稿日時: 2003-10-19 04:50
原因と解決方法が以下のサイトに記載されているようです。
#Connection tracking http://www.sns.ias.edu/~jns/security/iptables/iptables_conntrack.html #iptablesの簡単な使い方 http://www3.big.or.jp/~sian/linux/tips/iptables.html ご参考まで、、 |
|
投稿日時: 2003-10-21 01:41
ぽんすさま、Niraさま早速のご返答ありがとうございます。
明日テストしてみます、結果はココに書きます。 |
|
投稿日時: 2003-10-21 09:43
ipnuts4使うと、iptablesでconnection tracking サポートとしてるので簡単にできるかもしれません。
http://www.ipnuts.net |
|
投稿日時: 2003-10-21 19:02
FTPはパッシブモードで動作しました。
(W2kにFFFtpをインストールしてインターネット経由でテストしました。) (*FTPサーバはIIS) しかし、DOSプロンプトやRedhat LinuxのコマンドでFTPすると動作しないです。 *ログインとGet,Putは成功するが、lsコマンドが失敗する。 ちなみに ・・・・ iptables -P INPUT ACCEPT #FTP iptables -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT #Active ftp iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT #Passive ftp iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT ・・・ ・・・ iptables -P OUTPUT ACCEPT #FTP iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT #Active ftp iptables -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT #Passive ftp iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT ・・・ を追加しました。 依然PostgreSQLはルータを超えてくれないので奮闘中です。 ルータが直接Ackを返してDBサーバまでルーティングしてない! iptables -t filter -A FORWARD -i eth0 -o 192.168.1.33 -p tcp --dport 5432 -j ACCEPT とかじゃまずいのかな? ぽんすさまから御指摘頂いたアンバランスな件はPC1は実はプロキシサーバで配下に接続する PCはWebとFTP、メールしか使用しないつもりです。 |
|
投稿日時: 2003-10-21 19:05
annonさまのipnuts4をインストールして定義分を
解析するのも手ですね、空きマシンが出来たら 挑戦してみます。 *もうこの形態崩せなくなってしまったので、、、 できたら結果はここにUPします。 |
|
投稿日時: 2003-10-22 14:03
ポートフォワーディングですよね?
たぶん、以下の方法で出来ると思います。 REJECT(DROP)したパケットのログと、そのときのtcpdumpしたパケットの様子を見ると原因の特定がやりやすいかもしれません(^^) $ForwardInAddr 送信元アドレス $ForwardOutAddr 送信先アドレス $PORT 接続ポート /sbin/iptables -A PREROUTING -t nat -p tcp -d $ForwardInAddr --dport $PORT -j DNAT --to $ForwardOutAddr:$PORT /sbin/iptables -A PREROUTING -t nat -p udp -d $ForwardInAddr --dport $PORT -j DNAT --to $ForwardOutAddr:$PORT /sbin/iptables -A FORWARD -p tcp -d $ForwardOutAddr --dport $PORT -o eth1 -j ACCEPT /sbin/iptables -A FORWARD -p udp -d $ForwardOutAddr --dport $PORT -o eth1 -j ACCEPT |
1