Mike 发表于 2021-7-30 20:02:21

Linux 云计算集群架构师(第2阶段)->第一章 SSHD 服务搭建管理和防止暴力破解

第一章 SSHD 服务搭建管理和防止暴力破解
(上课时间20021-07-28,笔记整理时间2021-07-30)
本节所讲:
1.1 学习 Linux 服务前期环境准备、搭建 CentOS 7 环境
1.2 sshd 服务安装-ssh 命令使用方法
1.3 sshd 服务配置和管理
1.4 sshd 服务防止暴力破解
1.5 实战-通过升级 SSH 服务修复安全漏洞

1.1 学习 Linux 服务前期环境准备、搭建 CentOS 7 环境
1.1.1 清空关闭防火墙
由于前期尚未学习“防火墙”为了不受到防火墙影响实验的顺利进行,因此清空并关闭防火墙。
# iptables -F
# systemctl stop firewalld
# systemctl disable firewalld1.1.2 SElinux 设置:
# getenforce
Disabled
# setenforce 0               #临时关闭(机器重启则会失效)
# vim /etc/selinux/config      #永久关闭 SElinux
SELINUX=disabled
图 1-1 SElinux 配置文件
1.1.3 配置 IP:
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=1f89b9f2-cbe4-47d9-b678-caa04547e990
DEVICE=ens33
ONBOOT=yes
IPV6_PRIVACY=no
IPADDR=10.170.80.80
PREFIX=24
GATEWAY=10.170.80.1
DNS1=202.100.96.68注释:修改网卡配置文件,主要修改内容项 BOOTPROTO="static" 、ONBOOT="yes" 、IPADDR=10.170.80.80 、GATEWAY=10.170.80.1 、NETMASK=255.255.255.0 、DNS1=114.114.114.114 以上 6 项。
重启服务:systemctl restart network
1.1.4 配置主机和 IP 映射关系
# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.170.80.80    linux80.cn      linux80
10.170.80.81    linux81.cn      linux81
10.170.80.82    linux83.cn      linux821.1.5 修改主机名
# vim /etc/hostname                        #永久修改主机名
centos80
# hostnamectl set-hostname "centos80"      #永久修改主机名
# hostname centos80                        #临时修改主机名
centos801.1.6 配置 Yum 源
1.配置本地 Yum 源:
# vim /etc/fstab
# echo "/dev/sr0 /media iso9660 defaults 0 0" >> /etc/fstab设置开机自动挂载光驱。
# cat > /etc/yum.repos.d/centos7.repo <<EOF
>
>name= centos7-source
>baseurl=file:///mnt
> enabled=1
>gpgcheck=0
> EOF
或:
# vim /etc/yum.repos.d/centos7.repo

