SSHD服务与SSHD防暴力破解

  首先我们准备两台centos7-1708的主机。

  由于我的是两台虚拟主机,所以需要设置下网卡。

# rm -rf /etc/udev/rules.d/70-persistent-net.rules
#reboot

  然后修改一下主机名称和映射关系

#hostnamectl set-hostname new_name  (永久修改,centos7与之前版本不一样)  
#emacs /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomai\
n4
::1         localhost localhost.localdomain localhost6 localhost6.localdomai\
n6
192.168.1.223 xpsl223.cn xpsl223
192.168.1.224 xpsl224.cn xpsl224

  添加epel源

[root@xpsl224 ~]# yum install epel-release -y

  

SSHD服务

  介绍:SSH 协议:安全外壳协议。为 Secure Shell 的缩写。SSH 为建立在应用层和传输层基础上的安全协议。

  作用:sshd服务使用SSH协议可以用来进行远程控制, 或在计算机之间传送文件

  相比较之前用telnet方式来传输文件要安全很多,因为telnet使用明文传输,是加密传输。

  服务安装:

  需要安装OpenSSH 四个安装包:

  OpenSSH软件包,提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务。

  安装包:

  OpenSSH服务需要个软件包

  openssh-5.3p1-114.el6_7.x86_64       :包含OpenSSH服务器及客户端需要的核心文件

  openssh-clients-5.3p1-114.el6_7.x86_64   OpenSSH客户端软件包

  openssh-server-5.3p1-114.el6_7.x86_64   OpenSSH服务器软件包

  openssh-askpass-5.3p1-114.el6_7.x86_64  :支持对话框窗口的显示,是一个基于系统的密码诊断工具

  这四个软件包在我们的RHEL镜像软件安装包里有。我们用yum安装。

 

#yum install openssh openssh-clients openssh-server -y

 

  本地源安装

#rpm –ivh /media/cdrom/Packages/openssh*.rpm

  可能要解决依赖关系

  确认软件包是否已安装

[root@xpsl224 ~]# rpm -qa |grep openssh
openssh-server-7.4p1-13.el7_4.x86_64
openssh-askpass-7.4p1-13.el7_4.x86_64
openssh-7.4p1-13.el7_4.x86_64
openssh-clients-7.4p1-13.el7_4.x86_64

  查看安装目录

[root@xpsl224 ~]# rpm -ql openssh
/etc/ssh
/etc/ssh/moduli
/usr/bin/ssh-keygen
/usr/libexec/openssh
/usr/libexec/openssh/ctr-cavstest
/usr/libexec/openssh/ssh-keysign
/usr/share/doc/openssh-7.4p1

  penSSH配置文件

  OpenSSH常用配置文件有两个/etc/ssh/ssh_config和/etc/sshd_config。
  ssh_config为客户端配置文件
  sshd_config为服务器端配置文件

  启动sshd

[root@xpsl224 ~]# systemctl endble sshd
[root@xpsl224 ~]# systemctl enable sshd

  创建一个普通用户

[root@xpsl223 ~]# useradd cat&&echo 123456 | passwd --stdin cat
更改用户 cat 的密码 。
passwd:所有的身份验证令牌已经成功更新。

  登录

Connection to 192.168.1.223 closed.
[root@xpsl224 ~]# cat /root/.ssh/known_hosts 
xpsl224,fe80::fcbe:5fa4:e3bd:a7%enp0s3 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJr6swsM2RstOxoFTOzeK/6sHWJb5AUzAHX18JofptM4BKSW2zy//xbAMRN9U3pmo/QO+UY5P2KOjO4Qu0aYlY8=
xpsl223,192.168.1.223 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJr6swsM2RstOxoFTOzeK/6sHWJb5AUzAHX18JofptM4BKSW2zy//xbAMRN9U3pmo/QO+UY5P2KOjO4Qu0aYlY8=
[root@xpsl224 ~]# vi .ssh/known_hosts 
[root@xpsl224 ~]# ssh cat@192.168.1.223
The authenticity of host '192.168.1.223 (192.168.1.223)' can't be established.
ECDSA key fingerprint is SHA256:zqYQQqjXXhvCdUrrZ4Z3ui3sdxwCVPqHBi+ldCisjJ8.
ECDSA key fingerprint is MD5:45:8b:5b:e2:a6:f5:c5:68:67:c6:fb:26:52:54:da:f7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.223' (ECDSA) to the list of known hosts.
cat@192.168.1.223's password: 

