Linux纵深防护小记-系统的基本加固要求

时间:2022-11-13 12:58:05

(目录)


一、密码策略的强化

authconfig --passminlen=12 --passminclass=4 --passmaxrepeat=2 --update

密码策略的修改将保存在/etc/security/pwquality.conf中。

二、用户密码管理及生成工具

1. 密码管理

  • KeePassXC(电脑端)—— 推荐 下载地址:https://keepassxc.org/download/
  • KeePassA(安卓手机端) 官网:https://github.com/AriaLyy/KeepassA
  • KeePass(电脑端) 下载地址:https://keepass.info/download.html

2. 密码生成

# 使用openssl
openssl rand -base64 12

# 使用pwgen
yum install -y pwgen
pwgen -c -n -y 12 1

3. 弱密码检测

  • John the ripper 官网:https://www.openwall.com/john
  • Hydra 官网:https://github.com/vanhauser-thc/thc-hydra
  • kscan 官网:https://github.com/lcvvvv/kscan
  • Aopo 官网:https://github.com/ExpLangcn/Aopo

三、用户特权的限制

1. 限制su -

限制只有wheel组的用户可以su -切换为root用户。 vim /etc/pam.d/su

auth           required        pam_wheel.so group=wheel

这样就只有wheel组的用户才可以切换为root。而其他组的用户即使知道root的密码,也无法切换为root。 接下来可以将普通用户加入wheel组:

useradd cerana
# 为用户添加指定组wheel(附加组)
usermod -a -G wheel cerana
# 查看用户组
id cerana
# 或者
groups cerana

剥夺用户的wheel组:

# 为用户指定组(是且仅是用户组)
usermod -G cerana cerana

2. 配置sudo

visudo

# 对于navy组
%navy ALL=(ALL) /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
# 对于cerana用户
cerana ALL=(ALL) /usr/local/bin/mod.sh 

四、关键日志的加固

在/etc/skel/.bashrc和~/.bashrc中添加

readonly HISTFILE
readonly HISTFILESIZE
readonly HISTSIZE
readonly HISTCMD
readonly HISTCONTROL
readonly HISTIGNORE

在/etc/bashrc中添加

HISTTIMEFORMAT="[%Y%m%d %T] "

五、监控SUID和SGID的可执行文件

1. 查找具有SUID和SGID的可执行文件

find / -perm -u=s -type f
find / -perm -g=s -type f

2. 使用sXid监控具有SUID和SGID的可执行文件

下载:http://linukz.org/sxid.shtml 官网:https://github.com/taem/sxid

# 下载安装
# 需要epel安装/usr/bin/mail程序
yum install -y s-nail

wget http://linukz.org/download/sxid-4.20130802.tar.gz
tar xzvf sxid-4.20130802.tar.gz
cd sxid-4.20130802/
./configure
make install

将生成可执行文件/usr/local/bin/sxid

# 配置sXid
cp examples/sxid.conf /usr/local/etc/
vim /usr/local/etc/sxid.conf
================================================================
# Who to send reports to
EMAIL = "root"

# 添加cron定时任务
crontab -e -u root
crontab -l
30 4 * * * /usr/local/bin/sxid

# 先为当前目录及其所有子目录建立一个快照
sxid -k
# 做些改变
chmod u+s test
chmod g+s adir/
# 再做检查
sxid -k
# 查看邮件
mail

六、开源WAF部署——ModSecurity

官网:

  • https://github.com/SpiderLabs/ModSecurity
  • http://www.modsecurity.cn/

最新结论(20220114):请勿在Nginx使用ModSecurity V2版本,V2版本与Nginx存在兼容问题,且目前官方团队明确表示不会进行修复。

# 安装基础软件包
yum install -y httpd httpd-devel pcre pcre-devel libxml2-devel gcc lua-devel yajl-devel ssdeep-devel curl-devel

# 编译Modsecurity
cd /usr/local
tar -zxvf modsecurity-2.9.3.tar.gz
cd modsecurity-2.9.3
./configure --enable-standalone-module --disable-mlogc
make

# 安装Nginx
cd /usr/local
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar -xvzf nginx-1.16.1.tar.gz
cd /usr/local/nginx-1.16.1
./configure --add-module=/usr/local/modsecurity-2.9.3/nginx/modsecurity/ --prefix=/usr/local/nginx
make
make install

# 测试效果
/usr/local/nginx/sbin/nginx
http://服务器IP/?param=%22%3E%3Cscript%3Ealert(1);%3C/script%3E

# 创建用于存放配置文件的文件夹,并复制相关配置文件到目录中
mkdir -p /usr/local/nginx/conf/modsecurity/
cp /usr/local/modsecurity-2.9.3/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity/modsecurity.conf
cp /usr/local/modsecurity-2.9.3/unicode.mapping /usr/local/nginx/conf/modsecurity/unicode.mapping

下载规则文件压缩包,解压后复制crs-setup.conf.example到/usr/local/nginx/conf/modsecurity/下并重命名为crs-setup.conf;

复制rules文件夹到/usr/local/nginx/conf/modsecurity/下,同时修改REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example与RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example两个文件的文件名,将".example"删除,可将自己写的规则放置于此两个文件中;

编辑nginx.conf 在http或server节点中添加以下内容(在http节点添加表示全局配置,在server节点添加表示为指定网站配置):

ModSecurityEnabled on;  
ModSecurityConfig modsecurity/modsecurity.conf;

编辑modsecurity.conf SecRuleEngine DetectionOnly改为SecRuleEngine On 同时在文件末尾添加以下内容:

