随笔 - 6  文章 - 124  评论 - 1  阅读 - 13042

Linux iptables 命令详解

简介

iptables 是一个在 Linux 中的管理防火墙规则的命令行工具,它作为 Linux 内核的 netfilter 框架的一部分运行,以控制传入和传出的网络流量。

firewalld 相比

  • iptables 是基于规则的,每个规则必须独立定义,firewalld 是基于区域的,规则适用于预定义或自定义区域。

  • iptables 适合高度精细和手动的配置,firewalld 动态规则更简单且更加用户友好。

  • iptables 需要刷新或重新启动才能应用更改,firewalld 支持不间断的即时更改。

  • iptables 对于静态、简单的配置来说非常高效,firewalld 由于抽象层,速度稍微慢一些,但大多数情况下可以忽略不计。

基础概念

Chains

处理数据包的一组规则

  • INPUT: 控制传入数据包。

  • FORWARD: 控制通过系统转发的数据包。

  • OUTPUT: 控制传出的数据包。

Tables

规则处理类别

  • filter: 基本数据包过滤的默认表。

  • nat: 处理网络地址转换(NAT)。

  • mangle: 改变数据包。

  • raw: 在连接跟踪之前配置数据包。

Rules

对数据包应用的操作,例如:ACCEPTDROP

常用操作

列出所有链的规则

sudo iptables -L

列出带行号的规则

sudo iptables -L --line-numbers

列出特定表中的规则

sudo iptables -t nat -L

允许指定端口传入流量

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# -A INPUT: 追加到 INPUT链

# -p tcp: 指定协议为 TCP

# --dport 80: 指定目标端口为80

# -j ACCEPT: 接受数据包

阻止来自指定IP的流量

sudo iptables -A INPUT -s 192.168.1.100 -j DROP

# -s 192.168.1.100: 指定源IP地址

允许来自子网的流量

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

允许端口 22 (SSH) 上的传出流量

sudo iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

在网络之间转发流量

sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

按行号删除规则

sudo iptables -D INPUT 2

# -D INPUT 2: 删除 INPUT 链的第二个规则

将传入流量的默认策略设置为 DROP

sudo iptables -P INPUT DROP

将传出流量的默认策略设置为 ACCEPT

sudo iptables -P OUTPUT ACCEPT

保存当前规则到指定文件

sudo iptables-save > /etc/iptables.rules

从文件中恢复规则

sudo iptables-restore < /etc/iptables.rules

将端口 8080 转发至 80

sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80

伪装流量(NAT)

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

转发流量到其他IP

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.200:80

记录丢弃的数据包

sudo iptables -A INPUT -j LOG --log-prefix "Dropped Packet: " --log-level 4

记录已接受的数据包

sudo iptables -A INPUT -j LOG --log-prefix "Accepted Packet: " --log-level 4

查看数据包和字节数

sudo iptables -L -v

重置计数器

sudo iptables -Z

刷新所有规则

sudo iptables -F

在指定的 Table 上刷新规则

sudo iptables -t nat -F

删除所有用户定义的 Chains

sudo iptables -X

常用选项

  • -A:追加到规则到链中

  • -D:从链中删除一个规则

  • -P:为链设置默认策略

  • -F:刷新链中的所有规则

  • -L:列出链中的所有规则

  • -t [table]:指定 table

  • -i:指定输入接口,例如:eth0

  • -o:指定输出接口

  • -s:指定源IP地址

  • -d:指定目标IP地址

  • -p:指定协议类型,例如:tcpudpicmp

posted on   我是唐青枫  阅读(432)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示