不懂就问系列! 为什么 iptables 或者 firewalld 这类工具要作为服务运行?

2021-10-14 09:38:08 +08:00
 LoeNet

有一个疑问,Netfilter 作为网络数据包过滤机制,iptables 和 firewalld 作为用户端管理工具,按照我的理解 只是下发策略,应该完全可以无需 systemctl 服务管理. 但是目前 Linux 发行版都有这个服务. 这个主要目的还有什么?

3212 次点击
所在节点    程序员
11 条回复
saytesnake
2021-10-14 09:48:02 +08:00
iptables 跟 nftables 可以不用服务运行,没经历过 init 时代? firewalld 跟 ufw 只是 iptables 的封装。
cweijan
2021-10-14 10:04:16 +08:00
配置的策略最终也是某些软件在用啊, iptables 就是最底层的软件.
podel
2021-10-14 10:28:47 +08:00
@cweijan iptables 还不是最底层的。 最底层的是内核的 netfilter 。
本质是。 作为防火墙。这种软件是没办法运行在 内核态的。 用户态和内核态之间会有 中断切换。开销很大。
iptables 本质是 内核里面的现有加载模块的 控制器。
2i2Re2PLMaDnghL
2021-10-14 10:41:13 +08:00
你 systemctl cat iptables.service 看看内容,它 RemainAfterExit=yes 说明这个服务不是一个进程。
它只是作为 service 单元被 systemd 管理,它的启动过程即是载入 rules,然后就认为这个服务已经存在了。

@cweijan 不是,最终是内核态处理,每个包都过一遍用户态太慢了。
2i2Re2PLMaDnghL
2021-10-14 10:45:21 +08:00
@podel 准确地说 iptables 本质是运行在内核态的一个微型且功能特化的虚拟机式解释器。
前沿似乎在转用 eBPF,准备用单一一个解释器运行大部分甚至所有需插入内核态运行的代码。
GuuJiang
2021-10-14 10:51:04 +08:00
@2i2Re2PLMaDnghL 学到了,问题是个好问题,答案也是好答案
yanqiyu
2021-10-14 10:55:19 +08:00
Firewalld 之类的需要监听网络环境的变化(比如某个网口插入网线并被分配 ip ),然后按照预配的或者是 NetworkManager 传递 zone 信息更新 nft
cweijan
2021-10-14 11:40:01 +08:00
@2i2Re2PLMaDnghL 原来是这样, 感谢指教
adoal
2021-10-14 12:27:41 +08:00
开机启动做初始化啊亲
adoal
2021-10-14 12:28:45 +08:00
要不然你打算怎么做,在 rc.local 里加载写好的防火墙规则吗
LoeNet
2021-10-14 14:23:12 +08:00
@2i2Re2PLMaDnghL 感谢参与讨论.茅塞顿开. 目前 firewalld 已经改成 dbus.
cat /usr/lib/systemd/system/firewalld.service
[Unit]
Description=firewalld - dynamic firewall daemon
Before=network-pre.target
Wants=network-pre.target
After=dbus.service
After=polkit.service
Conflicts=iptables.service ip6tables.service ebtables.service ipset.service
Documentation=man:firewalld(1)

[Service]
EnvironmentFile=-/etc/sysconfig/firewalld
ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS
ExecReload=/bin/kill -HUP $MAINPID
# supress to log debug and error output also to /var/log/messages
StandardOutput=null
StandardError=null
Type=dbus
BusName=org.fedoraproject.FirewallD1
KillMode=mixed

[Install]
WantedBy=multi-user.target
Alias=dbus-org.fedoraproject.FirewallD1.service

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/807713

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX