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