2つのUbuntu 16.04サーバーがあります。 1つはローカルネットワークの小さなintelatom itxボックスにあり、もう1つはVPSとしてホストされています。どちらも先週新しくインストールされました。どちらの構成も一般的に同じであり、公的にアクセス可能なVPSを強化するためにより多くの努力をするという点だけが異なります。どちらもカーネルを再コンパイルしませんでした。どちらも通常同じパッケージセットをインストールします。
しかし、それらの1つであるVPSは、Webフィルタがipsetと一致しないと主張しています。
wolferz@unipuma ~ $ sudo shorewall check
Checking using Shorewall 5.1.6.1...
Processing /etc/shorewall/params ...
Processing /etc/shorewall/shorewall.conf...
Loading Modules...
Checking /etc/shorewall/zones...
Checking /etc/shorewall/interfaces...
Determining Hosts in Zones...
Locating Action Files...
Checking /etc/shorewall/policy...
Adding Anti-smurf Rules
Checking TCP Flags filtering...
Checking Kernel Route Filtering...
Checking Martian Logging...
Checking MAC Filtration -- Phase 1...
Checking /etc/shorewall/blrules...
ERROR: ipset names in Shorewall configuration files require Ipset Match in your kernel and iptables /etc/shorewall/blrules (line 39)
私が使用したい設定は、大規模なIPセットをブラックリストとホワイトリストに動的に追加するために使用されるIPsetに大きく依存しています。なぜなら、netfilterは頻繁に変更されたり、多くのルールリスト(IPごとに1つ...多くの場合数千)を持つのには適していないからです。
ipset 一致がない場合、ここに進む方法はありません。 Shorewallを使用してnetfilterとipsetを管理しますが、これはShorewallの問題ではないようです。検出が何らかの方法で歪んでいない限り...出力を確認する方法がわかりません。
以下は、VPSでShorewallが検出したカーネルネットフィルタ機能です。
wolferz@unipuma ~ $ sudo shorewall version
5.1.6.1
wolferz@unipuma ~ $ sudo shorewall show -f capabilities | grep IPSET
IPSET_MATCH= <== this is the problem
IPSET_MATCH_COUNTERS= <== this is not great either
IPSET_MATCH_NOMATCH= <== this is not great either
IPSET_V5=Yes
OLD_IPSET_MATCH=
wolferz@unipuma ~ $ sudo shorewall6 version
5.1.6.1
wolferz@unipuma ~ $ sudo shorewall6 show -f capabilities | grep IPSET
IPSET_MATCH_COUNTERS= <== normal for ipv6
IPSET_MATCH_NOMATCH= <== normal for ipv6
IPSET_MATCH=Yes <== correct
IPSET_V5=Yes
OLD_IPSET_MATCH=
wolferz@unipuma ~ $ uname --kernel-release
4.4.0-93-generic
wolferz@unipuma ~ $ ipset --version
ipset v6.29, protocol version: 6
wolferz@unipuma ~ $ iptables --version
iptables v1.6.0
wolferz@unipuma ~ $ ip6tables --version
ip6tables v1.6.0
説明がありますが、IPSET_MATCH=
後に何もない場合は表示する必要がありますIPSET_MATCH=Yes
。ローカルサーバー以外のVPSでは失敗します。もはやip6tablesはipsetマッチサポートを報告しますが、iptablesはそうではありません。
最初は私のローカルサーバーにShorewallがありませんでした(ただしそれをやろうとしていましたが)…それでインストールしました。しかし、私は急いでShorewallバージョンを提供したaptからインストールしました5.0.4
。完全なIPset一致機能があると報告したとき、私はこれがShorewallにのみある機能かもしれないと思いました5.1.6.1
。だから私はaptを使ってtarballから削除5.0.4
し、5.1.6.1
vpsのようにインストールしました。どちらも同じ出力を5.0.4
提供します。5.1.6.1
wolferz@khaos ~ $ sudo shorewall version
5.1.6.1
wolferz@khaos ~ $ sudo shorewall show -f capabilities | grep IPSET
IPSET_MATCH_COUNTERS=Yes
IPSET_MATCH_NOMATCH=Yes
IPSET_MATCH=Yes
IPSET_V5=Yes
OLD_IPSET_MATCH=
wolferz@khaos ~ $ sudo shorewall6 version
5.1.6.1
wolferz@khaos ~ $ sudo shorewall6 show -f capabilities | grep IPSET
IPSET_MATCH_COUNTERS=
IPSET_MATCH_NOMATCH=
IPSET_MATCH=Yes
IPSET_V5=Yes
OLD_IPSET_MATCH=
wolferz@khaos ~ $ uname --kernel-release
4.4.0-93-generic
wolferz@unipuma ~ $ ipset --version
ipset v6.29, protocol version: 6
wolferz@unipuma ~ $ iptables --version
iptables v1.6.0
wolferz@unipuma ~ $ ip6tables --version
ip6tables v1.6.0
同じディストリビューション、同じバージョン、同じカーネル。わかりましたので、VPSインストール用のテンプレートが改ざんされている可能性があると思いました。インストールされたモジュールの違いを確認することにしました。
wolferz@unipuma ~ $ sudo ls -R -D /lib/modules/4.4.0-93-generic/kernel/ | grep -P '\.ko$' | sort > unipuma_sorted_modules.list
...他のホストに送信するためのscp...
wolferz@khaos ~ $ sudo ls -R -D /lib/modules/4.4.0-93-generic/kernel/ | grep -P '\.ko$' | sort > khaos_sorted_modules.list
wolferz@khaos ~ $ diff --brief --report-identical-files khaos_sorted_modules.list unipuma_sorted_modules.list
Files khaos_sorted_modules.list and unipuma_sorted_modules.list are identical
その後、使用しているカーネルの実際の構成を確認しました。
wolferz@unipuma ~ $ sudo cat /boot/config-4.4.0-93-generic | grep -P '(?:NETFILTER|IPSET)' | sort > unipuma_kernel_config.list
wolferz@khaos ~ $ sudo cat /boot/config-4.4.0-93-generic | grep -P '(?:NETFILTER|IPSET)' | sort > khaos_kernel_config.list
wolferz@khaos ~ $ diff --brief --report-identical-files khaos_kernel_config.list unipuma_kernel_config.list
Files khaos_kernel_config.list and unipuma_kernel_config.list are identical
それでは。私を混乱させる。同じコア。同じモジュール。同じ構成。他の能力。よく?
そして…通る考えの流れを止めるため…仮想ホストでもありません。この問題のない同じバージョンのShorewall(および以前のバージョンのnetfilter / iptables / ipset)を使用してCentOS6を実行している3番目のサーバーがあります。上記のUbuntu 16.04 vpsと同じ仮想化(KVM)を使用して同じ物理システムでホストされています。
...助ける?
答え1
それでは。すべての素晴らしいアイデアに感謝します。これはあなたの助けなしには不可能です。
私が知っているように、この質問はとても簡単です。 shorewall.conf ファイルには次の行があります。
IPTABLES=/sbin/ip6tables
問題は...shorewall.confファイルです。 shorewall6.conf ファイルではありません。 ipv4設定を途中で開始したときにそれをコピーしましたが、特定の「6」が欠落しているようです。
修正された行は次のとおりです。
IPTABLES=/sbin/iptables
したがって、この質問が次のように機能する理由iptables
は次のとおりです。そうですね…3日後…