2011
06.06

(część 1sza)

Filtrowanie, ciąg dalszy.

Problem: Chcę żeby router ADSL restartował mi się o 4 w nocy (Neostrada rozłącza co 24h i jak akurat router wstał o 18.00 to następny disconnect będzie o tej samej porze) automatycznie.

Rozwiązanie: Router nie ma shella ani innej metody zdalnego rebootu więc muszę zesniffować jaki request powoduje reboot.

sniffing załatwia proste tcpdump -w dump -s 0 -i eth0 -n port 80 and host 10.254.254.1 i w rezultacie dostajemy dumpa z samymi requestami

Teraz chcemy z requestów wyciągnąć listę zapytań, z klikania przeglądarki wiemy że ma w sobie ciąg html:
http.request.uri contains "html"

Jeżeli nie jesteśmy pewni czego szukać to http.request da listę requestów, którą można potem wycinać przez eliminację np.
http.request and ! (http.request.uri contains ".gif" or http.request.uri contains ".css" or http.request.uri contains ".js" )
Rezultat powinien wyglądać mniej-więcej tak:

(more…)

2011
05.11

Wireshark jest jednym z najlepszych narzędzi do dyspozycji admina, nie jest tylko “graficznym tcpdumpem” jak niektórzy sądzą. Zamierzam opisać parę przydatnych zastosowań tego narzędzia w debugowaniu (nie)typowych problemów

Nie będzie to tutorial typu “jak kliknąć button ‘start capture'” albo “jak zrobić apt-get install” (w sumie jeżeli komuś potrzebne coś takiego powinien się poważnie zastanowić nad zmianą zawodu na np. zbieracz truskawek) tylko raczej “jak zdalnie nagrać rozmowy SIP” albo “jak zanalizować latencję łącza”.

Podstawy: Filtrowanie danych

Debugowanie czegokolwiek jest łatwiejsze gdy poziom “szumu” (części analizowanych danych która nas nie interesuje bo wiemy że jest dobra lub tyczy się innego fragmentu systemu) jest jak najniższy, dlatego zwykle robienie dumpu przez tcpdump -i any -s 0 -w dump na ruchliwym serwerze podczas gdy nas obchodzi parę requestów HTTP dobrym pomysłem nie jest ;]. Więcej info nt. filtrów tcpdumpa w manie ale podstawy:

  • not port 22
  • port 80 or port 8080 – np. gdy mamy proxy/lb które słucha na 80 i wysyła req. do backendu na
  • host 1.2.3.4

warto znać. Ofc. lepiej przechwycić za dużo niż za mało ;]

Podobne filtrowanie można zastosować potem w wiresharku, ale składnia jest inna. Oraz trzeba uważać na parę rzeczy np. ip.addr != 192.168.1.1 zadziała trochę inaczej niż podpowiada common sense. Naprawdę warto poznać te filtry (po kliknięciu w expression pokazuje się ładna lista po czym z każdego protokołu można filtrować) bo wtedy zamiast żmudnie przeglądać pakiety wystarczy wpisać np.

http.request.uri contains "admin" and http.request.method == POST and http.host == devrandom.pl

i od razu mamy to co potrzebujemy;]

Żeby nie było nudno (za dużo teorii jest nużące ;]) zróbmy mały eksperyment. Najpierw dump. Można odpalić lokalnie ale jeżeli masz własny serwer (ja zainstalowałem tcpdumpa na routerku z Tomato ;) ) pokażę jak robić zdalny live capture używając wireshark + ssh + tcpdump ;].

ssh root@192.168.1.1 /jffs/tcpdump -i vlan0 -s 0 -U -n -w - not port |tee /tmp/dump | wireshark -k -i -

czyli “ssh gdzieśtam, odpal tcpdump (ścieżka niekonieczna gdy to “normalny” serwer), ignoruj ruch na porcie 22 (WAŻNE inaczej będziemy nagrywać “sami siebie”), kopiuj dump do /tmp/dump, nakarm stdin wiresharka”

(more…)

2011
04.24

Podczas świątecznej nudy zdecydowałem wreszcie dodać IPv6 do mojego VPSa, + do geek karma i w końcu World IPv6 day się zbliża ;]. Żeby strona widoczna była przez IPv6 w sumie wiele nie trzeba,”wystarczy” adres i odpowiedni wpis do DNS.

Niestety niewiele hostingów (w tym mój VPS na linode.com) obsługuje natywnie IPv6 więc żeby mieć IPv6 trzeba sie gdzieś tunelować. Na szczęście sam serwer DNS w linode obsługiwał wpisy AAAA (mimo że same serwery ipv4 only) więc tu nie miałem problemu.

(more…)

2011
04.05

Przy stawianiu nowego media/torrentboxa postanowiłem poeksperymentować i postawić większość systemu na btrfs (oprócz storagu dla torrentów bo COW ssie do tego i backupu z wiadomych przyczyn). Po jakimś czasie zauważyłem że z jakiegoś powodu collectd przy restarcie koszmarnie zamula serwer (load avg up, system mało responsywny itd.), pogrzebałem trochę w systemie i doszedłem do wniosku że to filesystem zamontowany na /var i procesy btrfsa. Chciałem porównać to do poprzedniego systemu (tam wszystko na reiserfs) więc po kawie myślenia rozpocząłem prosty test

(more…)

2011
03.04

