• 締切済み

iptablesによるパケットフィルタ

こんにちは、皆さん iptablesに関して、2つの種類の質問があります。 1. SYNパケット以外の許可の設定 iptablesで、HTTPやFTPのサービスポートを閉じた上で、 以下のコマンドを実行すると、サービスポートが空いてなくても パケットが通ってしまいます。 iptables -A INPUT -p tcp ! --syn -j ACCEPT 上記の意味はSYNパケット以外だけ許可するとなってますので、 最初のセッションを張るパケットは通過できないので、 結果的にはサービスは提供されないのではないでしょうか? でもなぜか通ってます。 また、上記をDROPに指定し直すと、パケットは通過しません。 その後、以下のように個別にサービスポートを開けると、 パケットは通過できるようになるので、当然サービスが提供されます。 iptables -A INPUT -p tcp --sport 1024:65535 --dport 80 -j ACCEPT iptables -A INPUT -p tcp --sport 1024:65535 --dport 20 -j ACCEPT iptables -A INPUT -p tcp --sport 1024:65535 --dport 21 -j ACCEPT 2. INPUTとFORWARDについて INPUTとFORWARDの違いは、FORWARDはサーバをルータとして使っている時だけ 必要なチェインで、INPUTはパケットを受信する時に必ず通るチェインという 認識でよろしいでしょうか?

みんなの回答

回答No.1

あまり iptables は触らないのですが、1. に関してはとりあえずルールをシンプルにして試してみてはいかがでしょうか。その上で iptables -L -n の出力結果を示すと、識者の良いアドバイスがもらえると思います。 # 何か別のルールが影響しているのではないかという気がするので。 なお > iptables -A INPUT -p tcp --sport 1024:65535 --dport 20 -j ACCEPT は FTP-DATA でしょうか? FTP サーバを運用しているのであれば、向きが逆(INPUT → OUTPUT)ではないかと思います。また --syn がありませんが、それは意図したものですか? 2. に関してはご認識のとおりだと思います。

noname#17299
質問者

お礼

hetarepyonさん、こんばんわ。 すみません。以下が原因でした。 iptables -A INPUT -p tcp --syn -m limit --limit 100/second -j ACCEPT 一番前に記述しても一番最後に記述しても、この設定が生きてるとザルです。 これを有効にしつつ、他の設定は他の設定で有効にしたいんですけど。。。 どうすればいいでしょうか?

noname#17299
質問者

補足

セキュリティ的にどうかはおいといて、晒してみましょう。 どこのサーバとは言えませんのであしからず。 言ったところでどうなるものでもありませんが。 iptables -F iptables -t nat -F iptables -P INPUT DROP iptables -P FORWARD DROP iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -p tcp -j ACCEPT iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -p udp -j ACCEPT iptables -A INPUT -s xxx.xxx.xxx.xxx/xx -p tcp --syn --dport 113 -j REJECT iptables -A FORWARD -s xxx.xxx.xxx.xxx/xx -p tcp --syn --dport 113 -j REJECT iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -p icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -s xxx.xxx.xxx.xxx/xx -p icmp --icmp-type 8 -j ACCEPT iptables -A FORWARD -s xxx.xxx.xxx.xxx/xx -p icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -p icmp --icmp-type 8 -j DROP -i xxx0 iptables -A FORWARD -p icmp --icmp-type 8 -j DROP -i xxx0 iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT iptables -A FORWARD -p icmp --icmp-type 0 -j ACCEPT iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT iptables -A FORWARD -p icmp --icmp-type 3 -j ACCEPT iptables -A INPUT -p udp --sport 1024:65535 --dport 53 -j ACCEPT iptables -A INPUT -p udp --sport 53 --dport 1024:65535 -j ACCEPT iptables -A FORWARD -p udp --sport 1024:65535 --dport 53 -j ACCEPT iptables -A FORWARD -p udp --sport 53 --dport 1024:65535 -j ACCEPT iptables -A INPUT -p tcp --sport 1024:65535 --dport 53 -j ACCEPT iptables -A INPUT -p tcp --sport 53 --dport 1024:65535 -j ACCEPT iptables -A FORWARD -p tcp --sport 1024:65535 --dport 53 -j ACCEPT iptables -A FORWARD -p tcp --sport 53 --dport 1024:65535 -j ACCEPT iptables -A FORWARD -s xxx.xxx.xxx.xxx/xx -p tcp --sport 1024:65535 --dport 80 -j ACCEPT iptables -A FORWARD -s xxx.xxx.xxx.xxx/xx -p tcp --sport 1024:65535 --dport 80 -j ACCEPT iptables -A FORWARD -s xxx.xxx.xxx.xxx/xx -p tcp --sport 1024:65535 --dport 443 -j ACCEPT iptables -A FORWARD -s xxx.xxx.xxx.xxx/xx -p tcp --sport 1024:65535 --dport 443 -j ACCEPT iptables -A INPUT -p tcp --sport 1024:65535 --dport 80 -j ACCEPT iptables -A INPUT -p tcp --sport 1024:65535 --dport 20 -j ACCEPT iptables -A INPUT -p tcp --sport 1024:65535 --dport 21 -j ACCEPT iptables -A FORWARD -p tcp --sport 1024:65535 --dport 20 -j ACCEPT iptables -A FORWARD -p tcp --sport 1024:65535 --dport 21 -j ACCEPT iptables -A INPUT -d xxx.xxx.xxx.xxx/xx -p tcp --dport 22 -j ACCEPT iptables -A FORWARD -d xxx.xxx.xxx.xxx/xx -p tcp --dport 22 -j ACCEPT iptables -A INPUT -d 255.255.255.255 -p udp --sport 68 --dport 67 -j ACCEPT iptables -A INPUT -p udp --dport 135 -j DROP iptables -A FORWARD -p udp --dport 135 -j DROP iptables -A INPUT -p udp --dport 137:138 -j DROP iptables -A INPUT -s xxx.xxx.xxx.xxx/xx -d xxx.xxx.xxx.xxx/xx -p udp -j ACCEPT iptables -A FORWARD -s xxx.xxx.xxx.xxx/xx -d xxx.xxx.xxx.xxx/xx -p udp -j ACCEPT iptables -A INPUT -j LOG --log-prefix "INPUT" iptables -A FORWARD -j LOG --log-prefix "FORWARD" iptables -A INPUT -p tcp --syn -m limit --limit 100/second -j ACCEPT iptables -A INPUT -p tcp --syn -j DROP iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 10/minute -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-request -j DROP ざっとこんな感じでしょうか。 他にもいろいろありますけど、テストなのでコメントにしてます。 どこか変なところ、意味のないところや足りないものがあれば指摘してください。 提供するサービスに関わらず、これはやっとかないととかあればお願いします。 よろしくお願いします。

関連するQ&A