服务器

服务器(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"

简单脚本

资源