首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Linux 伺服器初始化自動化 Shell 腳本:關閉 IPv6/SELinux、核心參數調優、服務精簡

     編輯:更多程式設計知識

前言

新佈署 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即時

核心參數關鍵調優說明

  • TCP 連線佇列:somaxconn, tcp_max_syn_backlog → 高併發防丟包
  • TIME_WAIT 快速回收:tcp_tw_reuse=1, tcp_fin_timeout=10 → 釋放連線資源
  • 記憶體交換:vm.swappiness=10 → 減少 Swap,優先用實體記憶體
  • 檔案描述符:fs.file-max, nofile → 支援大量並發連線
  • 安全:rp_filter, accept_source_route=0 → 防 IP 偽造/源路由攻擊

自訂化建議

  1. 服務白名單:依實際業務調整 CORE_SERVICES (如加入 mysqld, nginx, docker)。
  2. 核心參數:依記憶體大小調整 tcp_rmem/wmem 上限、shmmax。
  3. 防火牆:腳本未處理 firewalld/iptables 規則,需另行配置業務埠。
  4. 時區/時間同步:加入 timedatectl set-timezone Asia/Taipei + chronyd。
  5. 審計/日誌:配置 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,即可實現「一鍵交付安全、高效能、一致性的伺服器環境」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved