我有两台Ubuntu 16.04服务器,一台在本地网络上的一个小小的Intel Atom Itx盒上,一台作为VPS托管。两者都在上周内重新安装。两者的配置通常相同,但需要付出更多的努力来强化可公开访问的VPS。都没有重新编译内核。两者通常都安装了相同的软件包集。
但是……其中之一,VPS坚持认为它的netfilter无法与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)
我打算使用的配置在很大程度上取决于ipset来对大型IP进行动态黑名单和白名单。因为netfilter不太适合经常更改或有大量规则列表(每个ip一个...通常成千上万个)。
没有ipset匹配,这里就没有前进的方向。尽管事实上我正在使用Shorewall来管理netfilter和ipset,但这似乎不是Shorewall问题。除非以某种方式歪斜检测到它...但是我不确定如何确认它的输出。
这就是Shorewall在VPS上检测为内核的netfilter功能的内容。
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(尽管我打算这样做)……所以我继续进行安装。但是我很着急,从apt那里安装了它,并得到了Shorewall版本5.0.4
。当它报告说它具有完整的ipset匹配功能时,我认为这可能是Shorewall特有的5.1.6.1
。因此,我像在vps上一样使用apt来从tarball中删除5.0.4
和安装5.1.6.1
。两者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
...将其发送给其他主机...
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
那好吧 使我困惑。相同的内核。相同的模块。相同的配置。不同的功能。?
而且...只是为了消除这种想法,也不是虚拟主机。我有第三台运行CentOS6的服务器,并且此版本的Shorewall(以及较旧的netfilter / iptables / ipset版本)没有此问题。它使用与上述Ubuntu 16.04 vps相同的虚拟化(KVM)托管在同一台物理计算机上。
...帮助?
那好吧 感谢所有的好主意。没有你们的帮助就做不到。
正如我所知道的那样,这个问题很简单。在shorewall.conf文件中,我有以下内容:
IPTABLES=/sbin/ip6tables
问题是...那是Shorewall.conf文件。不是Shorewall6.conf文件。当我开始配置ipv4一半时,我已经复制了它,很显然,它错过了特定的“ 6”。
更正的行是:
IPTABLES=/sbin/iptables
因此,为什么这个问题表现得像一个iptables
问题……有点。是的,三天后...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句