防火墙是VPS安全的第一道防线,通过限制网络端口访问来阻止未授权连接。搬瓦工VPS默认没有配置防火墙,所有端口对外开放。本文介绍UFW(简单防火墙)和iptables两种方案,建议新手优先使用UFW。
Tip: 配置防火墙前,务必确保放行SSH端口,否则会导致无法远程登录。如果不慎锁定,可以通过搬瓦工KiwiVM面板的Shell终端修复。
UFW(Uncomplicated Firewall)是iptables的前端工具,语法简单直观,适合大多数用户。
安装UFW:
# Ubuntu/Debian(通常已预装)
apt install ufw -y
# CentOS(需要EPEL源)
dnf install epel-release -y
dnf install ufw -y
基本配置流程:
# 设置默认策略:拒绝所有入站,允许所有出站
ufw default deny incoming
ufw default allow outgoing
# 放行SSH端口(必须先于启用防火墙!)
ufw allow 22/tcp
# 如果修改了SSH端口
ufw allow 2222/tcp
# 放行Web服务
ufw allow 80/tcp
ufw allow 443/tcp
# 启用防火墙
ufw enable
# 查看防火墙状态和规则
ufw status verbose
# 按端口放行
ufw allow 3306/tcp # MySQL
ufw allow 5432/tcp # PostgreSQL
ufw allow 6379/tcp # Redis
# 放行端口范围
ufw allow 8000:8100/tcp
# 仅允许特定IP访问
ufw allow from 192.168.1.100 to any port 3306
# 允许特定子网
ufw allow from 10.0.0.0/24
# 拒绝特定IP
ufw deny from 203.0.113.50
# 删除规则(两种方式)
ufw delete allow 3306/tcp
ufw status numbered # 查看规则编号
ufw delete 3 # 按编号删除
# 限速保护(同一IP每30秒最多6次连接)
ufw limit 22/tcp
# 禁用/重启防火墙
ufw disable
ufw enable
# 重置所有规则
ufw reset
UFW支持预定义的应用配置文件:
# 查看可用的应用配置
ufw app list
# 查看应用详情
ufw app info "Nginx Full"
# 使用应用配置放行
ufw allow "Nginx Full" # 放行80和443
ufw allow "Nginx HTTP" # 仅放行80
ufw allow "Nginx HTTPS" # 仅放行443
ufw allow "OpenSSH" # 放行SSH
# Web服务器标准配置
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp # SSH
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw limit 22/tcp # SSH限速保护
ufw enable
# 数据库服务器(仅允许Web服务器IP连接)
ufw allow from 10.0.0.5 to any port 3306 proto tcp
ufw allow from 10.0.0.5 to any port 6379 proto tcp
# 查看最终配置
ufw status numbered
iptables是Linux内核自带的防火墙工具,功能强大但语法较复杂。适合需要更精细控制的高级用户。
# 查看当前规则
iptables -L -n -v
iptables -L -n --line-numbers
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
# 放行SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 放行HTTP和HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许ICMP(Ping)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# 默认拒绝所有其他入站
iptables -A INPUT -j DROP
# 放行指定IP访问MySQL
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 3306 -j ACCEPT
iptables规则重启后会丢失,需要保存和自动加载:
# Ubuntu/Debian
apt install iptables-persistent -y
# 保存当前规则
netfilter-persistent save
# 规则保存在以下文件
# /etc/iptables/rules.v4
# /etc/iptables/rules.v6
# CentOS
service iptables save
# 或
iptables-save > /etc/sysconfig/iptables
# SSH暴力破解防护(每分钟最多4次新连接)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
# SYN Flood防护
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
# 限制单IP并发连接数
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT
如果VPS支持IPv6,也需要配置IPv6防火墙:
# UFW自动处理IPv6(确认已启用)
nano /etc/default/ufw
# 确保 IPV6=yes
# iptables需要单独配置ip6tables
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
ip6tables -A INPUT -j DROP
防火墙配合Fail2ban和SSH密钥登录可以构建更完善的安全体系。完整安全方案请参考VPS安全加固指南。
Tip: 更多教程请查看新手教程。