XCUI.DE | BLOG - 防火墙
type: channel
link: https://b.xcui.de/tag/%E9%98%B2%E7%81%AB%E5%A2%99/
items: Iptables 防火墙教程

Iptables 防火墙教程
type: item
date: 2021-11-09T10:11:00+08:00
description: 概述iptables 是 Linux 系统中一个极其强大的用户空间防火墙工具，它基于内核的 Netfilter 框架工作。通过 iptables，你可以创建规则来过滤、修改、转发网络数据包，从而实现网络安全防护、网络地址转换（NAT）等高级功能。常用命令语法iptables 命令的基本格式如下：iptables [-t table] command [chain] [rules] [-j target]-t table：指定要操作的表，如果省略，默认为 filter 表。command：主要的操作命令。chain：指定要操作的链。rules：具体的规则匹配条件。-j target：指定匹配成功后的目标动作。常用 command 选项:-L, --list：查看指定表和链的规则。-n：以数字形式显示 IP 地址和端口，不进行 DNS 反向解析。-v：显示更详细的信息，包括数据包和字节计数器。--line-numbers：显示规则的行号。-A, --append：在链的末尾追加一条新规则。-I, --insert：在链的开头插入一条新规则（可以指定行号）。-D, --delete：删除一条规则（可以指定规则内容或行号）。-P, --policy：设置链的默认策略（当没有规则匹配时执行的动作）。-F, --flush：清空指定链中的所有规则。-Z, --zero：将数据包和字节计数器清零。设置方法查看、清空和设置默认策略# 查看 filter 表的所有规则（最常用） # -n: 不解析域名，速度快 # -v: 显示详细信息 # --line-numbers: 显示行号，方便删除 sudo iptables -t filter -L -n -v --line-numbers # 清空所有表的所有规则 (危险操作，会清除所有现有防火墙规则) sudo iptables -F # 清空 filter 表所有链的规则 sudo iptables -t nat -F # 清空 nat 表所有链的规则 sudo iptables -t mangle -F # 清空 mangle 表所有链的规则 sudo iptables -X # 删除所有用户自定义的链 # 设置默认策略为“拒绝所有” (安全的基石) sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT ACCEPT # 允许本机主动发出的所有流量，如果想更严格可以设为 DROP警告：执行 iptables -P INPUT DROP 后，如果没有设置任何 ACCEPT 规则，你可能会立即失去对服务器的 SSH 连接。请务必在同一终端会话中继续添加允许 SSH 的规则。开放必要端口# 1. 允许回环接口 (loopback) 的所有通信，本机服务间通信需要 sudo iptables -A INPUT -i lo -j ACCEPT # 2. 允许已建立的、相关的连接通过 # 这是非常重要的一条规则，它允许服务器对收到的请求进行响应 sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 3. 允许 SSH (端口 22) 的新连接 sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 4. 允许 HTTP (端口 80) 的新连接 sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 5. 允许 HTTPS (端口 443) 的新连接 sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 6. (可选) 允许 ping (ICMP echo-request) sudo iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # 7. 此时，默认策略 DROP 会阻止所有其他未经允许的入站流量端口转发 (DNAT)场景：将服务器公网 IP (<Public_IP>) 的 8080 端口收到的流量，转发给内网服务器 192.168.1.100 的 80 端口。# 1. 开启内核的 IP 转发功能 echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward # 2. 在 nat 表的 PREROUTING 链中添加 DNAT 规则 # -p tcp: 协议为 TCP # -d <Public_IP>: 目标地址是本机公网 IP # --dport 8080: 目标端口是…