Linux 加强ssh服务器的安全配置
一、sshd本身加固
1.为root设置强密码
2.添加一个新用户,并禁止root进行ssh登录 (让普通用户su得到root的环境变量 su - root)
[root@unixhater ~]# vim /etc/ssh/sshd_config
......
#PermitRootLogin yes
PermitRootLogin no #设置这个选项
#StrictModes yes
......
"/etc/ssh/sshd_config" 120L, 3344C written
[root@unixhater ~]# service sshd reload #更新设置
3.让sshd仅支持证书登录
为新用户生成密钥对,让新用户能够使用证书登录 见
关闭sshd的密码验证登录
[root@unixhater ~]# vim /etc/ssh/sshd_config
......
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
PasswordAuthentication no #设置这个选项
#PermitEmptyPasswords no
......
这时使用MyEnTunnel软件也要注意启用putty证书登录。因为我一般都是用secureCRT,但是它仅只持自有格式与openssh格式的密钥对,而MyEnTunnel却仅支持putty格式,所以我的方法是新增一个用户专门。
4.更换ssh登录端口
更改/etc/ssh/sshd_config的Port 22为其它端口,reload生效
端口更改后注意iptables设置
iptables -A INPUT -p tcp --dport XXXX -j ACCEPT
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
当然还有其它的,如修改编译sshd,修改其版本信息等等。
二、其它方法
1.使用端口碰撞 knockd
这个软件很有意思,有。
第一种:设置三个端口,当你顺序访问这三个端口,sshd端口会打开;又设置另外三个端口,当你顺序访问这三个端口访问会关闭sshd
第二种:设置三个端口,当你顺序访问这三个端口, 会自动打开sshd端口一段时间,这时你可以连上sshd,超时后会自动断开(见http://linux.vbird(DOT)org/linux_security/knockd.php鸟哥讲的就是这种)
第三种:不使用固定端口,而是指定一个文件,这个文件会生成一次性的端口序列,使用完毕后失效,文件又会生成一个新的序列(oh,my god难道每次都要去查看成的序列是什么,要是忘了查那不是完了?) 理解错误,见评论
安装
[root@unixhater ~]# yum install libpcap
[root@unixhater ~]# yum install libpcap-devel
[root@unixhater ~]# wget http://www.zeroflux.org/proj/knock/files/knock-0.5.tar.gz
[root@unixhater ~]# tar xzvf knock-0.5.tar.gz
[root@unixhater ~]# cd knock-0.5
[root@unixhater knock-0.5]# ./configure --prefix=/usr/local/knock
[root@unixhater knock-0.5]# make && make install
然后编辑 /etc/knock.conf
centos需要更改iptables路径,与ssh端口(因为我已经改了默认端口),接着按手册页的选3个方法中的一个(默认是第一种)
启动
/usr/local/knock/sbin/knockd -d
knock有专门用于顺序访问端口的客户端软件:knock(windows与linux平台都有)当然也可以直接执行三次telnet,或者使用nmap。见
不过值得注意的是,我在公司测试过,效果很好,但是在家测试时发现有问题,有时可以,但大多数不行,具体是我通过knock关闭sshd,但是并没 有生效。查看日志,又有IP打开!而且出现的几率很大,我查了一下,都是深圳的IP,我有个想法,可能是因为我这里宽带有多路负载均衡机制,导致出包顺序 都乱了。
2.iptables的recent模块 见
基本原理是:如果攻击者在特定时间内尝试登录sshd一定次数,就会被iptables屏蔽一段时间。
3.denyhost 见
基本原理是:这个软件自动分析日志,并将攻击者加入到/etc/hosts.deny文件中,这样就屏蔽了他们。
总之我觉得方法1相当于又加了一道验证,而方法2,3,它们是针对攻击作出相应的屏蔽。
- 最新评论