name= centos7-source
baseurl=file:///mnt
enabled=1
gpgcheck=02.配置网络 yum 源:
阿里云镜像源站点(http://mirrors.aliyun.com/)。
CentOS 镜像参考:http://mirrors.aliyun.com/help/centos
# mv /etc/yum.repos.d/CentOS-Base.repo{,.backup}下载新的 CentOS-Base.repo 到/etc/yum.repos.d/
安装 wget 工具:
# rpm -ivh /media/Packages/wget-1.14-18.el7.x86_64.rpm 下载 yum 源:
# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
或者
# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# yum makecache 1.1.7 安装 epel 源
# yum -y install epel-release
1.2 sshd 服务安装-ssh 命令使用方法
1.2.1 SSHD 服务
Linux 中的服务是一类常驻在内存中的进程,这类进程启动后就在后台当中一直持续不断的运行,因为这类进程通常是负责一些系统提供的功能来服务用户的各项任务,所以这类进程被称为服务,比如 crond、atd、syslog、Apache 都是属于服务。
作用:SSHD 服务使用 SSH 协议可以用来进行远程控制,或在计算机之间传送文件。
相比较之前用 Telnet 方式来传输文件要安全很多,因为 Telnet 使用明文传输,SSH 是加密传输。
1.2.2 安装 SSH 服务
安装方法有两种:
通过 yum 安装(推荐使用):
# yum -y install openssh openssh-clients openssh-server
# yum info openssh-server      #查看所有安装的程序包的作用本地直接安装 rpm 包文件:
# rpm -ivh /media/Packages/openssh.rpm确认软件包是否已经安装:
#使用 rpm -qa 查看所有安装的程序包,并过虑 openssh 的程序包。
# rpm -qa | grep openssh
openssh-server-7.4p1-21.el7.x86_64
openssh-7.4p1-21.el7.x86_64
openssh-clients-7.4p1-21.el7.x86_64#查看软件安装生产的文件
# rpm -ql openssh
/etc/ssh
/etc/ssh/moduli
/usr/bin/ssh-keygen
/usr/libexec/openssh
………………OpenSSH 配置文件:
OpenSSH 常用配置文件有两个/etc/ssh/ssh_config 和/etc/ssh/sshd_config。
ssh_config 为客户端配置文件,设置与客户端相关的应用可通过此文件实现。
sshd_config 为服务器端配置文件,设置与服务端相关的应用可通过此文件实现。
服务启动关闭脚本:
# systemctl restart|stop|start|status sshd注释:Linux 下一般用“|”表示或者(多选一),其中 restart|stop|start|status,在同一时间仅使用一个。
# chkconfig sshd on                        #开机启动服务
注意:正在将请求转发到“systemctl enable sshd.service”。
# systemctl is-enabled sshd                #查看 sshd 服务是否开机启动
enabled
# systemctl list-unit-files | grep sshd查看所有开机管理服务,过虑 sshd 服务
anaconda-sshd.service                         static
sshd-keygen.service                           static
sshd.service                                  enabled
sshd@.service                                 static
sshd.socket                                 disabled1.2.3 如何使用 SSH 来远程连接主机
ssh [远程主机用户名] @[远程服务器主机名或 IP 地址] -p port
# ssh -l cat 10.170.80.80-l :-l 选项,指定登录用户。
-p:-p 选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)。
SCP 命令:scp 可以实现远程主机之间的文件复制,scp 使用 ssh 协议。
命令格式:scp user@host1:file1 user@host2:file2
命令格式:scp file user@host1:/路径
常用选项:
-r:复制目录时使用。
-P:大写的 P 指定端口。

1.3 SSHD 服务配置和管理
1.3.1 配置文件详解
注:在配置文件中参数前面有#号,表示是默认值,当然#号也表示注释。
/etc/ssh/sshd_config 配置文件内容详解。
Port 22
设置 SSHD 监听端口号。
SSH 预设使用 22 这个 port,也可以使用多个 port,即重复使用 port 这个设定项!例如想要开放 SSHD 端口为 22 和 222,则多加一行内容为:Port 222 即可。然后重新启动 SSHD 这样就好了。建议大家修改 port number 为其它端口,防止别人暴力破解。
服务的配置文件修改之前最好 copy 一份。
修改 SSHD 服务默认监听的端口为 222.

# vim /etc/ssh/sshd_config
改17行:
Port 22

Port 222
# vim /etc/ssh/sshd_config
# systemctl restart sshd
# netstat -tlunp | grep sshd
# netstat -tlunp | grep sshd
tcp      0   0 0.0.0.0:222      0.0.0.0:         LISTEN   56866/sshd
tcp      0   0 127.0.0.1:6010   0.0.0.0:*         LISTEN   1549/sshd: root@pts
tcp      0   0 127.0.0.1:6011   0.0.0.0:         LISTEN   1811/sshd: root@pts
tcp6   0   0 :::222             :::                LISTEN   56866/sshd
tcp6   0   0 ::1:6010         :::*                LISTEN   1549/sshd: root@pts
tcp6   0   0 ::1:6011         :::                LISTEN   1811/sshd: root@pts修改完端口默认端口后,登录方法:
# ssh -p 222 10.170.80.80
root@10.170.80.80's password: 设置 SSHD 服务器绑定的 IP 地址,0.0.0.0 表示侦听所有地址
安全建议:如果主机不需要从公网 ssh 访问,可以把监听地址改为内网地址
这个值可以写成本地 IP 地址,也可以写成所有地址,即 0.0.0.0 表示所有 IP。
实战:安全调优的重点:
1.LoginGraceTime 2m
grace 意思是系统给与多少秒来进行登录。当使用者连上 SSH server 之后,会出现输入密码的画面,在该画面中。在多久时间内没有成功连上 SSH server 就强迫断线!若无单位则默认时间为秒。
2.PermitRootLogin yes
是否允许 root 登入,默认是允许的,但是建议设定成 no,真实的生产环境服务器,是不允许 root账号直接登陆的,仅允许普通用户登录,需要用到 root 用户再切换到 root 用户。
3.PasswordAuthentication yes
密码验证当然是需要的!所以这里写 yes(即允许密码和密钥验证),也可以设置为 no(no 只允许密钥验证不允许密码验证),在真实的生产服务器上,根据不同安全级别要求,有的是设置不需要密码登陆的,通过认证的秘钥来登陆。
4.PermitEmptyPasswords no
是否允许空密码的用户登录,默认为 no,不允许空密码登录。
5.PrintLastLog yes
显示上次登入的信息!默认为 yes 。
# ssh 10.170.80.80
ssh: connect to host 10.170.80.80 port 22: Connection refusedPrintLastLog yes 项定义即是该回显上次登录的信息。

