Debian 8 iptables 阻止所有连接

Debian 8 iptables 阻止所有连接

我的根服务器运行 Debian 8(64 位),遇到了一个大问题。我安装了一些 iptables 规则来阻止属于中国的特定 IP 范围和一些列入黑名单的范围。似乎出了点问题,无法通过 SSH、HTTP 等访问服务器。

我可以通过托管商提供的 KVM 控制台获得对服务器的 root shell 访问权限。但我现在不知道如何允许连接。我按照互联网上的一些教程刷新了 iptables,但没有用,所以我最终卸载了 iptables。

但它仍然不起作用。我甚至无法安装任何软件包,apt-get因为它会引发获取错误。

答案1

有时需要在远程主机上配置 iptables。通常,可以使用一些泵方法来获取正确的 iptables 规则,必须确保不会出现这种情况。在这里,我将描述如何轻松配置 iptables,以便在阻止对自身的访问的情况下再次获得此访问权限。

这个想法是这样的:我们在 cron 中写下一条规则,该规则将在某个时间点重置 iptables 规则。也就是说,假设我制定了一系列规则并应用了它,然后与远程主机的连接突然中断了。但是,在此之前,我们在 cron 中添加了一个脚本,该脚本将清除所有规则,并且可以再次获得对远程服务器的访问权限。

重要!Iptables 规则在执行后立即应用。例如,如果您输入:

$ iptables -A INPUT -p TCP --dport 22 -j DROP

那么 ssh 上的连接将立即丢失。

创建一个清除所有 iptables 规则的脚本:

# vim /etc/restore_iptables.conf
#!/bin/sh
IPT="/sbin/iptables"
# remove all rules
$IPT -F
$IPT -X
# allow all connections
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT

您还需要使脚本可执行:

# chmod +x /etc/restore_iptables.conf

该脚本应在网络接口启动后立即运行,在 Debian 中,只需添加如下行:

# vim /etc/network/interfaces
auto lo
iface lo inet loopback
   pre-up /etc/iptables.conf

现在将规则添加到 cron 以每五分钟运行一次我们的备份恢复脚本,例如:

# crontab -e
*/5 * * * * /etc/restore_iptables.conf

现在我们可以测试新规则了。为此,创建一个包含测试规则的文件,例如:

# vim /etc/test_iptables.conf
IPT="/sbin/iptables"
$IPT -F
$IPT -X
# we get a mistake and drop ssh connection
$IPT -A INPUT -p TCP --dport 22 -j DROP
$IPT -A OUTPUT -p TCP --sport 22 -j DROP

运行:

# chmod +x /etc/test_iptables.conf
# /etc/test_iptables.conf

有了这样的规则,我们会立即断开 ssh 上的连接。但是,我们考虑到了所有因素,只需等待 5 分钟即可重新连接。

在你确定所有规则都按需要工作后,你需要删除或注释掉 cron 中的规则:

# crontab -e
#*/5 * * * * /etc/restore_iptables.conf

并复制新的规则文件而不是我们的备份:

# cat /etc/test_iptables.conf > /etc/restore_iptables.conf

留心!

相关内容