[root@xpsl224 ~]# cat /root/.ssh/known_hosts 
xpsl224,fe80::fcbe:5fa4:e3bd:a7%enp0s3 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJr6swsM2RstOxoFTOzeK/6sHWJb5AUzAHX18JofptM4BKSW2zy//xbAMRN9U3pmo/QO+UY5P2KOjO4Qu0aYlY8=
192.168.1.223 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJr6swsM2RstOxoFTOzeK/6sHWJb5AUzAHX18JofptM4BKSW2zy//xbAMRN9U3pmo/QO+UY5P2KOjO4Qu0aYlY8=

  第一次登录服务器时系统没有保存远程主机的信息,为了确认该主机身份会提示用户是否继续连

接,输入yes 后登录,这时系统会将远程服务器信息写入用户主目录下的$HOME/.ssh/known_hosts文件中,下次再进行登录时因为保存有该主机信息就不会再提示了

  RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

  除了 ssh cat@192.168.1.223,也可以 ssh cat@xpsl223

  还有一种方法是  ssh -l [远程主机用户名] [远程服务器主机名或IP 地址]   例如:  ssh -l cat 192.168.1.223

  

sshd的配置和管理

  介绍下配置文件,以及需要安全调优的地方
  注:参数前面有#,表示是默认值。 当然#号也表示注示。
  /etc/ssh/sshd_config配置文件

  ssh的预设端口是22,如果需要可以修改可一去掉 # port22 前面的 # 号,后面修改数字

  ssh的登录日志存放在  /var/log/secure

 

sshd的安全调优

  # PermitRootLogin yes  

  是否允许 root 登入!预设是允许的,但是建议设定成 no !
  真实的生产环境服务器,是不允许root账号登陆的!!!


  # PasswordAuthentication yes

  密码验证当然是需要的!所以这里写 yes,也可以设置为no
  在真实的生产服务器上,根据不同安全级别要求,有的是设置不需要密码登陆的,通过认证的秘钥来登陆


  # PermitEmptyPasswords no
  若上面那一项如果设定为 yes 的话,这一项就最好设定为 no ,
  这个项目在是否允许以空的密码登入!当然不许!


  # PrintMotd yes
  登入后是否显示出一些信息呢?例如上次登入的时间、地点等等,预设是 yes
  亦即是打印出 /etc/motd这个文档的内容。

  # UseDNSyes
  一般来说,为了要判断客户端来源是正常合法的,因此会使用 DNS 去反查客户端的主机名
  不过如果是在内网互连,这项目设定为 no 会让联机速度比较快。

 

SSHD防止暴力破解的三种方法:

  第一种:

  1.密码足够的复杂,密码的长度要大于8位最好大于20位。密码的复杂度是密码要尽可能有数字、大小写字母和特殊符号混合组成。

  2.修改端口号

  3.禁止root用户登录

 

  第二种:

  通过密匙认证登录。

  客户机 192.168.1.223

  服务端 192.168.1.224

