服务器安全加固清单要点
问题背景
新机器上线前不做安全加固,等于把门打开等人进来。生产环境的服务器一旦暴露在公网,各种扫描、暴力破解、漏洞利用会在上线后几小时内接踵而至。等被黑了再去加固,不仅被动,而且恢复成本极高——日志可能被清、植入后门可能还在、数据可能已泄露。
服务器安全加固不是装一个杀毒软件那么简单。它涉及
操作系统
层面的账号与权限管理、网络层面的防火墙配置、服务层面的安全选项、应用层面的加密
通信
、系统层面的漏洞修复。每一个环节都有可能被利用。
这篇文章面向初中级
Linux
运维
工程师
,提供一份新机器上线前的安全加固清单,包含 20 个具体操作项,每个操作项都有操作步骤、验证方法和风险说明。文章基于 CentOS 7/8 和 Ubuntu 20.04/22.04 两个主流发行版,命令在两个系统上分别标注。文中所有涉及网络和服务重启的操作都会标注风险级别。
适用场景
新采购的服务器首次上线
接手他人维护的服务器
服务器重装系统后
等保合规整改
安全评估后发现基线不符合要求
参加 C
TF
或渗透测试前的自我加固
加固前准备:快照和备份
任何生产环境操作前,都必须先做好备份和快照。加固涉及 SSH、iptables、服务重启等操作,操作失误可能导致服务器无法登录。请务必在执行前:
在云控制台创建服务器快照(或用 VMware/vSphere 创建虚拟机快照)
记录当前 SSH 连接的方式和 IP
准备ILO/IPMI/云厂商的VNC/远程终端作为紧急回滚通道
如果通过快照恢复,请确认恢复后需要重新配置的项(IP、hostname、SSH keys等)。
第 1-5 项:账号与权限管理
第 1 项:禁用 root 用户直接登录
root 是所有 Linux 系统的默认管理员账号,也是
黑客
暴力破解的首要目标。禁用 root 直接登录,迫使用户使用普通账号 + sudo,可以极大提高攻击成本。
操作步骤(CentOS/RHEL):
# 1. 创建普通管理员账号
sudo useradd -m -s /bin/bash -G wheel admin
# 2. 设置 admin 账号密码
sudo passwd admin
# 3. 将 admin 加入 wheel 组(Ubuntu 中默认已配置 sudo)
# CentOS 中 wheel 组默认已配置为 sudo 组
# 4. 配置 SSH 禁止 root 登录
sudo vi /etc/ssh/sshd_config
# 找到并修改:
# PermitRootLogin no
# 或者在 Ubuntu 中默认可能是 without-password,改为 no
# 5. 重启 SSH 服务
sudo systemctl restart sshd
# 6. 验证:另开一个终端,用 root 登录应该被拒绝
操作步骤(Ubuntu):
# 1. 创建管理员账号(安装时已创建,这里假设需要新建)
sudo adduser admin
sudo usermod -aG sudo admin
# 2. 复制当前用户的 SSH 公钥到新用户(如果有的话)
sudo mkdir -p /home/admin/.ssh
sudo chmod 700 /home/admin/.ssh
sudo cp ~/.ssh/authorized_keys /home/admin/.ssh/
sudo chown -R admin:admin /home/admin/.ssh
# 3. 配置 SSH 禁止 root 登录
sudo vi /etc/ssh/sshd_config
# 确认或添加:
# PermitRootLogin no
# 4. 重启 SSH
sudo systemctl restart sshd
验证方法:
# 用普通账号登录后测试 sudo
sudo -l
# 应该列出该用户的 sudo 权限
# 用 root 登录(另开终端测试)
ssh root@
# 应该提示:Permission denied, please try again.
第 2 项:使用 SSH 公钥
认证
,禁止密码登录
密码登录容易被暴力破解和字典攻击。公钥认证配合 SSH key,安全性高出几个数量级。
操作步骤:
# 1. 在本地机器(你的电脑)上生成 SSH 密钥对
ssh-keygen -t ed25519 -C"your_email@example.com"
# 按回车接受默认路径,建议设置 passphrase(密码短语)
# 2. 将公钥上传到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@
# 这次仍然需要输入密码,是最后一次
# 3. 确认公钥已复制
ssh admin@
# 4. 修改 SSH 配置,禁止密码登录
sudo vi /etc/ssh/sshd_config
# 确保以下配置存在且没有被注释:
# PubkeyAuthentication yes
# PasswordAuthentication no
# ChallengeResponseAuthentication no
# UsePAM yes
# 5. 重启 SSH
sudo systemctl restart sshd
验证方法:
# 在本地机器测试:使用公钥登录
ssh -i ~/.ssh/id_ed25519 admin@
# 应该不需要输入密码即可登录
# 测试:禁用密码登录后,用密码登录应该被拒绝
ssh admin@
# 输入密码应该被拒绝:Permission denied (publickey,password)
风险提醒:在退出当前 SSH 会话前,务必确认新登录方式(公钥)能正常工作。如果公钥配置有误又禁止了密码登录,你将被锁在服务器外面,只能通过 VNC/ILO 恢复。
第 3 项:删除或锁定不需要的系统账号
Linux 系统默认会创建一些服务账号(bin、daemon、adm、nobody 等)。如果这些账号不需要登录且不需要 shell,应该锁定它们。
操作步骤:
# 查看所有用户账号
cat /etc/passwd | grep -v /sbin/nologin | grep -v /bin/false| grep -v'^#'
# 常见的应该保留的系统账号(不要动):
# root
# admin / ubuntu(你自己创建的普通管理员账号)
# daemon(部分系统服务需要)
# sshd(SSH 服务需要)
# 锁定不需要登录的账号(使用 nologin 或 false shell)
# 例如锁定 games 账号
sudo usermod -s /sbin/nologin games
# 如果账号根本不需要(比如删除测试账号)
sudo userdel -r testuser # -r 同时删除 home 目录
# 锁定账号(禁止登录,也不允许切换)
sudo passwd -l
sudo passwd -u
验证方法:
# 查看哪些账号有有效 shell
cat /etc/passwd | awk -F:'{print $1":"$7}'| grep -v nologin | grep -vfalse
# 测试账号是否被锁定
su -
第 4 项:设置密码策略
密码策略包括密码复杂度、密码长度、密码过期时间、密码历史记录等。
操作步骤(CentOS/RHEL):
# 1. 安装密码策略工具
sudo yum install -y libpwquality cracklib
# 2. 配置密码复杂度
sudo vi /etc/security/pwquality.conf
# 主要配置项:
# minlen = 12 # 最小密码长度
# dcredit = -1 # 至少包含一个数字
# ucredit = -1 # 至少包含一个大写字母
# lcredit = -1 # 至少包含一个小写字母
# ocredit = -1 # 至少包含一个特殊字符
# difok = 3 # 新密码和旧密码至少3个字符不同
# maxrepeat = 2 # 同一字符最多连续出现2次
# 3. 配置密码过期时间
sudo vi /etc/login.defs
# PASS_MAX_DAYS 90 # 密码最长使用天数
# PASS_MIN_DAYS 7 # 密码最短使用天数
# PASS_WARN_AYS 7 # 密码过期前多少天警告
# 4. 对现有用户设置密码过期
sudo chage -M 90 admin # admin 账号密码 90 天过期
sudo chage -m 7 admin # 密码至少使用 7 天才能改
sudo chage -W 7 admin # 过期前 7 天警告
操作步骤(Ubuntu):
# Ubuntu 默认使用 PAM(pam_pwquality)
sudo apt-get install -y libpwquality
# 配置密码策略(和 CentOS 相同)
sudo vi /etc/security/pwquality.conf
# Ubuntu 中密码策略也通过 /etc/login.defs 控制
sudo vi /etc/login.defs
验证方法:
# 测试密码复杂度(尝试设置一个弱密码)
sudo passwd admin
# 设置密码时,如果提示 "BAD PASSWORD: ..." 说明被策略拦截
# 查看用户密码过期信息
sudo chage -l admin
# 输出:
# Last password change: Apr 29, 2026
# Password expires: Jul 28, 2026
# Password inactive: never
# Account expires: never
# Minimum number of days between password change: 7
# Maximum number of days between password change: 90
# Number of days of warning before password expires: 7
第 5 项:配置 sudo 日志记录
sudo 操作应该被记录,以便审计和排查问题。
操作步骤:
# 1. 确认 sudo 日志已启用(默认已启用)
# CentOS/RHEL: sudo 日志记录到 /var/log/secure
# Ubuntu: sudo 日志记录到 /var/log/auth.log
# 2. 如果需要独立的 sudo 日志,可以在 /etc/sudoers 中配置
sudo visudo
# 添加:
# Defaults logfile=/var/log/sudo.log
# 3. 确保 rsyslog 或 journald 在记录 sudo 日志
sudo systemctl status rsyslog
# 或
sudo systemctl status systemd-journald
验证方法:
# 查看 sudo 日志
# CentOS
sudo tail -20 /var/log/secure | grep sudo
# Ubuntu
sudo tail -20 /var/log/auth.log | grep sudo
# 测试日志记录:执行一个 sudo 命令
sudo whoami
# 然后检查日志中是否有记录
第 6-10 项:防火墙与网络配置
第 6 项:配置 iptables/firewalld 防火墙
防火墙是新服务器的第一道防线。即使云平台有安全组,服务器内部的防火墙也应当配置,防止云安全组规则配置错误导致的暴露。
操作步骤(CentOS 7/8 - firewalld):
# 1. 启动 firewalld
sudo systemctl start firewalld
sudo systemctlenablefirewalld
# 2. 查看默认 zone
sudo firewall-cmd --get-default-zone
# 3. 添加允许的 SSH(防止把自己踢出去)
# 先添加,确认能用,再移除 22/TCP 的 all 访问
sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
# 4. 只允许特定 IP 段访问 SSH(如果固定 IP)
# sudo firewall-cmd --zone=public --add-source= --permanent
# sudo firewall-cmd --zone=public --remove-port=22/tcp --permanent
# 5. 允许必要的服务
sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --zone=public --add-service=http --permanent
# 6. 拒绝所有其他入站流量
sudo firewall-cmd --zone=public --add-rich-rule='rule protocol value=icmp drop'--permanent
# 7. 重载防火墙规则
sudo firewall-cmd --reload
# 8. 查看当前规则
sudo firewall-cmd --list-all
操作步骤(Ubuntu - ufw):
# 1. 启用 ufw
sudo ufwenable
# 2. 设置默认策略:拒绝所有入站,允许所有出站
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 3. 允许 SSH(先做,防止把自己踢出去)
# 如果使用默认 22 端口
sudo ufw allow ssh
# 如果使用非标准端口,比如 2222
sudo ufw allow 2222/tcp
# 4. 只允许特定 IP 访问 SSH(推荐)
sudo ufw allow from to any port 22
# 5. 允许必要的服务
sudo ufw allow http
sudo ufw allow https
# 6. 查看规则
sudo ufw status numbered
# 7. 删除规则(如果需要)
sudo ufw delete
验证方法:
# 查看防火墙状态
# CentOS
sudo firewall-cmd --state
# 或
sudo systemctl status firewalld
# Ubuntu
sudo ufw status verbose
# 测试防火墙规则:从另一台机器测试
# 应该只能访问允许的端口
nmap -sT -p 22,80,443
风险提醒:配置防火墙前,务必确认:
你有其他方式(如VNC/ILO)访问服务器
SSH 端口没有被错误拒绝
如果有固定 IP,把固定 IP 加入 SSH 允许列表后再操作
第 7 项:关闭不必要的服务和端口
服务器上默认运行了很多不需要的服务,每个服务都是潜在的攻击面。
操作步骤:
# 1. 查看所有正在运行的服务
sudo systemctl list-units --type=service --state=running
# 2. 查看监听端口
sudo ss -tunapl | grep LISTEN
# 3. 识别不需要的服务(常见可以禁用的)
# telnet-server: 明文协议,应该禁用
# rsh-server: 不安全的远程 shell
# vsftpd: 如果不用 FTP
# named: 如果不用 DNS 服务
# dovecot/postfix: 如果不用邮件服务
# cups: 打印服务,通常服务器不需要
# 4. 停止并禁用不需要的服务
sudo systemctl stop
sudo systemctldisable
# 5. 常见可以安全禁用的服务示例:
sudo systemctl stop anddisabletelnet.socket # CentOS
sudo systemctl stop anddisablersh.socket # CentOS
sudo systemctl stop cups # 打印服务
sudo systemctl stop postfix # 邮件服务
sudo systemctl stop dovecot # IMAP/POP3
验证方法:
# 查看监听端口变化
sudo ss -tunapl | grep LISTEN
# 确认服务已禁用
sudo systemctl is-enabled
# 返回 "disabled" 表示已禁用
# 用 nmap 从外部扫描(如果有测试机)
nmap -sT -p 1-1000
# 只应该看到 SSH(22)和你明确开启的端口
第 8 项:禁用 ICMP 响应(可选但推荐)
禁用 ICMP(ping)响应可以增加攻击者扫描的难度,但不影响网络功能。
操作步骤:
# 方法一:使用 iptables/firewalld 丢弃 ping 请求
# CentOS
sudo firewall-cmd --permanent --add-icmp-block=echo-reply
sudo firewall-cmd --permanent --add-icmp-block=echo-request
sudo firewall-cmd --reload
# Ubuntu
sudo ufw insert 1 deny proto icmp from any to any icmptypeecho-request
# 方法二:修改内核参数(永久生效)
sudo vi /etc/sysctl.conf
# 添加:
net.ipv4.icmp_echo_ignore_all = 1
# 应用配置
sudo sysctl -p
验证方法:
# 从外部机器测试 ping
ping
# 应该无响应或超时
# 在本机测试(应该能 ping 自己)
ping
风险提醒:有些监控系统(如 Zabbix、Nag
ios
)会通过 ping 检测主机存活。禁用 ICMP 后需要确保监控有其他方式检测(如端口检测)。另外,部分网络故障排查工具依赖 ICMP,禁用后 Traceroute 可能不正常。
第 9 项:配置内核网络参数
Linux 内核的网络参数有很多可以加固的地方,比如 SYN Flood 攻击防护、ICMP 广播限制等。
操作步骤:
# 编辑 /etc/sysctl.conf
sudo vi /etc/sysctl.conf
# 添加以下内容:
# 防止 SYN Flood 攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_max_syn_backlog = 65535
# 禁止 IP 源路由(防止 IP 欺骗)
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# 禁止 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
# 开启 IP 转发检查
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 禁止 ICMP 广播
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 忽略 ICMP ping 请求
net.ipv4.icmp_echo_ignore_all = 1
# 禁止 IP 路由到伪造地址(减少 IP 欺骗)
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# 应用配置
sudo sysctl -p
# 验证
sudo sysctl net.ipv4.tcp_syncookies
# 应该返回 net.ipv4.tcp_syncookies = 1
第 10 项:限制文件描述符和进程数
资源耗尽攻击(ulimit 耗尽)是一种 DoS 攻击方式。默认的 ulimit 值可能不够高。
操作步骤:
# 1. 查看当前限制
ulimit-a
# 2. 修改 /etc/security/limits.conf
sudo vi /etc/security/limits.conf
# 添加:
# 每个用户最大打开文件描述符数
* soft nofile 65535
* hard nofile 65535
# 每个用户最大进程数
* soft nproc 65535
* hard nproc 65535
# root 用户不受限制(需要保留)
root soft nofile 65535
root hard nofile 65535
# 3. 修改 /etc/pam.d/common-session(Ubuntu)或 /etc/pam.d/system-auth(CentOS)
# 确保有这行:
session required pam_limits.so
# 4. 修改 /etc/sysctl.conf 中的 fs.file-max(系统级限制)
sudo vi /etc/sysctl.conf
fs.file-max = 655360
# 应用
sudo sysctl -p
验证方法:
# 重新登录后测试
su - admin
ulimit-n
# 应该显示 65535
# 测试是否能达到这个限制
ulimit-n 65535
第 11-15 项:系统安全配置
第 11 项:更新系统和软件包
操作步骤:
# CentOS/RHEL
sudo yum update -y
# 或
sudo dnf update -y
# Ubuntu
sudo apt update && sudo apt upgrade -y
# 升级完成后重启(如有必要)
sudo reboot
验证方法:
# 查看上次更新时间
rpm -qa --last | head -10
# 或
dpkg -l | tail -10
第 12 项:安装并配置 fail2ban
fail2ban 可以自动封禁连续登录失败的 IP,是防止 SSH 暴力破解的利器。
操作步骤:
# 安装
# CentOS(需要 EPEL 源)
sudo yum install -y epel-release
sudo yum install -y fail2ban
# Ubuntu
sudo apt-get install -y fail2ban
# 配置
sudo vi /etc/fail2ban/jail.local
# 如果文件不存在,创建它
# [DEFAULT]
# bantime = 3600 # 封禁 1 小时
# findtime = 600 # 10 分钟内
# maxretry = 5 # 最多 5 次尝试
# banaction = iptables-multiport
# [sshd]
# enabled = true
# port = ssh
# filter = sshd
# logpath = /var/log/secure # CentOS
# logpath = /var/log/auth.log # Ubuntu
# maxretry = 3
# 启动
sudo systemctlenablefail2ban
sudo systemctl start fail2ban
验证方法:
# 查看 fail2ban 状态
sudo fail2ban-client status
# 查看 SSH 防护状态
sudo fail2ban-client status sshd
# 测试:从另一台机器故意输错密码 3 次,应该被封禁
# 查看被封禁的 IP
sudo iptables -L -n | grep fail2ban
第 13 项:配置 auditd 审计
auditd 可以记录系统调用和文件访问,是等保合规和事后审计的重要工具。
操作步骤:
# 安装
# CentOS
sudo yum install -y audit
# Ubuntu
sudo apt-get install -y auditd
# 启动
sudo systemctlenableauditd
sudo systemctl start auditd
# 配置审计规则
sudo vi /etc/audit/rules.d/audit.rules
# 添加:
# 记录所有 rm mv chmod chown 等敏感操作
-w /usr/bin/rm -p x -k delete
-w /usr/bin/mv -p x -k move
-w /usr/bin/chmod -p x -k perm_chmod
-w /usr/bin/chown -p x -k perm_chown
# 记录 /etc/passwd /etc/shadow 的修改
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
# 记录 SSH 配置修改
-w /etc/ssh/sshd_config -k sshd_config
# 重载规则
sudo auditctl -R /etc/audit/rules.d/audit.rules
# 或者直接添加规则(临时生效)
sudo auditctl -w /usr/bin/rm -p x -k delete
验证方法:
# 查看审计日志
sudo ausearch -k delete | head -20
# 查看最近的审计事件
sudo ausearch -i | tail -20
# 查看 auditd 状态
sudo systemctl status auditd
第 14 项:关闭 Ctrl+Alt+Del 重启
防止物理接触服务器的人通过键盘组合键重启系统。
操作步骤:
# CentOS 7/8
# 修改 /etc/systemd/system/ctrl-alt-del.target
sudo systemctl mask ctrl-alt-del.target
# Ubuntu
# 修改 /etc/systemd/system/ctrl-alt-del.target 的软链接
sudo systemctl mask ctrl-alt-del.target
# 验证
sudo systemctl status ctrl-alt-del.target
# 应该显示 "masked"
第 15 项:设置 GRUB 密码
防止未经授权修改 GRUB 启动参数(比如进入单用户模式重置 root 密码)。
操作步骤:
# 生成 GRUB 密码哈希
grub2-mkpasswd-pbkdf2
# 或
# CentOS 8 中可能是
# grub2-mkpasswd-pbkdf2
# 输入密码后得到一串 hash
# 编辑 /etc/grub.d/00_header
sudo vi /etc/grub.d/00_header
# 在文件末尾添加:
cat << EOF
set superusers="admin"
password_pbkdf2 admin <生成的hash>
EOF
# 重新生成 GRUB 配置
# CentOS
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# UEFI
# sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
# Ubuntu
sudo update-grub
验证方法:
# 重启服务器,在 GRUB 菜单按 'e' 编辑
# 如果需要输入 admin 密码,说明配置成功
第 16-20 项:SSH 和远程访问加固
第 16 项:修改 SSH 默认端口
SSH 默认监听 22 端口,扫描器会首先扫描 22 端口。改成非标准端口可以减少大量无效扫描。
操作步骤:
# 1. 修改 SSH 配置
sudo vi /etc/ssh/sshd_config
# 找到#Port22,改为非标准端口(如 2222)
Port 2222
# 2. 确认新端口已在防火墙开放(先做!)
# CentOS
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
# Ubuntu
sudo ufw allow 2222/tcp
# 3. 重启 SSH
sudo systemctl restart sshd
# 4. 验证:用新端口登录
ssh -p 2222 admin@
# 5. 确认旧端口 22 不再监听(可选)
验证方法:
# 查看 SSH 监听端口
sudo ss -tunapl | grep ssh
# 从外部测试
nmap -sT -p 2222
风险提醒:修改 SSH 端口后,新的 SSH 连接命令必须加-p
参数。确保记录了新端口。如果忘了加参数,会一直尝试连接本地的 22 端口。
第 17 项:配置 SSH 空密码和公钥检查
操作步骤:
sudo vi /etc/ssh/sshd_config
# 确保以下配置存在:
# 不允许空密码登录
PermitEmptyPasswords no
# 不允许使用公钥认证时不检查 key 的完整性(中间人攻击防护)
StrictHostKeyChecking ask
# 禁用 .rhosts 文件
IgnoreRhosts yes
# 禁用基于主机的认证
HostbasedAuthentication no
第 18 项:限制 SSH 允许的用户和组
操作步骤:
sudo vi /etc/ssh/sshd_config
# 只允许特定用户登录
AllowUsers admin deploy
# 只允许特定组登录
AllowGroups sudo admin
# 禁止 root 用户登录(已在第 1 项中配置)
PermitRootLogin no
第 19 项:安装配置 AIDE 文件完整性检测
AIDE(Advanced Intrusion Detection Environment)可以检测系统文件被篡改。
操作步骤:
# 安装
# CentOS
sudo yum install -y aide
# Ubuntu
sudo apt-get install -y aide
# 初始化数据库(第一次运行)
sudo aide --init
# 移动数据库文件
sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
# 定期检查(建议加入 cron)
# 0 3 * * * /usr/sbin/aide --check | /usr/bin/mail -s "AIDE check report" admin@example.com
# 手动检查
sudo aide --check
验证方法:
# 修改一个文件,测试 AIDE 能否检测到
sudo touch /tmp/test_change
sudo aide --check | grep /tmp/test_change
# 应该报告文件被修改
# 清理测试文件
sudo rm /tmp/test_change
第 20 项:配置日志集中收集和告警
服务器的安全日志需要集中收集和分析,防止被篡改或删除。
操作步骤(使用 rsyslog 发送到日志服务器):
# 1. 配置 rsyslog 发送日志到远程服务器
sudo vi /etc/rsyslog.conf
# 添加(UDP 方式):
# *.* @log-server-ip:514
# 或(TCP 方式,更可靠):
# *.* @@log-server-ip:514
# 2. 启用并重启 rsyslog
sudo systemctlenablersyslog
sudo systemctl restart rsyslog
# 3. 配置日志轮转,防止日志过大
sudo vi /etc/logrotate.d/syslog
# 确保有类似内容:
# /var/log/secure
# /var/log/messages
# {
# daily
# rotate 30
# missingok
# notifempty
# compress
# sharedscripts
# postrotate
# /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` || true
# endscript
# }
验证方法:
# 测试日志能否发送到远程服务器
logger"Test log from$(hostname)"
# 在日志服务器上检查是否收到
# 查看日志轮转配置
sudo logrotate -d /etc/logrotate.conf | head -30
加固完成后的验证
检查清单
#!/bin/bash
# save as: security_check.sh
# 服务器安全加固完成后的自检脚本
echo"===== 服务器安全加固自检 ====="
echo"[1] 检查 root 登录是否禁用..."
grep"PermitRootLogin"/etc/ssh/sshd_config
echo"[2] 检查 SSH 公钥认证..."
grep"PubkeyAuthentication"/etc/ssh/sshd_config
grep"PasswordAuthentication"/etc/ssh/sshd_config
echo"[3] 检查防火墙状态..."
systemctl status firewalld 2>/dev/null | grep"Active"|| ufw status 2>/dev/null | head -3
echo"[4] 检查 fail2ban..."
systemctl status fail2ban 2>/dev/null | grep"Active"
echo"[5] 检查不必要的服务..."
systemctl list-units --type=service --state=running | grep -E"telnet|rsh|vsftpd|cups|postfix"
echo"[6] 检查文件描述符限制..."
ulimit-n
echo"[7] 检查内核参数..."
sysctl net.ipv4.tcp_syncookies
sysctl net.ipv4.icmp_echo_ignore_all
echo"[8] 检查 auditd..."
systemctl status auditd 2>/dev/null | grep"Active"
echo"[9] 检查 AIDE..."
aide --check 2>/dev/null | head -5
echo"[10] 检查密码策略..."
grep"minlen"/etc/security/pwquality.conf
grep"PASS_MAX_DAYS"/etc/login.defs
总结
服务器安全加固是"纵深防御"的体现——每一层都有防线,即使某一层被突破,还有其他层保护。以下 20 项操作的优先级和分类:
高优先级(必须做):
禁用 root 登录
SSH 公钥认证 + 禁止密码登录
配置防火墙(iptables/firewalld/ufw)
关闭不必要的服务和端口
更新系统补丁
fail2ban 防暴力破解
中优先级(应该做):
禁用 ICMP 响应
内核网络参数加固
资源限制(ulimit)
sudo 日志记录
密码策略
SSH 端口修改
低优先级(推荐做):
auditd 审计
GRUB 密码
AIDE 文件完整性检测
日志集中收集
安全加固不是一次性的工作,应该定期:
每季度审查一次账号和权限
每次系统更新后确认加固配置未被动
定期查看 fail2ban 和 auditd 日志
定期检查是否有新的漏洞和加固手段
Linux
Linux
+关注
关注
88
文章
11834
浏览量
219677
服务器
服务器
+关注
关注
14
文章
10395
浏览量
91790
网络
网络
+关注
关注
14
文章
8349
浏览量
95639
原文标题:服务器安全加固清单:新机器上线前必做的 20 件事
文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。
