私は誤ってオープンリゾルバのDNSサーバを設定してしまい、すぐにロシアのどこかから/ロシアに向けて発信されたDDoS攻撃の束に使われてしまいました。そのため、信頼できるIP以外のすべての人のために、両方のDNSサーバーの53番ポートを完全にブロックしました。それはもう接続できないという意味ではうまくいっていますが、私にとって奇妙に思えるのは、eth1
(これは公共のインターネットに接続されているサーバーのインターフェース) で tcpdump を実行すると、攻撃者からポート 53 への着信パケットがたくさん表示されるということです
iptables がパケットを落としても tcpdump がこれらのパケットを表示するのは正常なのでしょうか?それともiptablesの設定が間違っていたのでしょうか?
一方で、私のサーバからの送信パケットは見ていませんが、以前は見ていました。ただ、カーネルが完全にパケットを落とさないのには驚きました。それとも tcpdump
は iptables に届く前からパケットを見るようにカーネルにフックされているのでしょうか?
60 Petr 2015-06-08
これはいい質問ですね
実際のところ、tcpdumpは、INに向かう途中の配線(とNIC)の後に見つかった最初のソフトウェアであり、OUTに向かう途中の最後のソフトウェアです
Wire -> NIC -> tcpdump -> netfilter/iptables
iptables -> tcpdump -> NIC -> Wire
このように、あなたのインターフェイスに到達するすべてのパケットと、 インターフェイスから出るすべてのパケットを見ています。tcpdump で見たように、ポート 53 へのパケットは応答を得られないので、iptables ルールが正しく設定されていることが確認できました
EDIT
tcpdumpはパケットソケットを作成するライブラリであるlibpcapをベースにしています。通常のパケットがネットワークスタックで受信されると、カーネルはまず、新しく到着したパケットに興味のあるパケットソケットがあるかどうかをチェックし、ある場合はそのパケットソケットにパケットを転送します。ETH_P_ALL オプションが選択された場合、すべてのプロトコルはパケットソケットを経由します
libpcap はそのようなパケットソケットをオプションを有効にして実装し、それ自身の使用のためにコピーを保持し、パケットを複製してネットワークスタックに戻し、そこで通常の方法でカーネルによって処理されます。同じことを、逆の順序 (すなわち、最初に netfilter を渡してから最後にパケットソケットを通過させる) で、出て行くときにも同じことが行われます
ハッキングされやすい?もちろんです確かに libpcap を使ってルートキットに向けられた通信をファイアウォールが手を出す前に傍受するという概念実証済みのルートキットがあります。しかし、単純な Google クエリでも libpcap からのトラフィックを隠している作業コードを発掘するという事実とは比べ物にならない。それでも、ほとんどの専門家は、ネットワークパケットフィルタのデバッグにおいて、利点は欠点をはるかに上回ると考えています
81 MariusMatutiae 2015-06-08