[root@xpsl223 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
#提示输入密匙文件的保存路径 Enter passphrase (empty for no passphrase):
#下面要求输入密码,这里的passphrase 密码是成对生成的私匙文件(/root/.ssh/id_dsa)的保护口令,如果不设置可以回车。
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:7XSEjnLTJqVd6SdBopYgHAP+dMCYG0nFUMqNr8+m37I root@xpsl223
The key's randomart image is:
+---[RSA 2048]----+
| .+%B..   . .    |
| o=+++ . o + .   |
|  =oo . + o =    |
|  .+ . . O + .   |
|    o . S B + .  |
|   .   o * . o   |
|  .       .      |
|   oo.           |
|  .+Eo.          |
+----[SHA256]-----+

  使用ssh-copy-id 命令将客户端生成的公钥发布到远程服务器 192.168.1.224

[root@xpsl223 ~]# ssh-copy-id -i 192.168.1.224
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.1.224's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.1.224'"
and check to make sure that only the key(s) you wanted were added.

现在可以通过密匙登录了。

  

  第三种:

  通过第三方软件 fail2ban 设置。

  虽然你可以加强你的密码,但是对方不停的访问势必会影响服务器性能。

  fail2ban的官网下载地址。    http://www.fail2ban.org/wiki/index.php/Downloads

  下载好后解压

[root@xpsl224 home]# tar zxvf fail2ban-0.9.4.tar.gz 

  从安装文件可以知道 fail2ban 的安装环境要求python大于2.4版本,我们可以用python -V来查看自己的版本

[root@xpsl224 fail2ban-0.9.4]# cd fail2ban-0.9.4/
[root@xpsl224 fail2ban-0.9.4]# python setup.py install

  相关主要文件说明:
  /etc/fail2ban/action.d #动作文件夹,内含默认文件。iptables以及mail等动作配置
  /etc/fail2ban/fail2ban.conf #定义了fai2ban日志级别、日志位置及sock文件位置
  /etc/fail2ban/filter.d #条件文件夹,内含默认文件。过滤日志关键内容设置
  /etc/fail2ban/jail.conf #主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值
  # jail [dʒeɪl]监狱

 

   添加启动项

# cd  /opt/fail2ban-0.9.4
# cp # cp files/redhat-initd /etc/init.d/fail2ban
# chkconfig --add fail2ban

  互动: 你怎么知道要复制这个文件? 一个新的软件包,后期怎么可以知道哪个文件是启动脚本文件?
  这就要找服务器启动脚本文件中有什么特点,然后过滤出来对应的文件名。

[root@xuegod63 fail2ban-0.8.14]# grep chkconfig ./* -R --color
  ./files/redhat-initd:# chkconfig: - 92 08
  启动脚本里都包含chkconfig 字段

  /etc/rc.d/init.d/fail2ban #启动脚本文件

  

 

接下来是实例:

  设置条件:ssh远程登录5分钟内3次密码验证失败,禁止用户IP访问主机1小时,1小时该限制自动解除,用户可重新登录。

  因为动作文件(action.d/iptables.conf)以及日志匹配条件文件(filter.d/sshd.conf )安装后是默认存在的。基本不用做任何修改。所有主要需要设置的就只有jail.conf文件。启用sshd服务的日志分析,指定动作阀值即可。

  实例文件/etc/fail2ban/jail.conf及说明如下:

[DEFAULT]               #全局设置
ignoreip = 127.0.0.1/8       #忽略的IP列表,不受设置限制
bantime  = 600             #屏蔽时间,单位:秒
findtime  = 600             #这个时间段内超过规定次数会被ban掉
maxretry = 3                #最大尝试次数
backend = auto            #日志修改检测机制(gamin、polling和auto这三种)

  

 

除了源码安装centos7我更推荐yum安装的fail2ban

  首先安装epel源

yum -y install epel-release.noarch

  然后yum安装fail2ban

yum -y install fail2ban-firewalld fail2ban-systemd

  

设置Fail2ban
编辑新配置文件
vim/etc/fail2ban/jail.local
加入规则
[DEFAULT]
bantime = 86400
# 禁止的时间,单位秒,我这里设置的是24小时.
findtime = 300
# 检测时间,超过300秒自动激活
maxretry = 10
# 允许最大的错误次数
当然你可以在配置文件里加入SSH的规则,但是我还是选择在目录下建立.
vimetc/fail2ban/jail.d/sshd.local
加入
[sshd]
# 启用,不启用则为:false
enabled = true
# 如果你的是其他的端口,需要在此处填写正确.
port = ssh
#action = firewallcmd-ipset
# 存储日志文件的路径
logpath = %(sshd_log)s
maxretry = 10
bantime = 86400
当然更多的规则你可以查看下面的命令.
 
启用Fail2ban
启动Fail2ban并设置为开机启动.
systemctl enable fail2ban
systemctl start fail2ban
下面是常用的一些命令.
查看拦截日志
fail2ban-client status sshd
添加白名单
fail2ban-client set sshd addignoreip IP地址
 
删除白名单
fail2ban-client set sshd delignoreip IP地址
 
查看Fail2ban日志
tail /var/log/fail2ban.log
 
查看被禁止的IP地址
iptables -L -n

  

 

  

 

 

  

 

  

 

  

 

  

 

posted @ 2018-02-26 11:06  Y.E  阅读(368)  评论(0)    收藏  举报