编辑
2024-12-04
interview questions
00
请注意,本文编写于 49 天前,最后修改于 49 天前,其中某些信息可能已经过时。

iptables

iptables

iptables 是 Linux 系统中用于配置防火墙、网络过滤、地址转换等功能的核心工具,它通过定义一系列规则来控制数据包的流向和处理。要深入理解 iptables 的原理,我们需要从数据包的流转过程、各个表和链的设计、以及规则的匹配机制等多个方面进行详细解析。

原理

iptables实现原理--Netfilter

iptables 实际上是 Linux 内核网络栈的一部分,它通过 Netfilter 框架来实现数据包的过滤和处理。Netfilter 是 Linux 内核中的一个模块化框架,允许内核通过不同的钩子(hook)对网络数据包进行处理。iptables 就是利用这些钩子来进行数据包的匹配、修改和路由。

{E1C5B5A8-1AD5-4185-9A1A-C9936BF99EE3}.png

四表五链

四个表:filter(过滤)、nat(NAT)、mangle(修改)、raw(绕过连接追踪)。

相关信息

四个表:filter(过滤)、nat(NAT)、mangle(修改)、raw(绕过连接追踪)。

五个链:每个表中有不同的链,处理数据包的顺序和不同阶段。

filter 表:INPUT、OUTPUT、FORWARD

nat 表:PREROUTING、POSTROUTING、OUTPUT

mangle 表:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

raw 表:PREROUTING、OUTPUT

五个链:每个表中有不同的链,处理数据包的顺序和不同阶段。

filter 表:INPUT、OUTPUT、FORWARD

nat 表:PREROUTING、POSTROUTING、OUTPUT

mangle 表:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD

raw 表:PREROUTING、OUTPUT

{6EFDBE50-16C6-43CA-8884-76CD84C9410C}.png

{2FD34CE6-6BB3-4A52-9D83-A8080CF7A4FE}.png

操作

选项描述示例
-A添加规则到指定链中iptables -A INPUT -p tcp --dport 80 -j ACCEPT
-D删除指定链中的规则iptables -D INPUT -p tcp --dport 80 -j ACCEPT
-I将规则插入到指定链的最前面iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
-R替换指定链中的规则iptables -R INPUT 1 -p tcp --dport 443 -j ACCEPT
-L列出指定链中的规则iptables -L INPUT
-F清空指定链中的所有规则iptables -F INPUT
-Z重置指定链的计数器(数据包计数和字节计数)iptables -Z INPUT
-t指定操作的表iptables -t nat -L
-p指定协议类型(如 TCP、UDP、ICMP)iptables -A INPUT -p tcp --dport 80 -j ACCEPT
--dport指定目标端口(与 -p 一起使用,通常用于 TCP/UDP)iptables -A INPUT -p tcp --dport 80 -j ACCEPT
--sport指定源端口(与 -p 一起使用,通常用于 TCP/UDP)iptables -A INPUT -p tcp --sport 22 -j ACCEPT
-j指定目标动作(如 ACCEPT、DROP、REJECT、LOG 等)iptables -A INPUT -p tcp --dport 80 -j ACCEPT
--source指定源 IP 地址iptables -A INPUT -s 192.168.1.1 -j ACCEPT
--destination指定目标 IP 地址iptables -A INPUT -d 192.168.1.100 -j ACCEPT
-i指定输入接口iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
-o指定输出接口iptables -A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT
-s指定源地址,支持 CIDR 表达式iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
-d指定目标地址,支持 CIDR 表达式iptables -A INPUT -d 192.168.1.100 -j ACCEPT
-m使用扩展模块(如 statelimitmultiport 等)iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
--state配合 -m state 使用,指定连接状态(如 NEWESTABLISHED 等)iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
--limit限制特定时间内的数据包处理速率iptables -A INPUT -p tcp --dport 80 -m limit --limit 5/min -j ACCEPT
--sport/--dport指定源端口或目标端口(与 -p 协议一起使用)iptables -A INPUT -p tcp --sport 22 --dport 80 -j ACCEPT
-v显示更详细的规则信息(包括数据包计数和字节计数)iptables -L -v
-n不解析 IP 地址或端口为域名和服务名称iptables -L -n
--log启用日志功能,记录匹配到规则的数据包到系统日志iptables -A INPUT -j LOG --log-prefix "IPTables Input: "
--reject-with配置拒绝数据包时返回的 ICMP 错误消息类型(如 port-unreachable 等)iptables -A INPUT -p tcp --dport 80 -j REJECT --reject-with icmp-port-unreachable

本文作者:lzix

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!