系统加固对保障安全意义重大,操作有讲究及更新管理要点
听说了吗,有人以为系统加固就是随便装个杀毒软件?这想法跟拿卫生纸当防弹衣一样搞笑。那些搞安全的大神都知道,真正的加固比给女朋友修电脑还费劲,简直是折磨人。
系统更新这件小事
系统更新这东西,就跟换内裤似的,不换真容易出岔子。有些人,老觉得自动更新烦得慌,结果有一天突然发现电脑竟然在给黑客打工挖矿。据2022年腾讯发布的网络安全报告显示,竟然有60%的入侵事件,都是因为没及时打上补丁。
# 在线更新所有软件包并启用自动安全更新
sudo yum update -y
sudo yum install yum-cron -y
sudo sed -i 's/apply_updates = no/apply_updates = yes/' /etc/yum/yum-cron.conf
sudo systemctl enable --now yum-cron
线下那帮兄弟更悲催,得抱着U盘满世界奔波。有一次,眼睁睁看着那运维小弟给服务器打补丁,紧张得跟做心脏手术似的。我建议他们先在测试环境里试验三天,毕竟要是生产系统出了问题,那滋味比失恋还难受。
# 离线下载所有安全更新包(使用相同版本 CentOS 系统执行)
createrepo /opt/offline_patches
reposync --download-metadata --repoid=updates --download-path=/opt/offline_patches
tar -czvf centos7-updates.tar.gz /opt/offline_patches
# 将补丁包拷贝至目标系统并挂载
mkdir /mnt/offline_repo
mount /dev/sdb1 /mnt/offline_repo # 假设补丁包在U盘或本地存储
# 创建本地YUM源
cat < /etc/yum.repos.d/local.repo
[local-updates]
name=Local Security Updates
baseurl=file:///mnt/offline_repo/centos7-updates
enabled=1
gpgcheck=0
EOF
# 离线手动更新
yum clean all
yum update --disablerepo=* --enablerepo=local-updates -y
账户管理玄学
root账号,就跟自己家那扇大门的钥匙似的,要是随手搁门口垫子底下,那简直就是在给黑客开宴席。去年就有一家公司栽了跟头,黑客直接用“123456”这密码给黑了,那黑客估计都得感动得哭鼻子。现在,大家都流行用sudo,这样至少能让那些想入侵的家伙多费点心思。
# 确保有一个具有sudo权限的普通用户,用于系统管理:
sudo useradd -m -s /bin/bash username
sudo passwd username
# 授予sudo权限
sudo usermod -aG wheel username

