Centos7 安全配置
1 常见的日志文件如下:
/var/log/messages 绝大多数的系统日志都记录到该文件
/var/log/secure 所有跟安全和认证授权等日志都会记录到此文件
/var/log/maillog 邮件服务的日志
/var/log/cron crond计划任务的日志
/var/log/boot.log 系统启动的相关日志
https://blog.csdn.net/qq_44379042/article/details/120371860
SSH 安全登陆
一、更改SSH登陆端口
主要参照以下文章:
https://zhuanlan.zhihu.com/p/56864040
1. 更改端口
vi /etc/ssh/sshd_config
找到Port 22这行,将前面的注释去掉,再加一行Port 1024,如下,这样做的目的是防止新端口登陆不上,老端口也不能用!
Port 22
Port 1024
保存退出
2.重启sshd服务
如果是CentOS 7使用systemctl restart sshd,查看端口是否生效可以用systemctl status sshd
若报错,检查vi /etc/ssh/sshd_config中,不能有空行
3.添加防火墙规则
首先检测防火墙是否已经启用,启用返回值runing,反之,为not running
firewall-cmd --state
yum install -y firewalld
yum install -y firewall-config
若没有启用,需要启用
systemctl start firewalld
systemctl enable firewalld
若已经启用,则进行下一步
查看防火墙的默认、活跃区域(Zones)
看两条命令的返回值是否含有Public,有则为正确。
firewall-cmd --get-default-zone
firewall-cmd --get-active-zones
端口永久开放
为了防止出错,22端口一同开放
与临时开放的区别在于多了permanent
firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-port=1000/tcp
防火墙重载
firewall-cmd --reload
查看已暴露端口
firewall-cmd --permanent --list-port
firewall-cmd --zone=public --list-all
4. 尝试新端口登陆
尝试用1000端口进行登陆,看是否成功!
如果失败:
永久关闭
vi /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled
设置后需要重启才能生效
5. 尝试新端口登陆
关闭原先的22端口
参考上面的操作,首先在ssh的配置文件去掉22端口,重启sshd服务,然后在防火墙配置里面去除22端口,重启防火墙!这里不再赘述。
firewall-cmd --permanent --zone=public --remove-port=22/tcp
firewall-cmd --reload
二、修改SSH登陆弱口令为强口令
输入修改密码命令
passwd
输入新密码(https://suijimimashengcheng.51240.com/),可以用此密码生成器
三、修改SSH 密钥登陆
https://blog.csdn.net/lynnyq/article/details/79109992?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.nonecase
- 生成私钥和公钥
ssh-keygen -t rsa
- 将公钥导入authorized_keys文件,并将私钥保存到本地计算机
cd .ssh/
cat id_rsa.pub >>authorized_keys
cat authorized_keys
chmod 600 authorized_keys
若在WinSCP无法看到.ssh文件则
Ctrl + Alt + H 快捷键显示,按一次显示,再按则隐藏
将私钥下载到本地
vim /etc/ssh/sshd_config
PubkeyAuthentication yes // 授权公钥登录
AuthorizedKeysFile .ssh/authorized_keys // 授权文件路径
PasswordAuthentication yes // 密码授权
UsePAM yes // 密码授权(redhat系列无效)
user name: root
passphase 之前设置为空,选择下载的私钥文件
即可完成登陆
四、防火墙禁止 和 屏蔽 ip
防火墙禁止ip
http://www.idccoupon.com/1342.html
屏蔽IP
firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=43.229.53.61 reject"
查看屏蔽结果
firewall-cmd --list-rich-rules
海外服务器安装denyhosts
关于denyhosts功能介绍,可参阅下面文章:
https://blog.csdn.net/qq_41729148/article/details/88750014
https://my.oschina.net/itlzm/blog/1610812
https://www.cnblogs.com/xxx91hx/p/4374327.html
Centos7使用DenyHosts防止ssh暴力破解
https://www.bbsmax.com/A/MAzAQGMRz9/
安装denyhosts
1.更新系统(建议所有系统都先更新)
yum update
2.下载DenyHosts
wget http://jaist.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz
3.解压缩
tar -zxvf DenyHosts-2.6.tar.gz -C /usr/local/bin
4.进入解压文件夹
cd /usr/local/bin
5.确认python编译工具安装
yum install -y python
6.开始编译安装setup.py
需要进入DenyHosts-2.6
python setup.py install
7.编辑配置文件
需要确保在cd /usr/share/denyhosts/
vi denyhosts.cfg
cd /usr/share/denyhosts/
cp denyhosts.cfg-dist denyhosts.cfg
cp daemon-control-dist daemon-control
vi denyhost.cfg
过多久后清除已阻止的IP,即阻断恶意IP的时长 (4周)
PURGE_DENY = 4w
允许无效用户登录失败的次数
DENY_THRESHOLD_INVALID = 5
允许普通有效用户登录失败的次数
DENY_THRESHOLD_VALID = 10
设定 deny host 写入到该资料夹
DENY_THRESHOLD_RESTRICTED = 1
将deny的host或ip记录到work_dir中
WORK_DIR = /var/lib/denyhosts
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
###### THESE SETTINGS ARE OPTIONAL
设置管理员邮件地址 例如****@163.Com
ADMIN_EMAIL = root
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts <nobody@localhost>
SMTP_SUBJECT = DenyHosts Report from $[HOSTNAME]
AGE_RESET_VALID=5d
AGE_RESET_ROOT=25d
AGE_RESET_RESTRICTED=25d
AGE_RESET_INVALID=10d
8.启动denyhosts并且设置为开机自启动
cd /etc/rc.d/init.d/
ln -s /usr/share/denyhosts/daemon-control denyhosts
在linux中[ln]这个命令用来创建连接文件。
使用方式:ln [-sf] 源文件 目标文件
选项:-s 就表示创建软链接了,不加的话就是创建硬链接
-f 表示存在的时候删除在创建
chkconfig --add denyhosts
chkconfig denyhosts on
chkconfig --list denyhosts
9. 启动denyhosts
systemctl start denyhosts
报错:
常规问题解决:File "/usr/bin/yum", line 30 及 File "/usr/libexec/urlgrabber-ext-down", line 28
在执行yum命令时忽然发现出现以下报错:
yum list
File "/usr/bin/yum", line 30
except KeyboardInterrupt, e:
^
SyntaxError: invalid syntax
原因:
这是因为yum采用Python作为命令解释器,这可以从/usr/bin/yum文件中第一行#!/usr/bin/python发现。而python版本之间兼容性不太好,使得2.X版本与3.0版本之间存在语法不一致问题。而CentOS 7自带的yum采用的是python2.7,当系统将python升级到3.4后,出现语法解释错误。
解决办法:
一是升级yum。
二是修改yum的解释器为旧版本python2.7,即将连接文件/usr/bin/python连接回/usr/bin/python2.7。治标不治本,不推荐。
三是在设置里更改解释器设置,即修改/usr/bin/yum文件,指定使用python2.7作为yum的解释器:
vi /usr/bin/yum
将第一行"#!/usr/bin/python" 改为 "#!/usr/bin/python2"即可。
安装软件时又会出现另一种报错
Downloading packages:
File "/usr/libexec/urlgrabber-ext-down", line 28
except OSError, e:
^
SyntaxError: invalid syntax
问题与前面一个一样,因此解决办法也是一样的:
1
vi /usr/libexec/urlgrabber-ext-down
将第一行"#!/usr/bin/python" 改为 "#!/usr/bin/python2"即可。
10.查看被禁止的IP
查看denyhosts收集到的恶意ip
$ cat /etc/hosts.deny
统计该文件的行数
$ cat /etc/hosts.deny | wc -l
阿里云服务器安装denyhosts
关于denyhosts功能介绍,可参阅下面文章:
https://blog.csdn.net/qq_41729148/article/details/88750014
https://my.oschina.net/itlzm/blog/1610812
https://www.cnblogs.com/xxx91hx/p/4374327.html
https://www.linuxprobe.com/centos-denyhosts.html
https://www.bbsmax.com/A/MAzAQGMRz9/
安装 denyhosts
主要参照:
https://blog.csdn.net/lijunwyf/article/details/104779368
1)更新系统(建议所有系统都先更新)
yum update
cd ~
2)下载DenyHosts
wget http://imcat.in/down/DenyHosts-2.6.tar.gz
3)解压缩
tar -zxvf DenyHosts-2.6.tar.gz
修改文件夹名为denyhosts
4)进入解压文件夹
cd DenyHosts-2.6
5)确认python编译工具安装
yun install -y python
报错:
常规问题解决:File "/usr/bin/yum", line 30 及 File "/usr/libexec/urlgrabber-ext-down", line 28
在执行yum命令时忽然发现出现以下报错:
yum list
File "/usr/bin/yum", line 30
except KeyboardInterrupt, e:
^
SyntaxError: invalid syntax
原因:
这是因为yum采用Python作为命令解释器,这可以从/usr/bin/yum文件中第一行#!/usr/bin/python发现。而python版本之间兼容性不太好,使得2.X版本与3.0版本之间存在语法不一致问题。而CentOS 7自带的yum采用的是python2.7,当系统将python升级到3.4后,出现语法解释错误。
解决办法:
一是升级yum。
二是修改yum的解释器为旧版本python2.7,即将连接文件/usr/bin/python连接回/usr/bin/python2.7。治标不治本,不推荐。
三是在设置里更改解释器设置,即修改/usr/bin/yum文件,指定使用python2.7作为yum的解释器:
vi /usr/bin/yum
将第一行"#!/usr/bin/python" 改为 "#!/usr/bin/python2"即可。
安装软件时又会出现另一种报错
Downloading packages:
File "/usr/libexec/urlgrabber-ext-down", line 28
except OSError, e:
^
SyntaxError: invalid syntax
问题与前面一个一样,因此解决办法也是一样的:
1
vi /usr/libexec/urlgrabber-ext-down
将第一行"#!/usr/bin/python" 改为 "#!/usr/bin/python2"即可。
6)开始编译安装setup.py
yun install -y python
程序脚本自动安装在:/usr/share/denyhosts目录
库文件安装在:/usr/lib/python2.7/site-packages/DenyHosts目录下
库文件安装在:/usr/lib/python2.7/site-packages/DenyHosts目录下
7)设置启动脚本
cd /usr/share/denyhosts/
cp daemon-control-dist daemon-control
chown root daemon-control
chmod 700 daemon-control
cp denyhosts.cfg-dist denyhosts.cfg
cp daemon-control-dist daemon-control
vi denyhosts.cfg
8)启动denyhosts并且设置为开机自启动
①自启动
vi /etc/rc.local
在末尾添加以下行
/usr/share/denyhosts/daemon-control start
②添加至系统服务
ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts
在linux中[ln]这个命令用来创建连接文件。
使用方式:ln [-sf] 源文件 目标文件
选项:-s 就表示创建软链接了,不加的话就是创建硬链接
-f 表示存在的时候删除在创建
chkconfig --add denyhosts
chkconfig --level 345 denyhosts on
启动denyhosts
systemctl start denyhosts
9)查看被禁止的IP
查看denyhosts收集到的恶意ip
$ cat /etc/hosts.deny
统计该文件的行数
$ cat /etc/hosts.deny | wc -l
8)
过多久后清除已阻止的IP,即阻断恶意IP的时长 (4周)
PURGE_DENY = 4w
允许无效用户登录失败的次数
DENY_THRESHOLD_INVALID = 5
允许普通有效用户登录失败的次数
DENY_THRESHOLD_VALID = 10
设定 Deny Host 写入到该资料夹
DENY_THRESHOLD_RESTRICTED = 1
将Deny的Host或Ip记录到Work_dir中
WORK_DIR = /var/lib/denyhosts
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
###### THESE SETTINGS ARE OPTIONAL
设置管理员邮件地址 例如****@163.Com
ADMIN_EMAIL = root
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts <nobody@localhost>
SMTP_SUBJECT = DenyHosts Report from $[HOSTNAME]
AGE_RESET_VALID=5d
AGE_RESET_ROOT=25d
AGE_RESET_RESTRICTED=25d
AGE_RESET_INVALID=10d
安装Maldet
安装准备工作
主要参阅下面博客:
https://blog.csdn.net/fxbin123/article/details/807196212
https://www.theurbanpenguin.com/linux-malware-detection-with-maldet/
1. epel-release 安装
yum Install Epel-Release
2. mailx安装
yum install mailx
3. perl安装
之前费了半天劲下了perl5,结果安装后运行Maldet总是显示could not find required binary perl, aborting.
后来卸载了perl5 和maldet,重新进行了安装就正常了。
yum install perl
4. inotify-tools安装
yum install inotify-tools
安装Maldet
1 下载Maldet
cd /usr/src
wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
2 安装 Maldet
tar -xzf maldetect-current.tar.gz
cd maldetect-1.6.4 #
./install.sh
3 配置
systemctl cat maldet
echo -e '/home\n/var/www\n' | \
tee /usr/local/maldetect/monitor_paths
tee命令用于读取标准输入的数据,并将其内容输出成文件
maldet /usr/local/maldetect/maldet \
--monitor /usr/local/maldetect/monitor_paths
输出应该有2项内容,但我的只有一项,这里我不明白。
maldet(8409): {mon} added /home to inotify monitoring array
maldet(8409): {mon} added /var/www to inotify monitoring array
若有以下报错:
解决方案:
#先安装扩展包源,否则inotify-tools找不到
yum install epel-release
yum install inotify-tools
If we are certain that this is working correctly we can kill the monitor and start the service:
maldet -k
systemctl enable maldet –now
systemctl status maldet‘
创建软链接
ln -s /usr/local/maldetect/maldet /bin/maldet
4 配置参数
vim /usr/local/maldetect/conf.maldet
email_alert="1" #开启发邮件功能
设置邮件
email_addr="[email protected]" #设置成自己的邮箱地址
安装 fail2ban
https://www.linuxidc.com/Linux/2017-10/147238.htm
https://zhuanlan.zhihu.com/p/43994922
https://e2c.net/2019/07/09/151.html
https://www.cnblogs.com/Narule/p/13040065.html
https://www.cnblogs.com/Narule/p/13040065.html
fail2ban的配置主要由基础配置(fail2ban.conf)和监禁配置(jail.conf)两部分组成。
fail2ban的配置采用标签块"[块名]"和键值"key=value"的形式描述配置。
在fail2ban配置中可以使用"#"来注释行,可以写入一行关于配置的描述信息。
配置块 - [INCLUDES]
在fail2ban的配置中,"[INCLUDES]"配置块是公共的,它主要用于在当前配置文件中关联其他配置文件,它主要由"after"和"before"两个配置选项组成,"after"表示在在加载当前文件中的配置项之后再加载指定的另一个文件中的配置内容,"before"表示在加载当前文件中的配置项之前加载指定的另一个文件中的配置内容。
基础配置(fail2ban.conf)
fail2ban.conf主要是"[Definition]"配置块下进行配置,配置Fail2ban服务端的常规配置项,这是特定的配置。
监禁配置(jail.conf)
jail.conf主要由默认的监禁配置"[DEFAULT]"和自定义的监禁配置"[自定义监禁名称]"两部分组成。
"[DEFAULT]"中定义的配置项将是在所有监禁(jail)中生效的全局配置项,如果"[自定义监禁名称]"的配置项覆盖了"[DEFAULT]"中定义的配置项则以"[自定义监禁名称]"中的配置有效,即局部优先于全局,如果全局配置中未定义则局部自动引用全局的配置。
在fail2ban的配置中每个配置项都是一个变量,可使用"%(变量)s"的方式在其他位置调用。
过滤器配置(filter)
filter主要由"[Definition]"定义过滤器和"[Init]"初始化过滤器两个配置块组成。
在"[Definition]"中"failregex"配置项用于使用正则表达式定义要从日志中匹配到要禁止主机的IP地址,在正则表达式中使用关键字""获取。"ignoreregex"配置项用于使用正则表达式定义要从日志中匹配无需禁止主机的IP地址,在使用关键字""获取。
"[Init]"配置块用于初始化过滤器,即定义关于过滤器的一些固定配置项,常见的有"maxlines"和"journalmatch","maxlines"定义过滤器每次从日志中读取的日志行最大数量;"journalmatch"定义当Fail2ban使用"backend=systemd"后端文件监视器时,从指定的系统服务的journal日志中匹配要禁止的主机IP。
动作配置(action)
action主要由"[Definition]"定义动作和"[Init]"初始化动作两个配置块组成。
在动作(action)配置项中可以使用"<关键字>"的方式定义要执行动作的参数。例如:"actionstart = -N f2b-",然后可以在监禁配置关联动作时传递参数,例如:"action = iptables[iptables="iptables", name="sshd"]"。
在动作中""关键字等于过滤器中的""关键字,即要监禁的IP地址。
通过【使用 Fail2Ban 保护 Nginx、WordPress 简单又高效】一文的梳理,明月基本上已经是彻底的明白和吃透了 Fail2Ban 的原理了,说白了 Fail2Ban 就是一个日志 IP 的过滤筛选器,根据不同的监狱规则从日志中找出这些“行为不端”的 IP,一旦这些 IP 发送了触犯监狱规则的请求达到阈值就会在 iptables 里直接封禁屏蔽,并且可以设置屏蔽这个 IP 的时间长久来避免误伤造成的危害过大。
所以用好 Fail2Ban 其实最重要的就是如何根据日志制定有效的监狱规则,规则制订完了还需要测试一下这个规则是否生效了,是否真的可以起到预期的目的。下面明月就结合一个实际的案例给大家具体的讲解一下:
fail2ban.conf 是server配置文件
jail.conf 是client配置文件
配置项含义
bantime是被封IP禁止访问的时间,设定值为24小时,单位是秒。
findtime是检测时间,在此时间内超过规定的次数会激活fail2ban,单位是秒。
maxretry是允许错误登录的最大次数,和findtime配合使用。
sender为邮件发送者,destemail为接收通知邮箱。
action是触发fail2ban采取的动作,action_mwl为禁IP+发通知邮件+写入日志。
sshd区块的enabled = true开启对SSH服务的防护,port为SSH的自定义端口。
sshd-ddos区块的enabled = true开启SSH-DDOS防护,port为SSH的自定义端口。
如果装有vsftpd,在配置文件最后加上以下内容(port为vsftpd的登录和数据端口)
1 安装 fail2ban
yum -y install epel-release
yum -y install fail2ban
systemctl enable fail2ban
systemctl start fail2ban
2 cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local来设置默认配置
修改
banaction = firewallcmd-ipset
banaction_allports = firewallcmd-allports
[DEFAULT]
time is in seconds. 3600 = 1 hour, 86400 = 24 hours (1 day)
findtime = 3600
bantime = 86400
maxretry = 5
ignoreip = 127.0.0.1 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
参数说明:
ignoreip:IP白名单,白名单中的IP不会屏蔽
bantime:屏蔽时间,单位为秒(s)
findtime:时间范围
maxretry:最大次数
3 修改/etc/fail2ban/jail.d/00-firewalld.conf
banaction = firewallcmd-ipset
banaction_allports = firewallcmd-allports
[DEFAULT]
banaction = firewallcmd-ipset
action = %(action_mwl)s
参数说明:
banaction:屏蔽IP所使用的方法,上面使用firewalld屏蔽端口
action: 触发规则后进行的动作
这里Banaction必须用Firewallcmd-Ipset,这是Firewall支持的关键,
如果是用Iptables则填写Iptables-Multiport[Name=Sshd-Ddos, Port="22", Protocol=Tcp]
4 为ssh新建文件/etc/fail2ban/jail.d/sshd.local
[sshd]
enabled = true
filter = sshd
action = %(action_mwl)s
logpath = /var/log/secure
参数说明:
[sshd]:名称,可以随便填写
filter:规则名称,必须填写位于filter.d目录里面的规则,sshd是fail2ban内置规则
port:对应的端口,默认端口,所以这里没有填写
action:采取的行动
logpath:需要监视的日志路径
5 防止Wordpress爆破
vi /etc/fail2ban/filter.d/wordpress.conf
填写如下内容
[Definition] failregex = ^ -.* /wp-login.php.* HTTP/1\.." ignoreregex =
vim /etc/fail2ban/jail.local
添加
[wordpress]
enabled = true
port = http,https
filter = wordpress
action = %(action_mwl)s
maxretry = 20
findtime = 60
bantime = 3600
logpath = /usr/local/nginx/logs/access.log
6 防止CC攻击
vi /etc/fail2ban/filter.d/nginx-cc.conf
添加:
[Definition] failregex = -.- .HTTP/1.* .* .*$ ignoreregex =
vim /etc/fail2ban/jail.local
[nginx-cc]
enabled = true
port = http,https
filter = nginx-cc
action = %(action_mwl)s
maxretry = 20
findtime = 60
bantime = 3600
logpath = /usr/local/nginx/logs/access.log
7.禁止ip方式
banaction = firewallcmd-ipset
banaction_allports = firewallcmd-allports
8. 常用命令
https://www.cnblogs.com/Narule/p/13040065.html
fail2ban-client -d #检查 jail.local 配置是否正确
tail -f /var/log/fail2ban.log #查看fail2ban监控日志
fail2ban-client status # 查看状态
fail2ban-client status sshd #查看sshd 状态
fail2ban-client status dovecot-auth
fail2ban-client status postfix-sasl
移除添加的ip
fail2ban-client set sshd unbanip 8.8.8.8
fail2ban-client set nginx-cc unbanip 101.2.2.1
postfix-sasl 文件使能在jail.local
http://www.yuanchengzhushou.cn/article/7646.html 成功配置
报错1:
ERROR Failed during configuration: Value int…ecursive:
解决方案:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
添加
banaction = firewallcmd-ipset
banaction_allports = firewallcmd-allports
报错2:
解决方案:
检查 vim jail.local logpath = /home/wwwlogs/access.log 路径错误会报ERROR Async configuration of server failed
报错3:
fail2ban.configurereader NO section "Definition"
解决方案:
替换所有/etc/fail2ban 文件,可能为配置出错
入侵检查
参考博客
https://blog.csdn.net/xinxin_2011/article/details/84936581
1. last命令
last命令列出当前和曾经登入系统的用户信息
2. lastlog
检查一下系统最近系统登录信息,看看是否被入侵
3. 查看通过密码验证用户信息
cat /var/log/secure|grep -i “accepted password”
4. 入侵者可能创建一个新的存放用户名及密码文件,可以查看/etc/passwd及/etc/shadow文件
ll /etc/pass*
ll /etc/sha*
5. who命令
who 命令查看一下用户信息
6. 查看可疑进程
ps -ef|grep python(用top命令显示 ,command命令一栏)