
我刚刚在我的其中一台计算机上安装了 Ubuntu Server。我使用 Netgear 路由器,它帮助我创建了一个 DynDNS 帐户。我的动态 IP 地址有一个主机名,并且我已将端口转发到我的计算机的 IP 地址。我可以从任何远程计算机使用 HTTP、HTTPS、FTP 和 SSH 访问我的计算机(Ubuntu Server)。
最近,当我检查我的路由器日志时,我发现有几台远程计算机已经连接到我的服务器 SSH(端口 22)。
[LAN access from remote] from 218.12.159.34:43871 to 10.X.X.X:22 Monday, Sep 05,2011 04:10:19
[LAN access from remote] from 194.213.42.58:36664 to 10.X.X.X:22 Monday, Sep 05,2011 01:00:41
这些 IP 地址尝试访问我的计算机已超过一个小时。还有其他几个 IP 也在尝试这样做。当我登录我的 SSH 帐户时,我发现没有人成功登录。我的计算机容易受到攻击吗?或者这些是试图建立连接的自动程序,还是有人试图入侵我的计算机?
答案1
您看到的这些连接来自试图从互联网另一端使用众所周知的密码访问常用帐户的机器人。您没有受到攻击,您只是连接到了互联网 :)
您可以通过多种方式过滤此连接:
一种方法是仅允许特定的 IP 地址访问你的机器,方法是iptables
:
# iptables -N SSH
# iptables -A SSH --src <src_ip1> -j ACCEPT
# iptables -A SSH --src <src_ip2> -j ACCEPT
# iptables -A SSH --src <src_ipN> -j ACCEPT
# iptables -A INPUT -i <iface> -p tcp --dport 22 -j SSH
# iptables -A INPUT -i <iface> -p tcp --dport 22 -j DROP
另一种方法是,如果您希望让任何人都可以访问您的计算机,但根据登录失败情况放弃访问权限,则可以使用fail2ban
,只需apt-get
按照文档操作即可。这是一项非常容易设置的服务,它会根据远程 IP 尝试访问您的计算机但失败的次数来放弃来自远程 IP 的连接。
答案2
另一个选择是禁用密码/键盘交互式登录并使用 ssh 密钥进行身份验证。
首先,如果您还没有密钥对,则需要生成密钥对 - 这取决于您的操作系统,但这里有几个指南:
- 带有 Putty 的 Windows:http://www.howtoforge.com/ssh_key_based_logins_putty
- OS X 和 *nix 系统:http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/internet/node31.html
完成后,您将需要将公钥添加到文件中authorized_keys
(在您希望登录的用户帐户下):
mkdir -p ~/.ssh
chmod 0700 ~/.ssh
echo "ssh-rsa AAAA..0Wovw== [email protected]" > ~/.ssh/authorized_keys
然后,尝试从您的客户端进行连接:
ssh -i ~/.ssh/id_rsa [email protected]
如果此操作不起作用,请编辑您的 SSH 配置(/etc/ssh/sshd_config
),并确保设置了以下条目(然后使用 重新启动服务service ssh restart
):
RSAAuthentication yes
PubkeyAuthentication yes
但是,如果此方法有效,那么您可以在 SSHd 服务器上禁用密码登录(再次在配置文件中/etc/ssh/sshd_config
,然后使用以下命令重新启动服务service ssh restart
):
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
最后,断开连接并重试您的连接 - 如果成功,尝试使用不带-i ~/.ssh/id_rsa
参数的 ssh,则身份验证应该会失败。