RSS Feed

Marzec, 2011

  1. Apache i hotlinking obrazków

    Marzec 31, 2011 by 0verlord

    Jakiś człowiek znalazł w google images obrazek stąd, i go sobie zahotlinkował do stopki w profilu. Oczywiście to bez sensu, więc oczywiście go wyciąłem, dodając do .htaccessa takie regułki, oczywiście.

    RewriteEngine on
    RewriteCond "%{HTTP_REFERER}" !=""
    RewriteCond "%{HTTP_REFERER}" "!^http://rst.evilpackets.org/.*$" [NC]
    RewriteRule "\.(jpg|png|jpeg)$" - [F]

    Jak by ktoś kiedyś szukał, zestaw gotowy. Oczywiście należy mieć zainstalowany i włączony mod_rewrite.


  2. Przerywnik

    Marzec 29, 2011 by 0verlord

    kill -9 IRL.


    Stąd.


  3. debian squeeze i sprawa dhcp po upgrade z lenny’ego

    Marzec 26, 2011 by 0verlord

    Walczyłem ze śmiesznym problemem. Po aktualizacji ze Lenny’ego do Squeeze’a zmieniło się nazewnictwo i lokalizacja plików.
    Dhcpd to teraz isc-dhcp-server (tak samo service i /etc/init.d), w /etc/defaults jest isc-dhcp-server a nie dhcpd, a konfiguracja siedzi sobie w /etc/dhcp/ a nie w /etc/dhcpd3.

    Stąd ciekawe miałem w nocy zagwozdki. Edytowałem konfiga (starego) i dziwiłem się, dlaczego system go nie widzi. Zmieniałem wpisy w /etc/default/dhcpd i po restarcie dostawałem to samo. W szczycie zamoty zmieniałem /etc/default/isc-dhcp-server a konfig pluł ostro, że nie ma definicji subnetu dla dodawanego interfejsu. Oczywiście wpis dodawałem, a jakże, ale w /etc/dhcp3/dhcpd.conf.

    Podsumowując: serwis nazywa się teraz isc-dhcp-server, definicje interfejsów na których ów ma nasłuchiwać siedzą w /etc/default/isc-dhcp-server, a konfig siedzi w /etc/dhcp/dhcpd.conf.

    Amen.


  4. LMS i parser.so #2

    Marzec 25, 2011 by 0verlord

    A jednak da się w, nazwijmy to, LMS WAY (TM). Parser.so, jak donosi dokumentacja, ma kilka stałych, dla których nie potrzeba generować zapytania. Są to odpowiednio tablice CUSTOMERS, NODES i NETWORKS ze zdefiniowaną listą pól.
    Czyli zamiast
    { result = zapytanie }
    Można od razu przejść do właściwego efektu zapytania, np. zapytanie z poprzedniej notki może wyglądać tak:
    {for (r=0; r<number(NODES); r++)}\
    # {NODES[r].owner}:{NODES[r].ownerid}
    {NODES[r].mac}-{NODES[r].ip}
    {/for}\

    Tylko w wersji 1.11.11 nie wiedzieć czemu, predefiniowane zapytanie jest generowane błędnie, trzeba czekać na deweloperów, albo poprawić sobie samemu w pliku:
    modules/parser/extensions/sql.h

    i przekompilować demona. W 1.11.12 to też nie działa, ale na forum już jest zgłoszony bug, może w cvsie nafixują.

    Jeżeli ktokolwiek ma wątpliwości, dlaczego lepiej stosować rozwiązania natywne a nie swoje własne zapytania, odpowiedź nasuwa się sama – w przypadku fuckupa przy upgrade do kolejnej wersji, będzie można na forum obsobaczyć developerów 😉 A tak, przy próbie zgłoszenia buga ojebią nas, bo komu by się chciało ogarniać cudze selecty.

    A tak bardziej serio, przy usunięciu wszystkich nienatywnych rozwiązań z LMSa, przed aktualizacją trzeba tylko czytać changeloga, a nie czekać na kogoś, kto nam poprawi zamotkę w zapytaniach. Przejęcie po kimś rozwiązania natywnego jest dużo prostsze w ogarnięciu, bo chociażby można poczytać dokumentację żeby skumać jak to działa, a nie się habilitować z zawartości cudzych zakrętów w mózgu.

    Po to ludzie piszą narzędzia, żeby inni mogli a nich korzystać, a nie – psia mać – koło od nowa wymyślać. Dość jęczenia [:


  5. LMS i parser.so

    Marzec 25, 2011 by 0verlord

    Dzisiaj będzie o LMSie i jednej ciekawostce, którą trafiłem ostatnio.

    Demon LMSa (lmsd) ma taki ciekawy moduł, nazywa się parser.so. Przy odrobinie samozaparcia i przeczytania dokumentacji, da się generować z bazy różności przy wykorzystaniu czegoś, co się nazywa Tscript. Język jak język, trzeba się nauczyć.

    No i przy okazji upgrade z 1.10 do 1.11, odziedziczyłem generatory adresów mac z bazy. Wyglądały mrocznie, joiny, left joiny, inner joiny, ograniczenia do networków zaszyte w selectach, ogólnie porażka. Nie wiem, czy w 1.10 nie działały takie rzeczy jak lms-makemacs, ale jeżeli tak, to ten, kto klikał LMSa wtedy ewidentnie chciał się popisać umiejętnością składania nikomu do niczego nie potrzebnych zapytań SQLa. Cóż, można i tak.

    Chwilowo musiałem wykorzystać tamte skrypty, więc trzeba było wygenerować listę maców do skryptu odpalającego regułki filtrów.
    Ostatecznie zapytanie wyglądało tak:

    SELECT INET_NTOA(ipaddr) AS ip, mac, name FROM macs LEFT JOIN nodes ON nodeid = nodes.id

    LMSd generował pusty plik, a debug mówił, że się wydupca na linijce z zapytaniem. Usuwając ‚AS ip’ pomagał o tyle, że zapytanie nie pluło błędem, natomiast kolumna nie nazywała się IP, więc dalsza część skryptu jej nie łapała.

    Szybki debug innych LMsów pokazał, że mam podobne zapytania z klauzulami AS cośtam, tyle, że nie są one na pierwszej pozycji zaraz za selectem. No to zmieniłem zapytanie na
    SELECT mac, INET_NTOA(ipaddr) AS ip

    i wygenerowało mi przepiękny plik.
    Parser.so ty wuju ;->


  6. LMS, aktualizacja z 1.10.x do 1.11.x

    Marzec 21, 2011 by 0verlord

    Trafiła mnie ostatnio przyziemność zaktualizowania LMSa z 1.10.4, do najnowszej. Stara wersja nie chciała działać z najnowszym Debianem (Squeeze). Ciekawe, że stary LMS na nowym Debianie pokazywał menu bez logowania i pozwalał na przeróżne manipulacje na systemie.

    Problemów jest na pewno kilka, dwa najgrubsze to brak aktualizacji kilku rzeczy w bazie.

    nr 1. bug przy próbie zalogowania się,

    Zapytanie: ALTER TABLE cashimport ALTER customerid DROP NOT NULL
    Błąd: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL' at line 1
    Zapytanie: ALTER TABLE cashimport ALTER customerid SET DEFAULT NULL
    Błąd: Invalid default value for 'customerid'
    Zapytanie: ALTER TABLE cashimport ADD FOREIGN KEY (customerid) REFERENCES customers (id) ON DELETE SET NULL ON UPDATE CASCADE
    Błąd: Can't create table 'lms_atm.#sql-24e7_a6b' (errno: 150)

    naprawiamy tak:
    > ALTER TABLE cashimport MODIFY customerid integer default null;

    Bug nr dwa, jak się okazuje po upgrade, komputery klientów nie są przypisane do zobowiązania, bo się baza mocno zmieniła pomiędzy 1.10 i 1.11. Generalnie można to oczywiście przeklikać ręcznie jak by ktoś był pracowity, ale ja tam osobiście wolę automatykę.

    > insert into nodeassignments ( nodeid, assignmentid ) select nodes.id as blabla, assignments.id as assignmentid from nodes left join assignments on assignments.customerid = nodes.ownerid;

    I potem już wszystkie komputery są automagicznie przypisane do odpowiedniego zobowiązania (liability).

    Ciekawe, że trafiłem ten błąd przypadkiem, bo nie chciał mi działać moduł tc-ng w lmsd. TC dla odmiany działa ok, i generuje poprawne regułki.

    Jaka jest różnica pomiędzy tc-ng i tc? TC dla każdego kompa generuje pełny pakiet, czyli podłączamy 3 kompy do taryfy 1mbit i każdy jeden komp dostaje 1mbit. TC-NG generuje klasy per klient, czyli nie ważne ile komputerów podłączymy, klient nie przeskoczy 1mbit.

    Generalnie po wykonaniu altera i selectoinserta wszystko działa. O ile oczywiście ktoś nie wyprodukował skryptów, które generują np. regułki do firewalla na podstawie starego schematu bazy.


  7. nagiosgraph i poprawiony deb

    Marzec 14, 2011 by 0verlord

    Dzisiaj deweloper poprawił deba z nagiosgraphem, już się instaluje pod Squeezem, i nie plumka o błedną wersję paczki. Konkretnie paczka jest dostępna tu. Wersja 1.4.4-2 instaluje się pod Squeeze, wersja 1.4.4_all pod Lennym.

    Po zainstalowaniu działa od razu, trzeba tylko dodać odpowiednie wpisy do templatki i serwisów. Przy okazji opiszę dokładniej.

    Przydałby się jakiś deweloper Debian obeznany z paczkami i Debian Policy, może by mi wytłumaczył OCKB z tymi wersjami i co się zmieniło w polityce, że nagle _all przestało działać. W każdym razie dobrze, że panowie poprawili nagioagrapha, sporo rypania się z instalację mniej.


  8. Everybody lies + trust noone, szczególnie na przejmowanych sieciach

    Marzec 10, 2011 by 0verlord

    Uzupełnienie historyjki z poprzedniego posta.

    Wchodzimy do tktelekomowni, technik pokazuje dwa serwery. Jeden to hosting („to ten na dole”) drugi to router („ten obok szafy na półce”, tak, kiedyś zrobię zdjęcie :P, pewnie im kabli nie starczyło).

    Oglądam, router ma dwa interfejsy i kabelki, hosting ma jeden. Init=/bin/bash załatwił problem, host wstał, patrzę w ipki, nie ma tego, na który się logowałem wcześniej. Dopisałem, rebutnąłem, a że akcja była szybka, bo kolejarze o 16 kończą pracę, poszliśmy.

    Loguję się wieczorkiem, a ten host nie przypomina tego, z którego robiłem backup. Podniosłem apacza, bo nie wstawał, odzyskałem pocztę, ale dalej nie działał LMS. Po krótkiej chwili popatrzyłem do backupu, który na szczęście zrobiłem, zanim host się zapętlił i zmarł.
    To zdecydowanie był inny host. Z konfiguracji wynikało, że tamten miał tylko jeden interfejs, więc nie był routerem. Czyli hosting stał na routerze, a LMS na serwerze. Padł LMS a nie serwer, a że hosting też był routerem, net ludziom działał. Tylko zaktualizować się nie da, bo LMS nie działa. A jeszcze na dokładkę dowiedziałem się, że serwer LMSa ma 1 GB dysku bo stał na nim LMS. Tak, z mysqlem reającym po nim na maksa, pozwalającym na podłączenie się demonom itp.

    Tak, następnym razem nikomu nie uwierzę, i sprawdzę sam co za hosty mam przejmować.

    Trzyosobowa komisja w składzie ja, ja i ja przyznaje temu serweru i jego adminowi betonowa kostkę jako symbol ogólnego braku kumacji.


  9. Dlaczego należy rebootować każdy przejmowany serwer

    Marzec 9, 2011 by 0verlord

    Śmieszno-smutne.

    Generalnie przejmowałem routery jakiejś firemki. Pan były właściciel przestał chcieć współpracować, haseł nie podał, LMSa popsuł. No to pojechaliśmy uratować świat.
    init=/bin/bash do gruba jak zwykle załatwił sprawę, ale do drugiego routera nie dojechałem, bo nagle hasło się „odnalazło”, w głowie serwisanta. Przypomniał sobie nagle.

    Skąd serwisant znał hasło do roota na routerze, nie wiem. Zalogowałem się, wyłączyłem filtrowanie portu na ssh i wróciłem do domu. Wieczorem klikałem różne graty, między innymi firewalla, pingera do LMSa itp. Po którymśtam przeładowaniu regułek firewalla, host się zapętlił i padł. Ostatni load jaki zauważyłem na ostatniej zalogowanej konsoli, to 22, więc niby źle nie było, ale pacjent zszedł.

    Zaordynowałem Finger Of God. Rano palec zadziałał, natomiast host już nie wstał. Próba reanimacji przez serwisanta nie dała rady, host rzucał kernel panicami. Załadowałem niezbędne graty i pojechałem naprawiać.

    Na miejscu okazało się, że wszystko w sumie działa, tylko host wstał z zupełnie innym zestawem adresów IP niż w momencie, w którym klikałem filtry. Cóż było robić, naprawiłem i wróciłem do domu.

    Czas poszukać KVMa jakiegoś sensownego i przygotować serwisantowi skrypty diagnostyczne.


  10. cpanel, cpanel, ty wuju czyli jak sobie cichaczem zabić pocztę

    Marzec 9, 2011 by 0verlord

    Klikałem dla customera przekierowanie domeny. Niestety ewidentnie jego provider miał jakąś starszą wersję, która miała kilka irytujących ficzersów. Np. dla zaparkowanej domeny nie można było zmienić katalogu, na który była kierowana. Można to było zrobić tylko raz przy dodawaniu domeny. Nowsze cpanele mają już spokojnie możliwość przeklikania katalogu pod wybraną domenę, ten nie miał.

    Szukałem i szukałem, w końcu odparkowałem domenę. Powitał mnie groźny komunikat o usunięciu domeny z dnsów, nawet się przestraszyłem. Potem dodałem z powrotem domenę na odpowiedni katalog.

    No i byłoby fajnie, gdyby nie to, że poszedł cascade delete na wszystko związane z parkowaną domeną. Np. na forwardera poczty z domeny parkowanej na prawdziwą. I w ten sposób, panu klientowi wybuchła poczta funkcjonalnej części firmy. Ehh…