有一个疑问,Netfilter 作为网络数据包过滤机制,iptables 和 firewalld 作为用户端管理工具,按照我的理解 只是下发策略,应该完全可以无需 systemctl 服务管理. 但是目前 Linux 发行版都有这个服务. 这个主要目的还有什么?
1
saytesnake 2021-10-14 09:48:02 +08:00
iptables 跟 nftables 可以不用服务运行,没经历过 init 时代? firewalld 跟 ufw 只是 iptables 的封装。
|
2
cweijan 2021-10-14 10:04:16 +08:00
配置的策略最终也是某些软件在用啊, iptables 就是最底层的软件.
|
3
podel 2021-10-14 10:28:47 +08:00
@cweijan iptables 还不是最底层的。 最底层的是内核的 netfilter 。
本质是。 作为防火墙。这种软件是没办法运行在 内核态的。 用户态和内核态之间会有 中断切换。开销很大。 iptables 本质是 内核里面的现有加载模块的 控制器。 |
4
2i2Re2PLMaDnghL 2021-10-14 10:41:13 +08:00 10
你 systemctl cat iptables.service 看看内容,它 RemainAfterExit=yes 说明这个服务不是一个进程。
它只是作为 service 单元被 systemd 管理,它的启动过程即是载入 rules,然后就认为这个服务已经存在了。 @cweijan 不是,最终是内核态处理,每个包都过一遍用户态太慢了。 |
5
2i2Re2PLMaDnghL 2021-10-14 10:45:21 +08:00 2
@podel 准确地说 iptables 本质是运行在内核态的一个微型且功能特化的虚拟机式解释器。
前沿似乎在转用 eBPF,准备用单一一个解释器运行大部分甚至所有需插入内核态运行的代码。 |
6
GuuJiang 2021-10-14 10:51:04 +08:00 via iPhone
@2i2Re2PLMaDnghL 学到了,问题是个好问题,答案也是好答案
|
7
yanqiyu 2021-10-14 10:55:19 +08:00
Firewalld 之类的需要监听网络环境的变化(比如某个网口插入网线并被分配 ip ),然后按照预配的或者是 NetworkManager 传递 zone 信息更新 nft
|
8
cweijan 2021-10-14 11:40:01 +08:00
@2i2Re2PLMaDnghL 原来是这样, 感谢指教
|
9
adoal 2021-10-14 12:27:41 +08:00
开机启动做初始化啊亲
|
10
adoal 2021-10-14 12:28:45 +08:00
要不然你打算怎么做,在 rc.local 里加载写好的防火墙规则吗
|
11
LoeNet OP @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 |