一、防火墙高级配置核心概念(新手必看)
防火墙高级配置是通过精细化规则实现网络流量的精准管控,核心覆盖三大场景:端口映射 (公网访问内网服务)、访问控制策略 (IP / 端口 / 协议级权限管控)、iptables 规则编写(Linux 系统底层流量过滤)。适用于服务器运维、企业内网安全加固、云服务器端口管理等场景,配置遵循 "最小权限原则",即仅开放必要服务,拒绝所有默认流量。
二、端口映射配置(公网访问内网服务实操)
端口映射本质是将公网 IP 的指定端口流量,转发到内网服务器的私有 IP + 端口,常见于 Web 服务、游戏服务器、远程桌面等场景。
1. Linux 系统(iptables 实现)
前提条件
-
已安装 iptables(Debian/Ubuntu:
sudo apt install iptables;CentOS:sudo dnf install iptables) -
拥有公网 IP(服务器网卡绑定公网地址)
-
内网服务器可正常访问
配置步骤
- 启用 IP 转发(内核级转发开关)
bash
sudo nano /etc/sysctl.conf
取消注释或添加:net.ipv4.ip_forward=1,执行生效:
css
sudo sysctl -p
- 配置端口转发规则(示例:公网 8080 端口→内网 192.168.1.100:80)
css
\# DNAT:目标地址转换(公网→内网)
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
\# SNAT:源地址转换(内网→公网,确保返回流量正常)
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
- 验证与保存
-
查看规则:
sudo iptables -t nat -L -n -
永久保存(Ubuntu/Debian):
bash
sudo apt install iptables-persistent # 安装持久化工具
sudo netfilter-persistent save # 保存规则到/etc/iptables/rules.v4
- 永久保存(CentOS/RHEL):
bash
sudo service iptables save # 规则保存到/etc/sysconfig/iptables
2. Windows 系统(Windows Defender 防火墙高级配置)
适用于 Windows Server 或个人电脑,通过图形化界面配置端口映射:
-
打开「控制面板→系统和安全→Windows Defender 防火墙→高级设置」
-
右键「入站规则→新建规则」,选择「端口」类型,点击下一步
-
选择 TCP/UDP 协议,输入需映射的本地端口(如 8080),点击下一步
-
选择「允许连接」,配置适用场景(域 / 专用 / 公共网络)
-
命名规则(如 "Web 服务 8080 端口映射"),完成创建
-
补充配置:右键规则→属性→高级,勾选 "在公共网络上启用"(公网访问需开启)
三、访问控制策略设计与实现
访问控制策略是防火墙的核心安全机制,通过 "允许 / 拒绝" 规则组合,限制特定 IP、端口或协议的流量,分为入站规则(外部→本地)和出站规则(本地→外部)。
1. 策略设计三原则
-
优先级规则:越具体的规则优先级越高(如 "允许 192.168.1.0/24 访问 80 端口" 优先于 "允许所有 IP 访问 80 端口")
-
方向区分:入站规则重点防外部攻击,出站规则限制内部违规访问(如禁止访问恶意 IP)
-
日志审计:开启日志记录,便于排查异常流量(记录丢弃包和成功连接)
2. 实操案例(Linux+Windows)
案例 1:Linux iptables 访问控制(最常用)
css
\# 1. 设置默认策略(拒绝所有入站/转发,允许出站)
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
\# 2. 允许信任IP访问SSH(22端口)
sudo iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -s 123.45.67.89 -p tcp --dport 22 -j ACCEPT
\# 3. 禁止特定IP段访问(如恶意IP段10.0.0.0/8)
sudo iptables -A INPUT -s 10.0.0.0/8 -j DROP
\# 4. 允许HTTP(80)和HTTPS(443)端口公共访问
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
\# 5. 启用日志记录(记录被拒绝的连接)
sudo iptables -A INPUT -j LOG --log-prefix "FIREWALL-DENY: "
案例 2:Windows Defender 访问控制策略
-
打开高级防火墙→「出站规则→新建规则」,选择「自定义」类型
-
匹配条件设置:
-
协议:TCP/UDP(可指定具体协议号)
-
远程 IP 地址:添加需禁止的 IP 段(如 192.168.2.0/24)
-
本地端口:限制特定端口(如禁止访问 3389 远程桌面端口)
-
操作选择「阻止连接」,适用网络场景选择「所有网络」
-
命名规则(如 "禁止访问违规 IP 段"),完成配置
四、iptables 规则编写进阶(Linux 系统)
iptables 是 Linux 内核自带的防火墙工具,通过 "链 + 规则" 机制过滤流量,核心链包括 INPUT(入站)、OUTPUT(出站)、FORWARD(转发),支持 IP、端口、协议、连接状态等多维度匹配。
1. 基础语法格式
css
iptables \[-t 表名] 动作 链名 匹配条件 -j 目标动作
-
表名:默认 filter 表(过滤),nat 表(地址转换),mangle 表(流量修改)
-
动作:-A(追加规则)、-I(插入规则)、-D(删除规则)、-F(清空规则)
-
匹配条件:-s(源 IP)、-d(目标 IP)、-p(协议)、--dport(目标端口)、--sport(源端口)
-
目标动作:ACCEPT(允许)、DROP(丢弃)、REJECT(拒绝并返回信息)、LOG(日志)
2. 高频规则实例(直接复制可用)
(1)连接状态匹配(仅允许已建立的连接)
css
\# 允许ESTABLISHED(已建立)和RELATED(关联连接)流量
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
(2)端口范围限制(允许 1000-2000 端口访问)
css
sudo iptables -A INPUT -p tcp --dport 1000:2000 -j ACCEPT
(3)SYN Flood 攻击防护(限制每秒新建连接数)
css
sudo iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
(4)删除指定规则(删除 INPUT 链中允许 80 端口的规则)
arduino
\# 先查看规则编号:sudo iptables -L INPUT --line-numbers
sudo iptables -D INPUT 3 # 3为规则编号
3. 规则管理核心技巧
-
备份规则:
sudo iptables-save > /root/iptables_backup.rules -
恢复规则:
sudo iptables-restore < /root/iptables_backup.rules -
开机自启(Systemd 系统):
bash
\# 创建服务文件
sudo nano /etc/systemd/system/iptables-restore.service
写入以下内容:
ini
\[Unit]
Description=Restore iptables rules
After=network.target
\[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /etc/iptables/rules.v4
\[Install]
WantedBy=multi-user.target
启用服务:
bash
sudo systemctl daemon-reload
sudo systemctl enable iptables-restore
五、避坑指南与常见问题排查
- 端口映射配置后无法访问?
-
检查内核 IP 转发是否启用:
sysctl net.ipv4.ip_forward(返回 1 为正常) -
云服务器需开放安全组(如阿里云 ECS、腾讯云需在控制台放行对应端口)
-
本地防火墙是否拦截:
sudo iptables -L INPUT -n | grep 8080(查看规则是否存在)
- iptables 规则重启后失效?
-
未执行永久保存命令(需按 Linux 发行版选择对应方法)
-
CentOS 7 + 默认使用 firewalld,需先关闭:
sudo systemctl stop firewalld && sudo systemctl disable firewalld
- 访问控制策略不生效?
-
规则优先级顺序错误:先添加具体规则,再添加通用规则
-
未设置默认拒绝策略:
iptables -P INPUT DROP(否则默认允许所有流量)