前几节讲服务器安全,一直在讲ssh。因为做好服务器的安全,遵循这样两条规则:
第一条:启用尽可能少的服务【减少对外开放端口】。
第二条:管好服务器的ssh。
ssh安全了,服务器也就相对安全了。
根据前几节所讲,这节对ssh安全做个全面总结:
1)禁止root用户远程登录
root是linux里的最高统帅了,就它权限最大,可以在系统里畅通无阻。也就是因为这个原因,它是我们的重点保护对象。对于管理linux系统,一个最基本的建议就是:
平时登陆和工作的时候都使用普通用户进行操作,在需要修改系统设置使用特级权限时,再切换到root用户(su - root)。这样可以最大限度地避免因为误操作造成对linux系统的破坏。另外因为root用户是每个linux系统里都内置的,恶意的黑客可能会拿它做用户名然后尝试用不同的密码登陆密码,所以还是自己新建一个帐号,这样用户名被猜中的机率就很低了,再禁止root用户登陆,想猜密码?先猜用户吧。
在sshd_config中修改参数:PermitRootLogin no,重启sshd服务。
2)禁止空密码登陆
一般来说linux系统都会内置很多帐号,而这些用户的密码我们是不知道的。谁知道哪天哪个linux的发行版,对其中的帐号设置空密码或者指定的密码呢?所以还是禁止为妙,省得夜长梦多。
在sshd_config中修改参数:PermitEmptyPasswords no,重启sshd服务。
3)使用非默认端口,非22端口
服务器被黑客盯上,并不是有人特意跟你过不去,人家随机地用软件扫了一个ip段,而你的ip正好在里面,而人家的扫描规则就是:是否开启22端口。这个时候如果你服务器没有禁止root登陆,root的密码又是简单的123456 or 000000 or 111111这些地球人都知道的密码的话,你的服务器不黑,谁的被黑?所以安全从简单的小事儿做起,你向前移动一小步,你的服务器安全就进步一大步。还等什么?先修改默认端口。
在sshd_config中修改参数:Port 端口号,重启sshd服务。
4)限制ssh监听的ip
在服务器有多个ip的时候,设置ssh服务器只监听指定的ip未尝不是一个好办法。例如一组服务器中,肯定会组成内网和外网两个小的局域网,这时候只让不起眼的一两台机器的ssh服务监听到公网ip上,其它的机器ssh只监听内网ip,通过另外的一两台机器登陆进行管理,这样做会安全多。
在sshd_config中修改参数:ListenAddress 服务器内网IP,重启sshd服务。
5)使用的协议版本2: ssh v2
ssh协议有两个版本,v2要比v1安全高效,v1版本钥匙和锁头默认不会变化,数据传输不安全;v2版本钥匙和锁头会经常变化,数据传输更安全。ssh服务器默认会接受两种版本的连接。用SSH 2.x的客户端程序不能连接到SSH 1.x的服务程序上。为了保证服务器的安全,咱们可以定义服务器只使用v2:
在sshd_config中修改参数:Protocol 2,重启sshd服务。
6) 禁用密码登陆,推荐使用密钥登录,并且私钥使用强密码加密
这是上节介绍的内容。详情看上一节。
密钥登录,ssh服务绝对又是一个质得提升:能够拿到管理员本地私key,又知道服务器登陆的用户名和端口,这绝对不是一件简单的事情。
7)限制连接客户端IP,仅保证有限的机器能够远程访问
再拿出最后一招杀手锏:限制ssh服务连接的客户端ip。我们前面提到一组服务器我们只留一两台机器可以远程访问,这样这两台机器的安全又成了重中之重。怎样再保证一下这两台机器的安全呢?我们可以限制连接这两台机器的ip。例如:这两台机器只允许公司的出口ip进行访问,这样就再次提高了服务器的安全系数。想想如果有一个黑客,能够进入你们公司的办公网络,能够拿到你的私key,又能知道只有你才知道的服务器的用户名和登陆的端口,以及登陆的方式,如果有这样的牛X的黑客,还有什么好防的呢?因为防不胜防啊。看下限制ip的做法:
在/etc/hosts.allow输入
sshd:192.168.1.5:allow(其中192.168.1.5是你要允许登陆ssh的ip,或者是一个网段192.168.1.0/24)
在/etc/hosts.deny输入
sshd:ALL(表示除了hosts.allow中允许的,其他的ip拒绝登陆ssh)
8)日志
记录好日志,经常做日志分析。
用户登录成功日志: /var/log/wtmp , 使用 # last 命令查看
用户登录失败日志: /var/log/btmp , 使用 # lastb 命令查看
查看所有用户上次登录情况: 使用 #lastlog [-u User]