6.给 sshd 服务添加一些警告信息。
# vim /etc/motd
# echo 'Warning! www.runoob.com'>/etc/motd
# cat /etc/motd
Warning! www.runoob.com7.UseDNS yes
一般来说,为了要判断客户端来源是正常合法的,因此会使用 DNS 去反查客户端的主机名,但通常在内网互连时,一般设置为 no,因此使联机速度会快些。

1.4 SSHD 服务防止暴力破解
暴力破解:其他人 有你 ip 用户 密码
1.4.1 配置安全的 SSHD 服务(方法一)
密码足够的复杂:密码的长度要大于 8 位不大于 20 位。密码的复杂度是密码要尽可能有数字、大小写字母和特殊符号混合组成。
修改默认端口号。
禁止 root 登录:不允许 root 账号直接登陆到系统,添加普通账号,使用普通账号登录系统,授予 root的权限,必要时再从普通用户切换到 root 用户。
不允许密码登陆,只能通过认证的密钥来登陆系统。
1.4.1通过密钥认证实现 SSHD 认证。
实验环境:
服务端:centos80 IP:10.170.80.80
客户端:centos81 IP:10.170.80.81
客户端生成密钥对,然后把公钥传输到服务端
# ssh-keygen
Generating public/private rsa key pair.生成公共/私有 rsa 密钥对。
Enter file in which to save the key (/root/.ssh/id_rsa): 输入保存密钥的文件(/root/.ssh/id\u rsa):
Enter passphrase (empty for no passphrase): 输入密码短语(无密码短语为空):
Enter same passphrase again: 再次输入相同的密码短语:
Your identification has been saved in /root/.ssh/id_rsa.您的标识已保存在/root/.ssh/id_rsa 中。
Your public key has been saved in /root/.ssh/id_rsa.pub.您的公钥已保存在/root/.ssh/id_rsa.pub 中。
The key fingerprint is:关键指纹是:
SHA256:hhJAxp2URPQjVbfc0qBMflbEYzZ7+Dycd8cViUu75AI root@centos80
The key's randomart image is:钥匙的随机图像是:
+-------+
| o+=o..o ooo . .|
| ...+o + + **o o |
|    o o + o+=o .|
|   o o E .o+. .|
|    . . S . o=.o.|
|   . .   . o =|
|            .oo|
|               |
|               |
+---------+
# cd /root/.ssh/
# ls
id_rsaid_rsa.pubknown_hosts发布公钥到服务端。
使用 ssh-copy-id 命令将客户端生成的公钥发布到远程服务器10.170.80.81 centos81。
# ssh-copy-id 10.170.80.81
# ssh-copy-id 10.170.80.81
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.d_rsa.pub"
The authenticity of host '10.170.80.81 (10.170.80.81)' can't be establ.
ECDSA key fingerprint is SHA256:iw9M3vxcdZDHC0HOxA/CDV850kKqF73q5KiPwM.
ECDSA key fingerprint is MD5:90:ba:fd:f0:af:b4:08:b3:12:fc:0b:a9:bf:d3f.
Are you sure you want to continue connecting (yes/no)? yes#输入 yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), lter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you rompted now it is to install the new keys
root@10.170.80.81's password:   #输入 192.168.1.63 主机登录密码。
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh '10.170.80.81'"
and check to make sure that only the key(s) you wanted were added.#这个时候可以通过 ssh 无密钥直接登陆主机
注意:如果服务器不是监听 22 端口,则需要指定端口传输密钥:
# ssh-copy-id -i ~/.ssh/id_rsa.pub -p 222 root@10.170.80.811.4.2 通过开源的防护软件来防护安全(方法二)
优点:使用简单、灵活、功能强大
实战背景:
最近公网网站一直被别人暴力破解 SSHD 服务密码。虽然没有成功,但会导致系统负载很高,原因是在暴力破解的时候,系统会不断地认证用户,从而增加了系统资源额外开销,导致访问公司网站速度很慢。
然而 fail2ban 程序可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送 e-mail 通知系统管理员,很实用、很强大!
简单来说其功能就是防止暴力破解。工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关 IP 利用 iptables 加入到 dorp 列表一定时间。
下载软件包
官方地址:http://www.fail2ban.org    如图 1-7 所示

