Linux主机安全加固方法&使用开源软件fail2ban防御主机

2022年01月13日 阅读数:2
这篇文章主要向大家介绍Linux主机安全加固方法&使用开源软件fail2ban防御主机,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

常见的三种加固措施

方法一:主机基础安全加固
方法二:经过开源软件加固主机安全
方法三:经过安全产品加固(略过)php

1、主机基础安全加固(方法一)

如下七种基础安全加固方法可根据本身需求进行配置加固python

一、密码足够的复杂

密码的长度要大于 8 位最好大于 20 位。密码的复杂度是密码要尽量有数字、大小写字母和特殊符号混合组成。linux

二、修改sh默认端口号

vim /etc/ssh/sshd_config #修改sshd配置文件vim

修改此行 
	# Port 22 
改成:
	# Port xxx  #本身定义其它端口
ESC :wq 保存退出

重启sshd服务:centos

systemctl restart sshd

三、禁止 root 远程登陆

不容许 root 帐号直接登录到系统,需添加一个普通帐号,并授予权限加入到wheel组,使用普通帐号先远程登陆到系统,再使用sudo执行命令或使用命令su - root 切换到 root 用户环境
操做步骤:
① 修改sshd配置文件
vim /etc/ssh/sshd_configapi

#PermitRootLogin yes
PermitRootLogin no  #删除 # 号并改成no
ESC :wq  保存退出

重启服务:安全

systemctl restart sshd

② 建立一个用于远程的用户xxx(不要设置admin,user1....等常见的默认帐户名,很容易被猜想到)bash

useradd  rhxjhf  # 建立新用户
passwd   rhxjhf  # 给此用户设置密码

③ 把此用户加入到wheel组(至关于系统管理员组) #若是不加入普通用户没法切换到root帐户服务器

usermod -G wheel  rhxjhf  # 把rhxjhf用户加入到 wheel管理员组
id rhxjhf   # 查看此用户的信息,及是否加到了wheel组

④ 使用新用户远程到服务器,而后使用su - root 输入root密码后便可切换root用户环境markdown

四、Linux主机黑白名单限制远程链接地址

白名单:/etc/hosts.allow
黑名单:/etc/hosts.deny

如只想本身经常使用地址远程链接到服务器,配置方法以下:
① 先在白名单中添加一行容许本身的ip
vim /etc/hosts.allow

sshd:  104.152.xx.xxx      # ip为本身的公网出口ip,有多个即添加多个便可

② 在黑名单文件中添加拒绝全部便可,格式以下(也可以使用平台的安全组限制源IP地址)
vim /etc/hosts.deny #添加以下一行便可

sshd:  ALL

无需重启服务当即生效

五、服务器之间经过密钥免密登陆

操做环境:

服务端:cloud-host1 IP:192.168.1.63
客户端:cloud-host2 IP:192.168.2.64

5.1 客户端生成密钥对,而后把公钥传输到服务端

[root@cloud-host2 ~]# 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:toCXv2xpFWsS6ClyN1sAKPIyup7VEdaQLKJH/tD+EZk root@bogon The key's randomart image is:
#钥匙的随机图像是:
+---[RSA 2048]----+
|  ....	|
|o.o..oo	|
|o=...+ =	|
|+ = o.E.. .	|
|.+ +.o++S. o	|
|. . *.B+o.+	|
| . + = =o=	|
|. o  o.+.	|
|.o	oo	|
+----[SHA256]-----+
[root@cloud-host2 ~]# cd /root/.ssh/ 
[root@cloud-host2 .ssh]# ls
id_rsa  id_rsa.pub known_hosts
id_rsa(私钥);id_rsa.put(公钥);

5.2 把公钥文件传到服务端
使用 ssh-copy-id 命令将客户端生成的公钥发布到远程服务器 192.168.1.63 cloud-host1。

[root@cloud-host2 .ssh]# ssh-copy-id -i 192.168.1.63
The authenticity of host '192.168.1.63(192.168.1.63)' can't be established.