Autor tego kawałka softu zrobił coś na co… w sumie ludzie piszący screena wpadli dawno temu ale nikt jakoś nie pomyślał wcześniej żeby przenieść to do emulatora terminali, mianowicie opcję dzielenia ekranu na “kafelki”,każdy działający jako term. Nie muszę już otwierać i resizowac paru termów żeby pooglądać sobie logi na paru serwerach na raz, wszystko w jednym oknie ;]. Ma też “zwykłe” taby + standardowy zestaw ustawień jak w reszcie term-emulatorów.

Ale kafelki to tylko czubek góry lodowej, w opcjach można znaleźć edytor layoutu, czyli układ tabów i kafelków jaki można załadować przy starcie terminala, łącznie z komendami jakie mają się wykonać w danym “subterminalu” czyli gdy np. często oglądamy określone logi można sobie zrobić do nich profil odpalający taila na określonych plikach automatycznie i ładować go na starcie. Albo chociażby odpalać pusty tab + tab z klientem poczty jak ktoś lubi:).

Parę przydatnych skrótów: (reszta w manie i/lub ustawieniach)

 

  • C-S-e – podziel okno pionowo
  • C-S-o – podziel okno poziomo
  • C-S-f – wyszukaj tekst w bieżącym buforze terminala
  • C-S-x – maksymalizacja aktualnego terminala (niestety nie ma sygnalizacji czy okno jest zmaksymalizowane)
  • C-tab, M-<up/down/left/right> – skakanie między termami

Polecam też zbindowanie tabów do alt + 0..9, wygodne ;]. Z innych ficzerów, po dodaniu okien do tej samej “grupy” tekst pisany w jednym pojawi się na wszystkich, taki “poor man’s distributed shell”.

Według mnie jest to “must have” dla użytkowników dużych i/lub paru monitorów, niesamowicie ułatwia życie. Na marginesie można znaleźć addony do FF (Fox  Splitter, Tile Tabs) robiące podobne rzeczy. Enjoy ;]

 

2011
02.12

sudo dd if=debian-6.0.0-amd64-netinst.iso of=/dev/sdc bs=1M

I tyle. Debian jest awsom ;]

2011
01.22

Parę dni temu wreszcie ( 6 tygodni!) Amazon dostarczył mi Kindle (WiFi only).  Samo urządzenie jest świetne, dobry kontrast sensowne UI, najlepszy czytnik ebooków na rynku itp. itd. jak to w każdej chyba recenzji mówią. Ale o jednej rzeczy rzadko kto wspomina, mianowicie po zakupie normalny rozkład dnia zmienia się z:

if (things_to_do()) {
    do_things();
}
else {
    do_fun_things();
}

na

if (things_to_do()) {
    read_books();
}
else {
    read_books();
}

Czytanie książek jest bardzo wygodne, sposób w jaki się je czyta jest też trochę (przynajmniej dla mnie) inny od czytania książek papierowych.

(more…)

2011
01.14

Gdy używamy haproxy (czy jakiegokolwiek innego proxy) pojawia się mały problem, mianowicie backend widzi wszystkie połączenia jako pochodzące z IP maszyny. Jest to problemem przy logowaniu oraz dla niektórych aplikacji. Większość serwerów WWW ma moduł który pozwala na “odzyskanie” IPka z nagłówka “X-Forwarded-For”. Oczywiście Twoje proxy musi umieć przekazywać taki nagłówek ale większość robi to domyślnie albo potrafi po włączeniu odpowiednich opcji (np. haproxy: option forwardfor except 127.0.0.1)

(more…)

2010
12.26

po trochę dłuższej niż przewidziana przerwie, część druga tego arta.

Kontrola wersji

Jeżeli coś jest tekstem i będziesz to zmieniać – trzymaj to w Gicie. Czy to configi, czy własne skrypty, trzymanie tego w repo ma same zalety. Oszczędzasz czas gdy usuniesz coś w skrypcie przez przypadek, albo gdy 2 tygodnie po zmianach w skrypcie okazało się że jednak nie działa poprawnie i trzeba cofnąć się do poprzedniej wersji.

Tak samo z configami, toole takie jak etckeeper (jest w Debian squeeze, w lenny troche przestarzała wersja)  automatyzują commitowanie zmian (conocne + przy upgrade pakietu), chociaż warto zrobić commit “ręcznie” z odpowiednim komentarzem, zwłaszcza gdy nie jesteśmy sami. Łatwo można się cofnąć po popsuciu, mamy dokłądny obraz jak konfiguracja zmieniała się z czasem, łącznie ze zmianami w /etc podczas aktualizacji paczek. Można też robić backup konfiguracji przez git push do zdalnego repo, lub kopię na innej maszynie przez git clone.

(more…)

2010
12.24
apt-listbugs list `dpkg --get-selections |grep install |perl -ne 'split;print "$_[0] "'`

(aptitude install apt-listbugs przed tym)

Wyświetla:

  • Bugi w aktualnej wersji paczki
  • To czy wszystkie bugi z danej paczki zostały naprawione
  • Która wersja paczki naprawia którego buga
  • Podsumowanie z listą paczek i ilością bugów w każdej

Oczywiście, niektóre nadają się pod ignore (np. “#603048 – rails: Gives dangerous advice regarding log permissions” nie jest jakoś szczególnie strasznym zagrożeniem dla bezpieczeństwa :>) ale ogólnie bardzo użyteczne :)