Розбіжності
Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Порівняння попередніх версій Попередня ревізія Наступна ревізія | Попередня ревізія | ||
debian:syslog-ng [2024/07/25 17:21] – [A10 Thunder NAT logging] Method | debian:syslog-ng [2025/05/01 22:52] (поточний) – [DNS query logging] Method | ||
---|---|---|---|
Рядок 1: | Рядок 1: | ||
====== Syslog-NG ====== | ====== Syslog-NG ====== | ||
+ | ===== Install Syslog-NG ===== | ||
<code bash> | <code bash> | ||
- | wget -qO - https:// | + | wget -qO - https:// |
- | echo "deb https://ose-repo.syslog-ng.com/apt/ stable debian-bookworm" | + | cat <<EOF > / |
+ | deb [ signed-by=/ | ||
+ | EOF | ||
apt update | apt update | ||
apt-get install syslog-ng-core syslog-ng-scl | apt-get install syslog-ng-core syslog-ng-scl | ||
+ | syslog-ng -V | ||
</ | </ | ||
+ | |||
+ | test message from localhost | ||
+ | # logger --server 127.0.0.1 -p local0.info -t test "This is a test message" | ||
===== A10 Thunder NAT logging ===== | ===== A10 Thunder NAT logging ===== | ||
+ | |||
+ | ==== Syslog-NG server configuration for A10 ==== | ||
nano / | nano / | ||
- | <code perl|A10CGNat.conf> | + | <code perl> |
# Вхідні джерела | # Вхідні джерела | ||
source s_tcp_a10nat_log { | source s_tcp_a10nat_log { | ||
Рядок 18: | Рядок 28: | ||
}; | }; | ||
- | # Фільтр для перевірки наявності слова " | + | # Фільтр для перевірки наявності слова " |
filter f_a10nat_cgnat { | filter f_a10nat_cgnat { | ||
- | | + | |
}; | }; | ||
- | # Журнал на виході у форматі JSON | + | # Журнал на виході у форматі JSON. Основне призначення |
- | destination | + | destination |
file( | file( | ||
- | "/var/log/syslog-ng/ | + | "/nfs/ |
template(" | template(" | ||
create_dirs(yes) | create_dirs(yes) | ||
Рядок 32: | Рядок 42: | ||
}; | }; | ||
- | # Логічне об' | + | # Журнал на виході у форматі JSON. Запасне призначення |
+ | destination d_a10nat_json_backup { | ||
+ | file( | ||
+ | "/ | ||
+ | template(" | ||
+ | create_dirs(yes) | ||
+ | ); | ||
+ | }; | ||
+ | |||
+ | # Логічне об' | ||
log { | log { | ||
source(s_tcp_a10nat_log); | source(s_tcp_a10nat_log); | ||
filter(f_a10nat_cgnat); | filter(f_a10nat_cgnat); | ||
- | destination(d_a10nat_json); | + | destination(d_a10nat_json_main); |
flags(flow-control); | flags(flow-control); | ||
}; | }; | ||
+ | log { | ||
+ | source(s_tcp_a10nat_log); | ||
+ | filter(f_a10nat_cgnat); | ||
+ | destination(d_a10nat_json_backup); | ||
+ | when not exists("/ | ||
+ | flags(flow-control); | ||
+ | }; | ||
</ | </ | ||
systemctl restart syslog-ng | systemctl restart syslog-ng | ||
+ | | ||
+ | test message from remote linux host | ||
+ | # logger --server 172.16.0.37 --port 1515 --tcp --rfc3164 --tag NAT-TCP "This is a test message FROM nat" | ||
+ | |||
+ | |||
+ | |||
+ | ==== A10 Thunder Configuration ==== | ||
+ | |||
+ | <code bash> | ||
+ | nat-0> | ||
+ | !Section configuration: | ||
+ | ! | ||
+ | cgnv6 server syslog1 172.16.0.37 | ||
+ | health-check-disable | ||
+ | port 1515 tcp | ||
+ | ! | ||
+ | |||
+ | cgnv6 service-group syslog tcp | ||
+ | member syslog1 1515 | ||
+ | ! | ||
+ | cgnv6 template logging lsn_logging | ||
+ | facility local7 | ||
+ | severity informational | ||
+ | batched-logging-disable | ||
+ | service-group syslog | ||
+ | source-address | ||
+ | ip 172.16.0.6 | ||
+ | disable-log-by-destination | ||
+ | icmp | ||
+ | ! | ||
+ | </ | ||
+ | |||
+ | ==== Скрипт міграції логів ==== | ||
+ | |||
+ | nano / | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | |||
+ | # Перевірка, | ||
+ | if mountpoint -q / | ||
+ | echo " | ||
+ | find / | ||
+ | find / | ||
+ | else | ||
+ | echo " | ||
+ | fi | ||
+ | </ | ||
+ | |||
+ | chmod +x / | ||
+ | crontab -e | ||
+ | |||
+ | <code bash> | ||
+ | */5 * * * * / | ||
+ | </ | ||
+ | |||
+ | ===== DNS query logging ===== | ||
+ | apt-get install syslog-ng-mod-python | ||
+ | |||
+ | Підготуємо каталоги | ||
+ | |||
+ | Створюємо tmpfs директорію та монтуємо | ||
+ | |||
+ | mkdir -p / | ||
+ | echo "tmpfs / | ||
+ | mount -a | ||
+ | mkdir -p / | ||
+ | |||
+ | Створюємо директорію для архівів | ||
+ | mkdir -p / | ||
+ | |||
+ | Створимо скрипт для переміщення логів | ||
+ | <code bash> | ||
+ | cat <<EOT > / | ||
+ | #!/bin/bash | ||
+ | |||
+ | SRC_DIR="/ | ||
+ | DST_DIR="/ | ||
+ | |||
+ | # Знайти файли старші за 15 хвилин | ||
+ | find " | ||
+ | # Визначити відносний шлях | ||
+ | rel_path=" | ||
+ | target_dir=" | ||
+ | |||
+ | # Створити директорію в цільовому місці | ||
+ | mkdir -p " | ||
+ | |||
+ | # Перемістити файл | ||
+ | mkdir -p " | ||
+ | mv " | ||
+ | done | ||
+ | |||
+ | # Видалити всі порожні каталоги у вихідному каталозі | ||
+ | find " | ||
+ | EOT | ||
+ | </ | ||
+ | |||
+ | chmod +x / | ||
+ | bash / | ||
+ | |||
+ | crontab -e | ||
+ | |||
+ | Вписуємо | ||
+ | * * * * * / | ||
+ | |||
+ | Додатково логи можна переміщати на віддаленний сервер по NFS | ||
+ | |||
+ | apt install nfs-common | ||
+ | mkdir -p / | ||
+ | showmount --exports 172.16.0.14 | ||
+ | echo " | ||
+ | mount -a | ||
+ | mkdir -p / | ||
+ | |||
+ | Створимо скрипт для переміщення логів | ||
+ | <code bash> | ||
+ | cat <<EOT > / | ||
+ | #!/bin/bash | ||
+ | |||
+ | SRC_DIR="/ | ||
+ | NFS_DIR="/ | ||
+ | NFS_MOUNT="/ | ||
+ | RETENTION_DAYS=100 | ||
+ | |||
+ | # Перевірити, | ||
+ | if ! mountpoint -q " | ||
+ | echo " | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | # Знайти файли старші за 15 хвилин | ||
+ | find " | ||
+ | # Визначити відносний шлях | ||
+ | rel_path=" | ||
+ | target_dir=" | ||
+ | |||
+ | # Створити директорію на NFS | ||
+ | mkdir -p " | ||
+ | |||
+ | # Перемістити файл | ||
+ | mkdir -p " | ||
+ | mv " | ||
+ | done | ||
+ | |||
+ | # Видалити всі порожні каталоги у вихідному каталозі | ||
+ | find " | ||
+ | |||
+ | # Видалити файли на NFS, які старші за вказану кількість днів | ||
+ | find " | ||
+ | |||
+ | # Також видалити порожні каталоги на NFS після видалення файлів | ||
+ | find " | ||
+ | EOT | ||
+ | </ | ||
+ | |||
+ | chmod +x / | ||
+ | ln -s / | ||
+ | bash / | ||
+ | |||
+ | <code bash> | ||
+ | cat <<EOT > / | ||
+ | source source_net_udp_514 { | ||
+ | udp(ip(0.0.0.0) port(514) flags(no-parse)); | ||
+ | }; | ||
+ | EOT | ||
+ | cat <<EOT > / | ||
+ | source source_net_tcp_514 { | ||
+ | tcp(ip(0.0.0.0) port(514) flags(no-parse)); | ||
+ | }; | ||
+ | EOT | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | cat <<EOT > / | ||
+ | #rewrite r_round_min_10 { | ||
+ | # set(" | ||
+ | #}; | ||
+ | |||
+ | #rewrite r_round_min_10 { | ||
+ | # subst(" | ||
+ | # set(" | ||
+ | #}; | ||
+ | |||
+ | # Округлення хвилин до 10 | ||
+ | rewrite r_round_min_10 { | ||
+ | # Використовуємо pcre для заміни останньої цифри на 0 | ||
+ | set(" | ||
+ | subst(" | ||
+ | }; | ||
+ | |||
+ | parser p_json { | ||
+ | json-parser(prefix(" | ||
+ | }; | ||
+ | |||
+ | template t_full_dnsdist { | ||
+ | template(" | ||
+ | }; | ||
+ | |||
+ | template t_custom_dnsdist { | ||
+ | template(" | ||
+ | }; | ||
+ | |||
+ | destination d_dns_csv { | ||
+ | file("/ | ||
+ | # | ||
+ | template(t_custom_dnsdist) | ||
+ | template-escape(yes) | ||
+ | create-dirs(yes) | ||
+ | flush-lines(100) | ||
+ | # | ||
+ | log-fifo-size(2048) | ||
+ | disk-buffer( | ||
+ | mem-buf-size(10000) | ||
+ | disk-buf-size(1073741824) | ||
+ | reliable(yes) | ||
+ | dir("/ | ||
+ | ) | ||
+ | # | ||
+ | flags(no-multi-line) | ||
+ | ); | ||
+ | }; | ||
+ | |||
+ | destination d_debug_all { | ||
+ | file("/ | ||
+ | template(" | ||
+ | template-escape(no) | ||
+ | create-dirs(yes) | ||
+ | flush-lines(1) | ||
+ | ); | ||
+ | }; | ||
+ | |||
+ | #log { | ||
+ | # source(source_net_udp_514); | ||
+ | # destination(d_debug_all); | ||
+ | #}; | ||
+ | |||
+ | # Фільтр для ігнорування доменів | ||
+ | filter f_ignore_domains { | ||
+ | not match(" | ||
+ | }; | ||
+ | |||
+ | log { | ||
+ | source(source_net_udp_514); | ||
+ | rewrite(r_round_min_10); | ||
+ | parser(p_json); | ||
+ | destination(d_dns_csv); | ||
+ | }; | ||
+ | EOT | ||
+ | </ | ||
+ | |||
+ | |||
+ | Налаштування продуктивності syslog-ng | ||
+ | |||
+ | * flush_lines - кількість рядків перед записом | ||
+ | * time_reopen - час перед повторним відкриттям | ||
+ | * log_fifo_size - розмір черги | ||
+ | * threaded - багатопотоковий режим | ||
+ | |||
+ | <code bash> | ||
+ | cat << EOF > / | ||
+ | options { | ||
+ | flush_lines(1000); | ||
+ | time_reopen(10); | ||
+ | log_fifo_size(10000); | ||
+ | stats_freq(0); | ||
+ | threaded(yes); | ||
+ | use_dns(no); | ||
+ | use_fqdn(no); | ||
+ | chain_hostnames(off); | ||
+ | keep_hostname(yes); | ||
+ | }; | ||
+ | EOF | ||
+ | </ | ||
+ | |||
+ | Домени, | ||
+ | |||
+ | Формат: | ||
+ | <code bash> | ||
+ | cat << EOF > / | ||
+ | google.com | ||
+ | youtube.com | ||
+ | facebook.com | ||
+ | instagram.com | ||
+ | twitter.com | ||
+ | netflix.com | ||
+ | amazon.com | ||
+ | microsoft.com | ||
+ | apple.com | ||
+ | EOF | ||
+ | </ | ||
+ | |||
+ | Перевіримо правильність конфігурацій | ||
+ | syslog-ng -s -f / | ||
+ | |||
+ | Тестовий запуск | ||
+ | syslog-ng -Fev | ||
+ | або | ||
+ | syslog-ng -R / | ||
+ | |||
+ | З іншої консолі посилаємо тестове повідомлення | ||
+ | logger -n 127.0.0.1 -P 514 -d " | ||
+ | |||
+ | Перезапуск служб | ||
+ | |||
+ | systemctl restart syslog-ng | ||
+ | |||
+ | |||
+ | FIXME | ||
+ | 361 nano / | ||
+ | 362 nano / | ||
+ | 382 nano /etc/fstab | ||
+ | 393 nano / | ||
+ | 394 systemd-tmpfiles --create / | ||
+ | 396 systemctl restart syslog-ng | ||
+ | FIXME | ||
+ | <code bash> | ||
+ | cat <<EOT > / | ||
+ | D / | ||
+ | D / | ||
+ | D / | ||
+ | EOT | ||
+ | </ | ||
+ | FIXME | ||