阻止远程登录
昨晚,我正在关闭我的服务器,我看到一条消息,询问我是否要关闭“pts / 0”会话。 奇怪,我想。 所以我重新登录并做了一个finger
,发现有人从远程IP地址(意大利语地址)登录,他们发出了大量的scanssh
命令。 他们还更改了他们登录的帐户的密码(这是我孩子的帐户,密码很容易猜到 – 他只有6个!)。
好吧,所以我把一些端口打开了 – 完全是我的错。 我很幸运,帐户有限。 帐户的主文件夹中还有一个名为W2ksp3.exe
(或类似名称)的文件。 所以我猜有人正在使用我的服务器寻找受到破坏的Windows电脑。
所以,我的网络看起来像这样:
internet – eth0 – server – eth1 – 局域网
这是被破坏的服务器。 服务器使用dnsmasq
进行DNS查找,使用DHCP服务器进行LAN。
这引出了两个问题:
-
如何配置防火墙(
iptables
?)来阻止eth0
所有内容,除了http,传出ftp,电子邮件和访问互联网所需的任何其他内容? -
如何通过
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