lch
发布于 2026-05-11 / 0 阅读
0

服务器安全加固清单要点

问题背景

新机器上线前不做安全加固,等于把门打开等人进来。生产环境的服务器一旦暴露在公网,各种扫描、暴力破解、漏洞利用会在上线后几小时内接踵而至。等被黑了再去加固,不仅被动,而且恢复成本极高——日志可能被清、植入后门可能还在、数据可能已泄露。

服务器安全加固不是装一个杀毒软件那么简单。它涉及 操作系统 层面的账号与权限管理、网络层面的防火墙配置、服务层面的安全选项、应用层面的加密 通信 、系统层面的漏洞修复。每一个环节都有可能被利用。

这篇文章面向初中级 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 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运维】欢迎添加关注!文章转载请注明出处。