杰瑞科技汇

Firewall IP教程,如何配置防火墙IP规则?

防火墙 IP 教程:从零开始掌握网络访问控制

第一部分:核心概念理解

在开始敲命令之前,我们必须先理解几个核心概念,这就像学开车前,要先了解油门、刹车、方向盘的作用。

Firewall IP教程,如何配置防火墙IP规则?-图1
(图片来源网络,侵删)

什么是防火墙?

防火墙是网络安全的第一道防线,它像一个门卫,位于你的网络(比如家里的 Wi-Fi)和互联网之间,它会检查所有进出网络的“数据包”,并根据你设定的规则决定是“放行”还是“拦截”。

什么是 IP 地址?

IP 地址(Internet Protocol Address)是设备在网络中的“门牌号”,每台连接到网络的设备(电脑、手机、服务器)都有一个唯一的 IP 地址,这样数据才能准确地送达。

  • 公网 IP: 你的路由器在互联网上的地址,由你的网络服务提供商(ISP)分配,你可以在百度搜索“IP”看到它。
  • 私网 IP: 你家庭或公司内部局域网中设备的地址,168.1.100,这些地址在互联网上是无效的,只能在局域网内使用。

什么是端口?

端口可以理解为 IP 地址上的“房间号”或“服务窗口”,一个 IP 地址可以有 65536 个(0-65535)端口,不同的端口运行着不同的服务。

  • 常见端口示例:
    • 80: HTTP 网页服务
    • 443: HTTPS 加密网页服务
    • 22: SSH 远程登录服务
    • 21: FTP 文件传输服务
    • 53: DNS 域名解析服务

什么是协议?

协议是设备之间通信时必须遵守的“语言规则”,最常见的是:

Firewall IP教程,如何配置防火墙IP规则?-图2
(图片来源网络,侵删)
  • TCP (Transmission Control Protocol): 可靠的、面向连接的协议,像打电话,必须先接通,然后才能通话,适用于网页浏览、文件传输等要求可靠性的场景。
  • UDP (User Datagram Protocol): 不可靠的、无连接的协议,像寄明信片,寄出去就行,但对方不一定能收到,且顺序可能错乱,适用于视频会议、在线游戏等对实时性要求高、能容忍少量丢包的场景。

防火墙规则的核心要素

