Warning: Memcache::addserver() expects parameter 2 to be long, string given in /usr/home/rpc/domains/rpc.one.pl/public_html/libraries/joomla/cache/storage/memcache.php on line 84 syslog czyli logi w openwrt
 
 
syslog czyli logi w openwrt Drukuj Email
Wpisany przez rpc   
środa, 17 lutego 2010 12:44

syslog czyli logi w openwrt


Logi to coś co przeglądamy, kiedy chcemy coś sprawdzić lub gdy mamy jakieś problemy z oprogramowaniem lub sprzętem. Domyślnie w OpenWrt zainstalowany jest syslogd oraz klogd. Dzięki tym dwóm procesom uzyskujemy dostęp do logów. To one tak naprawdę gromadzą logi, zapisują lub wysyłają do centralnego serwera logów na innym komputerze.
Logi gromadzone są nie tylko przez syslogd i klogd. W zasadzie każdy program może zapisywać logi do swoich własnych plików z pominięciem owych demonów. Jeśli jednak jakiś program ma korzystać z syslogd to przesyła odpowiednie komunikaty z odpowiednim poziomem logowania.

Budowa takiego komunikatu to: element systemu-kropka-priorytet  czyli w praktyce np. kern.warn.

Lista elementów systemu:

kern - komunikat związany z elementem systemu o nazwie Kernel (jądro systemu)
auth - uwierzytelnianie
authpriv - uwierzytelnianie uprawnień
cron - usługa crontab
daemon - demony
lpr - drukowanie
mail - poczta
news - wiadomości sieciowe
syslog - dziennik systemowy (oparty o demona syslogd)
user - użytkownik
uucp - przesyłanie danych pomiędzy systemami
local0-local7 - lokalne elementy systemu
(możemy sami sobie przypisywać do dowolnych programów te poziomy)

Lista priorytetów:

info - informacja
notice - uwaga
err - błąd
warn - ostrzeżenie
alert - alarm
emerg - pilny, awaryjny komunikat systemowy
crit - krytyczny komunikat
debug - wykrycie błędu programu

Np. kern.warn oznacza komunikat związany z elementem systemu o nazwie Kernel opatrzony priorytetem typu ostrzeżenie

Przydatne angielskie słowa: facility - element systemu, priority level - priorytet wiadomości.


W OpenWrt syslogd trzyma logi w pamięci, nie zapisuje ich w domyślnej konfiguracji. Dostęp do logów syslogd otrzymamy za pomocą:

logread


Logi utworzone przez niezależne programy lub syslogd domyślnie powinny być trzymane w katalogu /var/log/ w poszczególnych plikach.

Jest jeszcze jedna komenda, która wyświetla komunikaty dotyczące komunikatów kernela - między innymi startu systemu:

dmesg


Jeżeli piszemy jakieś skrypty i chcemy wysyłać komunikaty do syslog to możemy używać komendy logger np:

logger "To jest komunikat uzytkownika"


Opcje logowania w OpenWrt:

Nazwa Typ Domyślnie Opis
buffersize liczba całkowita zdefiniowane
w kernelu
Rozmiar bufora komunikatu kernela (dmesg -s $)
conloglevel liczba całkowita 7 Tylko wiadomości z poziomu niższego niż ten zostaną wydrukowane na konsoli (dmesg -n $).
cronloglevel liczba całkowita 5 Poziom minimalny wiadomości cron jaki ma być logowany do syslog. 0:wypisze wszystkie komunikaty diagnostyczne, 8:rejestruje wykonywane polecenia, 9 i więcej:będą logowane tylko komunikaty o błędach (crond -l $).
kconloglevel liczba całkowita 7 Identycznie jak conloglevel i ustawienie zastąpi tamten parametr (kolgd -c $).
log_file tekst /var/log/messages Zapisuje logi do wskazanego tutaj pliku (tylko jeśli log_type=file)
log_ip adres IP (brak) Adres IP centralnego serwera logów. Krótko mówiąc na jaki adres wysyłamy logi.
log_port liczba całkowita 514 Numer portu zdalnego serwera logów.
log_size liczba całkowita 16 Maksymalny rozmiar logu w kilobajtach. Łączna wielkość logów:kernel,demony,users
log_type tekst circular circular:zapisuje log w pamięci, file:zapisuje log w pliku

opcje pogrubione występują tylko w trunk.


Konfiguracja:

Wszystko możemy ustawić za pomocą UCI np.

zwiększenie rozmiaru bufora logów:

uci set system.@system[0].log_size=64
uci commit
reboot

wysyłanie logów do centralnego serwera logów:

uci set system.@system[0].log_ip=192.168.1.100
uci commit
reboot


lub możemy zdefiniować ręcznie w pliku:

vi /etc/config/system


Jeżeli ustawiliśmy zmienne log_file oraz log_type=file/etc/config/system to aby odczytywać logi trzeba robic to ręcznie np. za pomocą komend tail,cat. W tym momencie logread nie działa. Można to jednak obejść za pomocą skryptu (przerobiony skrypt od syslog-ng znaleziony na dev openwrt).

Instalacja:

wget http://rpc.one.pl/pliki/openwrt/backfire/10.03.x/syslog/logread -O /sbin/logs
chmod +x /sbin/logs

wywołując komendę

logs

mamy logi czytane z pliku zdefiniowanego w parametrze log_file.

Skrypt czyta logi również z syslog-ng. W takim przypadku należy w skrypcie ustawić zmienna LOGFILE.


Logowanie pakietów:

Instalacja

opkg update
opkg install iptables-mod-extra kmod-ipt-extra

