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 --set
2: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 restart
service ssh restart
修改端口:
如何打开:
vim /etc/ssh/sshd_config
默认的 SSH 端口是 22。强烈建议改成 10000 以上。这样别人扫描到端口的机率也大大下降。修改方法:
编辑 /etc/ssh/ssh_config
vi /etc/ssh/ssh_config
在 Host * 下 ,加入新的 Port 值。以 18439 为例(下同):
Port 22
Port 18439
编辑 /etc/ssh/sshd_config
vi /etc/ssh/sshd_config
#加入新的 Port 值
Port 22
Port 18439
保存后,重启 SSH 服务:
CentOS 重启SSH :service sshd restart
DeBian重启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:allow
vim /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
add
LogLevel DEBUG
查看最近100条登录日志
tail -100 /var/log/secure
登录成功日志
who /var/log/wtmp
last
fail2ban:
这个小巧的软件可以代替你做很多事情,以暴力破解ssh密码为例,当我们安装fail2ban后,经过合理的配置,我们可以自动屏蔽某个攻击IP的所有请求。前边已详细讲过这里就简单一点:
项目地址:https://github.com/fail2ban/fail2ban
要求:Python2 >= 2.6 or Python >= 3.2 or PyPy
install
clone repo
git clone https://github.com/fail2ban/fail2ban.git
cd fail2ban
do installation
python setup.py install
copy to init.d
cp files/redhat-initd /etc/init.d/fail2ban
make it executable
chmod 755 /etc/init.d/fail2ban
run on boot
chkconfig --add fail2ban
chkconfig --level 35 fail2ban on
config
vim /etc/fail2ban/jail.conf
add
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com, sendername="Fail2Ban"]
logpath = /var/log/secure
maxretry = 2
[ssh-ddos]
enabled = true
filter = sshd-ddos
action = iptables[name=ssh-ddos, port=ssh,sftp protocol=tcp,udp]
logpath = /var/log/messages
maxretry = 2
mkdir
mkdir -p /var/run/fail2ban
restart
service fail2ban restart
check if the jail is working
service 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 :1
reboot