現在の設定には複数のIPv4アドレスを持つサーバーがあります。 IPv6部分は症状が同じなので今は無視します。
ファイアウォールルールでHTTPトラフィックを一致させたいのですが。向かい特定のIPおよびその他のサービス(-j ACCEPT
私のテーブルINPUT
のチェーンを通過できるようにするfilter
)
これは効果的にチェーンの2番目の規則は次のとおりですINPUT
。
-A INPUT -m set --match-set public_services dst -j ACCEPT
-A INPUT -j NFLOG --nflog-prefix "[IPv4:inp/flt] (drop)"
-A INPUT -j DROP
# filter/INPUT chain ends here
ただし、以前にいくつかのロギングが発生したため、-j DROP
トラフィックが期待どおりに許可されず、最後のルールによって破棄されることがわかります。ロギングに使用されるタグは、私のnetfilterルール内で一意です。
私のIP設定は次のとおりです。
# ipset save public_services
create public_services list:set size 8
add public_services public_services4
add public_services public_services6
IPv4特定のIPセットは次のとおりです(実際のIPアドレスは変更されています)。
# ipset save public_services4
create public_services4 hash:ip,port family inet hashsize 1024 maxelem 65536 counters
add public_services4 192.168.0.1,tcp:80 packets 0 bytes 0
add public_services4 192.168.0.1,tcp:22 packets 0 bytes 0
INPUT
チェーンのルールが一致することを確認するためにカウンタを有効にしました。しかしそうではないようです。tcp
ログファイル(編集したMACとIPアドレス)のIP、プロトコル()、およびポートを比較すると、次のように一致するため、これは奇妙だと思います。
[IPv4:inp/flt] (drop) IN=eth0 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=1.2.3.4 DST=192.168.0.1 LEN=40 TOS=00 PREC=0x00 TTL=242 ID=54321 PROTO=TCP SPT=51433 DPT=80 SEQ=2936666534 ACK=0 WINDOW=65535 SYN URGP=0 MARK=0
また、私のルールをそれぞれIPv4およびIPv6固有のルールとして追加し、そのルールがIPバージョン固有のIPセットを参照しようとしました。これも機能しません。まず、明示的なルールを追加することです。
このような場合、ターゲットIP、プロトコル、ポートを一致させようとしたときに何が間違っているのでしょうか?
追加情報:
上記の規則は項目26なので、その前に明示的な規則を挿入することにしました。
-I INPUT 26 -p tcp -d 192.168.0.1 --dport 80 -j ACCEPT
これはうまくいきます。しかし、私はnetfilterルールの変数部分をできるだけ抽象化してIPセットに入れたいと思います。
だから私は(これを証明するために)以下を付け加えました。それコレクションでは機能しません。)別のルール:
-I INPUT 26 -m set --match-set public_services4 dst -j ACCEPT
これはうまくいきません。 netfilterとIPによって設定されたカウンタによると、この規則は一致しません。
パッケージバージョン関連:
- IPセット:6.20.1-1
- iptables:1.4.21-1ubuntu1
答え1
あなたのipsetはIPとポートで構成されているので、iptablesにIPとポートが一致するように指示する必要があります。宛先ポートと一致させるにはdstを使用し、それ以外の場合はsrcを使用します。
-A INPUT -m set --match-set public_services dst,dst -j ACCEPT