一个防火墙规则通常由以下几个部分组成:

  • 源地址: 数据从哪里来?(168.1.502.3.4
  • 目标地址: 数据要到哪里去?(0.0.1
  • 源端口: 数据从哪个端口发出?(12345
  • 目标端口: 数据要访问哪个端口?(80443
  • 协议: 使用什么协议通信?(tcpudp
  • 动作: 对匹配的数据做什么?(允许拒绝

第二部分:主流防火墙类型

不同的操作系统和设备使用不同的防火墙,但其核心逻辑是相通的。

  1. Linux 防火墙 (iptables / nftables)

    • iptables: Linux 系统上经典、功能强大的防火墙工具,但语法较为复杂。
    • nftables: iptables 的现代化替代品,语法更简洁、性能更好,是当前主流。
  2. Windows 防火墙

    • 图形化界面操作简单,也支持命令行 netsh 和 PowerShell 进行高级配置。
  3. 云服务商防火墙

    • 阿里云、腾讯云、AWS、Azure 等,它们提供的是“虚拟防火墙”(Security Group / 网络 ACL),通过 Web 控制台或 API 进行配置,规则通常基于“入站”和“出站”。
  4. 硬件防火墙

    专业的网络安全设备,部署在企业网络出口,功能非常强大。

本教程将以最通用和强大的 Linux iptables 为例进行讲解,因为理解了 iptables,再去看其他防火墙会非常容易。


第三部分:实战 - Linux iptables 命令详解

iptables 的规则是“有状态”的,并且是“链式”处理的。

核心概念:表 和 链

  • 表: 规则的分类,不同表处理不同类型的数据。

    • filter: 默认表,用于过滤数据包,决定是否放行,我们 99% 的操作都在这个表。
    • nat: 用于网络地址转换,比如端口转发、共享上网。
    • mangle: 用于修改数据包的头部信息(如 TTL、TOS)。
    • raw: 用于对数据包进行跟踪。
  • 链: 数据包流经的检查点,每个表有不同的链。

    • INPUT: 进入本机的数据包。
    • OUTPUT: 从本机发出的数据包。
    • FORWARD: 需要本机转发(不针对本机)的数据包,通常用于路由器或网关。
    • PREROUTING: 数据包进入路由后,进行路由决策前。
    • POSTROUTING: 数据包离开本机前。

基本命令结构

iptables [-t 表名] [命令选项] [链名] [匹配条件] [动作]
  • -t: 指定表,默认是 filter
  • 命令选项:
    • -A (Append): 在链的末尾追加一条规则。
    • -I (Insert): 在链的开头插入一条规则。
    • -D (Delete): 删除一条规则。
    • -L (List): 列出指定链的所有规则。
    • -F (Flush): 清空指定链的所有规则(危险!)。
    • -P (Policy): 设置链的默认策略。
  • 匹配条件:
    • -p: 匹配协议 (e.g., tcp, udp, icmp)。
    • -s: 匹配源地址 (e.g., 168.1.0/24, 2.3.4)。
    • -d: 匹配目标地址。
    • --sport: 匹配源端口。
    • --dport: 匹配目标端口。
    • -i: 匹配数据进入的网络接口 (e.g., eth0, ens33)。
    • -o: 匹配数据出去的网络接口。
  • 动作:
    • ACCEPT: 允许数据包通过。
    • DROP: 静默丢弃数据包,不给对方任何回应。
    • REJECT: 拒绝数据包,并向对方发送一个“目标不可达”的响应。

安全操作第一步:清空默认规则并设置默认策略

在配置新规则前,最好先重置。DROP 默认策略非常严格,但最安全。

# 清空 filter 表的所有链(如果之前有配置)
sudo iptables -F
sudo iptables -X # 清空用户自定义链
# 设置默认策略为 DROP,所有未明确允许的连接都将被拒绝
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT # 通常允许本机发出的所有请求

常见规则配置示例

示例 1:允许回环地址(localhost)通信

本机程序之间需要通信,必须允许。

sudo iptables -A INPUT -i lo -j ACCEPT

示例 2:允许已建立的连接和相关连接

这是实现“有状态”过滤的关键,如果你已经发起了某个连接(比如你访问了百度),那么百度返回的数据包就应该被允许,这比一个个端口开放要安全得多。

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • -m state: 加载 state 模块。
  • --state ESTABLISHED,RELATED: 匹配已建立的和相关联的连接。

示例 3:允许来自特定 IP 的 SSH 访问

假设你想只允许 IP 为 2.3.4 的电脑远程登录你的服务器。

sudo iptables -A INPUT -p tcp --dport 22 -s 1.2.3.4 -j ACCEPT

示例 4:允许所有人访问你的 Web 服务(端口 80 和 443)

# 允许 HTTP (端口 80)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许 HTTPS (端口 443)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

示例 5:允许来自特定网段的 ICMP 请求(ping 命令)

sudo iptables -A INPUT -p icmp -s 192.168.1.0/24 -j ACCEPT

示例 6:拒绝来自某个 IP 的所有访问

# REJECT 会告诉对方“你被拒绝了”,DROP 则是石沉大海
sudo iptables -A INPUT -s 1.2.3.4 -j REJECT

查看和管理规则

  • 列出所有规则:

    sudo iptables -L -n -v
    • -n: 以数字形式显示 IP 和端口,避免 DNS 查询,速度更快。
    • -v: 显示详细信息,如数据包和字节数。
  • 插入规则到指定位置: 假设你想在规则 1 的位置插入一条新规则。

    sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
  • 删除规则: 方法一:知道规则序号

    sudo iptables -L --line-numbers # 先查看带序号的列表
    sudo iptables -D INPUT 5       # 删除 INPUT 链的第 5 条规则

    知道完整规则内容

    sudo iptables -D INPUT -p tcp --dport 8080 -j ACCEPT

保存规则(非常重要!)

默认情况下,iptables 的规则在重启后会丢失,你需要根据你的 Linux 发行版来保存它们。

  • 对于 Debian / Ubuntu:

    sudo apt-get install iptables-persistent
    sudo netfilter-persistent save
    sudo netfilter-persistent reload
  • 对于 CentOS / RHEL / Fedora:

    sudo service iptables save  # 对于旧版系统
    # 或者使用 firewalld 服务

第四部分:进阶与最佳实践

使用 ufw (Uncomplicated Firewall) - 简化版 iptables

对于大多数用户来说,iptables 的语法太复杂了。ufw 是一个为 iptables 提供友好界面的工具。

  • 安装:

    sudo apt update
    sudo apt install ufw
  • 常用命令:

    # 启用防火墙(默认拒绝所有入站连接)
    sudo ufw enable
    # 允许 SSH 连接(推荐先运行这个,防止把自己锁在外面)
    sudo ufw allow ssh
    # 允许来自特定 IP 的访问
    sudo ufw allow from 1.2.3.4
    # 允许访问特定端口
    sudo ufw allow 80/tcp
    # 拒绝访问
    sudo ufw deny 22
    # 查看状态
    sudo ufw status verbose
    # 禁用防火墙
    sudo ufw disable

最佳实践

  1. 先允许,再拒绝: 在设置 DROP 默认策略前,先把你需要的规则(如 SSH、Web)都加上,否则你可能把自己锁在服务器外面。
  2. 最小权限原则: 只开放你绝对需要的端口,不要为了图方便开放所有端口。
  3. 记录日志: 对于 DROPREJECT 的规则,可以添加日志功能,以便审计。
    sudo iptables -A INPUT -p tcp --dport 23 -j LOG --log-prefix "Port 23 Attempt: "
    sudo iptables -A INPUT -p tcp --dport 23 -j DROP
  4. 规则顺序很重要: iptables 按顺序匹配,一旦匹配到一条规则就会执行动作并停止继续匹配,宽泛的规则(如 ESTABLISHED)应该放在前面,具体的规则(如 from 1.2.3.4)放在后面。
  5. 定期审查: 定期检查你的防火墙规则,移除不再需要的规则。

这份教程为你提供了从理论到实践的完整防火墙 IP 控制指南。

  • 核心是理解“源/目标地址、端口、协议、动作”这几个要素。
  • iptables 是强大的基础,ufw 是友好的简化工具。
  • 安全配置的核心是“默认拒绝 + 明确允许”。
  • 保存规则和避免把自己锁在外面是操作的重中之重。

你可以尝试在自己的 Linux 服务器或虚拟机上实践这些命令,构建属于你自己的网络安全屏障。

分享:
扫描分享到社交APP
上一篇
下一篇