|
logowanie ruchu / połączeń - Mikrotik + syslog-ng - pakowanie co godzinę
20-08-2020 22:30:11 04-05-2022 20:10:00 Odwiedziny: 3607
System Mikrotik RouterOS: v6, 7
System operacyjny, na którym zostanie uruchomiony syslog-ng: Debian 10, 11
Wersja syslog-ng: v3
Miejsce przechowywania logów: /var/log (dowolne)
Gromadzone logi: TCP [syn i fin]
Kompresja logów: tak
Grupowanie logów: tak, co godzinę
Usuwanie starszych logów niż 365 dni: tak
Adres IP serwera logów: 1.1.1.1
Port serwera logów: 514
Adres IP Mikrotika: 2.2.2.2
Zaczynamy od instalacji syslog-ng (zastępuje domyślny rsyslog):
Do pliku /etc/syslog-ng/syslog-ng.conf dodajemy:
source s_net { udp(port(514)); };
destination d_mikrotik { file("/var/log/logs_${YEAR}-${MONTH}-${DAY}-${HOUR}.log"); };
filter f_mikrotik { host("2.2.2.2"); };
log { source(s_net); filter(f_mikrotik); destination(d_mikrotik); };
Dodatkowo dodaj do każdego filtra (tak, aby połacznia nie lądowały także np. w /var/log/syslog):
Finalnie config dla syslog-ng v3.19 ma wyglądać tak:
@version: 3.19
@include "scl.conf"
# Syslog-ng configuration file, compatible with default Debian syslogd
# installation.
# First, set some global options.
options { chain_hostnames(off); flush_lines(0); use_dns(no); use_fqdn(no);
dns_cache(no); owner("root"); group("adm"); perm(0640);
stats_freq(0); bad_hostname("^gconfd$");
};
########################
# Sources
########################
# This is the default behavior of sysklogd package
# Logs may come from unix stream, but not from another machine.
#
source s_src {
system();
internal();
};
# If you wish to get logs from remote machine you should uncomment
# this and comment the above source line.
#
#source s_net { tcp(ip(127.0.0.1) port(1000)); };
## add by kazuko.pl
source s_net { udp(port(514)); };
########################
# Destinations
########################
# First some standard logfile
#
destination d_auth { file("/var/log/auth.log"); };
destination d_cron { file("/var/log/cron.log"); };
destination d_daemon { file("/var/log/daemon.log"); };
destination d_kern { file("/var/log/kern.log"); };
destination d_lpr { file("/var/log/lpr.log"); };
destination d_mail { file("/var/log/mail.log"); };
destination d_syslog { file("/var/log/syslog"); };
destination d_user { file("/var/log/user.log"); };
destination d_uucp { file("/var/log/uucp.log"); };
# This files are the log come from the mail subsystem.
#
destination d_mailinfo { file("/var/log/mail.info"); };
destination d_mailwarn { file("/var/log/mail.warn"); };
destination d_mailerr { file("/var/log/mail.err"); };
# Logging for INN news system
#
destination d_newscrit { file("/var/log/news/news.crit"); };
destination d_newserr { file("/var/log/news/news.err"); };
destination d_newsnotice { file("/var/log/news/news.notice"); };
# Some 'catch-all' logfiles.
#
destination d_debug { file("/var/log/debug"); };
destination d_error { file("/var/log/error"); };
destination d_messages { file("/var/log/messages"); };
# The root's console.
#
destination d_console { usertty("root"); };
# Virtual console.
#
destination d_console_all { file(`tty10`); };
# The named pipe /dev/xconsole is for the nsole' utility. To use it,
# you must invoke nsole' with the -file' option:
#
# $ xconsole -file /dev/xconsole [...]
#
destination d_xconsole { pipe("/dev/xconsole"); };
# Send the messages to an other host
#
#destination d_net { tcp("127.0.0.1" port(1000) log_fifo_size(1000)); };
# Debian only
destination d_ppp { file("/var/log/ppp.log"); };
## add by kazuko.pl
destination d_mikrotik { file("/var/log/logs_${YEAR}-${MONTH}-${DAY}-${HOUR}.log"); };
########################
# Filters
########################
# Here's come the filter options. With this rules, we can set which
# message go where.
filter f_dbg { level(debug) and not source(s_net); };
filter f_info { level(info) and not source(s_net); };
filter f_notice { level(notice) and not source(s_net); };
filter f_warn { level(warn) and not source(s_net); };
filter f_err { level(err) and not source(s_net); };
filter f_crit { level(crit .. emerg) and not source(s_net); };
filter f_debug { level(debug) and not facility(auth, authpriv, news, mail) and not source(s_net); };
filter f_error { level(err .. emerg) and not source(s_net); };
filter f_messages { level(info,notice,warn) and not facility(auth,authpriv,cron,daemon,mail,news) and not source(s_net); };
filter f_auth { facility(auth, authpriv) and not filter(f_debug) and not source(s_net); };
filter f_cron { facility(cron) and not filter(f_debug) and not source(s_net); };
filter f_daemon { facility(daemon) and not filter(f_debug) and not source(s_net); };
filter f_kern { facility(kern) and not filter(f_debug) and not source(s_net); };
filter f_lpr { facility(lpr) and not filter(f_debug) and not source(s_net); };
filter f_local { facility(local0, local1, local3, local4, local5, local6, local7) and not filter(f_debug) and not source(s_net); };
filter f_mail { facility(mail) and not filter(f_debug) and not source(s_net); };
filter f_news { facility(news) and not filter(f_debug) and not source(s_net); };
filter f_syslog3 { not facility(auth, authpriv, mail) and not filter(f_debug) and not source(s_net); };
filter f_user { facility(user) and not filter(f_debug) and not source(s_net); };
filter f_uucp { facility(uucp) and not filter(f_debug) and not source(s_net); };
filter f_cnews { level(notice, err, crit) and facility(news) and not source(s_net); };
filter f_cother { level(debug, info, notice, warn) or facility(daemon, mail) and not source(s_net); };
filter f_ppp { facility(local2) and not filter(f_debug) and not source(s_net); };
filter f_console { level(warn .. emerg) and not source(s_net); };
## add by kazuko.pl
filter f_mikrotik { host("2.2.2.2"); };
########################
# Log paths
########################
log { source(s_src); filter(f_auth); destination(d_auth); };
log { source(s_src); filter(f_cron); destination(d_cron); };
log { source(s_src); filter(f_daemon); destination(d_daemon); };
log { source(s_src); filter(f_kern); destination(d_kern); };
log { source(s_src); filter(f_lpr); destination(d_lpr); };
log { source(s_src); filter(f_syslog3); destination(d_syslog); };
log { source(s_src); filter(f_user); destination(d_user); };
log { source(s_src); filter(f_uucp); destination(d_uucp); };
log { source(s_src); filter(f_mail); destination(d_mail); };
#log { source(s_src); filter(f_mail); filter(f_info); destination(d_mailinfo); };
#log { source(s_src); filter(f_mail); filter(f_warn); destination(d_mailwarn); };
#log { source(s_src); filter(f_mail); filter(f_err); destination(d_mailerr); };
log { source(s_src); filter(f_news); filter(f_crit); destination(d_newscrit); };
log { source(s_src); filter(f_news); filter(f_err); destination(d_newserr); };
log { source(s_src); filter(f_news); filter(f_notice); destination(d_newsnotice); };
#log { source(s_src); filter(f_cnews); destination(d_console_all); };
#log { source(s_src); filter(f_cother); destination(d_console_all); };
#log { source(s_src); filter(f_ppp); destination(d_ppp); };
log { source(s_src); filter(f_debug); destination(d_debug); };
log { source(s_src); filter(f_error); destination(d_error); };
log { source(s_src); filter(f_messages); destination(d_messages); };
log { source(s_src); filter(f_console); destination(d_console_all); destination(d_xconsole); };
log { source(s_src); filter(f_crit); destination(d_console); };
# All messages send to a remote site
#
#log { source(s_src); destination(d_net); };
## add by kazuko.pl
log { source(s_net); filter(f_mikrotik); destination(d_mikrotik); };
###
# Include all config files in /etc/syslog-ng/conf.d/
###
@include "/etc/syslog-ng/conf.d/*.conf"
Wykonujemy restart syslog-ng:
/etc/init.d/syslog-ng restart
Dobrze też jest zezwolić na wysłanie logów na serwer tylko wybranemu Mikrotikowi:
Dlatego też w firewallu dodajemy:
Jeśli polityka w łańcuchu INPUT jest ustawione na DROP (Chain INPUT (policy DROP)):
iptables -A INPUT -p udp -s 2.2.2.2 -j ACCEPT --dport 514
Jeśli polityka w łańcuchu INPUT jest ustawione na ACCEPT (Chain INPUT (policy ACCEPT)):
iptables -A INPUT -p udp ! -s 2.2.2.2 -j DROP --dport 514
Ważne jest także kompresja tych logów, dzięki temu zyskamy więcej wolnego miejsca na dysku.
Dodatkowo każdego dnia są usuwane starsze logi niż 365 dni.
Tworzymy plik /etc/cron.d/logs oraz dodajemy:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
1 5 5 * * root find /var/log/logs_*.gz -type f -mtime +365 -exec rm {} \;
0 * * * * root if [ -f /var/log/logs_`date -d "1 hour ago" "+\%Y-\%m-\%d-\%H"`.log ]; then gzip -9 /var/log/logs_`date -d "1 hour ago" "+\%Y-\%m-\%d-\%H"`.log; fi
Przechodzimy teraz do Mikrotika, wklejamy w terminalu:
Spowoduje to zbieranie oraz przekazywanie logów na serwer:
/system logging action
add name=logs remote=1.1.1.1 target=remote
/system logging
add action=logs topics=firewall
/ip firewall filter
add action=log chain=forward disabled=no protocol=tcp tcp-flags=syn
add action=log chain=forward disabled=no protocol=tcp tcp-flags=fin
|
|
|