超哥Blog 2011-05-21
在查看freebsd日志的时候总免不了在auth.log中发现大量的ssh用户名扫描,说实话,这帮人实在无聊,就算我用户名和密码都告诉他了他一样登陆不了,何必呢?本文将说说freebsd下的ssh安全我们可以做些什么。按本文操作,不敢说你的ssh就100%安全,不过至少我们可以更安全点。下面是日志的一段:
Dec 13 10:16:30 ddd sshd[46500]: Invalid user raimundo from 59.124.60.69
Dec 13 10:17:49 ddd sshd[46512]: Invalid user alexandre from 59.124.60.69
Dec 13 10:20:18 ddd sshd[46523]: Did not receive identification string from 59.124.60.69
Dec 13 10:21:10 ddd sshd[46524]: Invalid user a from 59.124.60.69
Dec 13 10:22:06 ddd sshd[46541]: Invalid user mercedes from 59.124.60.69
Dec 13 10:23:26 ddd sshd[46545]: Invalid user raimundo from 59.124.60.69
Dec 13 10:23:36 ddd sshd[46547]: Invalid user raimundo from 59.124.60.69
Dec 13 10:23:40 ddd sshd[46549]: Did not receive identification string from 59.124.60.69
Dec 13 10:23:49 ddd sshd[46550]: Invalid user raimundo from 59.124.60.69
Dec 13 10:24:25 ddd sshd[46552]: Invalid user raimundo from 59.124.60.69
Dec 13 10:24:33 ddd sshd[46554]: Invalid user raimundo from 59.124.60.69
Dec 13 10:24:37 ddd sshd[46556]: Did not receive identification string from 59.124.60.69
首先,如果你采用默认的验证(pam)登录方式,且允许root登陆,如果不做其他安全防护的话那么你的服务器被攻入的概率非常高。现在暴力破解软件非常之多,想想,以现在电脑的效率,10位以内的密码你认为多少时间能被算出来?况且很多人的密码没有达到十位。
一、无论如何,我建议fb的服务器开启防火墙ipfw,iptables什么的都行,看个人习惯。以ipfw为例:我的原则是没用的端口全部封了,对于进入的链接全部采取限制,比如ssh对于同一个ip我一般只允许有一条链接,这样可以降低暴力破解的速度节省服务器资源:
01500 allow tcp from any to me dst-port 22 in via em0 setup limit src-addr 1
二、禁止root登陆
#ee /etc/ssh/sshd_config
Port 22 #这里的端口可根据需要修改,不过要注意防火墙也要开启其端口
Protocol 2
PermitRootLogin no #这将禁止root直接登录# Authentication:
PermitRootLogin no #以下相同颜色的几行将允许采用密匙验证
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# Change to yes to enable built-in password authentication.
PasswordAuthentication no
PermitEmptyPasswords no
# Change to no to disable PAM authentication
三、采用密匙登陆
这在操作上要及其小心以免把自己关注外面。原则上等密匙登陆成功后再关闭pam登陆模式(openssh默认的验证方式)。制作密匙的过程如下:
登陆服务器切换到你需要登陆的用户名,然后执行如下命令:
#ssh-keygen -t rsa -b 1024执行上面命令后将问你密匙保存位置和密码。最后将在用户的家庭目录下的.ssh/下生成一个公匙(id_rsa.pub)和一个私匙(id_rsa)
Generating public/private rsa key pair.上面的过程你可以不输入密码,那样只要载入密匙就登陆服务器,不过不建议那样做。生成后你需要切换到ssh密匙目录下修改公匙文件名
Enter file in which to save the key (/home/ezool/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ezool/.ssh/id_rsa.
Your public key has been saved in /home/ezool/.ssh/id_rsa.pub.
#cd /home/test/.ssh #test改成你生成密匙的用户名接着你需要把私匙下载下来:
#cat id_rsa.pub > authorized_keys #也可以用 mv id_rsa.pub authorized_keys直接修改文件名
#chmod 600 authorized_keys #仅供本人读写
#rm id_rsa.pub #移除刚生成的公匙文件
#cat id_rsa > /www/myweb/mykey.ppk #注意路劲哦,这里由于是承接上面,因此用户还在.ssh目录下
#rm id_rsa
通过ftp把密匙下载下来,然后需要注意,这里下载下来的密匙还没办法直接用于PuTTY,需要通过puttygen转换
启用putty key generator,点击load载入刚下载下来的私匙,这时他会提示转换,只要在save private key就可以,这样这个文件就能用。
登陆的时候注意左边的ssh下面有个 Auth,通过这个载入私匙,然后就可以登录。如果登陆成功,这这时可以关闭默认的pam验证方式
#ee /etc/ssh/sshd_config 修改以下的两行
ChallengeResponseAuthentication no
UsePam no
#/etc/rc.d/sshd restart #重启sshd使配置生效
四、禁止ssh暴力破解
我们采用密匙验证方式后,除非你的私匙、用户名、密码泄露,否则不管别人扫描你都不用担心了。唯一不爽的是天天有人扫描,这极大浪费了服务器资源,我们可以通过软件来禁止别人无故扫描。基本工作原理是:
读取auth.log文件,从中匹配用户登录失败用户,如果连续几次登陆失败,则把ip加入denyhost或者防火墙,或者断开该ip的链接,这样使得他的扫描无法继续下去。相关的软件如:fail2ban、Sshguard、DenyHosts等,详细的以后会介绍