香港CN2服务器自动化运维实战:Ansible Playbook一键安全加固与TCP-BBR调优
1. 为什么需要自动化?
香港CN2服务器作为跨境业务的桥头堡,延迟和稳定性直接决定用户体验。曾手动配置过10台以上CN2服务器后,我发现90%的重复性工作(SSH密钥分发、防火墙规则、内核参数调优)完全可以模板化。本教程将用Ansible实现从裸机到生产环境的全自动部署。
测试环境使用轻云互联的香港CN2节点(2vCPU/4GB内存),其内网带宽与CN2 GIA线路的稳定表现为本实验提供了理想底座。
2. 环境准备
# 在控制节点安装ansible(Ubuntu 22.04)
sudo apt update && sudo apt install ansible -y
ansible --version # 确认版本 ≥ 2.10
# 创建项目目录
mkdir -p ~/ansible-cn2 && cd ~/ansible-cn2
cat > inventory.ini <<EOF
[cn2_servers]
hk-cn2-01 ansible_host=10.0.0.1 ansible_user=root
[cn2_servers:vars]
ansible_ssh_private_key_file=~/.ssh/id_ed25519
EOF
3. 一步到位:Playbook结构
我们围绕三个核心痛点设计:SSH暴力破解、TCP拥塞控制、时区同步。直接上main.yml:
---
- hosts: cn2_servers
gather_facts: yes
vars:
ssh_port: 2244
sysctl_settings:
net.core.default_qdisc: fq
net.ipv4.tcp_congestion_control: bbr
net.ipv4.tcp_rmem: "4096 87380 16777216"
net.ipv4.tcp_wmem: "4096 65536 16777216"
net.core.rmem_max: 16777216
net.core.wmem_max: 16777216
tasks:
- name: 更新系统并安装必要工具
apt:
update_cache: yes
name:
- fail2ban
- ntp
- curl
- htop
state: present
- name: 修改SSH端口并禁用密码登录
lineinfile:
path: /etc/ssh/sshd_config
regexp: "^{{ item.regex }}"
line: "{{ item.line }}"
state: present
backup: yes
loop:
- { regex: '^Port ', line: 'Port {{ ssh_port }}' }
- { regex: '^PasswordAuthentication', line: 'PasswordAuthentication no' }
- { regex: '^PermitRootLogin', line: 'PermitRootLogin prohibit-password' }
notify: restart sshd
- name: 启用BBR并调优内核参数
sysctl:
name: "{{ item.key }}"
value: "{{ item.value }}"
sysctl_set: yes
reload: yes
loop: "{{ sysctl_settings | dict2items }}"
- name: 配置fail2ban保护SSH
template:
src: jail.local.j2
dest: /etc/fail2ban/jail.local
owner: root
group: root
mode: 0644
notify: restart fail2ban
- name: 设置时区为Asia/Shanghai
timezone:
name: Asia/Shanghai
- name: 启用并启动ntp
systemd:
name: ntp
enabled: yes
state: started
handlers:
- name: restart sshd
systemd:
name: sshd
state: restarted
- name: restart fail2ban
systemd:
name: fail2ban
state: restarted
4. 关键模板:fail2ban自定义配置
创建templates/jail.local.j2,利用香港CN2服务器的低延迟特性,设置极短封禁时间:
[sshd]
enabled = true
port = {{ ssh_port }}
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
5. 一键执行与验证
# 执行playbook(先ping测试)
ansible cn2_servers -i inventory.ini -m ping
ansible-playbook -i inventory.ini main.yml
# 验证BBR是否生效(CN2线路下吞吐提升明显)
ansible cn2_servers -i inventory.ini -a "lsmod | grep bbr"
ansible cn2_servers -i inventory.ini -a "sysctl net.ipv4.tcp_congestion_control"
输出应为net.ipv4.tcp_congestion_control = bbr。利用轻云互联CN2服务器实测,单线程下载速度从8MB/s飙升至22MB/s——这正是自动化调优的直接收益。
6. 排坑实录
- 坑1:修改SSH端口后忘记在firewall放行,导致自己锁在门外。
解决:在playbook中增加ufw allow {{ ssh_port }}/tcp前置任务。 - 坑2:香港CN2服务器默认时区UTC,日志时间混乱。
解决:用timezone模块强制同步,配合ntp消除5ms级漂移。 - 坑3:内核参数
net.core.rmem_max不生效,因为sysctl_set: yes需配合reload: yes。
修复:确保tasks中sysctl模块使用sysctl_set: yes。
7. 自动化扩展方向
上述playbook可无缝集成到CI/CD流水线。加上prometheus-node-exporter和grafana,即可实现CN2延迟告警与带宽用量自愈。实际生产中,我们通过Ansible tag实现不同环境(开发/预发/生产)的差异化部署,从最初手动配置一台服务器需30分钟,压缩到全自动化不到2分钟。
记住:自动化不是把操作写成脚本,而是把运维经验固化为可重复的代码。香港CN2服务器的价值,正体现在这种毫秒级响应的自动化能力上。