Linux内核中 Netfilter 框架的用户态工具iptables(配置防火墙规则)
iptables
是 Linux 内核中 Netfilter 框架的用户态工具,用于配置防火墙规则。
-
发送数据:
-
内核态:数据包从应用程序发出后,经过内核的
OUTPUT
链,匹配iptables
规则(如过滤、NAT),然后进入POSTROUTING
链,最终发送到网络接口。 -
用户态:
iptables
工具用于定义和管理规则,规则通过系统调用传递给内核。
-
-
接收数据:
-
内核态:数据包进入网络接口后,经过
PREROUTING
链,匹配规则后进入INPUT
链(本地处理)或FORWARD
链(转发)。 -
用户态:规则由
iptables
配置并传递给内核执行。
-
内核态负责数据包的实际处理,用户态负责规则的配置和管理。
例如:
iptables -A INPUT -s 100.1.1.35 -j DROP
是一条 iptables
规则,用于配置 Linux 防火墙。以下是该命令的详细解释:
命令结构
iptables -A INPUT -s 100.1.1.35 -j DROP
部分 | 说明 |
---|---|
iptables | Linux 中用于配置防火墙规则的工具。 |
-A INPUT | 表示将规则添加到 INPUT 链中。INPUT 链用于处理进入本机的数据包。 |
-s 100.1.1.35 | 指定数据包的源 IP 地址为 100.1.1.35 。 |
-j DROP | 表示对匹配的数据包执行 DROP 动作,即丢弃数据包,不返回任何响应。 |
命令作用
这条规则的作用是:
-
丢弃所有来自 IP 地址
100.1.1.35
的数据包。 -
数据包进入本机时,如果源 IP 地址是
100.1.1.35
,则会被直接丢弃,不会到达应用程序。
详细解释
1. -A INPUT
-
-A
:表示将规则追加(Append)到指定链的末尾。 -
INPUT
:是iptables
的一个内置链,用于处理进入本机的数据包。
2. -s 100.1.1.35
-
-s
:指定数据包的源 IP 地址(Source IP)。 -
100.1.1.35
:具体的源 IP 地址。
3. -j DROP
-
-j
:指定对匹配的数据包执行的动作(Jump)。 -
DROP
:丢弃数据包,不返回任何响应。
示例场景
假设你希望阻止来自 IP 地址 100.1.1.35
的所有访问,可以使用这条规则:
iptables -A INPUT -s 100.1.1.35 -j DROP
-
执行后,来自
100.1.1.35
的所有数据包都会被丢弃。 -
例如:
-
100.1.1.35
尝试 SSH 连接到本机,连接会被直接丢弃。 -
100.1.1.35
尝试访问本机的 Web 服务,请求会被直接丢弃。
-
注意事项
-
规则的顺序:
-
iptables
规则是按顺序匹配的,如果前面有允许规则,可能会覆盖这条规则。 -
例如:
iptables -A INPUT -s 100.1.1.35 -j ACCEPT iptables -A INPUT -s 100.1.1.35 -j DROP
-
由于
ACCEPT
规则在前,DROP
规则不会生效。
-
-
-
持久化规则:
-
使用
iptables
添加的规则在重启后会失效。 -
可以使用以下命令保存规则:
iptables-save > /etc/iptables/rules.v4
-
重启后恢复规则:
iptables-restore < /etc/iptables/rules.v4
-
-
删除规则:
方法 1:通过规则内容删除
直接使用 -D
参数删除规则,规则内容需要与添加时完全一致。
删除命令
iptables -D INPUT -s 100.1.1.35 -j DROP
-
-D
:表示删除规则。 -
INPUT
:规则所在的链。 -
-s 100.1.1.35
:源 IP 地址。 -
-j DROP
:动作(DROP)。
方法 2:通过规则编号删除
如果规则较多,可以通过规则编号删除。
-
查看规则及其编号:
iptables -L INPUT -v -n --line-numbers
-
输出示例:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 DROP all -- * * 100.1.1.35 0.0.0.0/0
-
-
根据编号删除规则:
iptables -D INPUT 1
-
1
是规则的编号。
-
方法 3:清空整个链的规则
如果不需要保留其他规则,可以直接清空 INPUT
链的所有规则。
清空命令
iptables -F INPUT
-
-F
:清空指定链的所有规则。