不久前,我在本地 wifi 网络中运行了一个 vino 服务器,并且 vino 服务器在 stdout 上写入消息,表明来自互联网的一些奇怪的 IP 试图连接到它。我想知道,“我的服务器被攻击了吗”。如何保护不受您控制的本地和非本地以及公共和专用网络上的服务器?
以下是一个可能的想法吗?有没有办法让服务器只能被服务器主机上运行的其他进程访问,并且运行sshd
在服务器主机上允许转发访问? (我猜这个想法来自:https://help.ubuntu.com/community/VNC#SSH_port-forwarding。我不太明白它是如何完成的,希望你能解释一下。)
这是否会使其他计算机只能使用 ssh 和端口转发/隧道连接到服务器?
这种方式是否使服务器只能被同一本地网络中的计算机访问,还是也允许本地网络之外的计算机访问?
与使服务器可供本地网络中的所有其他计算机访问相比,访问服务器的方式是否更安全?如果是,它是否更安全,因为 SSH 通常比其他协议更安全。(比如vino使用的协议?)
谢谢。
答案1
IP 表可以完成这项工作。它基本上是一个防火墙。
大多数 Linux 系统上默认安装了 iptables。但是您可以手动安装它:
apt-get install iptabels
你可以配置它,仅允许本地主机访问端口和服务,通过实施以下措施:(这使得进程仅可用于它们正在运行的主机。)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
从那里您可以添加其他端口和服务的限额。如果您在查找想要允许的服务和端口以及尚未使用的方法时需要在该计算机上连接 Internet iptables -P OUTPUT DROP
,请将其放在最后。以下是值得学习的好网站:
要在引导之间保存防火墙,请安装iptables-persistent
然后执行iptables-persistent save
或netfilter-persistent save
。
执行此处描述的第一个过程将使您的机器只能自行访问。仅 SSH 方法仅允许从本地网络到计算机的 SSH 连接,除非您将 SSH 端口从路由器端口转发到外部的该计算机,那么您所需要的只是 diydns 或 no-ip 类型的服务或者不断知道您的公共 IP 以从外部进行访问。
执行中描述的操作仅允许 SSH然后通过ssh隧道将端口转发到服务,更加安全。它只允许 SSH 连接。然而,最好使用基于密钥的身份验证而不是密码。