RSA key fingerprint is d9:17:d7:db:38:7c:e8:56:9c:4b:7e:00:7f:9e:1c:74.
Are you sure you want to continue connecting (yes/no)? yes	##### 输入yes 
Warning: Permanently added '192.168.1.64' (RSA) to the list of known hosts. root@192.168.1.63's password:	#### 输入 192.168.1.63 主机登陆密码。
Now try logging into the machine, with "ssh '192.168.1.63'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting
#这个时候能够经过 ssh 无密钥直接登录主机
注意:若是服务器不是监听 22 端口,则须要指定端口传输密钥:
[root@cloud-host2 .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub -p 222 root@192.168.1.63
Number of key(s) added: 1 添加的键数,
秘钥通常存放在 /root/.ssh/authorized_keys
传输完成后再次链接服务端就不须要输入密码了

六、使用密钥并禁止使用密码登陆服务器

① 先按步骤5执行ssh-keygen生成密钥
② 在服务器上安装公钥

cd ~/.ssh/
#把公钥文件内容输出到authorized_keys此文件中
cat id_rsa.pub >> authorized_keys

③ 到此就完成了公钥的安装,请保证如下文件权限正确,权限过大启动sshd服务就会报错

chmod 600 authorized_keys
chmod 700 ~/.ssh

④ 设置 SSH,打开密钥登陆功能
编辑 /etc/ssh/sshd_config 文件,进行以下设置:

RSAAuthentication yes
PubkeyAuthentication yes

⑤ 请留意 root 用户可否经过 SSH 登陆:(若是为no也是不能登陆的)

PermitRootLogin yes

⑥ 当你完成所有设置,并以密钥方式登陆成功后,再禁用密码登陆选项:

PasswordAuthentication  no

保存退出
重启服务:

systemctl restart sshd

⑦ 下载私钥文件到本地电脑中,若是没有sz命令则执行如下命令安装上传下载工具

yum install lrzsz -y
sz  id_rsa    # sz下载私钥文件

再次链接服务器就会看见密码栏为灰色,只能使用刚刚从服务器上下载的密钥登陆

image

七、经过云平台的安全组限制远程登录的ip

2、使用开源软件fail2ban加固主机安全(方法二)

优势:

使用简单、灵活、功能强大(此功能须要配合iptables使用)

原理:

经过调用iptables等安全策略来达到放暴力破解的目的!

场景说明:

使用云主机对外提供的公网网站一直被别人暴力破解 SSHD 服务密码。虽然没有成功,但会致使系统负载很高,缘由是在暴力破解的时候,系统会不断地认证用户,从而增长了系统资源额外开销,致使访问公司网站速度很慢。
然而fail2ban 程序能够监视你的系统日志,而后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动做(通常状况下是防火墙),并且能够发送 e-mail 通知系统管理员,很实用、很强大!
简单来讲其功能就是防止暴力破解。工做的原理是经过分析必定时间内的相关服务日志,将知足动做的相关IP 利用 iptables 加入到 dorp 列表必定时间。

下载软件包:

官方地址:http://www.fail2ban.org 如图

image

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

image

图 1-8 fail2ban 程序下载
注意:以上展现 fail2ban 的源码包下载,如下实验使用 yum 安装。

安装配置:
须要安装 python 开发环境,而且版本要大于 2.4。

[root@cloud-host1 ~]# python -V
Python 2.6.6

使用 yum 安装 fail2ban

[root@cloud-host1 ~]# y um -y install epel-release 
[root@cloud-host1 ~]#  yum -y install fail2ban

相关主要文件说明

ls /etc/fail2ban/
........
/etc/fail2ban/action.d
/etc/fail2ban/fail2ban.conf
/etc/fail2ban/filter.d
/etc/fail2ban/jail.conf

应用实例:

设置条件:SSH 远程登陆 5 分钟内 3 次密码验证失败,禁止用户 IP 访问主机 1 小时,1 小时该限制自动解除,用户可从新登陆。
由于动做文件(action.d/iptables.conf)以及日志匹配条件文件(filter.d/sshd.conf )安装后是默认存在的。基本不用作任何修改。全部主要须要设置的就只有 jail.conf 文件。启用SSHD 服务的日志分析,指定动做阀值便可。

一、配置文件:/etc/fail2ban/jail.conf 及说明以下:

[root@cloud-host1 ~]# vim /etc/fail2ban/jail.conf
[DEFAULT]	#全局设置
ignoreip =	  #忽略的 IP 列表,不受设置限制。 
bantime  = 10m		#屏蔽时间,单位:秒。
findtime  = 10m		#这个时间段内超过规定次数会被 ban 掉。 maxretry = 5	#最大尝试次数。
backend = auto	#日志修改检测机制(gamin、polling 和 auto 这三种)。

[sshd]	#单个服务检查设置,如设置 bantime、findtime、maxretry 和全局冲突,服务
优先级大于全局设置。
port	= ssh	279 行 
logpath = %(sshd_log)s 
backend = %(sshd_backend)s

#加入以下内容
enabled  = true	#是否激活此项(true/false)修改为 true。
filter = sshd	#过滤规则 filter 的名字,对应 filter.d 目录下的 sshd.conf。 
action = iptables[name=SSH, port=ssh, protocol=tcp]	#动做的相关参数,对应action.d/iptables.conf 文件。
sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"]	#触发报警的收件人。可写可不写 根据本身须要
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 次密码验证失败。

二、配置内容以下图:

image

三、启动服务
[root@cloud-host1 ~]# systemctl start fail2ban	# 启动fail2ban服务
[root@cloud-host1 ~]# systemctl enable fail2ban	# 设置开机自动启动

[root@cloud-host1 ~]# > /var/log/secure	# 清空日志内容
[root@cloud-host1 fail2ban]# systemctl restart fail2ban	#重启 fail2ban 服务

四、测试

测试:故意输入错误密码 3 次,再进行登陆时,会拒绝登陆。 
[root@cloud-host2 ~]# ssh 192.168.1.63
root@192.168.1.63's password:	#故意输入错误密码。 
Permission denied, please try again.
root@192.168.1.63's password:	#故意输入错误密码。 
Permission denied, please try again.
root@192.168.1.63's password:	#故意输入错误密码。 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[root@cloud-host2 ~]# ssh 192.168.1.63
ssh: connect to host 192.168.1.63 port 22: Connection refused

五、而后咱们检测下 fail2ban是否工做。

[root@cloud-host1 ~]# fail2ban-client status
Status
|- Number of jail:   1
`- Jail list:	sshd	#具体看某一项的状态也能够看,若是显示被 ban 的ip 和数目就表示成功了,若是都是 0,说明没有成功。

[root@cloud-host1 ~]# fail2ban-client status sshd 
Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	0
|  `- Journal matches:	_SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned:   1
|- Total banned:  1
`- Banned IP list: 192.168.1.64

查看 fail2ban 的日志可以看到相关的信息。

[root@cloud-host1 ~]# tail /var/log/fail2ban.log
2018-11-07 16:11:01,476 fail2ban.actions	[27932]: NOTICE  [sshd] Ban 192.168.1.64

须要注意的两点:

一、若是后期须要把 iptables 清空后或 iptables 重启后,也须要把 fail2ban 重启一下
二、若是修改 ssh 默认端口 22 为 2015 后,配置 fail2ban 来监控 SSHD 服务须要修改配置文件
例:

[root@cloud-host1 ~]# vim /etc/ssh/sshd_config
改 17 #Port 22
为 17 Port 2015
[root@cloud-host1 ~]# systemctl restart sshd 
[root@cloud-host1 ~]# vim /etc/fail2ban/jail.conf
#修改 iptables 动做中的端口号,默认为 SSH,如图 1-11 所示。
改:port=ssh
为  port=2015

image

修改 fail2ban 监听 SSH 端口重启服务便可
systemctl restart fail2ban

误操做本身的ip被加入黑名单,则能够手动移除本身的ip
fail2ban 从黑名单中移除 IP 的方法:

fail2ban-client set sshd unbanip 192.168.1.6