面向初学者的 Linux 服务器加固指南 🐧

🛡️ 前言

在这个数字化时代,服务器安全成为了至关重要的议题。Linux 系统由于其开放性和灵活性,广泛用于服务器领域。但是,仅仅依赖默认配置往往是不够的。本指南旨在介绍如何加固你的 Linux 服务器,提高其安全性。

🎯 要点

  1. 更新操作系统和软件包
  2. 设置防火墙规则
  3. 最小化安装的软件
  4. 管理用户权限
  5. 配置 SSH 安全选项
  6. 安装安全监控工具

🛠️ 加固步骤

1️⃣ 更新操作系统和软件包

  • 步骤1: 使用以下命令更新系统。

    bash 复制代码
    sudo apt update && sudo apt upgrade
  • 步骤2: 定期检查更新。 建议每周至少检查一次系统更新。

2️⃣ 设置防火墙规则

  • 步骤1: 使用 ufw 来简化防火墙设置。

    bash 复制代码
    sudo apt install ufw
  • 步骤2: 启动并设置基础规则。

    bash 复制代码
    sudo ufw enable
    sudo ufw allow ssh

3️⃣ 最小化安装的软件

  • 步骤1: 使用 dpkgapt 查看已安装的软件包。

    bash 复制代码
    dpkg -l
  • 步骤2: 卸载不必要的软件包。

    bash 复制代码
    sudo apt remove <package-name>

4️⃣ 管理用户权限

  • 步骤1: 创建一个普通用户,并使用 sudo 提供管理员权限。

    bash 复制代码
    sudo adduser <username>
    sudo usermod -aG sudo <username>
  • 步骤2: 禁用 root 登录。

    bash 复制代码
    sudo passwd -l root

5️⃣ 配置 SSH 安全选项

  • 步骤1: 编辑 SSH 配置文件。

    bash 复制代码
    sudo nano /etc/ssh/sshd_config
  • 步骤2: 更改以下几个设置。

    • 禁用 root 登录:PermitRootLogin no
    • 更改默认端口:Port <new-port>
    • 使用密钥认证:PasswordAuthentication no

6️⃣ 安装安全监控工具

  • 步骤1: 安装 Fail2ban。

    bash 复制代码
    sudo apt install fail2ban
  • 步骤2: 启动并配置 Fail2ban。

    bash 复制代码
    sudo systemctl start fail2ban

这些步骤只是加固 Linux 服务器的基础,随着安全需求的变化,可能需要进一步的配置和审计。接下来,我们编写一个自动执行服务器加固的脚本。

📜 自动化脚本

bash 复制代码
#!/bin/bash

# 退出脚本,如果任何语句的执行结果是非零
set -e

# 设置 umask 为 077,仅当前用户有权操作新生成的文件
umask 077

# 自定义字段(UDF),用于从用户输入获取参数
# UDF 用于获取 WireGuard IP 地址
# <UDF name="WG_IP" label="该节点的 WireGuard IP 地址" example="CIDR 标记法,例如 192.168.50.2/24" />
# UDF 用于获取 WireGuard 对等节点的公钥
# <UDF name="WG_PEER_PUBLIC_KEY" label="WireGuard 对等体的公钥" example="iupfsx9fgp4erSmjmByPEjAoZPdqNat2Zgq1c5qPwig=" />
# UDF 用于获取 WireGuard 对等节点的允许的 IPs 设置
# <UDF name="WG_PEER_ALLOWED_IPS" label="WireGuard 对等体的允许 IP 设置" example="192.168.50.1/32" />
# UDF 用于获取管理员用户
# <UDF name="ADMIN_USER" label="管理员用户名" default="user" example="这是你登录以管理主机的用户" />

# 更新 apt 包列表并安装必要软件
apt-get update
apt-get upgrade -y
apt-get install -y acl wireguard ufw

# 把 umask 设置加入到系统配置
echo -e "\numask 077" >> /etc/profile

# 创建管理用户,赋予 root 权限
useradd -m -s /bin/bash \
  -G users,sudo \
  -p $(awk -F: '/^root:/ { print $2 }' /etc/shadow) \
  $ADMIN_USER

# 禁用 root 用户 SSH 登录
passwd -l root
cat >/etc/ssh/sshd_config.d/01-disable-root.conf <<EOF
PermitRootLogin no
EOF

# 仅允许 root 用户管理 SSH 密钥
mkdir -p /etc/ssh/authorized_keys
chmod 0711 /etc/ssh/authorized_keys
cat >/etc/ssh/sshd_config.d/02-system-managed-keys.conf <<EOF
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
EOF

# 禁用 SSH 密码登录(如果存在 authorized_keys)
if [ -e "$HOME/.ssh/authorized_keys" ]; then
  mv "$HOME/.ssh/authorized_keys" /etc/ssh/authorized_keys/$ADMIN_USER
  chown root:root /etc/ssh/authorized_keys/$ADMIN_USER
  setfacl -m u:$ADMIN_USER:r /etc/ssh/authorized_keys/$ADMIN_USER
  cat >/etc/ssh/sshd_config.d/03-no-passwords.conf <<EOF
PasswordAuthentication no
EOF
fi

# 重新启动 SSH 服务以应用更改
systemctl restart ssh

# 随机生成 WireGuard 的监听端口
WG_PORT=$((($SRANDOM % 55535)+10000))

# 生成 WireGuard 密钥对
mkdir -p /etc/wireguard
wg genkey | tee /etc/wireguard/private_key | wg pubkey > /etc/wireguard/public_key

# 配置 WireGuard 接口
cat >/etc/wireguard/wg0.conf <<EOF
[Interface]
Address = $WG_IP
PrivateKey = $(cat /etc/wireguard/private_key)
ListenPort = $WG_PORT

[Peer]
PublicKey = $WG_PEER_PUBLIC_KEY
AllowedIPs = $WG_PEER_ALLOWED_IPS
EOF

# 启动并使 WireGuard 持久化
systemctl start wg-quick@wg0
systemctl enable wg-quick@wg0

# 将 WireGuard 的连接信息输出至 /etc/issue
cat >>/etc/issue <<EOF
[Peer]
PublicKey = $(cat /etc/wireguard/public_key)
AllowedIPs = $(echo $WG_IP | sed 's#/.*#/32#')
Endpoint = $(hostname -I | awk '{ print $1 }'):$WG_PORT
EOF

# 配置防火墙规则
ufw allow in on eth0 to any port $WG_PORT proto udp
ufw allow in on wg0 to any port 22 proto tcp
ufw enable

GitHub 上还有一些脚本,可以参考:github.com/WeiyiGeek/S...

相关推荐
韩楚风3 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学3 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
网络研究院3 小时前
Android 安卓内存安全漏洞数量大幅下降的原因
android·安全·编程·安卓·内存·漏洞·技术
Pythonliu74 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
我是哈哈hh4 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
郭二哈4 小时前
C++——模板进阶、继承
java·服务器·c++
挥剑决浮云 -4 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
立秋67895 小时前
Python的defaultdict详解
服务器·windows·python
Lansonli5 小时前
云原生(四十一) | 阿里云ECS服务器介绍
服务器·阿里云·云原生
john_hjy6 小时前
11. 异步编程
运维·服务器·javascript