Include crs-setup.conf
Include rules/*.conf

重新加载Nginx测试效果

/usr/local/nginx/sbin/nginx -s reload

Ubuntu的配置https://zhuanlan.zhihu.com/p/80866123

七、文件备份

  • wput https://wput.sourceforge.net/
wput /path/to/yourfiles.tgz ftp://username:password@x.x.x.x/path/
  • rsync
#!/bin/bash
CURDATE=$(date +%Y-%m-%d) # 或者$(date +%F)
# --delete允许同步源目两个目录树(在目标中删除源中已删除的文件)
# 默认源的更新会覆盖目标中的老内容,-b参数使原本目标中应该被更新覆盖的内容,更名存放,而不是被覆盖。
# 本来应更名存放的内容将被移入--backup-dir指定的目录,且不再更名,保持原貌。这个参数适合增量备份,因为它将保存存在差异的文件。
# --backup-dir指定目录移入原文件发生在目标文件将被新版本源文件更新的时候(When it's about to overwrite a file)。
# /target可以是一个NFS文件系统或其他外部文件系统。
# 注意:/src是包括src目录本身的,而/src/不包含src目录本身(理解为被“/”排除在外了)。
mkdir -p /target/logs
rsync -avb --delete --backup-dir=/target/origin/$CURDATE /src /target > /target/logs/$CURDATE-bak.log 2>&1
# 备份后的目录对比
src
├── a1
│   ├── a2
│   └── abc
├── b1
├── bac
├── ccc
└── ddd

target
├── origin
│   └── 2021-02-20
│       └── src <----更新前,2021-02-20版本的原文件(这些文件都会被overwrite/update)
│           ├── a1
│           │   └── abc
│           ├── bac
│           └── ddd
├── logs
│   └── 2021-02-20-bak.log <----备份当天的rsync日志
└── src  <---- 最新版本
    ├── a1
    │   ├── a2
    │   └── abc
    ├── b1
    ├── bac
    ├── ccc
    └── ddd
  • 加/解密备份文件
# 加密
gpg -c anaconda-ks.cfg
# 解密
gpg anaconda-ks.cfg.gpg

# 加密
openssl enc -e -des-ede3-cbc -in backup.log -out backup.log.enc
# 解密
openssl enc -d -des-ede3-cbc -in backup.log.enc -out backup.log

八、蜜罐

可以使用Kippo搭建一个SSH蜜罐。 官网:https://github.com/desaster/kippo

部署

useradd -d /kippo kippo
yum install -y gcc python-devel python-pip
pip install twisted==15.2.0
pip install pycrypto
pip install pyasn1
su - kippo
git clone https://github.com/desaster/kippo.git
cd kippo/
cp kippo.cfg.dist kippo.cfg
./start.sh
# chmod +x stop.sh
# ./stop.sh

# 查看攻击登陆日志
tail -f /kippo/kippo/log
# 回放命令行攻击场景
/kippo/kippo/utils/playlog.py -m 1 /kippo/kippo/log/tty/20221112-223157-2762.log

参考:https://www.cnblogs.com/Eleven-Liu/p/9204244.html TCP端口重定向程序rinetd:https://github.com/samhocevar/rinetd

日志管理软件Splunk:https://www.cnblogs.com/you-men/p/14918579.html

tar xzvf splunk-6.3.2-aaff59bb082c-Linux-x86_64.tgz
mv splunk/usr/local/
cd /usr/local/splunk/bin/
/splunk enable boot-start
service splunk start
service iptables stop
访问http://lP:8000

开源替代Graylog Open Source:https://www.graylog.org/ Linux纵深防护小记-系统的基本加固要求

其中ES存储日志,MongoDB存储配置。

Linux纵深防护小记-系统的基本加固要求

Linux纵深防护小记-系统的基本加固要求

使用默认设置:GELF(Graylog Extended Log Format) Linux纵深防护小记-系统的基本加固要求

Title给UDP。 Linux纵深防护小记-系统的基本加固要求 向UDP端口12201发送日志即可。

修改密码

echo -n "Enter Password: " && head -1 </dev/stdin | tr -d 'n' | sha256sum | cut -d" " -f1

修改docker-compose.yml(docker-compose up -d) Linux纵深防护小记-系统的基本加固要求

时区设置 Linux纵深防护小记-系统的基本加固要求

可以使用的java logback插件:https://github.com/osiegmar/logback-gelf

九、检测Rootkit

1. Chkrootkit

官网:https://github.com/Magentron/chkrootkit

git clone https://github.com/Magentron/chkrootkit.git
cd chkrootkit/
yum install -y glibc-static
make sense
./chkrootkit

2. Rkhunter

wget https://sourceforge.net/projects/rkhunter/files/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz/download -O rkhunter-1.4.6.tar.gz --no-check-certificate
tar xzvf rkhunter-1.4.6.tar.gz
cd rkhunter-1.4.6/
./installer.sh --install
/usr/local/bin/rkhunter -c
注意回显
Rootkit checks...
    Rootkits checked : 496
    Possible rootkits: 0 <==注意看这里
查看检查日志 /var/log/rkhunter.log

3. LinuxCheck

git clone https://github.com/al0ne/LinuxCheck.git
cd LinuxCheck/
./LinuxCheck.sh
查看当前目录下的log文件查看结果

十、病毒木马扫描

1. ClamAV

yum install -y clamav
# 升级病毒库
freshclam
# 指定目录扫描
clamscan -r /var/www/html

2. LMD检查Webshell及恶意软件

wget https://www.rfxn.com/downloads/maldetect-current.tar.gz
tar xzf maldetect-current.tar.gz
cd maldetect-1.6.4/
./install.sh
# 扫描(如果可以将使用clamav scanner engine)
maldet --scan-all /var/www/html

3. 在线病毒木马检测

  • https://www.virustotal.com/gui/home/upload
  • https://www.virscan.org/
  • https://virusscan.jotti.org/