Packet send failed to や Failed to send packet trying to query name がログに出力される

【環境】

# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

# rpm -qa | grep samba
samba-client-libs-4.6.2-12.el7_4.x86_64
samba-common-tools-4.6.2-12.el7_4.x86_64
samba-common-4.6.2-12.el7_4.noarch
samba-libs-4.6.2-12.el7_4.x86_64
samba-4.6.2-12.el7_4.x86_64
samba-common-libs-4.6.2-12.el7_4.x86_64

/var/log/messages に次のようなログが頻繁に出力される。

Jan 10 21:07:40 hoge nmbd[1106]: [2018/01/10 21:07:40.837878,  0] ../source3/libsmb/nmblib.c:873(send_udp)
Jan 10 21:07:40 hoge nmbd[1106]:  Packet send failed to 192.168.10.255(138) ERRNO=許可されていない操作です
Jan 10 21:09:20 hoge nmbd[1106]: [2018/01/10 21:09:20.367062,  0] ../source3/libsmb/nmblib.c:873(send_udp)
Jan 10 21:09:20 hoge nmbd[1106]:  Packet send failed to 192.168.10.255(137) ERRNO=許可されていない操作です
Jan 10 21:09:20 hoge nmbd[1106]: [2018/01/10 21:09:20.367202,  0] ../source3/nmbd/nmbd_packets.c:179(send_netbios_packet)
Jan 10 21:09:20 hoge nmbd[1106]:  send_netbios_packet: send_packet() to IP 192.168.10.255 port 137 failed
Jan 10 21:09:20 hoge nmbd[1106]: [2018/01/10 21:09:20.367233,  0] ../source3/nmbd/nmbd_namequery.c:245(query_name)
Jan 10 21:09:20 hoge nmbd[1106]:  query_name: Failed to send packet trying to query name TEST<1d>

ホストのiptables等で、パケットの送信が遮断されているためと思われる。
iptablesで許可すると、journald/rsyslog いずれにも、上記のログは出なくなる)

iptables で制限を解除すれば良いけれど、何らかの事情でそれが出来ない場合の対処法。

CentOS 7の場合、ログはいったん journald が受け取り、rsyslog が受け取っている構造になっている。
ここで、journald → rsyslog へ渡される際に、rsyslog 側で無視するようにすれば、journald にログは残しつつ、rsyslog からファイルへの出力を抑制できる。
(但し、CentOS 7の journald の初期設定では、/var/run/log/journal 以下に書き込まれるので、OSを再起動すると消える)

rsyslog側で無視するには、以下のようなファイルを作成する。

# cat /etc/rsyslog.d/ignore-nmbd-query.conf
if $programname == "nmbd" and ($msg contains "Packet send failed to" or $msg contains "query_name" or $msg contains "send_netbios_packet" or $msg contains "send_udp") then stop

ここには、rsyslog の条件式である「contains」を利用して、特定のプロセスにおいて特定キーワードを含むログを無視するよう記載している。
rsyslog で他に利用可能な値や条件は、以下の通り。
http://www.rsyslog.com/doc/v8-stable/configuration/properties.html
http://www.rsyslog.com/doc/v8-stable/configuration/filters.html


また、CentOS 7のrsyslog は、/etc/rsyslog.d/*.conf を起動時に読み込むので、同様のものがあれば、別ファイルに作成すると管理しやすい。

読み込み箇所↓
# cat /etc/rsyslog.conf | grep '*.conf'
$IncludeConfig /etc/rsyslog.d/*.conf

rsyslogを再起動して反映し、/var/log/messages に出力されなくなった事を確認する。

# systemctl restart rsyslog

journald に記録されたログを見たい場合は、以下のようにする。

# journalctl -u nmb