新佈署 CentOS/RHEL 伺服器需執行一系列基礎配置。本文提供生產級初始化腳本,涵蓋網路、安全、編輯器、語系、服務、核心參數六大維度,可直接用於自動化佈署流程。
server_init.sh
#!/bin/bash
# Linux 伺服器初始化腳本
# 適用: CentOS 6/7, RHEL 6/7
# 作者: NetSeek (修改自 www.webnginx.com)
# 用法: chmod +x server_init.sh && sudo ./server_init.sh
set -euo pipefail
echo "+--------------------------------------------------------------+"
echo "| === Welcome to CentOS System Init === |"
echo "+--------------------------------------------------------------+"
# 1. 關閉 IPv6
echo "[1/6] 關閉 IPv6..."
cat >> /etc/modprobe.d/ipv6.conf <<'EOF'
alias net-pf-10 off
alias ipv6 off
EOF
systemctl disable ip6tables 2>/dev/null || chkconfig ip6tables off
echo "IPv6 已禁用 (需重啟生效)"
# 2. 關閉 SELinux
echo "[2/6] 關閉 SELinux..."
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
echo "SELinux 已設為 disabled (需重啟生效)"
# 3. Vim 彩色與別名
echo "[3/6] 配置 Vim..."
grep -q "alias vi='vim'" /root/.bashrc || echo "alias vi='vim'" >> /root/.bashrc
echo 'syntax on' > /root/.vimrc
echo "Vim 彩色高亮已啟用"
# 4. 系統語系 UTF-8
echo "[4/6] 設定語系..."
sed -i 's/^LANG=.*/LANG="zh_CN.UTF-8"/' /etc/sysconfig/i18n 2>/dev/null || \
echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
echo "語系已設為 zh_CN.UTF-8"
# 5. 檔案描述符限制
echo "[5/6] 調整檔案描述符限制..."
cat >> /etc/security/limits.conf <<'EOF'
* soft nofile 52100
* hard nofile 52100
EOF
echo "ulimit -n 52100 已設定"
# 6. 精簡服務 (僅保留核心)
echo "[6/6] 精簡開機服務..."
CORE_SERVICES="crond irqbalance network sshd syslog rsyslog NetworkManager firewalld"
for srv in $(ls /etc/rc3.d/S* 2>/dev/null | sed 's/.*S[0-9][0-9]//'); do
if [[ ! " $CORE_SERVICES " =~ " $srv " ]]; then
systemctl disable "$srv" 2>/dev/null || chkconfig "$srv" off
systemctl stop "$srv" 2>/dev/null || service "$srv" stop
echo " 停用: $srv"
else
echo " 保留: $srv"
fi
done
# 7. 核心參數調優 (網路/記憶體/檔案系統)
echo "[7/7] 寫入核心參數..."
cat > /etc/sysctl.d/99-server-tuning.conf <<'EOF'
# 網路核心
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 30000
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 8388608
net.core.wmem_default = 8388608
# TCP 調優
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_slow_start_after_idle = 0
# 記憶體/虛擬記憶體
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
vm.overcommit_memory = 1
# 檔案系統
fs.file-max = 2097152
fs.nr_open = 2097152
# 安全
net.ipv4.ip_forward = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 134217728
EOF
sysctl --system
echo "核心參數已套用"
echo "+--------------------------------------------------------------+"
echo "| 初始化完成!建議立即重啟: reboot |"
echo "+--------------------------------------------------------------+"
| 模組 | 關鍵操作 | 生效方式 |
|---|---|---|
| IPv6 關閉 | /etc/modprobe.d/ipv6.conf + ip6tables 關閉 | 重啟 |
| SELinux | /etc/selinux/config 設 disabled | 重啟 |
| Vim | .bashrc 別名 + .vimrc syntax on | 重新登入 |
| 語系 | /etc/sysconfig/i18n 或 /etc/locale.conf | 重新登入 |
| 檔案描述符 | /etc/security/limits.conf nofile 52100 | 重新登入 |
| 服務精簡 | 白名單機制保留核心服務,其餘停用 | 即時 |
| 核心參數 | /etc/sysctl.d/99-server-tuning.conf + sysctl --system | 即時 |
somaxconn, tcp_max_syn_backlog → 高併發防丟包tcp_tw_reuse=1, tcp_fin_timeout=10 → 釋放連線資源vm.swappiness=10 → 減少 Swap,優先用實體記憶體fs.file-max, nofile → 支援大量並發連線rp_filter, accept_source_route=0 → 防 IP 偽造/源路由攻擊CORE_SERVICES (如加入 mysqld, nginx, docker)。tcp_rmem/wmem 上限、shmmax。firewalld/iptables 規則,需另行配置業務埠。timedatectl set-timezone Asia/Taipei + chronyd。auditd, rsyslog 遠端傳輸。
# 重啟後檢查
getenforce # → Disabled
cat /proc/sys/net/ipv6/conf/all/disable_ipv6 # → 1
ulimit -n # → 52100
sysctl net.ipv4.tcp_tw_reuse # → 1
systemctl list-unit-files --state=enabled | grep -v "core_services"
標準化初始化腳本是基礎設施即代碼 (IaC) 的起點。將此腳本納入 Ansible Playbook、Terraform Provisioner 或 CI/CD Pipeline,即可實現「一鍵交付安全、高效能、一致性的伺服器環境」。