我租用了这个小型 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
你需要改变两件事,并注意第三件事——
您可能需要添加一条规则,以允许与通过网络的传出流量相关的传入流量,使用类似“iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT”的命令
您需要为所有内容添加默认删除 - 而不仅仅是 VNC。添加“iptables -A INPUT -j DROP”
您的 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
和
和
我的建议是使用 iptable 的连接跟踪,正如 Davidgo 的回答中所解释的那样这里。这不仅适用于传出连接,也适用于传入连接,并且可以大大减少 iptables 需要为每个传入数据包处理的规则数量。
还要注意,好的防火墙只是服务器安全保护的一层。你永远不应该依赖它作为唯一的防线。我建议你在可行的情况下添加更多防线(例如基于密钥的 SSH 身份验证)。
基本上,一个简单的 iptables 规则集可能看起来像这样
设置政策
使用 -P 设置默认策略(例如,DROP 用于 INPUT、DROP 用于 OUTPUT 和 ALLOW 用于 FORWARD)。这些将设置无规则匹配时的默认行为。您可能不会使用 FORWARD 链,因为它用于路由。
输入链
允许 lo(环回)接口上的流量(即,保持在 VPS 内部且不应被阻止的流量)
允许来自 ESTABLISHED 和 RELATED 连接的流量(即之前已经获得许可的连接。这可以节省时间和处理资源)
允许从您的 IP 地址到您想要允许传入会话的两个端口建立新连接(在您的情况下为 SSH 和 VNC)
删除或拒绝其他所有内容(您可以明确执行此操作或依赖于之前设置的策略)
输出链
允许来自新、已建立和相关连接的流量。这基本上意味着从您的 VPS 发起的所有传出连接都将被允许,以及属于已允许和已建立的传入连接(即您的 SSH 和 VNC 会话)的传出流量。
删除其他所有内容,或者依赖 OUTPUT 链的默认策略。