SSH的安全问题,防止被人暴力破解SSH.

  • A+
所属分类:LIUNX Talk

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 重启SSHservice 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 restartcentos
service ssh restartdebian
方法二:
比如说你只允许114.80.100.159这个IP进入,其它都禁止:
vim /etc/ssh/sshd_config
添加一行:
allowusers xxx@114.80.100.159
注:xxx为你用来登入服务器的用户名
最后sshd重启
service sshd restartcentos
service ssh restartdebian

 

root身份SSH登录到服务器。
第二步:在命令提示符下输入:pico -w /etc/ssh/sshd_config
第三步:向下翻页,在这个文件中找到像这样的区域:
  #Port 22
  #Protocol 2, 1
  #ListenAddress 0.0.0.0
  #ListenAddress ::
第四步:取消注释符号#,并修改
  端口 #Port 22
  像这样修改它
  Port 5678
  (选择你未被使用的45位数字组成的端口(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
weinxin
我的QQ群
这是我的QQ群扫一扫

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: