【環境】
# 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