好的,
我遇到了一个奇怪的问题。我刚刚完成了服务器的基本配置。添加了 fail2ban、postfix、apache、mysql 等。
然后我进入并开始添加 xtable 插件。我下载了版本,1.47.1
因为据我所知,这是我的内核的最新版本。2.6.32-431.23.3.el6.x86_64
在禁用 IPv6 选项进行编译后,编译总是会抛出错误,我更新了我的 geoip 数据库,确保 BE 和 LE 文件夹在里面,/usr/share/xt_geoip
并添加了这个过滤器:
-A INPUT -m geoip ! --src-cc US -j REJECT --reject-with icmp-net-unreachable
但当我这样做时,我收到了这条消息:
iptables: Invalid argument. Run `dmesg' for more information.
dmesg 中的最后一条记录如下:
xt_geoip: unable to load 'US' into memory: -12
所以现在我陷入了困境。这是我在任何服务器上第一次遇到这个问题。这是我的第一台 CentOS 6 服务器,我过去的所有服务器都使用 Centos 5。
我确实知道代码中的错误来自哪里(xt_geoip.c 文件的第 86 行),但我知道这会很有帮助。
答案1
检查编译后的文件是否为空。按照此处的说明操作后,我遇到了同样的错误:
http://terminal28.com/how-to-block-countries-using-iptables-debian/
...发现 iv6 文件有数据,但 .iv4 文件全是空的,我想是因为我第一次运行时缺少“unzip”包。
检查确认.CSV 文件中有数据,运行此命令重新构建:
./xt_geoip_build -D /usr/share/xt_geoip *.csv
...并且能够立即使用 iptables 的国家代码。