Logowanie pakietów przykładowo możemy wykonać następująco:

iptables -I input_rule -m state --state NEW -j LOG --log-level info --log-prefix "filter:IN"
iptables -I forwarding_rule -m state --state NEW -j LOG --log-level info --log-prefix " filter:FW"

Musimy jednak zdawać sobie sprawę z tego, iż będzie to nam zaśmiecało logi pakietami.


Konfiguracja syslog-ng w Debian do odbierania logów w trzech przykładach:

Instalujemy pakiet syslog-ng:

apt-get update
apt-get install syslog-ng


W pliku /etc/syslog-ng/syslog-ng.conf musimy dopisać do sekcji options poniższe opcje (dotyczy wszystkich poniższych przykładów):


create_dirs(yes); dir_perm(0750);

dzięki tym wpisom syslog-ng będzie mógł dynamicznie tworzyć katalogi.

U mnie cały wpis wygląda następująco (u innych może być troszkę inny):

options { long_hostnames(off); flush_lines(0); use_dns(no); use_fqdn(no);
owner("root"); group("adm"); perm(0640); stats_freq(0);
bad_hostname("^gconfd$"); create_dirs(yes); dir_perm(0750);
};



Przykład 1:

Dopisujemy do /etc/syslog-ng/syslog-ng.conf poniższe wiersze:

#definiujemy, że odbieramy logi z udp, domyślnie na porcie 514
source s_udp {
udp();
};

#gdzie zapisujemy logi z 192.168.1.1
destination df_192_168_10_11 { file("/var/log/hosts/192_168_1_1.log"); };

# z jakiego adresu IP przechwytujemy logi
filter f_192_168_1_1 { netmask (192.168.1.1); };

#definiujemy warunek 192.168.1.1
log {
source(s_udp);
filter(f_192_168_1_1);
destination(df_192_168_1_1);
};


Dopisujemy do /etc/logrotate.d/syslog-ng:

/var/log/hosts/192_168_1_1.log {
rotate 10
missingok
notifempty
daily
compress
}


Firewall - otwieramy port 514 udp dla naszego opewrt:

iptables -I INPUT -p udp --src 192.168.1.1 --dport 514 -j ACCEPT


Przykład 2:

Dopisujemy do /etc/syslog-ng/syslog-ng.conf poniższe wiersze:

#definiujemy, że odbieramy logi z udp, domyślnie na porcie 514
source s_udp {
udp();
};

#gdzie zapisujemy logi z wysyłanych hostów
destination df_hosts { file("/var/log/hosts/$HOST.log"); };

#definiujemy warunek
log {
source(s_udp);
destination(df_hosts);
};


Dopisujemy do /etc/logrotate.d/syslog-ng:

/var/log/hosts/*.log {
rotate 10
missingok
notifempty
daily
compress
}


Firewall - otwieramy port 514 udp dla naszego opewrt:

iptables -I INPUT -p udp --src 192.168.1.1 --dport 514 -j ACCEPT


Przykład 3:

Dopisujemy do /etc/syslog-ng/syslog-ng.conf poniższe wiersze:

#definiujemy, że odbieramy logi z udp, domyślnie na porcie 514
source s_udp {
udp();
};

#gdzie zapisujemy logi z wysyłanych hostów
destination df_hosts { file("/var/log/hosts/$YEAR/$MONTH/$DAY/
$HOST.log"); };
destination df_hosts_iptables_in { file("/var/log/hosts/$YEAR/$MONTH/$DAY/$HOST_ipt_in.log"); };
destination df_hosts_iptables_fw { file("/var/log/hosts/$YEAR/$MONTH/$DAY/$HOST_ipt_fw.log"); };

# filtr - przechwytujemy logi
filter f_hosts_iptables_in {
match("(filter:IN)"); };
filter f_hosts_iptables_fw { match("(filter:FW)"); };
filter f_hosts_not_iptables_in { not match("(filter:IN)"); };
filter f_hosts_not_iptables_fw { not match("(filter:FW)"); };

#definiujemy warunek dla nieoznaczonych logów
log {
source(s_udp);
destination(df_hosts);
filter(
f_hosts_not_iptables_in);
filter(f_hosts_not_iptables_fw);
};

#definiujemy warunek dla logów z połączeń przychodzących INPUT
log {
source(s_udp);
destination(df_hosts_iptables_in);
filter(
f_hosts_iptables_in);
};

#definiujemy warunek dla logów z przekazywanych połączeń FORWARD
log {
source(s_udp);
destination(df_hosts_iptables_fw);
filter(
f_hosts_iptables_fw);
};


Dopisujemy do /etc/logrotate.d/syslog-ng:

/var/log/hosts/*/*/*/*.log {
rotate 10
missingok
notifempty
daily
compress
}


Logi są zapisywane w /var/log/hosts/ , dla każdego logu jest tworzony katalog, np dla 10 styczeń 2010 będzie to wyglądało tak :

/var/log/hosts/2010/01/10/192.168.1.1.log
/var/log/hosts/2010/01/10/192.168.1.1_ipt_in.log
/var/log/hosts/2010/01/10/192.168.1.1_ipt_fw.log

Jak widać tworzone są oddzielne logi dla przekazywanych pakietów. Główny log zawiera wszystko oprócz logów z iptables.


Firewall - otwieramy port 514 udp dla naszego opewrt:

iptables -I INPUT -p udp --src 192.168.1.1 --dport 514 -j ACCEPT



Podziel się tą informacja z innymi:
Poprawiony: poniedziałek, 11 marca 2013 08:30