服务器安全的第一道防线是账号管理。默认的root账号和弱密码是黑客攻击的首要目标。我们需要创建具有sudo权限的普通用户,并强制执行复杂的密码策略。
直接使用root账号远程登录风险极大,一旦密码泄露,攻击者将获得完全控制权。首先需要创建一个普通管理员用户。
步骤1:创建新用户并设置密码
执行以下命令创建用户(例如名为admin):
useradd -m admin
passwd admin
步骤2:赋予sudo权限
将新用户加入wheel组(CentOS/RHEL)或sudo组(Ubuntu/Debian):
CentOS/RHEL
usermod -aG wheel admin
Ubuntu/Debian
usermod -aG sudo admin
步骤3:锁定root密码
执行以下命令锁定root密码,使其无法直接用于登录:
passwd -l root
修改/etc/login.defs文件设置密码有效期,并配置PAM模块强制密码复杂度。
步骤1:编辑/etc/login.defs
PASS_MAX_DAYS 90
PASS_MIN_DAYS 1
PASS_MIN_LEN 8
PASS_WARN_AGE 7
步骤2:配置系统密码策略
针对CentOS系统,编辑/etc/security/pwquality.conf,添加或修改以下行:
minlen = 10
minclass = 3
maxrepeat = 3
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
针对Ubuntu系统,编辑/etc/pam.d/common-password,在pam_unix.so行下方添加:
password requisite pam_pwquality.so retry=3 minlen=10 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
SSH是远程管理的核心通道,也是被扫描最频繁的服务。默认配置存在诸多安全隐患,必须进行深度加固。
默认的22端口会遭受全网的暴力破解扫描。建议将其修改为高位端口(如22222)。
编辑/etc/ssh/sshd_config文件:
Port 22222
密码认证在暴力破解面前不堪一击。密钥认证是目前最安全的登录方式。
步骤1:在本地客户端生成SSH密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
步骤2:将公钥上传到服务器
ssh-copy-id -p 22222 admin@your_server_ip
步骤3:禁用密码认证
编辑/etc/ssh/sshd_config文件,修改以下参数:

PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin no
只允许特定用户登录,并设置会话自动超时断开,防止未授权人员利用空闲会话。
在/etc/ssh/sshd_config文件末尾添加:
AllowUsers admin
ClientAliveInterval 300
ClientAliveCountMax 2
MaxAuthTries 3
注意:修改SSH配置后,必须重启服务生效。在执行重启命令前,务必保持当前连接窗口不关闭,另开一个新窗口测试连接成功后再关闭旧窗口,防止因配置错误导致被锁在服务器外。
systemctl restart sshd
只保留业务必需的端口,拒绝所有其他入站连接。使用系统自带的firewalld(CentOS)或ufw(Ubuntu)进行管理。
首先确保firewalld已安装并运行:
systemctl start firewalld
systemctl enable firewalld
设置默认区域为drop(丢弃所有传入数据包),然后单独放行必要端口:
firewall-cmd --set-default-zone=public
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --permanent --add-port=22222/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
启用ufw并设置默认拒绝入站:
ufw default deny incoming
ufw default allow outgoing
放行修改后的SSH端口和Web端口:
ufw allow 22222/tcp
ufw allow 80/tcp
ufw allow 443/tcp
启用防火墙:
ufw enable
即使修改了端口和禁用了密码,攻击者依然可能尝试扫描。部署Fail2ban可以自动封禁尝试频繁登录失败的IP地址。
CentOS
yum install epel-release
yum install fail2ban
Ubuntu
apt update
apt install fail2ban
创建本地配置文件/etc/fail2ban/jail.local,覆盖默认设置:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
[sshd]
enabled = true
port = 22222
filter = sshd
logpath = /var/log/secure
maxretry = 3
bantime = 86400
注意:Ubuntu系统的日志路径通常为/var/log/auth.log,请根据实际情况修改logpath。
启动并设置开机自启:
systemctl start fail2ban
systemctl enable fail2ban
查看被封禁的IP列表:
fail2ban-client status sshd
通过调整/etc/sysctl.conf文件,加固网络栈安全性,防止SYN Flood攻击和IP欺骗。
编辑/etc/sysctl.conf,添加或修改以下参数:
禁用IP源路由包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
开启SYN Cookies保护
net.ipv4.tcp_syncookies = 1
禁用ICMP重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
忽略ICMP ping请求(可选,根据业务需求)
net.ipv4.icmp_echo_ignore_all = 1
记录可疑数据包
net.ipv4.conf.all.log_martians = 1
地址空间布局随机化
kernel.randomize_va_space = 2
执行以下命令使配置立即生效:
sysctl -p
关闭不必要的服务可以减少攻击面。同时,确保日志服务正常运行,以便事后审计。
检查当前监听端口:
netstat -tunlp
如果不需要Postfix邮件服务,建议关闭:
systemctl stop postfix
systemctl disable postfix
编辑/etc/rsyslog.conf,确保远程日志或本地日志存储策略合理。对于关键操作,配置/etc/profile.d/history.sh来记录每个用户的操作命令和时间:
export PS1="[\u@\h \W] \$ "
export HISTSIZE=10000
export HISTFILESIZE=10000
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });user=$(whoami); echo $(date "+%Y-%m-%d %H:%M:%S"):$user:`pwd`:$msg >> /var/log/command_history.log; }'
创建日志文件并设置权限:
touch /var/log/command_history.log
chmod 777 /var/log/command_history.log
chattr +a /var/log/command_history.log
以上配置完成后,服务器将具备极高的基础安全性,能够抵御绝大多数自动化扫描和暴力破解攻击。定期检查/var/log/secure和/var/log/command_history.log是日常运维的重要习惯。
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图