问题背景
新机器上线前不做安全加固,等于把门打开等人进来。生产环境的服务器一旦暴露在公网,各种扫描、暴力破解、漏洞利用会在上线后几小时内接踵而至。等被黑了再去加固,不仅被动,而且恢复成本极高——日志可能被清、植入后门可能还在、数据可能已泄露。
服务器安全加固不是装一个杀毒软件那么简单。它涉及 操作系统 层面的账号与权限管理、网络层面的防火墙配置、服务层面的安全选项、应用层面的加密 通信 、系统层面的漏洞修复。每一个环节都有可能被利用。
这篇文章面向初中级 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@ "cat ~/.ssh/authorized_keys" # 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 - # 应该直接退出或提示 This account is currently not available
第 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 stopsudo 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
第 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运维】欢迎添加关注!文章转载请注明出处。