Skip to content

tuziapi/server-setup

Repository files navigation

server-setup

跨发行版服务器初始化脚本集合,覆盖基础环境、别名、安全基线、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。

0. 无需 clone:curl 一键安装

提权方式:

  • 已是 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 node

Nginx + 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'

1. 脚本清单

脚本 作用 常用命令
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

2. 推荐执行顺序

说明:以下命令默认以 root 执行;非 root 用户请先 su 提权(有 sudo 也可)。

  1. bash setup_base.sh
  2. TARGET_USER=your_user bash setup_aliases.sh
  3. SSH_PORT=22 bash setup_security.sh
  4. bash setup_incident_hardening.sh
  5. SSH_PORT=22 ALLOW_PORTS=80,443 bash setup_ufw.sh(可选,建议在确认 SSH 连接无误后执行)
  6. TARGET_USER=your_user bash setup_docker.sh
  7. TARGET_USER=your_user bash setup_nodejs.sh(如需 Node.js)
  8. bash setup_nginx_proxy.sh --config domains.json --email you@example.com(如需反代 + SSL)

如果想一次执行(不含 nginx):

TARGET_USER=your_user bash setup_all.sh all

2.1 重装后推荐加固命令

针对被 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-agent

incident 步骤默认会:

  • 阻断已知 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。

3. Nginx 反向代理配置

  1. 复制示例配置:
cp domains.example.json domains.json
  1. 编辑 domains.json
{
  "domains": [
    {
      "domain": "api.example.com",
      "target_host": "127.0.0.1",
      "target_port": 3000,
      "completed": false
    }
  ]
}
  1. 执行脚本:
bash setup_nginx_proxy.sh --config domains.json --email you@example.com

可选参数:

  • --no-ssl:只写 Nginx 反代,不申请证书。
  • --force:忽略 completed=true 强制重建。
  • CERTBOT_EMAIL=...:可用环境变量代替 --email

3.1 后续手动放开端口(UFW - 若已启用)

说明: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

4. 常用环境变量

  • 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/*

4.1 常用工具说明

  • dnsutils:DNS 排障工具集(dig/nslookup/host),用于排查域名解析,尤其在 Nginx + Certbot 配置证书时很常用。
  • software-properties-common:提供 add-apt-repository 等能力。部分发行版镜像可能不提供该包,setup_base.sh 会自动跳过不可用包,不影响其他常用工具安装。

5. 仓库内一键入口脚本

# 默认执行: 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

6. 参考的 GitHub 开源项目(均为公开地址)

以上项目均可匿名访问,本仓库脚本中的下载地址也不需要 GitHub 账号登录。

7. 自助帮助

每个脚本均支持 -h/--help,可直接查看用法,例如:

bash install.sh --help
bash setup_security.sh --help
bash setup_nginx_proxy.sh --help

About

服务初始化

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages