Ubuntu 22.04 Server 虚拟机初始化配置与优化指南
✅ Ubuntu 22.04 本地/通用服务器初始化配置清单
1. 设置时区
sudo timedatectl set-timezone Asia/Shanghai
2. 防火墙配置(UFW)
sudo ufw enable
sudo ufw default deny
# 可选放通SSH或其他端口
sudo ufw allow 22/tcp
# 查看状态
sudo ufw status
# 禁用防火墙
# sudo ufw disable
3. 安装常用基础软件
sudo apt update && sudo apt install -y vim wget lrzsz bash-completion tree lsof rsync unzip net-tools
4. 优化资源限制(limits.conf)
sudo tee -a /etc/security/limits.conf << 'EOF'
root soft nofile 65535
root hard nofile 65535
root soft stack unlimited
root hard stack unlimited
root soft nproc 127962
root hard nproc 127962
root soft core unlimited
root hard core unlimited
EOF
5. 配置静态IP(手动编辑)
sudo vi /etc/netplan/00-installer-config.yaml
sudo netplan apply
6. 彻底关闭 IPv6
sudo tee -a /etc/sysctl.conf << 'EOF'
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF
sudo sysctl -p
7. 删除 Snap 系统(节省空间、提高兼容性)
snap list
sudo snap remove --purge lxd
sudo snap remove --purge core20
sudo snap remove --purge snapd
sudo apt remove --autoremove snapd
8. 配置国内 DNS 并关闭 DNSStubListener
sudo vi /etc/systemd/resolved.conf
修改为:
[Resolve]
DNS=223.5.5.5
DNSStubListener=no
然后执行:
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl restart systemd-resolved
9. 开启系统时间同步(默认使用 systemd-timesyncd
)
sudo timedatectl set-ntp true
如需自定义 NTP:
sudo vi /etc/systemd/timesyncd.conf
10. 禁用 Swap(适用于纯内存型虚拟化环境)
sudo swapoff -a
sudo sysctl -w vm.swappiness=0
sudo sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
11. SSH 启用 root 登录(仅限内网、测试环境,生产不推荐)
sudo vi /etc/ssh/sshd_config
修改或添加:
PermitRootLogin yes
然后重启 SSH 服务:
sudo systemctl restart ssh
🛠️ 一键初始化优化交互脚本
#!/bin/bashset -efunction prompt() {read -rp "$1 [y/N]: " responsecase "$response" in[yY][eE][sS]|[yY]) return 0 ;;*) return 1 ;;esac
}echo "🌐 Ubuntu 22.04 云/虚拟化服务器初始化交互脚本"# 1. 设置时区
if prompt "1️⃣ 设置时区为 Asia/Shanghai?"; thentimedatectl set-timezone Asia/Shanghaiecho "✅ 时区已设置为 Asia/Shanghai"
fi# 2. 安装常用工具
if prompt "2️⃣ 安装常用软件包(vim wget net-tools 等)?"; thenapt update && apt install -y vim wget lrzsz bash-completion tree lsof rsync unzip net-toolsecho "✅ 常用工具安装完成"
fi# 3. 优化 limits.conf
if prompt "3️⃣ 配置系统资源限制(/etc/security/limits.conf)?"; thencat >> /etc/security/limits.conf << EOF
root soft nofile 65535
root hard nofile 65535
root soft stack unlimited
root hard stack unlimited
root soft nproc 127962
root hard nproc 127962
root soft core unlimited
root hard core unlimited
EOFecho "✅ limits.conf 已配置"
fi# 4. 禁用 IPv6
if prompt "4️⃣ 禁用 IPv6?"; thencat >> /etc/sysctl.conf << EOF
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOFsysctl -pecho "✅ IPv6 已禁用"
fiif prompt "2️⃣ 修改 GRUB 参数彻底禁用 IPv6?(重启后生效)"; thenGRUB_FILE="/etc/default/grub"if grep -q "ipv6.disable=1" "$GRUB_FILE"; thenecho "🔁 GRUB 已包含 ipv6.disable=1,无需重复添加"elsesed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 ipv6.disable=1"/' "$GRUB_FILE"echo "✅ GRUB 参数已添加"update-grubfi
fi# 5. 删除 snap
if prompt "5️⃣ 删除 snap 及其组件(节省空间)?"; thensnap list || truesnap remove --purge lxd || truesnap remove --purge core20 || truesnap remove --purge snapd || trueapt remove --autoremove snapd -y || trueecho "✅ snap 已删除"
fi# 6. 配置 DNS
if prompt "6️⃣ 配置 DNS 为(223.5.5.5)并关闭 DNSStubListener?"; thensed -i '/^#*DNS=/c\DNS=223.5.5.5' /etc/systemd/resolved.confsed -i '/^#*DNSStubListener=/c\DNSStubListener=no' /etc/systemd/resolved.confln -sf /run/systemd/resolve/resolv.conf /etc/resolv.confsystemctl restart systemd-resolvedecho "✅ DNS 配置完成"
fi# 7. 开启时间同步
if prompt "7️⃣ 开启时间同步?"; thentimedatectl set-ntp trueecho "✅ NTP 时间同步已启用"
fi# 8. 禁用 Swap
if prompt "8️⃣ 禁用 Swap(建议内存足够情况下)?"; thenswapoff -asysctl -w vm.swappiness=0sed -ri '/^[^#]*swap/s@^@#@' /etc/fstabecho "✅ Swap 已禁用"
fi# 9. 防火墙配置(UFW)
if prompt "9️⃣ 启用防火墙(默认拒绝,放通22端口)?"; thenufw enableufw default denyufw allow 22/tcpecho "✅ 防火墙已启用,22端口已放行"
fi# 10. SSH 启用 Root 登录
if prompt "🔟 启用 root 用户 SSH 登录?(不推荐生产使用)"; thensed -i 's/^#\?PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_configsystemctl restart sshecho "✅ Root 登录已启用"
fiecho "🎉 所有选择的操作已完成 ✅"
保存为 init.sh
,赋予执行权限并运行:
chmod +x init.sh
sudo ./init.sh
📌 建议后续补充(非必须):
- 设置主机名(
hostnamectl set-hostname
) - 创建新用户并设置免密sudo权限
- 安装 fail2ban、防火墙策略等安全组件
- 启用 BBR(TCP加速)
- 开启日志轮转策略(logrotate)