- A+
SSH的安全是一个服务器或者网站的重中之重,这里简单的介绍一下如何防范被人暴力破解SSH的方法,
这个命令查看了有多少ip在暴力破解我的ssh:
grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
找了两条防暴力破解的命令:
1:iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set2:iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
第一句是说,对于外来数据,如果是 TCP 协议,目标端口号是 22,网络接口是 eth0,状态是新连接,那么把它加到最近列表中。
第二句是说,对于这样的连接,如果在最近列表中,并且在 60 秒内达到或者超过四次,那么丢弃该数据。其中的-m是模块的意思。
也就是说,如果有人从一个 IP 一分钟内连接尝试四次 ssh 登录的话,那么它就会被加入黑名单,后续连接将会被丢弃。
SSH服务的配置文件位于/etc/ssh/sshd_config
,我们的安全设置都是围绕此文件展开,所以修改前最好先备份一次,以免出现无法登陆的情况。
修改完不要忘了执行:
service sshd restartservice ssh restart
修改端口:
如何打开:
vim /etc/ssh/sshd_config
默认的 SSH 端口是 22。强烈建议改成 10000 以上。这样别人扫描到端口的机率也大大下降。修改方法:
# 编辑 /etc/ssh/ssh_configvi /etc/ssh/ssh_config# 在 Host * 下 ,加入新的 Port 值。以 18439 为例(下同):Port 22Port 18439# 编辑 /etc/ssh/sshd_configvi /etc/ssh/sshd_config#加入新的 Port 值Port 22Port 18439# 保存后,重启 SSH 服务:CentOS 重启SSH :service sshd restartDeBian重启SSH: service ssh restart
这里我设置了两个端口,主要是为了防止修改出错导致 SSH 再也登不上。更改你的 SSH 客户端(例如:Putty)的连接端口,测试连接,如果新端口能连接成功,则再编辑上面两个文件,删除 Port 22 的配置。如果连接失败,而用 Port 22 连接后再重新配置。
端口设置成功后,注意同时应该从 iptables 中, 删除22端口,添加新配置的 18439,并重启 iptables。 /etc/init.d/iptables restart
登陆IP限制:
方法一:首先需要限制登录的ip(或者如果需要自己本地登录,查看最后登录ip即可)Vim /etc/hosts.allow输入sshd:114.80.100.159:allowvim /etc/hosts.deny输入(表示除了上面允许的,其他的ip 都拒绝登陆ssh)sshd:ALL最后sshd重启service sshd restart(centos)service ssh restart(debian)方法二:比如说你只允许114.80.100.159这个IP进入,其它都禁止:vim /etc/ssh/sshd_config添加一行:allowusers xxx@114.80.100.159注:xxx为你用来登入服务器的用户名最后sshd重启service sshd restart(centos)service ssh restart(debian)
root身份SSH登录到服务器。第二步:在命令提示符下输入:pico -w /etc/ssh/sshd_config第三步:向下翻页,在这个文件中找到像这样的区域:#Port 22#Protocol 2, 1#ListenAddress 0.0.0.0#ListenAddress ::第四步:取消注释符号#,并修改端口 #Port 22像这样修改它Port 5678(选择你未被使用的4到5位数字组成的端口(49151是最高端口数))协议 #Protocol 2, 1改为这样:Protocol 2监听地址 #ListenAddress 0.0.0.0改为这样:ListenAddress 125.121.123.15(这里的地址改为你自己访问服务器常用的客户端ip地址)第五步 如果你想禁用直接用root登录,向下翻知道你看见#PermitRootLogin yes去掉前面的注释符号#,修改为PermitRootLogin no按住Ctrl键保存修改,在按Ctrl + x组合键退出。第六步 在命令提示符下输入: /etc/rc.d/init.d/sshd restart第七步 退出SSH,以后再登录就必须使用新的端口号(如:49151),并且服务器限制只允许从一个指定的IP地址(如:125.121.123.15)SSH登录了。注意事项:如果修改后出现不能登录或者其他问题,你只需要为服务器接上显示器 或者 Telnet 到你的服务器,修改设置,然后再重新SSH登录。Telnet 是一个非常不安全的协议,所以在你使用它之后最好是修改一下你的root密码。
检查登录日志:
如果你的服务器一直很正常,那也可能不正常的表现,最好的办法就是定期查询ssh的登录日志,手动发现系统的异常!
# vim /etc/ssh/sshd_config# addLogLevel DEBUG# 查看最近100条登录日志tail -100 /var/log/secure# 登录成功日志who /var/log/wtmplast
fail2ban:
这个小巧的软件可以代替你做很多事情,以暴力破解ssh密码为例,当我们安装fail2ban后,经过合理的配置,我们可以自动屏蔽某个攻击IP的所有请求。前边已详细讲过这里就简单一点:
项目地址:https://github.com/fail2ban/fail2ban
要求:Python2 >= 2.6 or Python >= 3.2 or PyPy
# install# clone repogit clone https://github.com/fail2ban/fail2ban.gitcd fail2ban# do installationpython setup.py install# copy to init.dcp files/redhat-initd /etc/init.d/fail2ban# make it executablechmod 755 /etc/init.d/fail2ban# run on bootchkconfig --add fail2banchkconfig --level 35 fail2ban on# configvim /etc/fail2ban/jail.conf# add[ssh-iptables]enabled = truefilter = sshdaction = iptables[name=SSH, port=ssh, protocol=tcp]sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com, sendername="Fail2Ban"]logpath = /var/log/securemaxretry = 2[ssh-ddos]enabled = truefilter = sshd-ddosaction = iptables[name=ssh-ddos, port=ssh,sftp protocol=tcp,udp]logpath = /var/log/messagesmaxretry = 2# mkdirmkdir -p /var/run/fail2ban# restartservice fail2ban restart# check if the jail is workingservice fail2ban status# fail2ban-server (pid 5408) is running...# Status# |- Number of jail: 2# `- Jail list: ssh-ddos, ssh-iptables
其实,在lnmp里就有这个,大家可以直接一键安装
修改vnc端口防止爆破:
文本编辑器打开vi /usr/bin/vncserver找到下列代码,把当中的5900修改成其它数字$vncPort = 5900 + $displayNumber;然后结束vnc进程vncserver -kill :1reboot
