|
CentOS装完就往生产环境扔,安全这事我见过太多次了。加固去年一台跑着CentOS 7的策略Web服务器被扫出SSH弱口令,攻击者进去之后翻了半小时日志才被发现。安全系统本身没大毛病,加固问题出在默认配置上——那些为了"开箱即用"而打开的策略端口、账号和权限,安全恰恰是加固攻击面。 先把SSH收拾干净。策略默认的安全22端口每天被爆破几千次是常态,改端口只能减少噪音,加固真正管用的策略是关掉密码登录。在/etc/ssh/sshd_config里把PermitRootLogin设成no,安全PasswordAuthentication也关掉,加固只留密钥。策略密钥长度别用默认的,ssh-keygen -t ed25519 -a 100,带100轮KDF,暴力破解成本高得多。改完记得systemctl reload sshd之前另开一个终端测试登录,我有次手快把自己锁在外面,只能挂载ISO进救援模式改回来。 账号这块,CentOS默认有一堆系统账户,像adm、lp、games这些,UID小于1000的基本用不上。直接usermod -L锁定或者把shell改成/sbin/nologin。别删,删了可能影响依赖。密码策略用authconfig或者直接改/etc/security/pwquality.conf,最小长度12位,大小写数字符号至少三类,retry=3。另外/etc/login.defs里PASS_MAX_DAYS设90天,PASS_MIN_DAYS设7天,防止用户反复改回旧密码。 防火墙别只用firewalld的默认zone。CentOS 7之后firewalld是标配,但很多人直接systemctl stop firewalld了事。正确做法是firewall-cmd --permanent --add-rich-rule精确控制,比如只允许办公网段访问3306。如果服务对公网,iptables的recent模块可以挡暴力破解:iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set,再配--update --seconds 60 --hitcount 4 -j DROP。这套规则我用了五年,SSH爆破日志从每天几万条降到个位数。 SELinux是CentOS的底牌,但大多数人第一件事就是setenforce 0。我理解那种被拒绝访问搞烦的心情,但直接关掉等于把门拆了。正确姿势是semanage和audit2allow。比如Nginx要监听8080端口,semanage port -a -t http_port_t -p tcp 8080就行,不用关整个SELinux。日志在/var/log/audit/audit.log,ausearch -m avc -ts recent能快速定位问题。 内核参数调优容易被忽略。/etc/sysctl.conf里加几行:net.ipv4.conf.all.rp_filter=1防IP欺骗,net.ipv4.tcp_syncookies=1防SYN Flood,kernel.dmesg_restrict=1禁止普通用户看内核日志,fs.protected_hardlinks=1和fs.protected_symlinks=1防链接攻击。这些参数在CentOS 7上默认值偏宽松,改完sysctl -p生效。 文件权限方面,/etc/shadow必须600,/etc/passwd和/etc/group是644。chmod 644 /etc/crontab,chmod 700 /etc/cron.d。还有/tmp挂载时加noexec,nosuid,nodev,改/etc/fstab:tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev 0 0。这招能挡掉不少上传脚本直接执行的攻击。 审计用auditd,默认就装着。auditctl -w /etc/passwd -p wa -k passwd_changes监控关键文件改动,auditctl -a always,exit -F arch=b64 -S execve -k exec_log记录所有命令执行。日志量会涨,但出事后回溯全靠它。我习惯再加个aide做文件完整性检查,每天凌晨跑一次对比基线。 补丁管理别依赖yum update一把梭。生产环境先yum check-update看清单,yum update --security只打安全补丁。CentOS 7的yum-plugin-security插件能列出CVE编号,心里有数再动手。CentOS 8已经转向dnf,命令差不多,但Stream版本更新节奏变了,老系统该迁移就迁移。 最后提一句,所有改动先在测试机跑一遍。我见过有人直接在生产上改sshd_config,结果UsePAM参数写错,所有用户登录全挂。加固是持续过程,不是一次性脚本。每季度扫一次lynis或者OpenSCAP,看看有没有新暴露的问题。 |