我想开始npf
在我的 NetBSD 服务器上使用,而不是仅仅依赖外部防火墙进行保护。但是,我得到:
$ npfctl show
npfctl: /dev/npf: No such file or directory
好吧,也许我删除了一个设备节点。不管:
$ grep npf /dev/MAKEDEV
makedev bpf npf
npf)
mkdev npf c 198 0
# mknod /dev/npf c 198 0
$ npfctl show
npfctl: /dev/npf: Device not configured
哦,对了,必须先加载驱动程序:
$ modstat | grep npf; echo $?
1
$ find /stand -name 'npf.kmod'
/stand/sparc64/7.0/modules/npf/npf.kmod
$ uname -sr
NetBSD 7.0.2
# modload npf
modload: Operation not permitted
为什么我(即使是 root)不允许加载模块?
答案1
NetBSD 使用内核安全级别确定可以在正在运行的系统上执行哪些操作。从链接:
-1 永久不安全模式
- 不要在启动时提高安全级别
0 不安全模式
- 、或
init
可能无法跟踪或访问进程(PID 1 )。ptrace(2)
systrace(4)
procfs
- 不可变和仅附加文件标志可能会更改
- 所有设备都可以根据其权限进行读取或写入
注意:您无法在此安全级别之上运行 X11
sysutils/aperture
如果你真的需要的话就试试吧。1 安全模式
- securelevel 0 的所有效果
/dev/mem
并且/dev/kmem
可能不会被写入- 已挂载文件系统的原始磁盘设备是只读的
- 不可删除不可变和仅附加文件标志
- 内核模块可能无法加载或卸载
- net.inet.ip.sourceroute
sysctl(8)
变量不能更改- 添加或删除
sysctl(9)
节点被拒绝- RTC 偏移量不得更改
- Set-id coredump 设置不得更改
ipkdb(4)
不允许附加基于 IP 的内核调试器- 可用于执行原始磁盘和/或内存访问的设备直通请求被拒绝
iopl
并且ioperm
电话被拒绝- 对非托管内存的访问被拒绝
2 高安全模式
- securelevel 1 的所有效果
- 无论是否安装,原始磁盘设备始终是只读的
- 新磁盘可能无法挂载,现有挂载只能从读写降级为只读
- 系统时钟不能设置得向后或接近溢出
- 每个进程的 coredump 名称不能更改
- 数据包过滤和 NAT 规则不得更改
我的系统运行在安全级别 1,因此“内核模块可能无法加载或卸载”。此外,设置npf=YES
不会rc.conf
自动加载相关的内核模块。无法在运行时降低内核安全级别,因此选项是:
- 启动到较低的安全级别,然后加载模块并提高安全级别,或者
- 启动时加载模块
显然后者是更好的选择。要在启动时加载内核模块,必须确保rc.conf
包含:
modules=YES
然后,编辑(或创建)/etc/modules.conf
以包含要加载的模块列表,每行一个。在这种情况下:
# echo npf >> /etc/modules.conf