Python自动化配置VPS云服务器防火墙指南
文章分类:技术文档 /
创建时间:2026-01-16
Python自动化配置VPS云服务器防火墙指南
对于VPS云服务器来说,防火墙规则的合理配置是安全防护的第一道防线,能有效拦截端口扫描、恶意连接等网络攻击。手动逐条设置规则不仅耗时,还容易因输入错误导致防护失效。借助Python脚本实现自动化配置,既能提升效率,又能通过标准化流程减少操作失误。本文将从环境准备到规则保存,详细讲解如何用Python为VPS云服务器配置防火墙。
基础环境与工具准备
开始前需完成三项基础工作:首先确保VPS云服务器已安装Python环境(建议Python 3.6及以上版本);其次确认服务器使用的防火墙工具,常见的有iptables(Linux内核级防火墙工具)和firewalld(支持动态管理的防火墙),本文以应用更广泛的iptables为例;最后需安装paramiko库——这是Python中用于SSH连接的第三方库,可通过命令行安装:
pip install paramiko建立SSH连接:从本地到VPS的桥梁
要远程操作VPS云服务器,首先需通过SSH协议建立安全连接。paramiko库提供了SSHClient类,可实现连接的创建与管理。以下是核心连接代码:
import paramiko
def connect_vps(host, port, username, password):
ssh = paramiko.SSHClient()
# 自动添加未知主机密钥(测试环境适用,生产环境建议使用密钥认证)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect(host, port=port, username=username, password=password)
print("VPS云服务器连接成功")
return ssh
except Exception as e:
print(f"连接失败,错误信息:{e}")
return None
# 示例参数(需替换为实际服务器信息)
server_ip = "192.168.1.100"
ssh_port = 22
user = "root"
pwd = "your_secure_password"
vps_ssh = connect_vps(server_ip, ssh_port, user, pwd)
需注意,生产环境建议使用SSH密钥对替代密码认证,以提升连接安全性。
核心操作:自动化配置防火墙规则
成功连接后,通过`ssh.exec_command()`方法执行iptables命令即可完成规则配置。以下是三类常见场景的实现示例:
### 1. 允许特定IP访问SSH服务(端口22)
为防止暴力破解SSH,可仅允许信任IP连接:
if vps_ssh:
allow_ssh_cmd = "iptables -A INPUT -s 10.0.0.5 -p tcp --dport 22 -j ACCEPT"
stdin, stdout, stderr = vps_ssh.exec_command(allow_ssh_cmd)
# 检查命令执行状态(0表示成功)
if stdout.channel.recv_exit_status() == 0:
print("SSH端口访问规则配置成功")
else:
print(f"配置失败:{stderr.read().decode()}")
### 2. 开放HTTP/HTTPS服务(端口80/443)
若服务器提供Web服务,需允许这两个端口的入站流量:
if vps_ssh:
allow_web_cmd = "iptables -A INPUT -p tcp --dport 80 -j ACCEPT; iptables -A INPUT -p tcp --dport 443 -j ACCEPT"
stdin, stdout, stderr = vps_ssh.exec_command(allow_web_cmd)
if stdout.channel.recv_exit_status() == 0:
print("HTTP/HTTPS流量规则配置成功")
else:
print(f"配置失败:{stderr.read().decode()}")
### 3. 拒绝其他未授权入站流量
完成必要规则设置后,可设置默认拒绝策略:
if vps_ssh:
deny_all_cmd = "iptables -P INPUT DROP"
stdin, stdout, stderr = vps_ssh.exec_command(deny_all_cmd)
if stdout.channel.recv_exit_status() == 0:
print("默认拒绝策略配置成功")
else:
print(f"配置失败:{stderr.read().decode()}")
规则持久化与连接关闭
iptables默认仅保存内存中的规则,服务器重启后会丢失,因此需将规则写入持久化文件。以Debian/Ubuntu系统为例,执行以下命令保存:
if vps_ssh:
save_cmd = "iptables-save > /etc/iptables/rules.v4"
stdin, stdout, stderr = vps_ssh.exec_command(save_cmd)
if stdout.channel.recv_exit_status() == 0:
print("防火墙规则保存成功")
else:
print(f"保存失败:{stderr.read().decode()}")
# 关闭SSH连接
vps_ssh.close()
print("SSH连接已安全关闭")
操作避坑指南
实际操作中需注意三点:一是避免因IP或端口号输入错误导致规则失效(如将22写成222),建议配置前用`iptables -L`命令查看当前规则;二是设置默认拒绝策略前,必须确保已开放必要端口(如SSH、Web服务),否则可能导致服务器无法访问;三是不同Linux发行版保存规则的方式不同(如CentOS使用`service iptables save`),需根据实际系统调整命令。
通过Python脚本自动化配置VPS云服务器防火墙,不仅能将原本30分钟的手动操作缩短至几秒,还能通过脚本复用减少重复劳动。掌握这一技能后,无论是搭建个人博客还是企业级应用服务器,都能更高效地保障网络安全。
工信部备案:苏ICP备2025168537号-1