图 1-7 fail2ban 官网
fail2ban 程序下载地址:http://www.fail2ban.org/wiki/index.php/Downloads,如图 1-8 所
示。

图 1-8 fail2ban 程序下载
需要安装 python 开发环境,并且版本要大于 2.4。
# python -V
Python 2.7.5使用 yum 安装 fail2ban
# yum -y install epel-release.noarch
# yum -y install fail2ban相关主要文件说明

# /etc/fail2ban/jail.conf      #fail2ban配置文件应用实例
设置条件:SSH 远程登录 5 分钟内 3 次密码验证失败,禁止用户 IP 访问主机 1 小时,1 小时后该限制自动解除,用户可重新登录。
因为动作文件(action.d/iptables.conf)以及日志匹配条件文件(filter.d/sshd.conf )安装后是默认存在的。基本不用做任何修改。所有主要需要设置的就只有 jail.conf 文件。启用 SSHD 服务的日志分析,指定动作阀值即可。
实例文件:/etc/fail2ban/jail.conf 及说明如下:
279 行
#单个服务检查设置,如设置 bantime、findtime、maxretry 和全局冲突,服务优先级大于全局设置。
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s加入如下内容
enabled = true #是否激活此项(true/false)修改成 true。
filter = sshd#过滤规则 filter 的名字,对应 filter.d 目录下的 sshd.conf。
action = iptables #动作的相关参数,对应
action.d/iptables.conf 文件。
sendmail-whois #触发报警的收件人。
logpath = /var/log/secure #检测的系统的登陆日志文件。这里要写 sshd 服务日志文件。
默认为 logpath = /var/log/sshd.log(在 centos8 当中需要删除默认的 ssh 区域 logpath 选项) 。5 分钟内 3 次密码验证失败,禁止用户 IP 访问主机 1 小时。 配置如下。
bantime = 3600#禁止用户 IP 访问主机 1 小时。
findtime = 300#在 5 分钟内内出现规定次数就开始工作。
maxretry = 3    #3 次密码验证失败。# vim /etc/fail2ban/jail.conf
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
enabled = true
filter = sshd
action = iptables
sendmail-whois[name=SSH, dest=yonghui@163.com, sender=yonghui@126.com
sendername="YongHui"]
logpath = /var/log/secure
bantime = 3600
findtime = 300
maxretry = 3# systemctl start fail2ban             #启动 fail2ban 服务
# systemctl enable fail2ban.service    #设置开机自动启动
Created symlink from /etc/systemd/system/multi-user.target.wants/fail2ban.service to /usr/lib/systemd/system/fail2ban.service.

# systemctl enable --now fail2ban测试:故意输入错误密码 3 次,再进行登录时,会拒绝登录。

# ssh 10.170.80.80
ssh_exchange_identification: read: Connection reset by peer
1.5 实战-通过升级 SSH 服务修复安全漏洞
SSH 服务用于远程连接服务器,但是如果 ssh 服务存在漏洞,***就可以通过 ssh 服务远程控制服务器。
例如:以下版本范围内都存在漏洞。

