如何使用 iptables 保护我的 VPS 上的 SSH 和 VNC?

如何使用 iptables 保护我的 VPS 上的 SSH 和 VNC?

我租用了这个小型 VPS,但一直试图通过暴力攻击进行黑客攻击。因此,我想将 SSH 和 VNC 限制到我拥有的两个 IP 地址(在不同网络上)

我尝试使用 iptable 来执行此操作,这是 iptables -S 的输出:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -s <ip one>/32 -p tcp -m tcp --dport <vnc> -j ACCEPT
-A INPUT -s <ip two>/32 -p tcp -m tcp --dport <vnc> -j ACCEPT
-A INPUT -s <ip one>/32 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s <ip two>/32 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 0.0.0.0/32 -p tcp -m tcp --dport 22 -j DROP
-A INPUT -s 0.0.0.0/32 -p tcp -m tcp --dport <vnc> -j DROP

它似乎不起作用,因为 auth.log 仍然充满了试图通过 sshd 进入的黑客。

我的逻辑是“让我拥有的两个 IP 进来,并放弃其他一切”。

我究竟做错了什么?

答案1

你需要改变两件事,并注意第三件事——

  1. 您可能需要添加一条规则,以允许与通过网络的传出流量相关的传入流量,使用类似“iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT”的命令

  2. 您需要为所有内容添加默认删除 - 而不仅仅是 VNC。添加“iptables -A INPUT -j DROP”

  3. 您的 0.0.0.0/32 规范本质上毫无意义,因为它们仅表示 IP 0.0.0.0,而这不是一个有效的 IP。/32 表示单个主机。从未尝试过。但 /0 则相反 - 但最好只是删除 IP 地址规范,这样它就会匹配所有地址。

答案2

我的建议是找一个好的 iptables 教程,因为你确实需要了解基础知识。有很多很好的教程示例和基本的、经过验证的 iptables 规则集,例如 DigitalOcean 的这些教程与 Ubuntu 相关,但可以轻松应用于任何 Linux 版本,

https://www.digitalocean.com/community/tutorials/how-the-iptables-firewall-works

https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-iptables-on-ubuntu-14-04

https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands

我的建议是使用 iptable 的连接跟踪,正如 Davidgo 的回答中所解释的那样这里。这不仅适用于传出连接,也适用于传入连接,并且可以大大减少 iptables 需要为每个传入数据包处理的规则数量。

还要注意,好的防火墙只是服务器安全保护的一层。你永远不应该依赖它作为唯一的防线。我建议你在可行的情况下添加更多防线(例如基于密钥的 SSH 身份验证)。

基本上,一个简单的 iptables 规则集可能看起来像这样

设置政策

使用 -P 设置默认策略(例如,DROP 用于 INPUT、DROP 用于 OUTPUT 和 ALLOW 用于 FORWARD)。这些将设置无规则匹配时的默认行为。您可能不会使用 FORWARD 链,因为它用于路由。

输入链

  • 允许 lo(环回)接口上的流量(即,保持在 VPS 内部且不应被阻止的流量)

  • 允许来自 ESTABLISHED 和 RELATED 连接的流量(即之前已经获得许可的连接。这可以节省时间和处理资源)

  • 允许从您的 IP 地址到您想要允许传入会话的两个端口建立新连接(在您的情况下为 SSH 和 VNC)

  • 删除或拒绝其他所有内容(您可以明确执行此操作或依赖于之前设置的策略)

输出链

  • 允许来自新、已建立和相关连接的流量。这基本上意味着从您的 VPS 发起的所有传出连接都将被允许,以及属于已允许和已建立的传入连接(即您的 SSH 和 VNC 会话)的传出流量。

  • 删除其他所有内容,或者依赖 OUTPUT 链的默认策略。

相关内容