[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:34803] Re: rp_filter の扱いが分かりません



渡辺です。
むつみさん、情報ありがとうございます。

ishikawa> >> [環境]
ishikawa> >> --- ルータ --- ハブ --- eth0 - そのホスト

インターネット --- ルータ --- ハブ --- eth0 - そのホスト

ishikawa> >> Woody にてカーネル 2.4.19 をコンパイルしてインストールしたと
ishikawa> >> ころ、/proc/sys/net/ipv4/conf/eth0/rp_filter に 1 がセットさ
ishikawa> >> れてしまうようになってしまいました。
ishikawa> >>
ishikawa> >> でも、そのホストをインターネットへ公開したいので、インターネ
ishikawa> >> ットからアクセスできるように 0 を設定する必要があるという認
ishikawa> >> 識でいます。
ishikawa> 
ishikawa>  その認識はなにか勘違いしてるように思いますが、 rp_filter は
ishikawa> IP Spoof protection のためのものなので、1 つまり 有効にして
ishikawa> おいたほうがいいと思います。
ishikawa> 
ishikawa>  0 にする必要性は、なにかすごく特殊な要求があるなら 別ですが
ishikawa> 通常ありません。

ishikawa> >> ところで、rp_filter は 0 にしても、iptables を使ってセキュリ
ishikawa> >> ティを強化すれば問題はないですよね?
ishikawa> 
ishikawa>  ダメです。
ishikawa>  そういうものではありません。
ishikawa> 
ishikawa>  というか そういうフィルタをかいくぐるために ソース IP を
ishikawa> 偽装してきたものを排除する仕組みですので、iptables では
ishikawa> 防ぎきれない類いのパケットをはたきおとすためのものだと
ishikawa> 認識した方がいいでしょう。

なるほど。何故私がそのような勘違いをしたかというと、mozilla 
ブラウザを用いて私が ISP から貰っているグローバル IP アドレ
スを入力したときに、rp_filter に 1 がセットされている状態だ
と "The operation timed out when attempting to contact 203.141.147.199" 
と表示されるのに、 rp_filter に 0 をセットしてから同じことを
やると簡単にウェブページを表示できるからです。画像が表示され
る時間から見て、LAN 経由で直接はアクセスしていないようで、明
らかにゲートウェイ(ルータ)から一旦インターネットかどこかへ出
た後にそのホストへアクセスしているようです。

でも、どういうわけか、メールは ISP が提供するメールサーバ経
由(インターネット経由)でそのホストに送ると(rp_filter が 1 でも)
届く場合があります。圧倒的に届かないことの方が多いですが。

一体、何が原因なのでしょうか?ルータの設定は(以前にそのホスト
が Potato のときに、そのホストと一緒に使っていたときと)全く同
じです。つまり、80(www), 25(smtp), 53(domain)へのアクセスを、
そのホストの同ポートへのアクセスに変換するという動作をしてい
ます(IP MASQ はポートを『変更』するので、これは NAT の一種で
すね)。そのときの Potato は徹底本のカーネル 2.2.17 を使ってお
りました。

ただ、近々(おそらく今月中には)現在のフレッツ ISDN からフレッツ 
ADSL に移行するので、rp-pppoe を使って(上記ルータを介さないで)
直接そのホストをインターネットへ繋ぐことになるため、そのときは
また違った結果が生まれるかもしれません。(そのホストに IP マ
スカレードもやらせる予定です)

ところで、http://www.kawabata.com/nslookup.asp というのを使う
ためには、どうも udp プロトコルで開ける必要があるようです。

そうすると、実行すべき iptables は、
# iptables -n nat -P PREROUTING DROP
# iptables -A PREROUTING -p tcp --dport www -j ACCEPT
# iptables -A PREROUTING -p tcp --dport smtp -j ACCEPT
# iptables -A PREROUTING -p udp --dport domain -j ACCEPT
で良いのでしょうか?
それとも、www ポートなども udp プロトコルで開けておく必要が
ありますか?
# iptables -A PREROUTING -p udp --dport www -j ACCEPT
# iptables -A PREROUTING -p udp --dport smtp -j ACCEPT
逆に、domain ポートを tcp プロトコルで開けておく必要もあるの
でしょうか?
# iptables -A PREROUTING -p tcp --dport domain -j ACCEPT

ところで、/etc/services にある nameserver(42) なるポートの
役割は一体何なんでしょうか? bind には関係なさそうなのです
けれど。