更新 ssh 版本修复漏洞
如果你的 ssh 版本过低可以通过 yum 直接升级 sshd 服务。如果可以使用 yum 升级尽量使用 yum进行升级,因为 yum 升级维护起来很方便。
# yum update openssh -y如果想安装到最新版本的 openssh 则需要使用源码安装。
配置备用连接方式 telnet,以防止配置失败不能连接服务器。
# yum -y install xinetd telnet-server检查配置文件,如果存在/etc/xinetd.d/telnet 文件则需要修改配置使 root 用户可以通过 telnet 登陆,如果不存在该文件则无需配置。
# ll /etc/xinetd.d/telnet
ls: 无法访问/etc/xinetd.d/telnet: 没有那个文件或目录扩展:/etc/xinetd.d/telnet 文件配置
改:
disable = no
为:
disable = yes
配置 telnet 登录的终端类型,添加 pts 终端,文件末尾添加即可。
# vim /etc/securetty
tty1
tty2
tty3配置开机自启
# systemctl enable xinetd && systemctl start xinetd
# systemctl start telnet.socket telnet 连接服务器,xshell 协议选择 telnet。
安装依赖库:
# yum -y install gcc gcc-c++ zlib zlib-devel openssl openssl-devel pam-devel libselinux-devel下载源码包
# wget -c
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.3p1.tar.gz
-c 断点续传
备份现有 ssh 配置文件
# mkdir /opt/sshbak
# mv /etc/ssh /opt/sshbak/
# mkdir /usr/local/sshd      #创建新的安装目录
# https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.3p1.tar.gz
# tar zxvf openssh-8.3p1.tar.gz
# cd openssh-8.3p1/
# ./configure --with-md5-passwords --with-pam --with-selinux --with-privsep-path=/usr/local/sshd/ --sysconfdir=/etc/ssh
由于启用了 PAM 则需要安装一个配置文件,该文件在 contrib 目录下。
# cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
# cp -a contrib/redhat/sshd.init /etc/init.d/sshd
# make -j 4 && make install
# vim /etc/ssh/sshd_config
改:
33 #PermitRootLogin prohibit-password
为:
33 PermitRootLogin yes
改:
39 #PubkeyAuthentication yes
为:
38 PubkeyAuthentication yes
改:(去掉注释即可,此处是优化项如果使用 DNS 解析速度会很慢)
100 #UseDNS no
为:
100 UseDNS no配置开机自启动
# chkconfig --add sshd
# systemctl enable sshd
# mv /usr/lib/systemd/system/sshd.service /opt/sshbak/删除原有的 system 开机启动项
# chkconfig sshd on       #开机自启
注意:正在将请求转发到“systemctl enable sshd.service”。# /etc/init.d/sshd restart
Restarting sshd (via systemctl):                           [确定]
# ss -antup | grep 22
udp UNCONN 0 0192.168.122.1:53   :*   users:(("dnsmasq",pid=1430,fd=5))
tcp LISTEN 0 5192.168.122.1:53   :    users:(("dnsmasq",pid=1430,fd=6))
tcp LISTEN 0 128*:22   :    users:(("sshd",pid=85489,fd=3))
tcp ESTAB0 36 10.170.80.80:22    10.170.80.180:55984    users:(("sshd",pid=58751,fd=3))
tcp LISTEN 0 128:::22    :::*      users:(("sshd",pid=85489,fd=4))
# systemctl stop sshd
# ss -antup|grep 22
# ssh -V
OpenSSH_8.3p1, OpenSSL 1.0.2k-fips26 Jan 2017禁用 telnet 服务
# systemctl disable telnet.socket && systemctl stop telnet.socket总结:
1.1 学习 Linux 服务前期环境准备、搭建 CentOS 7 环境
1.2 sshd 服务安装-ssh 命令使用方法
1.3 sshd 服务配置和管理
1.4 sshd 服务防止暴力破解
1.5 实战-通过升级 SSH 服务修复安全漏洞

文档来源:51CTO技术博客https://blog.51cto.com/yonhhui/3229001
页: [1]
查看完整版本: Linux 云计算集群架构师(第2阶段)->第一章 SSHD 服务搭建管理和防止暴力破解