syslogd: Прием логов с удаленных хостов

Syslogd запускаю на FreeBSD 11.3

Допустим, есть сервер с адресом 10.10.10.10, на котором запущен и работает демон syslogd. Есть некий роутер cisco с адресом 192.168.15.2, с которого мы хотим получать логи на сервер.

Для этого:
1) убеждаемся, что фаервол на сервере разрешает обращения к себе на порту udp 514 (дефолтный порт syslogd)
2) Редактируем конфигурационный файл /etc/syslog.conf

[root@noc /]# cd /etc
[root@noc /etc]# cp syslog.conf syslog.conf.backup
[root@noc /etc]# ee syslog.conf

Добавляем в конец файла следующую конструкцию:

!*
+192.168.15.2
*.* /var/log/192.168.15.2.log
+*

!* — разделитель
+ — указываем ip-адрес удаленного хоста, с которого будут приходить логи.
*.* — принимаем все типы сообщений (all facilities, all levels)
+* — конец секции описания хоста
/var/log/192.168.15.2.log — путь к лог-файлу для данного удаленного хоста

3) Редактируем /etc/rc.conf, добавляем строку:

syslogd_flags="-a 192.168.15.2:* -b 10.10.10.10 -n -C"

здесь указываем флаги запуска.

-a — указываем ip-адрес хоста, с которого будем принимать логи.
Можно указать целую сеть,например -a 192.168.15.0/24:*
Флаг -a можно использовать несколько раз.
По умолчанию, syslogd принимает сообщения с src-порта 514, но зачастую оборудование в качестве порта-источника использует рандомный порт. Чтобы syslog принимал сообщения с рандомных портов, необходимо добавить маску :* после указания ip-адреса или сети.

«Почему не приходят логи с удаленного хоста cisco?» — выше ответ, добавьте :*

-b bind address (необязательно задавать)

— создавать log-файл, если его нет (создается с правами 0600)

-n — не резолвить ip в dns-имена

«Почему сообщения от удаленного хоста не пишутся в нужный log-файл?»:

Если не задать в rc.conf опцию -n, то syslogd будет резолвить ip-адрес в dns, используя PTR-запись на dns-сервере.
Нам это не нужно, так как во-первых: зачем нам лишние запросы в днс, во-вторых: чтобы syslogd правильно распарсил сообщения с нужного ip и положил в отдельный файл, нужно чтобы syslogd видел в сообщениях именно ip, а не PTR вида home-192-168-2-15.some-isp.com.

debug syslogd

-d — дебаг — полезная опция на этапе отладки. Если что-то не едет, добавляем этот флаг в syslogd_flags и смотрим сообщения в консоли.
При нормальной работе опцию отключаем.

Не забывайте после внесения изменений рестартовать syslogd:

[root@noc /]# service syslogd restart

А также при проверке работоспособности генерировать события на удаленном хосте, чтобы было что писать в лог-файл.

Вот что увидим в консоли при включенном дебаге, если не укажем :* после ip-адреса — port mismatch:

received sa_len = 16
cvthname(2) len = 16
cvthname(192.168.15.2)
of validation rule: 1
validate: dgram from IP 192.168.15.2, port 59635, name home-192-168-2-15.some-isp.com;
rejected in rule 1 due to port mismatch.

А если не отключим резолв ip в днс, то лог будет писаться в /var/log/messages, а не в /var/log/192.168.15.2.log:

received sa_len = 16
cvthname(2)len = 16
cvthname(192.168.15.2)
# of validation rule: 1
validate: dgram from IP 192.168.15.2, port 59635, name home-192-168-2-15.some-isp.com;
accepted in rule 1.
logmsg: pri 275, flags 0, from home-192-168-2-15.some-isp.com, msg r-generator: 000301: May 28 12:26:10 EET: %SYS-5-CONFIG_I: Configured from console by admin on vty0 (10.5.5.5)
Logging to FILE /var/log/messages