我在网上找到了这个方便的脚本,并想修改它以仅阻止 SSH 访问,但我对 iptables 一无所知,而且我担心我会杀死我的系统,因为我无法物理访问它。
http://ipinfodb.com/ip_country_block_iptables.php
请问我应该做什么更改才能仅删除端口 22?
我知道黑客可以使用代理等,而这不会是我唯一的安全措施。这样做的原因只是为了减少我收到的有关来自中国的自动攻击的 fail2ban 电子邮件数量 :)
谢谢 Maciej
答案1
你的发行版中需要与此等效的版本:
$ apt-cache 显示 xtables-addons-common 软件包:xtables-addons-common 描述:iptables 的扩展目标和匹配项 [工具、库] Xtables-addons 为 iptables 提供了 内核,是 patch-o-matic 的后继者。 扩展包括 TEE、TARPIT、CHAOS 等新目标,或类似模块 geoip 和帐户。
您对该模块感兴趣geoip
。然后添加一些规则到你的iptables
。
检查HOWTO中的第4点。
简单介绍一下示例规则:
# iptables -A INPUT -m geoip --src-cc A1,A2 -j DROP
上述命令在INPUT
链中添加了一条规则,该规则使用该geoip
模块来匹配来自特定国家/地区的连接,该国家/地区由其标识ISO 3661代码。在本例中,A1 和 A2代表:
A1 => "Anonymous Proxy" ,
A2 => "Satellite Provider" ,
此命令使用否定 ( !
) 来反转匹配,导致所有不是来自指定国家(在本例中为 CA)的流量被丢弃:
# iptables -A INPUT -m geoip ! --src-cc CA -j DROP
最后一个例子向你展示如何创建自定义链来分析sshd
服务器的流量:
# iptables -N SSH_GEOIP
# iptables -A SSH_GEOIP -m geoip --src-cc CA
# iptables -A SSH_GEOIP -m geoip --src-cc DE
# iptables -A SSH_GEOIP -m geoip --src-cc US
# iptables -A SSH_GEOIP -m geoip --src-cc JP
# iptables -A SSH_GEOIP -m geoip --src-cc FR
# iptables -A SSH_GEOIP -m geoip ! --src-cc CA,DE,US,JP,FR
# iptables -A INPUT -p tcp --dport 22 -j SSH_GEOIP
答案2
或者,您可以使用该hosts.deny
文件过滤任何 ssh 流量,然后通过查询文件中的 shell 脚本专门允许来自选定国家/地区的流量hosts.allow
。请参阅本教程:https://www.axllent.org/docs/view/ssh-geoip/