跨发行版服务器初始化脚本集合,覆盖基础环境、别名、安全基线、Docker、Node.js、Nginx 反向代理与 SSL。
支持的发行版:
- Debian / Ubuntu(及衍生版:Linux Mint、Pop!_OS、Kali 等)
- RHEL / CentOS / AlmaLinux / Rocky Linux / Oracle Linux
- Fedora
- Alpine Linux
- Arch Linux(及衍生版:Manjaro、EndeavourOS 等)
设计目标:
- 直接可执行,尽量幂等。
- 每个脚本单一职责,可单独运行。
- 依赖公开地址,不需要登录 GitHub。
提权方式:
- 已是
root:使用| bash - 非
root:优先使用su -c '... | bash' - 非
root且有sudo:也可使用| sudo bash
默认步骤(base aliases security incident docker):
curl -fsSL https://raw.githubusercontent.com/tuziapi/server-setup/main/install.sh | bash全量步骤(含 node):
curl -fsSL https://raw.githubusercontent.com/tuziapi/server-setup/main/install.sh | bash -s -- all只配置别名:
curl -fsSL https://raw.githubusercontent.com/tuziapi/server-setup/main/install.sh | bash -s -- aliases只执行指定步骤:
curl -fsSL https://raw.githubusercontent.com/tuziapi/server-setup/main/install.sh | bash -s -- base aliases nodeNginx + SSL(domains.json 从 URL 下载):
curl -fsSL https://raw.githubusercontent.com/tuziapi/server-setup/main/install.sh | bash -s -- nginx --config-url https://example.com/domains.json --certbot-email you@example.com说明:
install.sh会临时下载仓库压缩包执行,不会git clone。- 若默认分支不是
main,可追加--ref master(或具体 tag/commit)。 nginx步骤需要--config-file或--config-url。nginx是安装步骤参数,必须放在bash -s --后,不要写成nginx curl ...。install.sh会自动选择目标用户(用于 aliases/docker/node),如需覆盖可设置环境变量TARGET_USER。security步骤仅配置fail2ban和 SSH 加固,不包含 UFW。incident步骤会执行事故防复发加固:阻断已知 C2、阻断出站23/2323、持久化 iptables、加固 Nezha 命令执行配置。- 如需启用防火墙,请显式添加
ufw步骤(例如bash setup_all.sh ... ufw)。 ufw步骤默认会自动放行当前正在对外监听的端口,避免启用 UFW 后业务不可访问。- 自动放行基于
ss -lntup探测,仅对非127.0.0.1/::1监听端口生效(本机回环端口不会放行)。 - 如需关闭自动放行,可加
--disable-auto-allow-listening并手动用--allow-ports指定端口。
如果你不是 root,可用:
su -c 'curl -fsSL https://raw.githubusercontent.com/tuziapi/server-setup/main/install.sh | bash -s -- all'| 脚本 | 作用 | 常用命令 |
|---|---|---|
install.sh |
远程引导脚本:下载仓库压缩包并执行步骤(无需 clone) | curl -fsSL .../install.sh | bash -s -- all |
setup_base.sh |
安装基础软件(curl/git/jq/tmux/ufw/fail2ban 等)并拉起常用服务 | bash setup_base.sh |
setup_aliases.sh |
为用户写入 ~/.server_aliases,自动接入 .bashrc/.zshrc |
TARGET_USER=your_user bash setup_aliases.sh |
setup_security.sh |
配置 fail2ban + SSH 加固(不含 UFW) | SSH_PORT=22 bash setup_security.sh |
setup_incident_hardening.sh |
事故防复发加固:C2/出站扫描阻断、iptables 持久化、Nezha 命令执行禁用、root SSH 检查 | bash setup_incident_hardening.sh |
remediation/nezha-compromise-remediate.sh |
未重装节点的 Nezha 入侵清理:杀 IOC 进程、备份样本、删恶意文件、阻断扫描 | bash remediation/nezha-compromise-remediate.sh |
setup_ufw.sh |
配置 UFW 防火墙,默认自动放行监听端口 | SSH_PORT=22 ALLOW_PORTS=80,443 bash setup_ufw.sh |
setup_docker.sh |
使用 Docker 官方安装脚本安装 Docker | TARGET_USER=your_user bash setup_docker.sh |
setup_nodejs.sh |
使用 nvm 官方安装脚本安装 Node.js(默认 LTS) | TARGET_USER=your_user bash setup_nodejs.sh |
setup_nginx_proxy.sh |
按 domains.json 批量配置 Nginx 反向代理,可选自动签发证书 |
bash setup_nginx_proxy.sh --config domains.json --email you@example.com |
setup_all.sh |
一键执行多个步骤(默认 base+aliases+security+incident+docker) | TARGET_USER=your_user bash setup_all.sh |
说明:以下命令默认以 root 执行;非 root 用户请先 su 提权(有 sudo 也可)。
bash setup_base.shTARGET_USER=your_user bash setup_aliases.shSSH_PORT=22 bash setup_security.shbash setup_incident_hardening.shSSH_PORT=22 ALLOW_PORTS=80,443 bash setup_ufw.sh(可选,建议在确认 SSH 连接无误后执行)TARGET_USER=your_user bash setup_docker.shTARGET_USER=your_user bash setup_nodejs.sh(如需 Node.js)bash setup_nginx_proxy.sh --config domains.json --email you@example.com(如需反代 + SSL)
如果想一次执行(不含 nginx):
TARGET_USER=your_user bash setup_all.sh all针对被 Nezha 命令执行能力打穿过的节点,重装系统后建议先执行默认全套:
curl -fsSL https://raw.githubusercontent.com/tuziapi/server-setup/main/install.sh | bash如希望装完后暂时停掉 Nezha Agent,避免 Dashboard 密钥轮换前再次下发命令:
curl -fsSL https://raw.githubusercontent.com/tuziapi/server-setup/main/install.sh | bash -s -- base aliases security incident docker --stop-nezha-agent如果只想在已清理或重装后的节点上补事故防复发加固:
bash setup_incident_hardening.sh如果是未重装、疑似仍被感染的节点,先跑清理脚本:
bash remediation/nezha-compromise-remediate.sh远程一键清理未重装节点:
curl -fsSL https://raw.githubusercontent.com/tuziapi/server-setup/main/install.sh | bash -s -- remediate --stop-nezha-agentincident 步骤默认会:
- 阻断已知 C2 IP:
207.58.173.192,103.106.228.23 - 阻断出站 TCP
23,2323,防止 telnet 扫描再次触发 RBL - 保存
/etc/iptables/rules.v4 - 在缺失时创建
netfilter-persistent.service做开机恢复 - 将
/opt/nezha/agent/config*.yml中的disable_command_execute设为true - 检查
/root/.ssh/authorized_keys权限、属性和已知恶意 key
注意:该步骤不替代密钥轮换。事故后仍需轮换 root 密码、SSH 公钥、Nezha agent_secret_key/jwt_secret_key、数据库密码和 API token。
- 复制示例配置:
cp domains.example.json domains.json- 编辑
domains.json:
{
"domains": [
{
"domain": "api.example.com",
"target_host": "127.0.0.1",
"target_port": 3000,
"completed": false
}
]
}- 执行脚本:
bash setup_nginx_proxy.sh --config domains.json --email you@example.com可选参数:
--no-ssl:只写 Nginx 反代,不申请证书。--force:忽略completed=true强制重建。CERTBOT_EMAIL=...:可用环境变量代替--email。
说明:ufw 步骤才会启用防火墙。如果你没有执行 ufw 步骤,则无需进行此操作。
ufw 步骤只会自动放行“执行时已在监听”的端口。后续新上线服务(新端口)需要手动放行。
常用命令:
# 查看当前规则
ufw status numbered
# 放行 TCP 端口(示例:3000)
ufw allow 3000/tcp
# 放行 UDP 端口(示例:3478)
ufw allow 3478/udp
# 删除规则(按编号,编号来自 status numbered)
ufw delete <rule_number>
# 重新加载规则
ufw reload建议:
- 对外服务新开端口后,先
ufw allow ...再对外发布。 - 只放行业务必需端口,避免暴露不必要服务。
- 若端口没有自动放行,先执行
ss -tulpn | grep :端口,确认服务是否仅监听127.0.0.1/::1。
TARGET_USER:要写入别名/Node 环境/Docker 组的目标用户。TIMEZONE:例如Asia/Shanghai,用于setup_base.sh。SSH_PORT:SSH 端口,默认22。ALLOW_PORTS:(仅 ufw) 额外开放端口,逗号分隔,例如80,443,8080/tcp。AUTO_ALLOW_LISTENING_PORTS:(仅 ufw) 是否自动放行当前监听端口,默认1。AUTO_ALLOW_EXCLUDE_PORTS:(仅 ufw) 自动放行排除列表,默认68/udp,546/udp。HARDEN_SSH=1:启用 SSH 基础加固(PermitRootLogin prohibit-password)。DISABLE_PASSWORD_AUTH=1:配合HARDEN_SSH=1禁用 SSH 密码登录。KNOWN_C2_IPS:(仅 incident) 事故防复发 C2 IP 列表,逗号分隔。TELNET_SCAN_PORTS:(仅 incident) 出站扫描端口阻断列表,默认23,2323。STOP_NEZHA_AGENT=1:(仅 incident) 停止并禁用nezha-agent.service。DOCKER_CHANNEL:Docker 渠道,默认stable。NODE_VERSION:Node 版本,默认lts/*。
dnsutils:DNS 排障工具集(dig/nslookup/host),用于排查域名解析,尤其在 Nginx + Certbot 配置证书时很常用。software-properties-common:提供add-apt-repository等能力。部分发行版镜像可能不提供该包,setup_base.sh会自动跳过不可用包,不影响其他常用工具安装。
# 默认执行: base aliases security incident docker
TARGET_USER=your_user bash setup_all.sh
# 执行指定步骤
TARGET_USER=your_user bash setup_all.sh base aliases node
# 包含 node 的全量步骤(不含 nginx)
TARGET_USER=your_user bash setup_all.sh all- Docker 安装脚本: https://github.com/docker/docker-install
- nvm: https://github.com/nvm-sh/nvm
- Oh My Zsh 常用别名插件: https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/common-aliases
- Certbot: https://github.com/certbot/certbot
以上项目均可匿名访问,本仓库脚本中的下载地址也不需要 GitHub 账号登录。
每个脚本均支持 -h/--help,可直接查看用法,例如:
bash install.sh --help
bash setup_security.sh --help
bash setup_nginx_proxy.sh --help