我将默认的iptables输出链设置为丢弃数据包。然后,我创建了一个防火墙规则,只允许ntp用户发送ntp数据包:
iptables -A OUTPUT -m owner --uid-owner ntp -p udp --dport 123 -j ACCEPT然而,每隔10-20分钟我就会看到:
ntpd[27769]: sendto(<snip>) (fd=22): Operation not permitted然后,我删除了规则的-m owner --uid-owner ntp部分,并在它之前添加了一个日志规则:
iptables -A OUTPUT -p udp --dport 123 -j LOG --log-level debug \
--log-prefix "Spotted a NTP packet: " --log-uidntpd再次开始工作,在内核环缓冲区中,我看到:
Spotted a NTP packet: <snip> PROTO=UDP SPT=123 DPT=123 LEN=56 UID=0我使用--log-uid切换到LOG目标,ntpd作为ntp用户(uid=38)运行:
# ps auxf | grep ntpd
ntp 27769 0.0 1.0 4512 4508 ? SLs Jan04 0:00 ntpd -u ntp:ntp -p /var/run/ntpd.pid然而日志显示的是UID=0。我肯定系统上没有其他的东西正在发送ntp数据包,而且由于我不再得到Operation not permitted,我确信实际上是ntpd在发送数据包。
我想我可以不匹配这些数据包的ntp用户;但是,有人能解释为什么iptables没有为这些包显示UID=38吗?
发布于 2012-01-05 22:17:45
对于使用端口小于1024的程序来说,它必须是根。许多应用程序(如NTP )将启动,以根用户身份打开端口,然后将特权降至其他所有已定义的帐户。
发布于 2015-05-23 19:16:57
在您的iptable规则中有错误:
iptables -A OUTPUT -m owner --uid-owner ntp -p udp --dport 123 -j ACCEPT如果使用-- uid -owner,则需要定义uid-数值。
对于程序名,您需要另一个选项:--cmd-owner。正确的规则是:
iptables -A OUTPUT -m owner --cmd-owner ntp -p udp --dport 123 -j详细的解释,你可以阅读在伟大的书由奥斯卡安德烈森。
https://serverfault.com/questions/347137
复制相似问题