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.
niedziela, 26 maja 2013
ś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 :)
$ 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 :)
niedziela, 18 marca 2012
DNS i dopełnianie nazw hostów
Od dosyć dawna Bash posiada wsparcie dla dopełniania nazw plików, jednak nie wszyscy zdają sobie sprawę, że dopełniać klawiszem TAB możemy praktycznie wszystko. Jest to mechanizm wysoce konfigurowalny i wiele dystrybucji posiada skrypt /etc/bash_completion który definiuje specjalne dopełnianie dla wielu popularnych poleceń - np dopełnianie opcji. Krótkie wprowadzenie można znaleźć tutaj - część pierwsza i druga.
W codziennej pracy administratora na pewno bardzo przydatną opcją jest dopełnianie nazw hostów. Doszukamy się nawet gotowego rozszerzenia dla ssh, scp i innych poleceń - zwykle wystarczy zainstalować tylko pakiet bash-completion. Rozszerzenie to potrafi nawet dopełniać w poleceniu scp nazwy plików i katalogów na zdalnym hoscie!
Cały mechanizm jest świetny, ale jak zapewne się już domyślacie jest jedna rzecz którą chce poprawić :) Dopełnianie nazw hostów bazuje na urządzeniach/komputerach do których już się zalogowaliśmy (poprzez ssh), lub takich które mamy zapisane w plikach hosts (np. /etc/hosts). Takie rozwiązanie nie sprawdza się w dużym środowisku, gdzie bardzo często logujemy się do hostów na których wcześniej nie byliśmy, dodatkowo dokładanych jest cały czas sporo maszyn a inne są usuwane.
Można ten problem rozwiązać instalując avahi... ale jest to trochę jak strzelanie z armaty do muchy, a dodatkowo musielibyśmy wprowadzić ten pakiet na większość maszyn.
Dla mnie idealnym rozwiązaniem jest dopełnianie nazw hostów bezpośrednio z serwera dns... jak? Po pierwsze musimy jakoś te nazwy wydobyć. Z pomocą przychodzi nam tutaj polecenie rndc dumpdb -zones które potrafi wylistować wszystkie strefy i zapisać je w pliku named_dump.db. Jest to plik tekstowy, który nadaje się idealnie do dalszej obróbki. Wykonujemy zatem polecenia dzięki którym wygenerujemy listę wszystkich hostów i stref zdefiniowanych w naszym lokalnym serwerze DNS:
# ssh root@zlomex.local "rndc dumpdb -zones; cat /var/cache/bind/named_dump.db" > named_dump.db
# sed -ne '/in-addr.arpa/d; s/^\([[:alnum:].-]\+\)\..*IN.*/\1/p' named_dump.db | sort | uniq > named_hosts.db
# rm named_dump.db
Mój serwer DNS to oczywiście zlomex.local :) Polecenia te najlepiej ustawić jako cyklicznie wykonywane zdanie cron, zwłaszcza jeżeli używamy do autentykacji kluczy ssh - nie musimy wtedy podawać hasła. Plik named_hosts.db zawiera teraz listę hostów:
local
localhost
test.local
wpad.local
zlomex.local
Następnie modyfikujemy standardowy skrypt dopełniający nazwy hostów, tak by uwzględnił zawartość pliku named_hosts.db. Edytujemy zatem /etc/bash_completion i szukamy funkcji _known_hosts_real() używanej do dopełniania nazw hostów. Przy końcu tej funkcji, ale przed wywołaniem __ltrim_colon_completions, dokładamy kilka linijek przeszukujących dodatkowo nasz plik named_hosts.db. Końcówka funkcji powinna zatem wyglądać podobnie jak poniżej:
named_hosts=$( grep "$cur" /etc/named_hosts.db )
if [ -n "$named_hosts" ]; then
COMPREPLY=( "${COMPREPLY[@]}" $named_hosts )
fi
__ltrim_colon_completions "$prefix$user$cur"
return 0
}
ps: Jeżeli nie mamy dostępu poprzez ssh do maszyny, możemy spróbować jeszcze polecenia listującego całą strefe, np dig @zlomex.local local axfr.
ps2: W ostateczności można również przelecieć poleceniem sed pliki konfiguracyjne binda ;)
W codziennej pracy administratora na pewno bardzo przydatną opcją jest dopełnianie nazw hostów. Doszukamy się nawet gotowego rozszerzenia dla ssh, scp i innych poleceń - zwykle wystarczy zainstalować tylko pakiet bash-completion. Rozszerzenie to potrafi nawet dopełniać w poleceniu scp nazwy plików i katalogów na zdalnym hoscie!
Cały mechanizm jest świetny, ale jak zapewne się już domyślacie jest jedna rzecz którą chce poprawić :) Dopełnianie nazw hostów bazuje na urządzeniach/komputerach do których już się zalogowaliśmy (poprzez ssh), lub takich które mamy zapisane w plikach hosts (np. /etc/hosts). Takie rozwiązanie nie sprawdza się w dużym środowisku, gdzie bardzo często logujemy się do hostów na których wcześniej nie byliśmy, dodatkowo dokładanych jest cały czas sporo maszyn a inne są usuwane.
Można ten problem rozwiązać instalując avahi... ale jest to trochę jak strzelanie z armaty do muchy, a dodatkowo musielibyśmy wprowadzić ten pakiet na większość maszyn.
Dla mnie idealnym rozwiązaniem jest dopełnianie nazw hostów bezpośrednio z serwera dns... jak? Po pierwsze musimy jakoś te nazwy wydobyć. Z pomocą przychodzi nam tutaj polecenie rndc dumpdb -zones które potrafi wylistować wszystkie strefy i zapisać je w pliku named_dump.db. Jest to plik tekstowy, który nadaje się idealnie do dalszej obróbki. Wykonujemy zatem polecenia dzięki którym wygenerujemy listę wszystkich hostów i stref zdefiniowanych w naszym lokalnym serwerze DNS:
# ssh root@zlomex.local "rndc dumpdb -zones; cat /var/cache/bind/named_dump.db" > named_dump.db
# sed -ne '/in-addr.arpa/d; s/^\([[:alnum:].-]\+\)\..*IN.*/\1/p' named_dump.db | sort | uniq > named_hosts.db
# rm named_dump.db
Mój serwer DNS to oczywiście zlomex.local :) Polecenia te najlepiej ustawić jako cyklicznie wykonywane zdanie cron, zwłaszcza jeżeli używamy do autentykacji kluczy ssh - nie musimy wtedy podawać hasła. Plik named_hosts.db zawiera teraz listę hostów:
local
localhost
test.local
wpad.local
zlomex.local
Następnie modyfikujemy standardowy skrypt dopełniający nazwy hostów, tak by uwzględnił zawartość pliku named_hosts.db. Edytujemy zatem /etc/bash_completion i szukamy funkcji _known_hosts_real() używanej do dopełniania nazw hostów. Przy końcu tej funkcji, ale przed wywołaniem __ltrim_colon_completions, dokładamy kilka linijek przeszukujących dodatkowo nasz plik named_hosts.db. Końcówka funkcji powinna zatem wyglądać podobnie jak poniżej:
named_hosts=$( grep "$cur" /etc/named_hosts.db )
if [ -n "$named_hosts" ]; then
COMPREPLY=( "${COMPREPLY[@]}" $named_hosts )
fi
__ltrim_colon_completions "$prefix$user$cur"
return 0
}
ps: Jeżeli nie mamy dostępu poprzez ssh do maszyny, możemy spróbować jeszcze polecenia listującego całą strefe, np dig @zlomex.local local axfr.
ps2: W ostateczności można również przelecieć poleceniem sed pliki konfiguracyjne binda ;)
Subskrybuj:
Posty (Atom)
-
Poniżej kilka mniej lub bardziej przydatnych informacji odnośnie konfiguracji Armbian 22 (bullseye) na OrangePI Zero. Instalacja sama w...
-
Każdy administrator Linuxa, prędzej czy później zobaczy w logach błąd mówiący o tym, że system Linuks wyczerpał całą dostępną pamięć. Nie...
-
Rok 2020, z pewnością zapisze się w historii. Już teraz można go podsumować nie tylko jako rok pandemii, ale przede wszystkim rok który najp...