iptables 与黑客预防

iptables 与黑客预防

各位 Ubuntu 用户,大家好!

这是我的 iptables.rules 文件的一个示例:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:f2b-sshd - [0:0]
:f2b-sshd-ddos - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -s 202.215.160.75/32 -j DROP
-A INPUT -s 66.210.251.136/32 -j DROP
-A INPUT -s 61.40.0.0/16 -j DROP
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos
-A INPUT -i tap0 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -i br0 -j ACCEPT
-A FORWARD -i br0 -j ACCEPT
-A f2b-sshd -j RETURN
-A f2b-sshd-ddos -j RETURN
COMMIT

请注意,这是我的文件的精简版本。我大概删除了大约 100 个 IP/域名。

我的问题是,当我删除一个像 xxxx 这样的新 IP 时,它会按如下方式添加它:

-A INPUT -i br0 -j ACCEPT
-A INPUT -s x.x.x.x/32 -j DROP
-A FORWARD -i br0 -j ACCEPT

这实际上并没有像我希望的那样删除 IP 地址。我有一个用于删除用户/域的 shell 脚本:

./删除用户

sudo iptables -A INPUT -s $1 -j DROP
sudo sh -c "iptables-save > /etc/iptables.rules" 

./删除域名

 sudo iptables -A INPUT -s $1/16 -j DROP
 sudo sh -c "iptables-save > /etc/iptables.rules"

为了解决这个问题,我手动编辑了 /etc/iptables.rules 文件,将 xxxx ip 移至此行上方:

 -A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd-ddos

然后调用:

sudo iptables-restore < /etc/iptables.rules

我的流程有什么问题?有没有更好的方法?每天我花大约 10 分钟处理黑客攻击,大部分时间都在编辑我的 iptables.rules 文件,然后通过 iptables-restore 恢复它。我希望能够只调用 ./drop-user 或 ./drop-domain 来完成它,但我觉得我对 iptables 的了解还不够。

我是否应该在 iptables-restore 之前执行以下命令?

 sudo iptables -F
 sudo iptables -Z

提前致谢!

答案1

我强烈建议您使用来自动化禁止过程fail2ban,它在默认配置下运行良好,如果您希望它监控更多服务,可以进一步定制。

与 结合使用时iptables-persistent,它将在重启后保留规则,这很有帮助。

以下是我对 Ubuntu 服务器的操作的基本概述:

安装并配置fail2ban

sudo aptitude install fail2ban && sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && sudo nano /etc/fail2ban/jail.local

这将安装它并将配置文件复制到新文件以供您自定义。这是最佳做法,因为它可以防止您的编辑在软件包更新时被覆盖。

我个人倾向于延长禁令时间找时间从默认值开始。禁止时间是攻击者被禁止的时间,查找时间是计算他们的尝试的时间窗口,以防他们限制攻击。查找和编辑bantime = 21600(增加到六个小时,时间值以秒为单位)以及findtime = 3600(每小时最多 3 次攻击尝试)。

刷新现有的 Iptables 规则并设置新的默认值

这是一行程序,旨在用于典型的 Web 服务器,其入站端口仅监听端口 22(SSH)、端口 80(HTTP)和端口 443(HTTPS)。本 DigitalOcean 教程是如何构建您自己的或定制我的一个很好的参考。小心使用 Iptables 和设置 DROP 规则,如果顺序错误,您将永远被锁定!也就是说,我使用的这个单行代码是安全的,经过测试并且运行完美:

sudo iptables -P INPUT ACCEPT && sudo iptables -F && sudo iptables -A INPUT -i lo -j ACCEPT && sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT && sudo iptables -A INPUT -j LOG && sudo iptables -A FORWARD -j LOG && sudo ip6tables -A INPUT -j LOG && sudo ip6tables -A FORWARD -j LOG && sudo iptables -A INPUT -j DROP

使更改在重启后保持不变

最后一步是安装和配置iptables-persistent软件包,它将在重启后自动保存和恢复规则。

sudo aptitude install iptables-persistent && sudo service iptables-persistent start

它会提示您确认 IPV4 和 IPV6 规则,您应该使用 Tab 键为每个规则选择“是”并保存。它会在重新启动时自动启动,因此您无需担心进一步配置它。

关于使规则持久化需要注意的一点是,您需要手动告知进程您添加或编辑的任何新规则(例如,如果您在端口 443 上添加或删除了 HTTPS)。为此,运行将更新当前规则集。我认为该命令在 14.04 之后的版本中已更改为“netfilter-persistent”,因此如果第一个命令不起作用,sudo service iptables-persistent save请使用它。sudo service netfilter-persistent save

概括

现在 fail2ban 将监控对 SSH 的攻击,并根据您设置的参数自动添加和删除 IP 地址。Iptables 将忽略您未打开的端口的所有传入流量,并且这些规则将在重新启动后保留,因此您无需执行太多其他操作。我想,享受额外的空闲时间吧!

如果要撤消所有更改,请反转上述所有步骤

如果出于某种原因您不想继续使用此方法,您可以快速撤消所有操作。 我们不建议这样做,但这是您的机器,因此请按照以下步骤操作:

  1. 刷新所有 Iptables 规则并接受所有端口上的所有流量sudo iptables -P INPUT ACCEPT && sudo iptables -F(您必须执行此操作才能删除最后的 DROP 规则,否则您将被锁定)
  2. 删除之前安装的软件包及其设置sudo aptitude purge fail2ban iptables-persistent(或者netfilter-persistent,取决于您的 Ubuntu 服务器版本)。重启后,您应该恢复到之前的状态 - 减去任何自定义 Iptables 设置,您需要像当前所做的那样手动重新添加这些设置。

相关内容