下面提供一个更详细、一步步的服务器安全加固指南,适合新手操作。我们将从 Fail2Ban、SSH(密钥认证及端口更改)、Nginx 速率限制和日志轮转四个方面进行优化,同时补充一些额外的安全建议。
新的服务器,通常我们会创建一个新用户并将其加入 sudo 组,这样你就可以使用新用户登录,然后通过 sudo 命令来执行需要管理员权限的操作。下面是具体步骤:
1. 创建新用户
使用 adduser
命令创建新用户(例如用户名为 newuser
):
sudo adduser newuser
系统会提示你设置密码并输入一些用户信息(可以直接回车跳过)。
2. 将新用户添加到 sudo 组
为了让新用户具有管理员权限,需要把他加入 sudo
组:
sudo usermod -aG sudo newuser
提示:
在某些系统中,sudo 组可能被命名为wheel
,请根据你的发行版实际情况操作。
3. 测试新用户登录
- 打开一个新的终端或使用 SSH 重新连接服务器,使用新用户登录:
ssh newuser@your_server_ip
- 登录后,尝试执行一个需要管理员权限的命令,例如:
系统会提示输入新用户的密码。成功后说明配置无误。sudo apt update
通过这种方式,即使你禁用了 root 的直接远程登录,也能安全地以新用户身份登录,并在需要时通过 sudo 获取管理员权限。
下面是安全加固的配置措施
1. Fail2Ban 安全加固
Fail2Ban 能够自动封禁短时间内
出现多次失败登录的 IP,能有效防止暴力破解。
1.1 安装 Fail2Ban(如未安装)
sudo apt update
sudo apt install fail2ban
1.2 创建自定义配置文件
建议不要直接修改默认配置文件,而是在 /etc/fail2ban/jail.d/
下创建自定义配置文件,比如 custom.conf
。
sudo nano /etc/fail2ban/jail.d/custom.conf
1.3 添加如下内容
[DEFAULT]
# 封禁时间:3600秒(1小时)
bantime = 3600
# 查找时间窗口:300秒(5分钟)
findtime = 300
# 最大失败尝试次数:5次
maxretry = 5
[sshd]
enabled = true
port = ssh # 这里使用名称(sshd)或具体数字(如22、2222)都可以
logpath = /var/log/auth.log # 根据系统(Ubuntu 常用 /var/log/auth.log,CentOS 则可能是 /var/log/secure)
提示:
- 如果系统使用了不同的日志路径,请根据实际情况修改。
- 如果需要保护其他服务,可以按相似方式添加更多 jail 配置。
1.4 重启 Fail2Ban 并检查状态
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
确保看到类似封禁规则已生效的信息。
2. SSH 安全加固
加强 SSH 安全性主要包括使用密钥认证替代密码认证,并视需要修改默认端口。
2.1 生成 SSH 密钥对(本地操作)
如果你还没有 SSH 密钥,可以在客户端生成:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
一路回车,生成的密钥通常存放在 ~/.ssh/id_rsa
和 ~/.ssh/id_rsa.pub
。
2.2 将公钥复制到服务器
使用 ssh-copy-id
工具上传公钥到服务器(假设 SSH 仍在默认端口 22 上):
ssh-copy-id username@your_server_ip
注意:
在执行下一步前,请确保你已经能通过 SSH 密钥成功登录服务器,以免因配置错误导致无法远程连接。
2.3 修改 SSH 配置文件
编辑 /etc/ssh/sshd_config
:
sudo nano /etc/ssh/sshd_config
确保进行如下修改:
- 禁用密码认证:
PasswordAuthentication no ChallengeResponseAuthentication no
- 启用公钥认证:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
- (可选)修改 SSH 监听端口:如果你想更改默认端口,取消注释并修改
Port
行。例如:Port 2222
提示:修改 SSH 端口后,记得更新防火墙规则(见下文防火墙部分),并先在新的终端测试连接。
2.4 重启 SSH 服务
sudo systemctl restart sshd
2.5 检查 SSH 配置
在测试 SSH 连接前,建议用以下命令检查配置文件语法是否正确:
sudo sshd -t
没有输出则表示配置正确。
3. 修改 SSH 端口与防火墙设置(可选)
改变 SSH 端口可以降低被自动化攻击的概率,但务必更新防火墙规则。
3.1 更新 SSH 配置文件
如上一步已在 /etc/ssh/sshd_config
中修改 Port
参数(例如设置为 2222
)。
3.2 更新防火墙规则
如果使用 UFW(Ubuntu 常用),允许新的 SSH 端口并删除旧端口:
sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp
sudo ufw reload
若使用其他防火墙(如 iptables),请根据实际情况调整规则。
4. Nginx 速率限制配置
限制请求速率能有效防止恶意请求或 DDoS 攻击。
4.1 编辑 Nginx 主配置文件
打开 /etc/nginx/nginx.conf
文件:
sudo nano /etc/nginx/nginx.conf
在 http { ... }
块中添加或修改以下内容(确保放在合适的位置):
http {
# 定义请求限制区域,基于客户端 IP 地址,每秒允许1个请求
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
listen 80;
server_name your_domain_or_ip;
location /search/ {
# 对 /search/ 路径启用速率限制,允许突发5个请求
limit_req zone=one burst=5 nodelay;
try_files $uri $uri/ =404;
}
# 其他 location 配置…
}
}
4.2 测试并重启 Nginx
测试配置文件语法:
sudo nginx -t
如果无误,重启 Nginx:
sudo systemctl restart nginx
5. 日志轮转(Logrotate)配置
定期清理和压缩日志文件能防止日志无限增长,影响系统性能。
5.1 安装 logrotate(如未安装)
sudo apt install logrotate
5.2 配置全局日志轮转
编辑 /etc/logrotate.conf
,确保包含类似配置:
/var/log/*.log {
weekly
rotate 4
compress
delaycompress
missingok
notifempty
}
5.3 为特定服务(如 SSH)创建日志轮转配置
创建或编辑 /etc/logrotate.d/sshd
文件:
sudo nano /etc/logrotate.d/sshd
添加如下内容(确保路径正确,如 Ubuntu 下 SSH 日志通常为 /var/log/auth.log
):
/var/log/auth.log {
weekly
rotate 4
compress
delaycompress
missingok
notifempty
create 640 root adm
sharedscripts
postrotate
# 重载 rsyslog 服务以确保日志文件句柄正确切换
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
提示:文件权限和日志路径需要根据实际系统进行调整。
6. 额外安全建议
6.1 配置防火墙
安装并启用 UFW(简单易用):
sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 允许 HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 允许你配置的 SSH 端口(例如2222)
sudo ufw allow 2222/tcp
sudo ufw enable
sudo ufw status verbose
6.2 定期更新系统
保持系统和软件包的更新是防止漏洞的重要手段:
sudo apt update && sudo apt upgrade -y
6.3 限制 root 远程登录
在 /etc/ssh/sshd_config
中设置:
PermitRootLogin no
6.4 安装 Fail2Ban 的邮件通知(可选)
可以设置 Fail2Ban 在封禁时发送邮件通知,便于及时响应攻击:
编辑 /etc/fail2ban/jail.local
或在 custom.conf 中增加:
[DEFAULT]
action = %(action_mwl)s
确保系统已安装邮件传输代理(如 Postfix)。
总结
- Fail2Ban:使用自定义配置文件,合理设置封禁参数,并验证是否生效。
- SSH 加固:生成密钥、上传公钥,禁用密码认证,必要时修改默认端口,并更新防火墙。
- Nginx 速率限制:通过
limit_req_zone
和limit_req
限制恶意请求。 - 日志轮转:确保日志文件定期清理,防止硬盘占用过高。
- 额外建议:使用 UFW 配置防火墙、限制 root 远程登录、保持系统更新等。
按照以上步骤一步步实施后,您的服务器安全性将大大提高。建议每次修改配置后,都先用测试命令(如 nginx -t
、sshd -t
)确认无误,并在另一个终端中测试连接,以避免误操作导致服务不可用。