服务器
服务器(Server)是一种计算机,为计算机网络中其他设备(称为客户端)提供服务。
服务器类型
操作系统
服务器软件
名称 | 编程语言 | 描述 |
---|---|---|
Nginx | C | 是异步框架的web服务器软件,主要要被用作 反向代理 和 负载均衡器,它也常用于 HTTP 服务器。 |
Apache | C | 是Apache软件基金会的一个开放源码的网页服务器软件。 |
Squid | C++ | 是一个开源的web缓存代理服务器软件。主要用于缓存 Web 内容、控制访问权限、提高性能、减少带宽消耗。 |
安全设置
以Ubuntu系统为例。
更新系统和软件
确保系统和所有软件都是最新的。安全更新修复了许多已知的漏洞。
# 只更新已安装软件的补丁而不涉及系统级的变化。
sudo apt update && sudo apt upgrade
# 更新更激进,它可能会升级系统中的核心组件,或者删除一些不再需要的包。
# 生产环境中,可能会不小心删除一些重要的包,导致系统不稳定。
sudo apt dist-upgrade
配置防火墙 (UFW)
UFW (Uncomplicated Firewall) 是 Ubuntu 中的防火墙工具。你可以使用它来限制进入和退出的网络流量。云厂商上也需要开放或关闭对应端口。
# UFW 在大多数基于 Debian 的系统(如 Ubuntu)中是预安装的
# sudo apt update
# sudo apt install ufw
# 允许SSH,
# 防止未配置,远程连接断开
# 或指定具体端口:sudo ufw allow 22
sudo ufw allow ssh
# 允许 HTTP(端口80)和 HTTPS(端口443)
sudo ufw allow http
sudo ufw allow https
# 允许特定端口(例如8080)
sudo ufw allow 8080
# 限制 SSH 连接(每分钟尝试连接次数限制)
sudo ufw limit ssh
# 默认拒绝所有入站流量
# 默认允许所有出站流量
# 这样可以确保除非显式允许某些流量,所有的入站连接都会被拒绝。
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 查看详细的防火墙规则
sudo ufw status verbose
# 查看防火墙状态
sudo ufw status
# 开启防火墙
sudo ufw enable
# 禁用防火墙
# sudo ufw disable
# 重置防火墙
# sudo ufw reset
# 删除规则,如ssh端口
# sudo ufw delete allow ssh
# 重启防火墙
# sudo ufw reload
用户和登录配置
创建一个用户,并加入sudo组。
# 添加一个新用户(假设用户名是 adminuser,你可以换成自己喜欢的名称)
# 按提示设置密码,并填写用户信息(可以留空)。
sudo adduser adminuser
# 将新用户添加到 sudo 组
sudo usermod -aG sudo adminuser
本地电脑生成SSH的生成公钥和私钥
ssh-keygen
# Enter file in which to save the key
# 私钥保存位置,直接回车默认位置和名称,也可以保存其他文件:
C:\Users\用户名/.ssh/computer_1
# Enter passphrase (empty for no passphrase):
# 询问是否设置钥保护密码,可以输入密码或回车不设置密码,如果设置登录时需要提供私钥和私钥保护密码。
服务器导入公钥
# Linux 服务器在当前用户目录下创建.ssh目录
mkdir .ssh
# Linux 导入示例,本地电脑操作,将本地生成的公钥id_rsa.pub复制到服务器authorized_keys
scp C:\Users\username/.ssh/id_rsa.pub user2@46.100.162.172:/home/user2/.ssh/authorized_keys
禁用 root 账户的 SSH 远程登录,并使用其他具有 sudo 权限的用户。
# 使用vim或nano编辑文件
sudo vim /etc/ssh/sshd_config
# 禁用root的SSH登录,防止黑客直接猜测 root 密码。
PermitRootLogin no
# 默认的 SSH 端口是 22,修改为其他端口可以减少被暴力破解的风险。
# 如修改为 2222,注意云厂商后台也要开放改端口的TCP协议。
Port 2222
# 禁用基于密码的认证方式
PasswordAuthentication no
# 允许公钥的认证方式
PubkeyAuthentication yes
# 修改完成后保存,按ESC键输入:wq 保存。
# 重启 SSH 服务,有些为:sudo systemctl restart ssh
sudo systemctl restart sshd
云服务商设置
检查脚本
简单命令
安全检查
#!/bin/bash
# 检查系统中UID为0的用户(root-like用户)
awk -F: '$3 == 0 {print $1}' /etc/passwd
# 检查/etc/sudoers文件中的敏感配置
grep -vE '^#' /etc/sudoers
# 检查某个时间段有修改的文件
sudo find / -type f -newermt “2025-03-30” ! -newermt “2025-04-03” -ls
# 用户登录和系统重启的历史记录
last
# 检查/etc/passwd文件的权限
ls -l /etc/passwd
# 检查是否允许root用户通过SSH登录
grep -i "^PermitRootLogin" /etc/ssh/sshd_config
# 检查SSH是否开启密码认证
grep -i "^PasswordAuthentication" /etc/ssh/sshd_config
# 检查SSH是否仅允许密钥认证
grep -i "^PubkeyAuthentication" /etc/ssh/sshd_config
# 检查当前开放的端口
ss -tuln
# 检查当前运行的服务
systemctl list-units --type=service --state=running
# 登录记录
sudo cat /var/log/auth.log
sudo cat /var/log/auth.log.1
# 检查系统中失败的登录尝试
grep "Failed password" /var/log/auth.log
# 检查是否有SSH登录记录
grep "sshd" /var/log/auth.log
# 检查可用的安全更新(Ubuntu/Debian)
apt update && apt list --upgradable
# 检查系统是否有弱密码(需要john工具)
john --list=passwords /etc/shadow
# 检查密码长度是否过短
awk -F: '{print $2}' /etc/shadow | while read pass; do
if [[ $(echo "$pass" | wc -c) -lt 6 ]]; then
echo "Weak password detected!"
fi
done
# 使用AIDE工具检查文件完整性
aide --check
# 检查防火墙状态(ufw)
ufw status
# 检查iptables防火墙规则
iptables -L
# 查看当前启动的服务
sudo systemctl list-units --type=service --state=running
# 检查系统中已设置的定时任务
crontab -l
ls -l /etc/cron.d /etc/cron.daily /etc/cron.hourly /etc/cron.monthly
# 检查/etc/ssh/sshd_config文件权限
ls -l /etc/ssh/sshd_config
# 检查/etc/passwd文件权限
ls -l /etc/passwd
# 检查fail2ban是否已安装
dpkg -l | grep fail2ban
# 检查SELinux是否启用
sestatus
# 检查AppArmor是否启用
aa-status
# 检查文件系统挂载选项是否安全(noexec, nosuid, nodev等)
mount | grep -E "noexec|nosuid|nodev"