# 禁用root通过ssh远程登录
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak_`date +%F`
sudo sed -i 's/^#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
#禁用root通过控制台登录
# 方法 1:修改 `/etc/securetty` 文件
此文件定义了允许 root 登录的终端设备,清空内容以禁止所有本地终端登录:
sudo cp /etc/securetty /etc/securetty.bak # 备份
sudo echo "" > /etc/securetty # 清空文件
# 方法 2:通过 PAM 限制 root 登录
编辑 PAM 登录配置文件:
sudo cp /etc/pam.d/login /etc/pam.d/login.bak_`date +%F`
sudo vi /etc/pam.d/login
在文件开头添加以下行:
auth required pam_succeed_if.so user != root quiet
此规则会阻止 root 用户通过本地终端登录。
这密码策略简直神了,最狠的规格是16位还带符号,结果大家全用“Qwe123!@#”这招。这东西还不如学银行那动态令牌,虽然操作有点繁琐,但总比被黑了还得集体加班来得强。
网络服务修罗场
# 修改密码复杂度要求
sudo cp /etc/security/pwquality.conf /etc/security/pwquality.conf.bak_`date +%F`
sudo vi /etc/security/pwquality.conf
minlen = 12
minclass = 4 # 包含数字、大写字母、小写字母、符号中的4类
# 设置密码过期策略
sudo sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs
# 手动修改PAM配置
vi /etc/pam.d/system-auth
password requisite pam_pwquality.so try_first_pass retry=3 minlen=12 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1
password sufficient pam_unix.so sha512 shadow remember=5
# 强制所有用户下次登录修改密码(适用于现有账户)
sudo chage -d 0 <用户名>
老子的SSH端口改得跟变魔术似的,自己都搞不清是哪个了,有一次瞎猫碰上死耗子,把22改成了22222,结果把自己给锁门外头了。防火墙的规则写得跟毕业论文似的,结果一查,发现淘宝客服的IP段压根没放行。
for user in bin daemon adm lp sync shutdown halt mail ftp nobody; do
sudo passwd -l $user
done
最逗比的是那些默认开启的服务,比如打印机服务这种根本用不上的东西还开着,简直就是给黑客留了个后门。有一次巡查发现服务器上蓝牙服务还开着,运维大哥来一句“万一哪天要用呢”,结果三年过去了,蓝牙鼠标连一次都没连上。
内核防护迷思
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak #备份配置文件
sudo vi /etc/ssh/sshd_config
# 关键参数:
Port 5022 # 更改默认端口
Protocol 2 # 禁用旧版协议
PermitEmptyPasswords no # 禁止空密码
ListenAddress 192.168.1.100# 服务监听指定网卡(多网卡环境)
MaxAuthTries 3 # 限制尝试次数
ClientAliveInterval 300 # 超时自动断开
UseDNS no # 加速登录
AllowUsers admin_user # 白名单用户
这SELinux一开,连自己都防备上了。记得有一次调试服务,怎么都搞不通,关了SELinux瞬间搞定,可安全主管偏说服务不行也不能关它。最后只好妥协,搞了二百条策略,结果发现,这策略比代码还长。
调内核参数这事,跟老中医看病似的,有人喊加缓存,有人喊限连接。结果搞完一看,性能提升没多少,还老出些怪问题。现在,学聪明了,不确定的就不瞎动。
sudo firewall-cmd --permanent --add-port=5022/tcp # 放行SSH新端口
sudo firewall-cmd --permanent --remove-service=ssh # 移除默认SSH规则
sudo firewall-cmd --permanent --zone=public --set-target=DROP # 默认拒绝
sudo firewall-cmd --reload
文件权限战争
见过不少把关键文件权限设成777的大侠,原因,图个方便。结果,一遇到勒索病毒,他们加班那是相当卖力。现在,一看到chmod 777,感觉就像遇到恐怖分子一样,直接就报警了。
sudo systemctl disable avahi-daemon cups bluetooth -y
sudo systemctl stop avahi-daemon cups bluetooth
清理SUID文件跟拆炸弹似的,搞不好就炸了。有一次我删了个疑似有问题的小文件,结果财务系统直接瘫痪了。现在,我学会了先备份,再动手,尽管这硬盘空间是越来越紧张。
性能与安全平衡术
#启用强制模式
sudo setenforce 1
sudo sed -i 's/SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config
# 根据审计日志生成自定义策略模块(解决服务被拦截问题)
ausearch -m avc -ts recent | audit2allow -M mypolicy # 生成策略文件
semodule -i mypolicy.pp # 加载策略模块
这话说得也太逗了,加固了还影响性能,这不是废话吗?你把防盗门装得跟十层楼一样厚,进出肯定慢得跟乌龟赛跑似的,但总比家里啥都没了强不是?记得那回某电商大促前把防火墙给关了,结果秒杀活动直接变成了黑客们的秒杀服务器大狂欢。
最悲催的是那个兼容问题,系统一更新,老软件就成摆设了。记得有一次Java程序闹了个大乌龙,查了老半天,原来是glibc版本太前卫了。现在,得让测试环境跑满两周,才敢把它搬上生产,尽管老板老觉得咱们是在瞎忙活。
# 防止SYN洪水攻击
echo "net.ipv4.tcp_syncookies = 1" | sudo tee -a /etc/sysctl.conf
# 禁用ICMP重定向
echo "net.ipv4.conf.all.accept_redirects = 0" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
各位搞运维的你们碰上最离谱的安全故障是啥来着?说出来让大家乐呵乐呵...哎不对,是让大家长个心眼。