ここ1ヶ月、長らく使っていたWiFiルータの一部プロセスが良く死んでいた。
具体的には固定IP割り当てしているやつらは問題ないのだが、DHCPによるIP割り当てがうまく行かず、またルーター管理画面にアクセスしようとしても途中で接続が切断される、という状態になっていた。
復帰方法は電源off/onしかないのだが、まぁ、最近のWiFiに対応するやつにするかと4千円程度のものに交換した。
ルータ交換後の様子を継続的に見るためにCentOS7サーバにログを飛ばしておくか、と設定してみた。
その1 firewallの穴開け
標準ではsyslogポート(514)は開いていないので、開ける。
まず、firewalldが持っている規定のサービス名を確認
[root@blog ~]# firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql munin-node murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
[root@blog ~]#
「syslog」が使えそう。あと、今回は不要だけど「syslog-tls」も入れておくか、ということで以下を実行
[root@niselog ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp14s0
sources:
services: dhcpv6-client http https ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@niselog ~]# firewall-cmd --permanent --zone=public --add-service=syslog
success
[root@niselog ~]# firewall-cmd --permanent --zone=public --add-service=syslog-tls
success
[root@niselog ~]# firewall-cmd --reload
success
[root@niselog ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp14s0
sources:
services: dhcpv6-client http https ssh syslog syslog-tls
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@niselog ~]#
また、「22.5. ロギングサーバーでの RSYSLOG の設定」によればSELinuxによりポート制限をしている事もあるので「semanage port -l」でsyslogに許可されているポートを確認しろ、とのこと。
[root@niselog ~]# semanage port -l | grep syslog
syslog_tls_port_t tcp 6514, 10514
syslog_tls_port_t udp 6514, 10514
syslogd_port_t tcp 601, 20514
syslogd_port_t udp 514, 601, 20514
[root@niselog ~]#
その2 rsyslogにポート514での受信許可
標準の/etc/rsyslog.conf ではポート514の使用について下記の様にコメントアウトされています。
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
これのコメントを外します。
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
設定後、rsyslogの再起動で/var/log/messagesにログがたまる。
[root@niselog rsyslog.d]# systemctl restart rsyslog
[root@niselog rsyslog.d]# systemctl status -l rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since 金 2019-11-01 11:04:53 JST; 1s ago
Docs: man:rsyslogd(8)
http://www.rsyslog.com/doc/
Main PID: 2872 (rsyslogd)
CGroup: /system.slice/rsyslog.service
mq2872 /usr/sbin/rsyslogd -n
11月 01 11:04:53 niselog systemd[1]: Starting System Logging Service...
11月 01 11:04:53 niselog rsyslogd[2872]: [origin software="rsyslogd" swVersion="8.24.0-41.el7_7.2" x-pid="2872" x-info="http://www.rsyslog.com"] start
11月 01 11:04:53 niselog systemd[1]: Started System Logging Service.
[root@niselog rsyslog.d]#
その3 ログを分ける
標準だと/var/log/messagesにまとめられてしまうため、ログを分離する。
/etc/rsyslog.d/remote.conf というファイルを新規作成し、下記を書いた。(「gateway」はルータについているホスト名)
if $fromhost == 'gateway' then {
-/var/log/remote/gateway.log
stop
}
これを設定したあと、「systemctl restart rsyslog」で/var/log/remote/gateway.log にログが保存されるようになった。
なお、最初、上記の「-/var/log/remote/gateway.log」ところは「-/var/log/remote/%fromhost%.log」として%fromhost%がホスト名に置き換わることを期待したのですが、実際に作られたログファイル名は「 /var/log/remote/%fromhost%.log 」とそのままでした・・・