如何在不关闭自己的情况下远程关闭端口?

Que*_*ner 2 linux firewall iptables

我在另一个大陆的远程位置有一台 Ubuntu 11.04 服务器,所以我无法物理访问它。我只通过ssh(和scp)与它交互,并且打算只以这种方式与它交互。

出于安全目的,我想确保服务器上的所有端口都绝对关闭,除了 ssh.

尽管试图在网上找到说明,但我的理解仍然很模糊。到目前为止,我收集到的是我需要“刷新”“iptables”,还需要编辑一些文件(/etc/hosts,也许?),然后重新启动机器。

显然,尽管如此,我想对此非常小心,因为如果我做错了,我最终可能会意外关闭 ssh 端口,使我无法访问服务器。

在我这样做之前,我希望建立一套简单的步骤。

那么,如何在保留访问权限的同时关闭所有端口?

额外问题:在执行此操作时,我是否应该并且可以将ssh端口从 22 更改为非标准端口?真的有区别吗?

Eli*_*uft 5

先写一个小脚本来刷新iptables规则:

#!/bin/bash
echo "Stopping firewall and allowing everyone..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
Run Code Online (Sandbox Code Playgroud)

(您可能不需要“nat”和“mangle”命令。)将其命名为“flush.sh”并将脚本放在“/root”目录中。记住'chmod +x flush.sh'。

通过添加无害的 iptables 规则来测试脚本,例如

iptables -A INPUT -p tcp -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

然后从命令行运行脚本。验证您添加的规则是否已消失。

将脚本添加到 root 的 crontab 中,每十分钟运行一次:

*/10 * * * * /root/flush.sh
Run Code Online (Sandbox Code Playgroud)

重新添加用于测试脚本的无害 iptables 规则。等待十分钟并验证您的 cron 作业是否成功执行并删除了规则。

此时,您应该能够调试您的 iptables 规则集,每十分钟运行一次 flush.sh 安全网。完成规则调试后,注释掉 crontab 中运行 flush.sh 脚本的行。

您放置规则的位置在某种程度上取决于发行版。对于 Ubuntu,请查看此链接。最后,您将看到两个永久设置防火墙规则的选项 - /etc/network/interfaces 和使用网络管理器配置。由于您正在运行服务器,因此前一种选择可能更好。

除非您将自己锁定在外面,否则您不需要重新启动以更改或刷新您的 iptables 规则。

最好将 sshd 配置为仅允许使用公钥身份验证而不是密码进行 root 登录。

如果您有一个具有固定 IP 地址的安全网关,例如您办公室的服务器,您可以从任何地方登录,那么最好在远程服务器上设置一个 iptables 规则,以仅允许来自该网关的 SSH。

将 SSH 端口从 22 更改为其他端口的价值非常有限,因为大多数端口扫描器会很快找到新的 SSH 端口。