保护您的服务器免受未授权访问
防火墙是服务器安全的第一道防线,它可以:
常见的 Linux 防火墙工具:
Ubuntu 默认已安装 UFW,如未安装:
sudo apt update
sudo apt install ufw
# 查看状态
sudo ufw status
sudo ufw status verbose
# 启用/禁用防火墙
sudo ufw enable
sudo ufw disable
# 重置防火墙(清除所有规则)
sudo ufw reset
建议的默认策略:
# 默认拒绝所有传入连接
sudo ufw default deny incoming
# 默认允许所有传出连接
sudo ufw default allow outgoing
在启用防火墙前,必须先允许 SSH 端口,否则会被锁定在服务器外!
# 允许 SSH(端口 22)
sudo ufw allow ssh
# 或
sudo ufw allow 22/tcp
# 如果修改了 SSH 端口(例如 2222)
sudo ufw allow 2222/tcp
# HTTP 和 HTTPS
sudo ufw allow http
sudo ufw allow https
# 或
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# MySQL/MariaDB(仅限本地访问)
sudo ufw allow from 127.0.0.1 to any port 3306
# PostgreSQL(仅限本地访问)
sudo ufw allow from 127.0.0.1 to any port 5432
# 特定端口范围
sudo ufw allow 1000:2000/tcp
# 特定 IP 地址
sudo ufw allow from 192.168.1.100
sudo ufw allow from 192.168.1.0/24
# 查看带编号的规则列表
sudo ufw status numbered
# 按编号删除规则
sudo ufw delete 3
# 按规则内容删除
sudo ufw delete allow http
#!/bin/bash
# 配置 UFW 防火墙
# 重置
sudo ufw reset
# 默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 允许 SSH(必须!)
sudo ufw allow ssh
# 允许 Web 服务
sudo ufw allow http
sudo ufw allow https
# 启用防火墙
sudo ufw enable
# 查看状态
sudo ufw status verbose
# 查看状态
sudo firewall-cmd --state
sudo systemctl status firewalld
# 启动/停止/重启
sudo systemctl start firewalld
sudo systemctl stop firewalld
sudo systemctl restart firewalld
# 开机自启
sudo systemctl enable firewalld
Firewalld 使用区域管理不同网络环境:
# 查看默认区域
sudo firewall-cmd --get-default-zone
# 列出所有区域
sudo firewall-cmd --get-zones
# 查看区域详情
sudo firewall-cmd --zone=public --list-all
# 临时添加(重启后失效)
sudo firewall-cmd --add-service=ssh
sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
# 永久添加
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 重载配置
sudo firewall-cmd --reload
# 临时添加端口
sudo firewall-cmd --add-port=8080/tcp
sudo firewall-cmd --add-port=1000-2000/tcp
# 永久添加端口
sudo firewall-cmd --permanent --add-port=8080/tcp
# 重载配置
sudo firewall-cmd --reload
更复杂的规则配置:
# 允许特定 IP 访问 SSH
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept'
# 拒绝特定 IP
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.50" reject'
# 限制连接速率(防暴力破解)
sudo firewall-cmd --permanent --add-rich-rule='rule service name="ssh" limit value="3/m" accept'
#!/bin/bash
# 配置 Firewalld
# 确保运行中
sudo systemctl start firewalld
sudo systemctl enable firewalld
# 清除现有规则
sudo firewall-cmd --permanent --remove-service=ssh 2>/dev/null
sudo firewall-cmd --permanent --remove-service=http 2>/dev/null
sudo firewall-cmd --permanent --remove-service=https 2>/dev/null
# 添加必要服务
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
# 重载配置
sudo firewall-cmd --reload
# 查看配置
sudo firewall-cmd --list-all
将常用服务改为非标准端口:
# 修改 SSH 端口
sudo nano /etc/ssh/sshd_config
# 修改:Port 2222
sudo systemctl restart sshd
# 防火墙允许新端口
sudo ufw allow 2222/tcp
# 或
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
只允许特定 IP 访问 SSH:
# UFW
sudo ufw allow from 192.168.1.0/24 to any port 22
# Firewalld
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
自动封禁暴力破解尝试:
# Ubuntu/Debian
sudo apt install fail2ban
# CentOS/Rocky/Alma
sudo dnf install fail2ban
# 启动
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
如果配置防火墙后无法连接:
# 临时禁用 UFW
sudo ufw disable
# 临时停止 Firewalld
sudo systemctl stop firewalld
检查步骤:
systemctl status service-namenetstat -tulpnFirewalld 需要重载配置:
sudo firewall-cmd --reload
# UFW
sudo ufw logging on
sudo ufw logging high
# Firewalld
sudo firewall-cmd --set-log-denied=all
sudo firewall-cmd --reload
# UFW 日志
sudo tail -f /var/log/ufw.log
# Firewalld 日志
sudo journalctl -u firewalld -f
# 系统日志中的拒绝记录
sudo grep "UFW BLOCK" /var/log/syslog
sudo grep "REJECT\|DROP" /var/log/messages
从另一台服务器扫描开放的端口:
# 使用 nmap 扫描
nmap -p 1-1000 your-server-ip
# 测试特定端口
nc -zv your-server-ip 22
nc -zv your-server-ip 80
配置完成后,定期审查防火墙规则,删除不再需要的开放端口。保持系统更新,及时修补安全漏洞。