阻止远程登录

昨晚,我正在关闭我的服务器,我看到一条消息,询问我是否要关闭“pts / 0”会话。 奇怪,我想。 所以我重新登录并做了一个finger ,发现有人从远程IP地址(意大利语地址)登录,他们发出了大量的scanssh命令。 他们还更改了他们登录的帐户的密码(这是我孩子的帐户,密码很容易猜到 – 他只有6个!)。

好吧,所以我把一些端口打开了 – 完全是我的错。 我很幸运,帐户有限。 帐户的主文件夹中还有一个名为W2ksp3.exe (或类似名称)的文件。 所以我猜有人正在使用我的服务器寻找受到破坏的Windows电脑。

所以,我的网络看起来像这样:

internet – eth0 – server – eth1 – 局域网

这是被破坏的服务器。 服务器使用dnsmasq进行DNS查找,使用DHCP服务器进行LAN。

这引出了两个问题:

  1. 如何配置防火墙( iptables ?)来阻止eth0所有内容,除了http,传出ftp,电子邮件和访问互联网所需的任何其他内容?

  2. 如何通过eth0停止登录,但允许通过eth1登录

要在某些接口上禁用SSH,只需按照以下步骤操作:

首先,使用ifconfig或其他方法在eth1上查找服务器的IP地址。 例如,这可以是192.168.0.12

打开/etc/ssh/sshd_config文件( sudo nano /etc/ssh/sshd_config )并添加编辑以下行:

 #ListenAddress 0.0.0.0 

(这意味着“听所有接口”)到这个:

 ListenAddress 192.168.0.12 

(表示“仅侦听此IP所属接口的连接”)。

然后重启SSH服务器:

 sudo /etc/init.d/ssh restart 

现在它应该只接受来自该接口的连接。

到目前为止,答案很好,但我还要补充一点,在你的服务器和其他互联网之间抛出路由器可能并不是一个坏主意,除非你真的有一个令人信服的理由不这样做。 如果没有别的东西就像你家/公寓/住所/居住地的门一样 – 它会阻止人们徘徊和环顾四周,即使他们没有任何东西可以看。

关闭暴露给公众的港口。 通常它可以由您使用的路由器控制。 在ssh的情况下,它是端口22。

对于您的第一个问题,您需要设置防火墙。 如果您的服务器完全暴露于互联网,强烈建议您这样做。 你可能想看看Ubuntu Wiki 。 如果您有路由器,它可能会为您执行此操作。

对于第二部分,您可能希望将sshd配置为仅侦听本地地址。 那当然假设你的eth1有静态ip。 在/etc/ssh/sshd_config修改ListenAddress行。 它看起来应该像ListenAddress 10.10.0.1:22那样替换你的静态eth1 ip。

为什么你6岁的孩子需要shell访问你的服务器?

我推荐在服务器和Internet之间放置路由器的建议。 拥有第一道防线是一种简单的方法。

如果您想从外部启用ssh,最好禁用密码身份validation并仅保留公钥身份validation。 这样,您就可以免受密码猜测攻击:ssh只能用于您故意创建authorized_keys文件的帐户,并且只有在攻击者以某种方式获取了您的私钥时才能使用。 (您仍然容易受到OpenSSH中的远程漏洞的攻击,但这些漏洞非常罕见,通常会很快修补。)

确保在/etc/ssh/sshd_config有以下设置:

 PubkeyAuthentication yes ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no