sobota, 1 czerwca 2013

Debugowanie serwera NFS


    Czy pamiętacie pierwsze wersje NFS-a? Miały sporo błędów, z których najgorszy był taki który w losowym momencie potrafił zawiesić jądro. Wyrobiło to złą opinie o NFS, ale na szczęście te czasy odeszły już do lamusa.

    Inny problem przy współdzielonym systemie plików (pomiędzy wiele maszyn) jest taki, że serwer NFS loguje bardzo mało informacji. Nie dowiemy się z niego która maszyna jakie operacje wykonywała.

Poziom logowania zwiększamy np takimi poleceniami:

# echo $(( 0x10 | 0x0400 )) > /proc/sys/sunrpc/nfsd_debug
# echo $(( 0x0008 | 0x0100 )) > /proc/sys/sunrpc/rpc_debug

Wyłączamy:

# echo 0 > /proc/sys/sunrpc/nfsd_debug
# echo 0 > /proc/sys/sunrpc/rpc_debug

Po włączeniu logowania jądro zapisuje komplet informacji (zazwyczaj do /var/log/messages), czyli wszystkie wywołania systemowe (wykonywane poprzez RPC) oraz adresy ip klientów.

Przy takim poziomie logowania, log może oczywiście bardzo szybko przyrastać obciążając dodatkowo maszynę pod względem operacji I/O ;)

niedziela, 26 maja 2013

MikroTik Network Sniffing

    Snifowaliście kiedyś połączenia w sieci gdzie role bramki pełni MikroTik? Mi się ostatnio zdarzyło, więc kilka informacji ku pamięci ;]

Sposobów jest kilka, jednak najlepszy i najbardziej godny polecenia jest tylko jeden. W skrócie, chodzi o to, że ruter wysyła pod wskazany adres ip (port 37008) wybrane pakiety, osadzając je w protokole TZSP (TaZmen Sniffer Protocol). Konfiguracja na MikroTik-u wygląda tak:

> tool sniffer set streaming-server=10.1.1.5 streaming-enabled=yes filter-address1=8.8.8.8/32:21-22 filter-address2=10.0.0.0/8:0-65535 interface=all
> tool sniffer start

Czyli chcemy by podsłuchane pakiety były wysyłane do hosta 10.1.1.5 i dodatkowo, interesuje nas ruch wychodzący z podsieci 10.0.0.0/8 do hosta 8.8.8.8 na porty od 21 do 22.

Drobny problem polega na tym, że tcpdump nie obsługuje protokołu TZSP a nie zawsze mamy możliwość odpalenia np Wireshark-a (czyli czegoś okienkowego) w danej podsieci (np. jesteśmy podłączeni via vpn i nie ma możliwości nawiązania do naszej maszyny bezpośrednio połączenia). Mimo wszytko możemy użyć tutaj tcpdump-a by zapisać złapane pakiety do pliku, np:

# tcpdump -i eth0 -U -w /root/packet-dump.pcap 'udp and port 37008'

Następnie kopiujemy plik i otwieramy go w Wireshark-u, który bez problemu czyta protokół TZSP.

środa, 25 lipca 2012

Apache Basic Auth jakiego nie znacie!


    Basic Auth w protokole HTTP jest to najprostszy i zapewne najszerzej wykorzystywany rodzaj autoryzacji. O bezpieczeństwie tego typu autoryzacji możemy mówić dopiero wtedy gdy używamy szyfrowanego https, ale dla nas nie ma to w tym momencie zanczenia :) Basic Auth konfigurujemy w apache bardzo łatwo np:

niedziela, 15 lipca 2012

Bind, sed, hosty i dopełnianie

W ostatnim poście pisałem jak usprawnić dopełnianie nazw hostów w dużym środowisku. Polecałem wtedy polecenie "rndc dumpdb -zones". Jak się jednak okazuje, potrafi ono często zwrócić segmentation fault. Chcąc nie chcąc w takim przypadku trzeba użyć jakiegoś toola który przeleci konfiguracje bind-a. Dla mnie, najprostszym rozwiązaniem było użycie polecania sed:

$ cat bind2hostname.sh
#!/bin/bash

sed -n '
{
:loop
s/\$ORIGIN[ \t]\+\(.*\)\./\1/
T nextcheck
h
n

:nextcheck
s/^\([[:alnum:].-]\+\).*IN.*/\1/
t hostname
n
b loop

:hostname
G
s/\n/./
p
d
n
b loop
}'

Działanie skryptu jest bardzo proste. Wyszukuje wartości dla parametru ORIGIN i dokleja je do znalezionych nazw hostów. Teraz wystarczy dodać do crona polecenie podobne do tego poniżej

$ cat /etc/bind/P/+([a-z.-]) | /home/scripts/bind2hostname.sh > /etc/named_hosts.db

Można jeszcze pokusić się o dopisanie adresów ip i wrzucenie tego wszystkiego do /etc/hosts. Mi jednak tyle wystarczy, a konfiguracja binda nie zawsze jest łatwa do parsowania :)