Saturday, December 22, 2012

SPDY (mod_spdy) i mod_pagespeed

Ostatnio pisałem o nowym rozszerzeniu TCP Fast Open, stworzonym przez Google w ramach inicjatywy Make the Web Faster. Teraz przedstawię dwa kolejne projekty z tego laboratorium, to protokół połączeniowy SPDY i moduł do Apache mod_pagespeed.

TCP Fast Open skraca czas otrzymania pierwszych danych po nawiązaniu sesji TCP, to spory zysk jeżeli ilość pakietów pomnożymy przez np. milion. Nie zmienia to faktu, że przeglądarka używając bezstanowego protokołu HTTP za każdym zapytaniem musi nawiązywać nowe połączenie TCP. Nie prawda? Racja, w HTTP 1.1  jest Keep-Alive. Mało tego, jest też HTTP Pipelining (opisywałem), który pozwala wysyłać wiele zapytań HTTP jednocześnie, bez czekania na odpowiedzi wcześniejszych zapytań.
Jednak HTTP Keep-Alive i HTTP Pipelining są pewnego rodzaju doróbkami do archaicznej architektury protokołu HTTP, na podstawie której buduje się nowoczesny Web. Tak właśnie powstał SPDY (od SPeeDY). Zadaniem protokołu SPDY jest rozbudować HTTP o mechanizm nawiązywania stałych sesji, a nawet pozwala ustalać priorytety dla każdego połączenia. W czym pomoże SPDY i jak można zobaczyć poniżej.





Jeżeli chcesz, aby Twój serwer Apache obsługiwał protokół SPDY wystarczy, że zainstalujesz mod_spdy i skonfigurujesz mod_ssl, ponieważ SPDY działa tylko z https. Należy również otworzyć port tcp/443. Na stronie projektu opisany jest proces instalacji, która jest bardzo prosta, jej poprawność w Debianie sprawdzimy komendą:
apache2ctl -M

Jeżeli chcesz sprawdzić, czy jakiś serwer obsługuje SPDY skorzystaj z spdycheck.org. Natomiast co do obsługi SPDY w przeglądarce, to najlepiej sprawdzić na stronie producenta. Firefox ma dodatek, który na pasku adresu wskazuje, czy obecna strona korzysta ze SPDY.

Drugi moduł mod_pagespeed również ma poprawić prędkość ładowania stron w przeglądarce, ale jego obszarem działania jest zupełnie co innego niż w SPDY. Tu chodzi o optymalizację budowy strony, tzn zdjęć, kodu i wszystkiego co da się poprawić, aby jej przetwarzanie trwało krócej. Np. w ostatniej wersji dodano optymalizację związaną z możliwością rozwijania adresów innych serwerów za pomocą treści otrzymanych przez pierwszy serwer. Zaoszczędza to czas czekania na odpowiedzi serwera DNS. Krótko mówiąc mod_magespeed, to silnik do automatycznego wprowadzania sztuczek w kodzie strony, aby te były szybciej interpretowane przez przeglądarki, ale co ja będę pisał, najlepiej samemu zobaczyć.






Instalacja jest prosta, jej poprawność można sprawdzić w ten sam sposób, jak w mod_spdy. Tu jednak trzeba troszkę poeksperymentować z dostępnymi filtrami.

Zasoby:

SPDY
http://googlecode.blogspot.com/2012/01/making-web-speedier-and-safer-with-spdy.html
http://www.chromium.org/spdy/spdy-whitepaper
http://code.google.com/p/mod-spdy/

mod_pagespeed
http://code.google.com/p/modpagespeed/
http://googledevelopers.blogspot.com/2012/12/new-modpagespeed-cache-advances.html

Thursday, December 13, 2012

Tradycyjne podsumowanie roku

Jak zwykle na swoim blogu prezentuję podsumowanie mijającego roku przez Google, na które czekałem z ciekawością. Niestety, w porównaniu do dwóch poprzednich lat ten klip nie zrobił na mnie takiego wrażenia. Może to nowe podejście do Zeitgeist przez Google. Oczywiście pisząc o tym, że moje oczekiwania trochę się zawiodły to konkretnie mam na myśli podkład muzyczny. Natomiast sam cel podsumowania wydarzeń minionego roku jak zwykle ma ukryty cel, chodzi o pokazanie jak te wydarzenia były relacjonowane przez sieć.

Dostępna jest również strona Zeitgeist 2012, na której można sprawdzić co w naszym kraju było najczęściej wyszukiwane w 2012 roku.




W rym roku podsumowania dokonała również fundacja Linuksa.




Jako podsumowanie roku 2012 polecam również obejrzenie Linux Kernel Report z konferencji LinuxCon Europe 2012, która odbyła się na początku listopada. Można tam usłyszeć o większość nowinek, w które jądro Linux zostało wyposażone w mijającym roku.

Thursday, October 25, 2012

TCP Fast Open - wkład Google w szybsze połączenia

W czerwcu 2012 pisałem o nowym rozszerzeniu TCP zwanym Multipath, teraz napisze o nowym mechanizmie, który pozwoli na szybsze ładowanie się stron internetowych na pewno o 5-7%, a w niektórych przypadkach nawet o 30-40%! Już pewnie zastanawiasz się o które mechanizmy chodzi, ale może trochę źle się wyraziłem. Tu nie chodzi tylko o szybkość ładowania się stron internetowych, ale o szybkość nawiązywania wszystkich połączeń w sieci przez protokół TCP/IP.

TCP/IP to duma inżynierii prawie z przed 30-tu lat, gdy protokoły te były projektowane ich twórcy nie mieli pojęcia jak będzie wyglądała sieć dziś. Mimo wszystko zostały opracowane tak dobrze, że mimo iż cała sieć zmienia się całkowicie w przeciągu każdych kolejnych 10 lat, to wciąż działa na tym samym TCP/IP.

Google ma chyba największe i najlepsze "laboratorium" do przeprowadzania optymalizacji połączeń w sieci (klient-serwer). Mało która firma ma tak dużo obciążonych serwerów i do tego własną przeglądarkę. Ten zestaw tworzy wspaniałe laboratorium, w którym Google dostrzegł problem i postanowił pracować nad jego rozwiązaniem. Tak właśnie powstał między innymi TCP Fast Open.



Tam i z powrotem

Jak zapewne wiesz, protokół TCP (RFC 793) jest protokołem stanowym, dlatego musi nawiązać sesję przed przesłaniem danych. To nawiązanie jest zwane 3-way handshake (3WHS). Zanim serwer prześle treści do przeglądarki, klient musi wysłać pakiet SYN, a serwer na niego odpowiedzieć pakietem SYN-ACK. W tym momencie klient może już przesyłać pierwsze dane wraz z potwierdzeniem ACK. Dopiero po odebraniu tego pakietu serwer połączenie uważa się za nawiązane (ESTABLISHED) i przystępuje do wysyłania kodu strony dla klienta. Podróż pakietu od klienta do serwera i z powrotem określana jest mianem round-trip time (RTT), czyli czasem podróży tam i z powrotem.





Zauważ, że serwer HTTP jest bezstanowy, czyli każde żądanie jest dla niego indywidualne. Dlatego często trzeba nawiązywać nowe połączenia TCP, a każde takie nawiązanie zawiera w sobie koszt RTT.

Ile kosztuje RTT?

Wartość RTT jest celem dla mechanizmu TCP Fast Open, im większa ona jest, tym zysk jest większy. Dlatego warto dobrze zrozumieć istotę sprawy. Wyobraź sobie, że chcesz wybrać się do kina. Wcześniej jednak musisz pojechać do kina i zakupić bilet. Po otrzymaniu biletu, musisz wrócić do domu i z powrotem wrócić na film, o wyznaczonej porze. Tak w skrócie można zobrazować nawiązanie sesji TCP. W tym miejscu pominiemy fakt, że pierwszy raz bez sensu musisz jechać do kina tylko po to, aby kupić bilet. Skupmy się na tym, ile czasu tracisz przez to.

W rzeczywistym świeci wziąłbyś ze sobą zegarek i zmierzył czas, w świecie komputerów służy do tego program ping. Jeżeli ping-niesz różne strony, to w wyniku otrzymasz czas RTT. Jeżeli masz wolne łącze podróż pakietom zajmie więcej czasu. Ponadto należy pamiętać, że przeciętne strony wymagają wielu zapytań, często do różnych serwerów i w każdym z nich jest zawarty czas RTT.

Jak już wspomniałem wcześniej Google posiada największe "laboratorium", w którym dokładnie policzono jaki jest rzeczywisty koszt RTT.


Wykres przedstawia wyniki badań przeprowadzone na serwerach Google. Czerwony słupek reprezentuje procentowy koszt nowego trójstopniowego połączenia TCP, zielony to suma pierwszych i kolejnych zapytań w nawiązanych sesjach. Dla różnych usług Google te wartości są inne, ale jak widać w procesie wyszukiwania aż 15% czasu zabiera nawiązanie sesji TCP z serwerem.

Problem ten wcale nie jest nowy, po części rozwiązano go już wcześniej wprowadzając do protokołu HTTP mechanizm zwany Persistent Connection (RFC2616). Dla przykładu w serwerze Apache służy do tego dyrektywa KeepAlive, która jest domyślnie włączona. Również wszystkie przeglądarki implementują ten mechanizm.
Problem z Persistent Connection polega na tym, że o ile po stronie klient zasoby są raczej nie wykorzystywane maksymalnie, to po stronie serwera mechanizm ten zużywa bardzo dużo zasobów. Poza tym jak wynika z badań przeprowadzonych przez Google w 33% sytuacji mechanizm ten nie zdaje egzaminu. Wynika to z tego, jak obecnie złożone są strony internetowe i ze sposobu w jaki deweloperzy starają się przyśpieszyć ich ładowanie. Wiele serwisów korzysta z kilku równoległych połączeń, aby przyśpieszyć generowanie treści. Poza tym co raz popularniejsze urządzenia przenośne nie przechowują długo nieaktywnych połączeń z uwagi na mniejszą ilość zasobwów.
Persistent Connection to nie jedyny mechanizm przyśpieszenia protokołu HTTP, jest jeszcze HTTP Pipelining, o którym również pisałem wcześniej.

Pominąć 3WHS

Obecny standard TCP zezwala na wysyłanie danych wraz z pierwszym pakietem SYN, chociaż nie zezwala na wymianę danych przed zakończenie trójstopniowego połączenia. Dlatego postanowiono wykorzystać ten fakt i dodano do pakietu SYN tzw. prośbę o ciasteczko (cookie request) - przedstawia to schemat poniżej.


Gdy serwer otrzyma wraz z pakietem SYN prośbę o ciasteczko, wygeneruje je na podstawie adresu IP klienta i odeśle wraz z pakietem SYN, ACK. Klucz używany przez serwer do generowania ciasteczek jest zmieniany co jakiś czas ze względów bezpieczeństwa. Klient otrzymane ciasteczko przechowuje podobnie jak odpowiedzi serwera DNS, na przyszły użytek. Po rejestracji nowego klienta wymiana danych przebiega standardowo.
Korzyści zaczynają się wtedy, gdy ten sam klient ponownie wyśle zapytanie do serwera. Najpierw klient sprawdza, czy dysponuje ciasteczkiem dla danego serwera. Jeżeli takie posiada, to dołączy je i dane do pierwszego pakietu SYN. Serwer spostrzegając ciasteczko w pakiecie SYN przystępuje do jego weryfikacji. Są to podobno bardzo szybkie operacje szyfrowania, które mają minimalny wpływ na opóźnienia.
Prawidłowe ciasteczko sprawia, że serwer przekazuje dane z pakietu SYN do aplikacji, której wynik jest przesyłany z powrotem do klienta wraz z pakietem SYN, ACK. W ten sposób, w przypadku kolejnych zapytań, klient otrzymuje kod strony (w innym przypadku dane) w czasie jednego RTT, czyli pinga.
Ponad to serwer może zacząć wysyłać kolejne dane jeszcze przed otrzymania potwierdzenia, czyli ostatniego kroku 3WHS.
Gdyby nie mechanizm ciasteczek, można byłoby od razu przesyłać dane w pierwszym pakiecie SYN. Niestety, wtedy protokół TCP straciłby jedną ze swoich głównych zalet - stałby się niepodatny na fałszowanie adresu IP. Mimo konieczności generowania ciasteczek mechanizm ten nadal przyśpiesz połączenia (np. o 15% dla każdego kolejnego zapytania do google.com).

Implementacja

W każdym moim wpisie przychodzi czas na stwierdzenie, że GNU/Linux jest najlepszy :). W tym tekście ten czas przyszedł właśnie teraz. Przebrneliśmy przez tyle rzeczy tylko po to, abym znów mógł napisać, że Linux jest najlepszy. Właściwie czytanie tego tekstu można by rozpocząć od tego momentu, ale zapomniałem wspomnieć o tym na samym początku.

Tak więc, Linux jest obecnie pierwszym systemem, który będzie wspierał mechanizm TCP Fast Open. Do wersji jądra 3.6 dodano obsługę client-side, natomiast server-side została dodany do zbliżającej się wersji 3.7.

Obecnie TFO jest na poziomie wdrażania i testowania, istnieje propozycja standardu w IETF, co do której są oczekiwania, że w 2013 roku stanie się oficjalnym standardem. Na chwilę obecną trwają jeszcze rozważania nad propozycjami wdrożenia tego mechanizmu w przyszłości do innych systemów operacyjnych, zwłaszcza systemu Windows. Natomiast korzyści TFO będzie przynosił już niedługo, np. dla Google w samej serwerowni.

Zasoby:
"TCP Fast Open", CoNEXT 2011
"TCP Fast Open: expediting web services", lwn.net
"Let's make TCP faster", The Official Google Code blog
Internet Draft "TCP Fast Open", tools.ietf.org


Saturday, September 1, 2012

Energooszczędny i wydajny?

Właściwie ten post mógłby być zatytułowany "Dlaczego warto kupić iPada 2" mimo, iż nie jestem "fanem" Apple, ale po kolei. Wcześniej pisałem o procesorach na architekturze ARM, teraz napisze ogólnie o komputerach pod kątem energooszczędności.

Obecnie w wykorzystaniu powszechne są laptopy, netbooki, tablety i komputery stacjonarne. Za każdym rodzajem sprzętu idą specyficzne możliwości i upodobania.  Jeszcze do niedawna używałem komputera stacjonarnego, od ok. roku przesiadłem się na laptop ze względu na wygodę (mam specjalny stolik, mogę z nim siedzieć na kanapie), jednak od pewnego czasu używam przeważnie iPada 2, dlaczego? Odpowiedź na to pytanie jest prosta, ponieważ ~80% czasu spędzam na czytaniu i wyszukiwania  materiałów w internecie. Więc, tak naprawdę przez ten czas potrzebna jest mi zazwyczaj tylko przeglądarka, reszta niepotrzebnie rozprasza. Można to porównać do czytania gazety. Oczywiście nie zmierzam tu pisać o "erze" post-komputerów, o tym czy tablety zastąpią komputery, czy iOS jest lepszy od Androida i wielu innych..., ja skupiam się na stosunku wygody do ceny - czyli przeglądania sieci.

W tym przypadku cena składa się z dwóch części, co raz tańszego i lepszego sprzętu oraz, co raz droższej energii. Poza tym, w obliczu "powodzi" urządzeń oferujących dostęp do sieci w skali makro koszt energii staje się tym najważniejszym, zresztą również z punktu widzenia maszyn serwerowych. Dlatego ten tekst w połowie będzie również odpowiadał na pytanie jak zbudować energooszczędny serwer.

Rozwój urządzeń mobilnych poskutkował rozwojem wydajnych procesorów, które zużywają tak mało energii jak to tylko jest możliwe. Ponieważ ARM atakuje, Intel musi kontratakować. Ostatnio przeczytałem o jego nowych planach z procesorami Atom. Nowe modele mają być konkurencją dla procesorów Cortex i mają również być dedykowane dla platformy serwerowej [1].

Skoro jesteśmy już przy procesorach Intel Atom i Cortex to polecam przeczytać poniższy dokument. Może jest trochę przestarzały, ale jak na wstęp do tematu to w sam raz.



Zacznijmy od procesorów Intel Atom. Ostatnio wpadł mi w ręce netbook z procesorem Intel Atom N2600. Najciekawsze w tym procesorze jest to ile pobiera energii. Sprzęt kosztował ok. 1200 złotych (bez systemu).


Teraz zobaczymy jak to przekłada się na rzeczywistość, sprawdzimy za pomocą watomierza ile energii pobiera sprzęt z takim procesorem.


Z netbooka została wyjęta bateria, aby wynik uwzględniał tylko rzeczywiste zużycie energii, bez ładowania baterii. Na tym zdjęciu procesor obciążony jest na 18%, co jest wynikiem odpalenia wideo w przeglądarce, to większe obciążenie niż tylko czytanie tekstu, a sprzęt pobiera tylko 12.5 watów.

Dla porównania na kolejnym zdjęciu procesor obciążony jest na 66%, a pobór energii to 15.1 watów.


Teraz czas sprawdzić stan, w którym system nie wykonuje żadnych zadań.


Jak widzimy w takim stanie sprzęt pobiera tylko 10 watów. To dużo, czy mało?


Nie ma lepszej odpowiedzi na to pytanie niż wyniki pomiaru mojego komputera stacjonarnego. Jego procesor to Intel Core 2 Quad Q6600, który maksymalnie może pobierać 105 watów. Do tego dwa dyski, karta graficzna GeForce 8600 GTS i monitor 19".

Tak, przeciętny komputer stacjonarny zużywa powyżej 100 watów. Jak by tego było mało jest to stan, w którym nie robi nic cięższego od przeciętnego przeglądania sieci.

Jako ciekawostkę warto wspomnieć, że nawet gdy jest wyłączony to razem z routerem WiFi pobiera prawie 8 watów (4.4W router, 1.5W monitor, 1.5W stacja). To prawie tyle co przedstawiany wcześniej netbook w tzw. stanie idle.

Tu należy się duża pochwała dla nowych modeli procesorów, zwłaszcza za integrację procesor graficznego, który dla większości użytkowników w zupełności wystarczy.

Laptop z którego piszę ten tekst to 13 calowy HP ProBook 4320s z procesorem i3-380M i wymienionym dyskiem na SSD. W przeciętnej pracy z siecią zużywa 17-27 watów, ale jak trzeba to odpali w 22s. Windows 7 na VirtualBox i nie będzie przy tym zużywał więcej niż 40 watów. W stanie bezczynności zużywa niespełna ~16 watów. Moc zasilacze to 65W. Prawdę mówiąc ten laptop jest wydajniejszy niż wspomniany wcześniej komputer stacjonarny z procesorem Q6600, a w niemal maksymalnym obciążeniu zużywa niespełna połowę tego, co PC-et podczas przeglądania sieci.

W przypadku komputera stacjonarnego istotna jest kwestia skuteczności zasilacza. W moim przypadku jest to dobrej klasy zasilacza 500W firmy PENTAGRAM, który na oferuje 84% skuteczności.

W sprzedaży dostępne są również płyty ITX z procesorami Intel Atom, na których można postawić serwer [2]. Taka płytka z dyskiem SSD może stanowić naprawdę energooszczędny serwer. Można też zrobić klaster z takich płytek.

Mimo iż netbook z procesorem Atom bije na głowę stacjonarny komputer to nie jest jeszcze urządzeniem najbardziej energooszczędnym do przeglądania sieci. Procesory ARM Cortex są jeszcze oszczędniejsze, dlatego wiąże się wiele nadziei z tą architekturą i już teraz testuje się ją w ramach energooszczędnych serwerów. W tej dziedzinie liczy się stosunek operacji na 1 wat, im więcej tym lepiej i taniej.



Na tym filmie cały klaster pobiera ponad 30 watów, ale jestem pewien, że wynika to z 3 przełączników, których używa. Zobacz również recenzję klastra z sześciu płytek PandaBoard na Phoronix [3].

PandaBoard to bardzo ciekawa płytka, w przeciwieństwie do innych, zwłaszcza Raspberry Pi, który oferuje tylko 256MB pamięci operacyjnej, co w przypadku web-servera mija się z celem. Poza tym w naszym kraju wcale nie jest taka tania, można kupić taniej płytę z procesorem Intel Atom, która pozwala podłączyć dużą ilość RAM-u i szybki, energooszczędny dysk SSD.

PandaBoard ES posiada 1GB RAM i dwurdzeniowy Cortex-A9, co sprawia, że wybrałbym ją, gdybym chciał stworzyć mały klaster web-server. PandaBoard ES jest super, ale ma jedną wadę - cene. W tym miejscu zaczyna się druga części tekstu, która odpowiada na pytanie, dlaczego warto kupić iPad 2.

Dlaczego warto kupić iPad 2

Ponieważ PandaBoard ES kosztuje prawie tyle co prezentowany netbook, czyli 1200 złotych, to należy wziąć pod uwagę, że potrzebujemy dokupić do niej zasilacz, kartę SD, co daje ok. kolejnych 200 zł., a gdzie ekran?

Natomiast iPad 2 ma podobny procesor A5, 512RAM i 16GB pamięci i podobną płytkę w środku - zobacz. Ponadto iPad 2 podczas przeciętnej pracy zużywa 2.5 watów! Teraz dołóżmy do tego baterię 25Wh i super ekran IPS. Obecnie iPad 2 można kupić już za 1700 złotych. Czy złożyłbyś za tą kwotę taki sprzęt z PandaBoard lub innej i jeszcze tak świetnie oprawiony? iPad 2 posiada ładowarkę 10W, a proces ładowania zajmuje ok. 4 godziny, co daje 40W przez godzinę. Powód dla którego lepiej nie kupować najnowszego iPada opisany jest w artykule Secrets Of The iPad 3. Chodzi o podwojenie mocy nowego iPada oraz o super wyświetlacz, przez co nowy iPad pobiera 5 watów i ładuje się ok. 8 godzin podczas, gdy do przeglądania sieci w zupełności wystarczy starszy model.

Oczywiście pozostaje jeszcze konkurencja iPada 2, ale to już kwestia upodobań, bo porządne tablety z Androidem wcale nie są tańsze od iPada 2. Polecam przeczytać Kupić nowego iPada, zapomnieć o Androidzie…

Teraz gdy już wiesz ile energii pobiera przeciętny komputer stacjonarny (ok. 100W), przeciętny laptop 15" (ok. 30W), przeciętny netbook (ok. 12W) i przeciętny tablet (ok. 3W) możesz policzyć ile możesz zaoszczędzić na energii biorąc pod uwagę ile czasu poświęcasz "tylko" na przeglądaniu sieci. O wygodzie nie wspomnę i nie ważne czy to będzie iPad 2, czy ASUS Eee Pad Transformer, najważniejsze że robimy to co chcieliśmy wygodniej i zużywamy tak mało energii jak to tylko możliwe.

Dla przykładu podam jeszcze, że 1.5W pobiera przeciętne urządzenie elektryczne podłączone do sieci.

[Dodano 01.11.2012]
PS. Osobiście wybrałem tablet Nexus 7. Nabyłem go jeszcze przed premierą w Polsce i jestem z niego zadowolony. Widocznie przyzwyczajenie do wolność nie pozwoliłoby mi kupić iPad :)

[Dodano styczeń 2013]
Nexus 7 okazał się za mały, wymieniłem go na Samsung Galaxy Tab 2 10.1. Ponieważ zostały już tylko białe (bo nikt ich nie chciał), więc wziąłem biały i wcale tego nie żałuje. Śmiało mogę powiedzieć, że ten tablet to najlepsza proporcja pomiędzy jakością, ceną i Androidem.

New quad-core Intel Atom SoCs target PCs, servers, and tablets
Intel DN2800MT
12-Core ARM Cluster Benchmarked Against Intel Atom, Ivy Bridge, AMD Fusion


Pozostałe ciekawe dokumenty:
Electrical Engineering and Computer Sciences University of California at Berkeley
Low-Power High Performance Computing

Wednesday, August 15, 2012

SELinux dla zwykłych śmiertelników - wideo z Red Hat Summit 2012

Temat SELinux poruszany jest coraz częściej na wszelkiego typu konferencjach. Zawsze chodzi o to samo, aby przekonać administratorów, że SELinux nie jest taki straszny i nie "wyłączajcie go".
Sesje prowadzi Thomas Cameron, wspomina również, że w dobraniu "życiowych" przykładów pomagał mu Dan Walsh. Thomas prezentacje poprowadził świetnie, bardzo zabawnie, szczerze to nie pamiętam innej prezentacji na temat SELinux, przy której bym się tak uśmiał.


Sunday, August 12, 2012

Opłacalność otwartości

Jeżeli czytasz ten tekst, to prawdopodobnie jesteś użytkownikiem oprogramowania open source. Być może trafiłeś tu, bo wyszukiwałeś/aś informacji na temat praw autorskich i wcale nie używasz systemu GNU/Linux. Tak czy inaczej na pewno wiesz czym jest open source i licencja GNU GPL.

Richard Stallman (autor Victor Powell)
Idea otwartości odniosła sukces w dziedzinie oprogramowania komputerowego, na jej efektach obecnie opiera się cały Internet. Twórcą tej ideii jest Richard Stallman, który wymyślił to już prawie 30 lat temu (1983) i co najważniejsze ok. 10 lat przed komercjalizacją Internetu. Dziś Stallman często uznawany jest za śmiesznego gościa, który wygłasza swoje kontrowersyjne opinie, aby zwrócić na siebie uwagę. Mało kto wie, że jest on naukowcem, który po studiach pracował jako programista w oddziale MIT zajmującym się sztuczną inteligencją. Jeżeli jesteś programistą lub kiedykolwiek miałeś styczność z programowaniem, to przydałoby się wspomnieć, że Stallman oprócz stworzenia licencji GPL i założenia Free Software Foundation napisał również kompilator języka C w ramach umożliwienia dalszego rozwoju dla open source. Więc spróbuj napisać kompilator.

O open source w oprogramowaniu mógłbym pisać długo i ciekawie, ale ten tekst będzie o czymś innym. Sukces otwartego kodu zaczyna przyciągać inne dziedziny twórczości. Skoro otwartość przetrwała 30 lat, nadal się rozwija, a wielkie firmy informatyczne muszą udzielać się w otwartych projektach, to musi w tym "coś" być.

Ogólnie panuje przekonanie, że jeżeli coś jest dobre i cenne, to możesz na tym zarobić. Tutaj pojawia się problem, użytkownicy często uważają, że coś jest za drogie, bo autor chce na tym zarobić fortunę. Czasami mają rację, ale zazwyczaj wysoka cena nie jest skutkiem chciwości autorów.

Tradycyjny model wydawniczy wygląda następująco. Załóżmy, że potrafisz robić coś fajnego i wiesz, że mógłbyś na tym zarabiać. Jednak sprzedaż wcale nie występuje na początku. Musisz się zareklamować, na dodatek trzeba przekonać do tego wyboru ludzi. Sam jako 'one person' nie masz szans przekonać masy ludzi, że twoja twórczość jest lepsza niż to co obecnie jest najpopularniejsze w swojej dziedzinie. Potrzebujesz kogoś, kto to wypromuje, tym kimś są wielkie wydawnictwa. Tylko one mogą sprawić, że coś będzie modne i cenione. Problem polega na tym, że oni na pośrednictwie chcą zarobić więcej niż Ty na swojej twórczość. Może o tym nie wiesz, ale twórcy należą do wąskiego grona osób, które zarabiają najmniej w tym biznesie. Często mówi się, że opłaca im się to tylko dzięki reklamom, gdyby nie one to wydawanie byłoby nieopłacalne, ale to nie jest prawdą. Stara zasada mówi, że jeżeli uda Ci się zgromadzić wielu ludzi w jednym miejscu to można im sprzedać reklamę, a ta jest bardzo dochodowa.

Zapewne już zadajesz sobie pytanie jak można ominąć pośredników i dotrzeć bezpośrednio do klientów. Jedną z takich dróg jest rozdawanie swojej twórczość za darmo! Wiem, brzmi to śmiesznie ale jak pisałem na początku o open source coś w tym jednak jest. Takie podejście zazwyczaj jest wyśmiewane, ale z drugiej strony jak logiczne pomyśleć o obecnym modelu dystrybucji swoich prac to wygląda to mniej więcej tak: stworzyłeś coś i chcesz z tym dotrzeć do ludzi, którym się spodoba, a jednocześnie starasz się im ograniczać dostęp do swojego dzieła, dopóki nie zapłacą.

Okładka "The Power of Open"
Opracowanie "The Power of Open" stara się wyjaśnić na czym polega licencja Creative Commons (CC) i potęga otwartość. Z licencją Creative Commons nie jako miałem do czynienia dodając wpisy na Wikipedii i pisząc na Wikibooks. Jednak rozwijanie otwartych zasobów, a udostępnianie czegoś, co mógłbyś sprzedać to co innego.

Licencja CC została opracowana jako uniwersalna dla materiałów publikowanych w sieci. Ma być nowym wyznacznikiem praw autorskich w cyfrowej rzeczywistości jaką jest Internet.
Postaram się zaprezentować najciekawsze fragmenty tej publikacji w celu zrozumienia korzyści jakie daje licencja CC.

Historia Niny Paley, nowojorskiej reżyserki (strona 12-ta)
W 2008 roku publikacja wyprodukowanego przez nią animowanego filmu “Sita Sings the Blues" opóźniła się ze względu na zaporowy koszt licencji kilku 80-dziesięcioletnich piosenek mało znanej piosenkarki Annette Hanshaw. „Kiedy mój film był w dalszym ciągu nielegalny, a koszty prawników i licencji pochłaniały olbrzymie pieniądze, zażartowałam że jeśli film byłby za darmo, mogłabym przynajmniej sprzedawać T-shirty”, wspomina Paley. Ta idea zaczęła kiełkować w jej głowie i Paley zaczęła szukać informacji na temat ludzi, którzy rozprowadzali darmowe oprogramowanie. “Zdałam sobie sprawę, że tak naprawdę pieniądze pochodzą z materiałów promocyjnych i dobrowolnego wsparcia fanów", mówi Paley.
Jak widać idea otwartości czasami rodzi się z żenady.

Teraz chyba najlepszy cytat jaki znalazłem.
Nigdy nie zarabiałam tyle pieniędzy, co po rozpoczęciu wykorzystywania licencji Creative Commons. Dzięki temu mam wyższe notowania. Nic nie wydaję na promocję. Moi fani robią to za mnie i kupują materiały promocyjne. Dzielenie się pozwoliło mi zaistnieć.
Są tu zawarte dwa najistotniejsze aspekty otwartość. Pierwszy to promocja. Jeżeli udostępnisz swoje dzieło nieodpłatne dla użytku niekomercyjnego i ludziom to się spodoba, to sami na zasadzie rekomendacji rozreklamują twój produkt. Będzie o nim wiedziało dużo osób, a jego popularność będzie potwierdzała jego jakość. Prawdopodobnie ktoś może będzie chciał go użyć w swoich komercyjnych usługach i wtedy zapłaci dla Ciebie za jego wykorzystanie. Zauważ, że taki mechanizm nie pozwoli wypromować słabej jakość produktów, tak jak mogą to uczynić reklamy.

Druga najważniejsza korzyść, to możliwość wybicia się bez inwestowania olbrzymich kosztów, tu walutą jest twoja praca. Udostępnienie swojej twórczość jest czasami jedynym sposobem na zaistnieje w swoim fachu.

Historia Frances Pinter, londyńskiego wydawcy (strona 20-ta)

Najpowszechniejszą formą twórczość w Internecie jest tekst.
Wydawcy martwią się, że udostępniając zawartość za darmo piłują gałąź, na której siedzą, zmniejszając sprzedaż drukowanych egzemplarzy, wierzymy jednakże, że w przypadku pewnych typów książek, bezpłatna oferta promuje druk.
Thinking in Java, 3rd Edition
http://www.mindview.net/Books/TIJ/
Znam doskonały przykład takiej książki, która jest dostępna za darmo w wersji elektronicznej (wer. ang.) na stronie autora, a mimo to odniosła sukces i kupiło ją wiele osób, w tym ja. Sam autor wspomina o tym w przedmowie, nie stery nie mogę jej zacytować, bo jest to zabronione, ale przełożę to na własne słowa.

Autor pisze, iż dostawał wiele wiadomości typu "Udostępniłeś ją za darmo, dlaczego ktoś miałby ją teraz kupować?". Udostępnił ją bo jak pisze, chciał aby była wyjątkowa i nie miał pojęcia co się stanie. Okazało się jednak że była to "najsprytniejsza" rzecz jaką zrobił. Ludzie zaczęli wysyłać poprawki, które w innym wypadku autor najzwyczajniej by przeoczył. Zebrał wiele sugestii i większość z nich wprowadził do kolejnych wydań. Ludzie okazali się "wspaniali", w ramach samowolnej współpracy poświęcali swój czas, aby ulepszyć książkę. Później padały stwierdzenia, "To miłe, że udostępniasz wersję elektroniczną, ale i tak wolę wersję wydrukowaną i oprawiona". Wydrukowanie całej książki na drukarce laserowej wcale nie jest tanie, a już na pewno nie jest wygodne.
Jako podsumowanie całego eksperymentu jeden z czytelników napisał do autora, iż taka forma powinna się stać standardem w wydawnictwie. Najpierw książki miałyby być udostępniane w sieci, a w przypadku dużego zainteresowania byłyby wydawane w formie papierowej. Książka otrzymała wiele nagród, dobrze się sprzedawała, a nawet swego czasu była bestsellerem, aczkolwiek mi aż tak nie przypadła do gustu.

Bruce Eckel udostępniając swoją książkę w sieci zafundował sobie bezpłatną promocję i pomoc w udoskonalaniu kolejnych wydań. W sieci nadal udostępnia poprzednie wydania, a sprzedaje obecne. Zauważ, że właśnie przeczytałeś promocję. o której byłą mowa wcześnie, a to dlatego, że książka została udostępniona za darmo w sieci. Inaczej nie napisałbym tu o niej.

Historia Khana (strona 30-ta)

To moja ulubiona historia, dlatego przytoczę ja w całości:
Salman Khan zarządzał funduszem hedgingowym w Bostonie, kiedy w 2004 roku zaczął udzielać wirtualnych korepetycji swojej 12-letniej kuzynce w Nowym Orleanie z pomocą serwisu Yahoo! Doodle. Ponieważ lekcje się jej spodobały, zaczął wrzucać je na Youtube, aby inni mogli z nich skorzystać. W ciągu dwóch lat jego filmiki zyskały taką oglądalność, że Khan zarejestrował organizację non-profit, rzucił pracę i postanowił produkować krótkie filmy edukacyjne na pełen etat. 
Khan robi wszystkie filmy sam i publikuje je na licencji Creative Commons BY-NC-SA. Obecnie Akademia Khana ma w swoich zasobach ponad 1600 filmów oświatowych, które uczą ponad milion unikatowych użytkowników miesięcznie wszystkiego, od chemii przez algebrę po przyczyny kryzysu na rynku mieszkaniowym. Khan nie ma wykształcenia pedagogicznego, a mimo tego jego materiały są chętnie wykorzystywane, także poza granicami kraju - 40% jego widzów to cudzoziemcy. Akademia Khana jest organizacją non-profit, finansowaną głównie z dotacji i rozwija się każdego roku zwiększając po trzykroć swoje zasoby. Niedawne wsparcie z Fundacji Gatesa pozwoliło powiększyć liczbę pracowników do sześciu osób, a słowa poparcia ze strony Billa Gatesa znacznie podniosły rangę Akademii. 
Khan nie przestaje dostawać codziennie listów od gimnazjalistów, studentów i dorosłych, którzy opowiadają mu z entuzjazmem o dobrych ocenach i wiedzy zdobytej dzięki Akademii. Filmy są dostępne za darmo, można je remiksować i udostępniać innym, więc ludzie tłumaczą je na inne języki, a część lekcji rozchodzi się po świecie w tempie niemal natychmiastowym. 
„Wszystko wskazuje na to, że te materiały są zdecydowanie lepsze niż to, co wielu uczniów dostaje w szkole” , mówi Khan. „A najwspanialszą rzeczą jest to, że nawet gdybym został jutro potrącony przez autobus, to nadal będę uczyć milion osób rocznie. Trzeba dbać o skalę swoich działań, dziś i w przyszłości, także po śmierci”.
Co sprawiło, że facet z bardzo porządną pensją w funduszu hedgingowym rzucił pracę zarobkową, aby robić filmy na Youtube? „Dostałem kiedyś list od pewnego studenta”, mówi Khan. „Jego rodzina była biedna i nikomu z nich jeszcze się nie udało skończyć studiów, a na dodatek nienawidził matmy. Potem natknął się na filmik Akademii Khana. Oglądał go całe lato przed testami kwalifikacyjnymi i odpowiedział prawidłowo na wszystkie pytania. To się jeszcze nigdy nie zdarzyło się na tym kierunku, a on skończył dzięki temu studia z wyróżnieniem. Z tego właśnie powodu rzuciłem pracę”.
Zostały już przetłumaczone pierwsze materiały edukacyjne Akademii Khana na język polski przez Centrum Fizyki Teoretycznej PAN. Dostępne są na oficjalnym kanale YouTube.

To nie wszystkie historii, zachęcam do przeczytania "The Power of Open".
"Jako pisarza bardziej martwi mnie zapomnienie niż piractwo."
Cory Doctorow
Licencje Creative Commons
"Zamiast opracowywać własny zestaw zezwoleń, uniwersytet zaoszczędził sporo na opłatach za usługi prawne wybierając licencje CC.”
Licencja CC jest wolną licencją, jak z cytatu wynika, normalnie trzeba by było za nią zapłacić! Licencja ta istnieje od 2002 roku i tworzy ją organizacja non-profit Creative Commons. Jej założeniem jest opracowanie licencji na zasadzie "niektóre prawa zastrzeżone" i co najważniejsze, to uzyskanie zgodność z prawem większości państw. Dlatego jest ona przekładana na języki w zgodzie z prawami autorskimi innych krajów. W Polsce jest dostępna od 2005 roku (http://creativecommons.pl).

Creative Commons oferuje kilka stopni zezwoleń, przedstawię je pokrótce:

Attribution (by)

Uznanie autorstwa.
Można prawie wszystko tylko trzeba podać nazwę autora.


Noncommercial (nc)

Użycie niekomercyjne.
Nie wolno używać w zastosowaniach komercyjnych.


No Derivative Works (nd)

Bez utworów zależnych.
Nie wolno przekształcać utworu, musi być zachowana oryginalna postać. Np. nie można tworzyć tłumaczeń!

Share-alike (sa)

Na tych samych warunkach.
Utwory zależne muszą być udostępniane na tych samych warunkach.



Dokładniejsze wyjaśnienia dostępne są na stronie Polskiego oddziału Creative Commons.

Zmiany w prawach autorskich

Po wydarzeniach związanych z ACTA i debacie politycznej Ministerstwo Administracji i Cyfryzacji (MAC) powołało zespoły eksperckie pracujące nad zmianami w prawie autorskim, które miałby przystosować aktualne przepisy do nowej "kultury Internetowej".

Jednym z najciekawszych postulatów jest "Dozwolony użytek osobisty". Chodzi w nim o to, aby zalegalizować dozwolony użytek treści cyfrowych rozpowszechnianych w Internecie. Padło również stwierdzenie "domniemania legalności utworów udostępnionych w sieci".

Kolejnym postulatem, który zmierza w tym kierunku jest "Pojęcia „kopii” i „egzemplarza” oraz dozwolony użytek publiczny". Chodzi o to, aby słowo kopia przypisać do treści cyfrowych w Internecie i nadać inną postać prawną.

Wszystko to po to, aby przepisy prawa miały odzwierciedlenie w rzeczywistości. Nie trudno również dostrzec, że proponowane zmiany mają nadać odpowiedni kształt prawny dla nowo tworzonej kultury cyfrowej, której pierwsze ramy określiła licencje Creative Commons.

Oczywiście opisane postulaty sieją wiele kontrowersji i nie wszystkim się podobają. Więcej informacji można znaleźć na stronie MAC.

Wednesday, July 25, 2012

Seccomp (SECure COMPuting with filters)

Trochę ponad pół roku temu pisałem o nowym projekcie zaimplementowanym we FreeBSD 9.0 noszącym nazwę Capsicum, który jest swego rodzaju mechanizmem sandbox framework.

W tamtym czasie w dostępnych publikacjach Capsicum było porównywane do (między innymi) SELinux i seccomp, jako potencjalnie równoważnych technologii w systemie Linux. Seccomp należy do mniej znany rozwiązań, co wynika z jego mniejszych możliwości. Wygląda jednak na to, że w najbliższym czasie ma się to zmienić.

Parę dni temu ukazała się nowa wersja jądra Linux 3.5. Jedną z nowości jest "Seccomp-based system call filtering", czyli rozszerzenie mało używanego mechanizmu seccomp.

Seccomp powstał w 2005 i początkowo miał ograniczać wywoływanie systemowych funkcji przez programy użytkowników do czterech podstawowych: read(), write(), exit() i sigreturn(). W późniejszym czasie Google zadeklarował implementacje swojej przeglądarki Chrome dla systemu Linux. W poszukiwaniu mechanizmów, które mogłyby pozwolić na tworzenie mechanizmów sandbox w przeglądarce Chrome na platformie Linux Google zainteresował się seccomp. Jednak wtedy był on zbyt prymitywny i trochę nadrabiano to przy pomocy SELinux. Nie znaczy to jednak, że Google zrezygnował z seccomp. Rozszerzyli jego funkcjonalność dodając tzw. "mode 2", który pozwalał definiować listę funkcji systemowych, których nie wolno było wywoływać dla procesu.

Nie było to jeszcze zadowalające rozwiązanie, bo o ile jądro kontrolowało operacji procesu np. zapisywanie do pliku, to nie miało żadnej kontroli nad tym do jakiego pliku program mógł zapisywać. Czyli nie kontrolowało kontekstu operacji, oczywiście poza innymi mechanizmami takimi jak prawa do plików.

Tak więc mechanizmem rozwiązującym ten problem jest nowo dodany mechanizm seccomp z filtrami. Powstała koncepcja aby mechanizm seccomp rozszerzyć o możliwość definiowania filtrów, jak w zaporze ogniowej, z tą różnicą że ta dotyczy dostępu do funkcji systemowych a nie socket-ów. Porównanie trafne, bo do implementacji użyto już istniejący i dopracowany pod katem optymalizacji mechanizm filtrowania pakietów BPF (Berkeley Packet Filter).

Teraz seccomp może kontrolować nie tylko typ operacji ale i ich zakres, np. pozwalać na zapis tylko wtedy gdy celem jest standardowe wyjście "sys_write: (fd == 1)". Projekt Chrome zaimplementował już mechanizm snadbox przy użyciu nowej biblioteki libseccomp. Obecnie znane projekty, które już wdrożyły nowe rozwiązanie to vsftpd 3.0.0 oraz OpenSSH 6.0. 17 lipca o implementacji seccomp filtering w swoim projekcie poinformował również deweloper projektu systemd.


Pisząc o seccomp ciągle używa się stwierdzenia "sandbox". Jednak w oficjalnej dokumentacji w prost jest powiedziane, że mechanizm filtrowania funkcji systemowych to nie sandbox. Tak samo sprawa ma się do porównywania z Capsicum i SELinux. Jeżeli chodzi o ten pierwszy to porównanie jest jak najbardziej prawidłowe, ponieważ oba mechanizmy są używane przez programistów w kodzie  programu. Ale Capsicum tworzy swego rodzaju hermetyczne środowisko, a seccomp jest filtrem funkcji systemowych. Efekt jest tylko podobny. SELinux z kolei jest bardziej szerszym rozwiązaniem, dotyczy całego systemu i co najważniejsze jest używanym docelowo przez administratorów. Można go użyć nawet do programów, które nie maja zaimplementowanych żadnych mechanizmów obronnych, albo ograniczyć je jeszcze bardziej tylko do funkcjonalności, z której rzeczywiście korzystamy. W przypadku gdy administrator nie korzysta z SELinux najważniejsze procesy starają bronić się same przez zaprogramowane w nich ograniczenia. Jak widać ma to sens i zysk "ekonomiczny".


Seccomp jest kolejnym mechanizmem zwiększającym szczelność siatki ochronnej oferowanej przez system Linux dla uruchamianych programów.


Więcej informacji:
http://lwn.net/Articles/475043/
http://outflux.net/teach-seccomp/
http://lwn.net/Articles/441232/
http://lwn.net/Articles/332974/



Monday, July 9, 2012

Nowości w Red Hat Enterprise Linux (RHEL6 i RHEL7)

Wideo przedstawia rozszerzenia wprowadzone do obecnie najnowszej gałęzi RHEL6 oraz do nowej gałęzi RHEL7, której pierwsza beta jest zapowiadana na pierwszą połowę 2013 roku.

Omawiany jest również sam cykl rozwoju systemu Red Hat Enterprise Linux. Z sesji dowiemy się na jakie technologie stawia Red Hat lub jakie proponuje w postacji TP (Technology Preview).

Treść prezentacji jest dostępna również w formacie PDF:
RED HAT ENTERPRISE LINUX ROADMAP HIGHLIGHTS





Wednesday, June 6, 2012

Nowe rozszerzenie Multipath w TCP

Ilość urządzeń, za pomocą których łączymy się w sieci ciągle się zwiększa, zwiększa się również ilość technologi używanych w tych urządzeniach do nawiązywania łączności w zależności od miejsca przebywania.
Najlepszym przykładem są nowe tablety. Poza domem możemy korzystać z połączenia poprzez 3G, po dotarciu do domu zaczynamy korzystać z WiFi.

Problem polega na tym, że po rozłączeniu się przez modem 3G tracimy wszystkie nawiązane sesje TCP. Przed nawiązaniem nowego połączenia przez WiFi musimy zestawiać nowe sesje, ponieważ poprzednie zostały zerwane w wyniku zmiany łącza. Dzieje się tak ponieważ protokół TCP został zaprojektowany jako połączenie "end-to-end", a końcami tego połączenia są dwa interfejsy/adresy IP sieciowe. Gdy przełączamy się między 3G a WiFi to zaczynamy korzystać z innego interfejsu/adresu IP i połączenie trzeba nawiązać ponownie.

Jak wygląda rozwiązanie tego problemu przez mechanizm MPTCP przedstawia poniższe wideo.



Dla bardziej ciekawskich polecam obejrzeć całą sesje poświęconą MultipathTCP.



Ponadto polecam stronę implementacji mechanizmu Multipath w jądrze Linux: http://mptcp.info.ucl.ac.be/

Monday, June 4, 2012

ARM może okazać się rewolucją w serwerowni i nie tylko

Wszyscy zainteresowani sprzętem komputerowym znają dwóch głównych producentów procesorów, jakimi są Intel i AMD. Choć ich implementacje są różne zachowują przeważnie zgodny standard dla komputerów biurkowych, czyli tzw. PC-tów. Wyścig między firmami Intel i AMD trwa od wielu lat w wyniku czego użytkownicy otrzymują coraz więcej. Choć architekci nowych układów za każdym razem posuwają się o krok dalej, to nadal nie mogą przestać troszczyć się o wsteczną kompatybilność i zrobić coś inaczej - bo na tym przecież polega rewolucja. Tak więc szansa dla innej architektury nadal gdzieś drzemie, pytanie tylko kiedy się obudzi.

Jak wiemy poza wspomnianymi architekturami firm Intel oraz AMD istnieją również inne, chociażby PowerPC jeszcze do 2006 roku używane w komputerach Macintosh. Wtedy zostały zastąpione przez wielordzeniowe i bardziej wydajne procesory Intel. PowerPC reprezentuje RISC (Reduced Instruction Set Computing), która od koncepcji CISC (Complex Instruction Set Computer) w Intelu różni się tym, że procesor posiada tylko minimalną ilość podstawowych instrukcji, w wyniku czego jego budowa jest prostsza, a cena mniejsza. Związane jest z tym więcej korzyści, jednak jak wszystko ma swoje plusy i minusy. Ostatnio, zaleta ARM jaką jest mały pobór energii i cena zaczynają zyskiwać na wartości.

Procesory ARM cechują się bardzo małym zużyciem energii, dlatego odniosły wielki sukces w urządzeniach mobilnych, takich jak smartfony i tablety. Nowe tablety mogą pracować do 10 godzin na baterii, a system Android opracowany na bazie Linux jest najpowszechniejszym systemem operacyjnym dla tych urządzeń. Branża urządzeń mobilnych rozwija się w zawrotnym tępię, a deweloperzy innowacyjnych dystrybucji Linux zaczynają zastanawiać się nad tym, czy architektura ARM może przynieść korzyści poza platformą urządzeń mobilnych.

Pojawiają się już takie inicjatywy jak 'ARM jako podstawowa architektura dla dystrybucji Fedora'. Dla projektu zaowocowałoby to przypływem ogromnej ilości nowych użytkowników i wzrostem popularności. Dzięki taniemu kosztowi architektury ARM komputery z systemem Fedora byłaby bardziej dostępna w edukacji i wszędzie tam, gdzie wcześniej koszty stanowiły barierę. Niewielka cena za sprzęt świetne współgrałaby z nieodpłatną dostępności systemu Linux. Jak czytamy we wskazanym tekście "sukces procesorów ARM powinien być poważnym ostrzeżeniem dla architektury x86". Ponadto ARM posiada już 64-bitową wersję procesora i mógłby zastąpić architekturę x86_64. Jeżeli ktoś chciałby sobie już wyobrazić serwery z procesorami ARM to wcale nie musi tego robić, otóż one już są, wystarczy zobaczyć.

Najistotniejsze w tym wszystkim jest chyba to, aby zrozumieć, że nowe podejście nie ma na celu zastąpienie obecnego, ale jego rozszerzenie o nowe możliwości. Co do szczegółów to nie ma co opisywać, to trzeba zobaczyć. Jako pierwszy polecam projekt HP Project Moonshot.





Dla zainteresowanych specyfikacją techniczną prezentowanej platformy serwerowej podaje link: http://www.calxeda.com/products/energycards/quadnode

HP nie jest jedynym z pośród największych producentem serwerów, który zainteresował się architekturą ARM i zaproponował już swoje rozwiązania w nowym trędzie. Kolejnym pionierem jest firma Dell, która również zaprojektowała już swoje rozwiązania dla energooszczędnych procesorów ARM.

Jak napisał autor artykułu "Dell ARMs up for hyperscale servers" w portalu The Register, Dell nie projektowałby serwerów bazujących na architekturze ARM, gdyby nikt ich nie chciał.



Co ciekawe rozwiązanie to będzie oferowane z systemem operacyjnym Ubuntu 12.04 LTS w jakiejś komercyjnej odmianie. Więcej szczegółów na temat projektu Copper firmy Dell można znaleźć pod adresem: http://content.dell.com/us/en/enterprise/d/campaigns/project-copper

Rozwój technologii Cloud i w związku z tym wzrost zapotrzebowania na serwery sprawił, że firma Canonical również jest bardzo zainteresowana prezentowaną platformą serwerową. Mark Shuttleworth, człowiek który 'rozkręcił' obecnie najpopularniejszą dystrybucje systemu GNU/Linux uważa że architektura ARM "zatrzęsie" platformą serwerową.





Jeżeli chodzi o wykorzystanie możliwości procesorów ARM w komputerach domowych to jak widać na poniższym wideo (połączenie projektu Raspberry Pi i Fedora) dopiero pracuje się nad takimi wariacjami. Przyznać jednak trzeba, że projekt jest bardzo ciekawy biorąc pod uwagę fakt, że użyta konstrukcja (płytka) kosztuje trochę ponad 100 PLN.



Czy platforma ARM w połączeniu z Open Source przyniesie zmiany o jakich nam się nawet nie śniło? Czas pokaże, w każdym bądź razie na pewno ARM ugruntuje swoją pozycje jako lider rozwiązań energooszczędnych.

Wydaje się że właśnie rozpoczął się wyścigu o miano lidera w rozwiązaniach implementacyjnych architektury ARM. Jeżeli chodzi o rozwiązania softwarowe, to na dzień dzisiejszy Canonical jest na przodzie, ale Projekt Fedora depcze mu po piętach.

Więcej informacji:
http://nullr0ute.com/2012/03/arm-hardware-now-and-the-not-so-distant-future/
http://www.arm.com/community/software-enablement/linux.php
http://www.theregister.co.uk/2011/10/28/arm_holdings_arm_v8/
https://www.linux.com/learn/tutorials/582501-tiny-pluggable-linux-arm-computers-are-red-hot
http://www.debian.org/ports/arm/
http://wiki.freebsd.org/FreeBSD/arm

Friday, June 1, 2012

GPW podało datę przejścia na nowy system notowań UTP

Giełda Papierów Wartościowych w Warszawie już rok temu informowała o planach wprowadzenia nowego systemu transakcyjnego jakim jest UTP (Universal Trading Platform), który ma zastąpić obecny system zwany Warset.

GPW w dzisiejszym komunikacie[1] informuje:
"W listopadzie br. polski rynek kapitałowy czeka przełomowa zmiana technologiczna i jakościowa, jaką będzie wdrożenie nowego systemu transakcyjnego na warszawskiej giełdzie. UTP (Universal Trading Platform), zakupiony przez GPW od NYSE Euronext, jest systemem transakcyjnym, który spełnia najwyższe światowe standardy w dziedzinie technologii i obecnie jest wykorzystywany na giełdach w Nowym Jorku, Paryżu, Lizbonie, Amsterdamie i Brukseli. W listopadzie do tej grupy dołączy giełda warszawska, zyskując dostęp do globalnej infrastruktury technologicznej, z której od lat korzystają inwestorzy z całego świata.
...
W porównaniu z Warsetem nowy system transakcyjny giełdy będzie szybszy, bardziej wydajny i skalowalny. Zwiększy się także jego przepustowość, co umożliwi obsługę nowych, niedostępnych dotychczas typów zleceń oraz pozwoli na uruchomienie nowych usług związanych z zawieraniem transakcji"


Wydarzenie to jest dosyć hucznie reklamowane przez GPW, o czym może świadczyć ten film.



Pozostaje jeszcze pytanie, co to ma wspólnego z tematyką tego bloga?

Otóż UTP to rozwiązanie zaimplementowane na bazie systemu Red Hat Enterprise Linux. Wniosek z tego taki, że nie tylko największe giełdy na świecie używają systemu Linux, ale będą musiały to również robić wszystkie domy maklerskie w Polsce.[2] To doskonały przykład rangi, w jakich zastosowaniach sprawdza się system Linux.

Dla osób zastanawiających się dlaczego akurat Linux przypominam, iż RHEL jest systemem czasu rzeczywistego co z punktu widzenia giełdy jest jednym z najważniejszych wymagań. Oczywiście to nie jedyny powód, dla którego wybrano RHEL.

Nowy system notowań na GPW oficjalnie ma ruszyć 2 listopada 2012 roku.


[1] http://www.gpw.pl/wydarzenia/?ph_tresc_glowna_start=show&ph_tresc_glowna_cmn_id=48227
[2] http://www.parkiet.com/artykul/961329.html

Sunday, April 22, 2012

Nowości w btrfs

Interesującym się możliwościami nowego systemu plików polecam kolejne wideo Btrfs Filesystem: Status and New Features.
Na moim blogu publikowałem wcześniej nagranie na temat systemu plików btrfs: Nagrania z linux.conf.au (LCA) 2012

Friday, April 6, 2012

Rosnąca popularność Linuksa

Dziś przedstawię parę ostatnich wydarzeń, które coraz bardziej dają do zrozumienia, że GNU/Linux już jest najbardziej znaczącym systemem UNIX-owym. Warto zobaczyć klip wideo niedawno przygotowany przez
The Linux Foundation, który przedstawia jak obecnie sprawy się mają w rozwoju kernela Linux.





Dokładny raport ze statystykami dostępny jest pod adresem http://go.linuxfoundation.org/who-writes-linux-2012 Raport dotyczy okresu od grudnia 2010 roku.
Z najistotniejszych faktów można wymienić iż np. nad wydaniem kernela 3.0 pracowało 331 firm, ogólnie natomiast największy wkład miały Red Hat, Novell, Intel, IBM. Oracle pomału również zmierza do tej czołówki. Google natomiast stanowi tylko 1%, wynika to pewnie z faktu, że oni rozwijają własną modyfikowaną wersję jądra. Bardziej interesuje ich soft o czy może świadczyć ich zaangażowanie znane pod nazwą Google Summer of Code. Nadal jednak największa grupę wśród developerów stanowią wolontariusze. 75% deweloperów otrzymało zapłatę za swoją pracę.

Warto zacytować następującą wypowiedź:

“Linux is the platform for the future of computing. More developers and companies are contributing to the advancement of the operating system than ever before, especially in the areas of mobile, embedded and cloud computing,”
Amanda McPherson

Jedną z najciekawszych rzeczy jaka rzuciła mi się w oczy to częstotliwość prac nad kodem, dla przykładu ilość zmian w wersji 3.2 wyniosłą średnio 6.88 na godzinę.

Co do ostatnio głośnego udziału Microsoft w rozwój kodu to nie ma co się ekscytować. Jest to efekt istotności Linuksa w zastosowaniach serwerowych. Microsoft musi zacząć liczyć się z GNU/Linux, bo inaczej ich produkt stanie się systemem niewspółpracującym z najpowszechniejszą platformą serwerową.



A no właśnie skoro o platformie mowa. Teraz chciałbym się odnieść do ostatniej publikacji firmy IBM ftp://public.dhe.ibm.com/software/linux/IBM_Linux_vs_Solaris_paper_2011_Final.pdf. Jak widzicie tytuł bardzo ciekawy i burzliwy - Linux vs Solaris. Treść tego dokumentu jasno pokrywa się z tytułem tego wpisu. Najpierw może jednak napiszę skąd ten temat. A no chodzi o ostatnią metamorfozę firmy Oracle w stosunku do open source i samego Linuksa. Skoro firma ta odziedziczyła po przejętym Sun'ie taki system jak Solaris to dlaczego angażuje się w rozwijanie własnej dystrybucji Oracle Linux opartej na RHEL? Na to pytanie stara się odpowiedzieć wspomniana publikacja. Z podsumowania możemy wyczytać w czym Linux jest lepszy:

"Linux is a better choice for a wider mix of workloads, hardware architectures, and administrator skill sets. Flexibility is crucial in an enterprise IT department, and Linux provides more choice of hardware, distribution models, and support providers without effecting how it is administered or the applications it may run. This allows IT executives to select hardware to match a workload, knowing that it will almost certainly be supported by Linux."

oraz jak istotną rolę odgrywają użytkownicy Linuksa

"Human factors are also important. There are many competent Solaris administrators available today, but commercial Solaris is rarely the first choice for college graduates adding certifications to their resumes. The popularity of Linux has created a larger supply of administrators, driving down their average cost without affecting a company's ability to find highly qualified individuals. It has also helped create an active and helpful community of users, developers, and commercial backers that have given the platform a great deal of momentum."


Odnośnie wkładu Oracle w świat systemu GNU/Linux to nie sposób nie wspomnieć o systemie plików btrfs. Ostatnio na swoim blogu publikowałem wideo prezentujące możliwości tego systemu plików.
Wkład będzie jeszcze większy, ponieważ można już zauważyć, że Oracle zaczyna przenosić pewne rozwiązania do Linuksa, chociażby DTrace.

Warto też wspomnieć o wprowadzonej na koniec 2010 roku wersji jądra zwanego "longterm", które wychodzi na przeciw potrzebom poważnych zastosowań i zmienia podejście dynamicznego rozwoju jądra. Teraz większość dystrybucji wybiera wersję longterm wspieraną przez 2 lata i tym samym produkt staje się bardziej dopracowany.

Linux rozwija się tak szybko, że z trudem śledzę najnowsze doniesienia na ten temat. Warto jednak od czasu do czasu je z grubsza podsumować.

Wednesday, March 21, 2012

Rozwiązanie problemu z prawym przyciskiem ClickPad firmy Synaptics

W moim laptopie ProBook 4320s firma HP zamontowała ClickPad (często mylony z ToutchPad) firmy Synaptics. W systemie Linux występuje problem z poprawnym działaniem prawego przycisku. Ostatnio rozwiązałem ten problem.

Mój system to Debian Wheezy oraz X.Org X Server 1.11.4.

Jeżeli nie mamy jeszcze pliku xorg.conf to należy go sobie wygenerować. W sekcji ServerLayout nic nie zmieniamy, dodajemy tylko nową InputClass.



Section "InputClass"
        Identifier      "Touchpad"
        MatchIsTouchpad "yes"
        Driver          "synaptics"
        Option          "MinSpeed"              "0.5"
        Option          "MaxSpeed"              "1.0"
        Option          "AccelFactor"           "0.050"
        Option          "TapButton1"            "1"
        Option          "TapButton2"            "2"
        Option          "TapButton3"            "3"
        Option          "VertTwoFingerScroll"   "1"
        Option          "HorizTwoFingerScroll"  "1"
        Option          "VertEdgeScroll"        "1"
        Option          "CoastingSpeed"         "8"
        Option          "CornerCoasting"        "1"
        Option          "CircularScrolling"     "1"
        Option          "CircScrollTrigger"     "7"
        Option          "EdgeMotionUseAlways"   "1"
        Option          "LBCornerButton"        "1"     # LButton
        Option          "RBCornerButton"        "3"     # Rbutton
Option          "EmulateTwoFingerMinZ"  "35"
        Option          "EmulateTwoFingerMinW"  "8"
EndSection

Pogrubiona linia rozwiązuje cały problem - w prawym dolnym rogu znajduje się prawy (3) przycisk. Przed edycją xorg.conf można jeszcze przetestować działanie tej opcji za pomocą polecenia synclient.

Monday, February 27, 2012

Ochrona phpMyAdmin (i nie tylko) przez ips_outline.py

Ostatnio w logach serwera apache zauważyłem częste próby odgadnięcia ścieżki, pod którą znajduje się phpMyAdmin. Postanowiłem przyjrzeć się problemowi i skonfigurować swój prosty system IPS do reagowania na takie incydenty.

Podczas analizy tego typu zdarzeń zauważyłem faktyczną potrzebę rozszerzenia możliwości mojego skryptu o obsługę wyrażeń regularnych, a dokładnie chodzi o współpracę z AWK.

Tak mogą wyglądać przykładowe logi świadczące o ataku:

60.174.109.133 - - [25/Feb/2012:01:32:41 +0100] "GET //phpmyadmin/ HTTP/1.1" 404 182 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:41 +0100] "GET //phpMyAdmin/ HTTP/1.1" 404 183 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:42 +0100] "GET //myadmin/ HTTP/1.1" 404 180 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:43 +0100] "GET //MyAdmin/ HTTP/1.1" 404 181 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:44 +0100] "GET //admin/ HTTP/1.1" 404 178 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:44 +0100] "GET //Admin/ HTTP/1.1" 404 179 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:46 +0100] "GET //PMA/ HTTP/1.1" 404 178 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:46 +0100] "GET //PMA/ HTTP/1.1" 404 178 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:46 +0100] "GET //phpadmin/ HTTP/1.1" 404 181 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:47 +0100] "GET //mysqladmin/ HTTP/1.1" 404 183 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:48 +0100] "GET //mysql/ HTTP/1.1" 404 179 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:48 +0100] "GET //sqladmin/ HTTP/1.1" 404 181 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:49 +0100] "GET //sql/ HTTP/1.1" 404 177 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:50 +0100] "GET //webadmin/ HTTP/1.1" 404 181 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:50 +0100] "GET //db/ HTTP/1.1" 404 176 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:51 +0100] "GET //dbadmin/ HTTP/1.1" 404 180 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:52 +0100] "GET //mysqldb/ HTTP/1.1" 404 180 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:53 +0100] "GET //webdb/ HTTP/1.1" 404 178 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:53 +0100] "GET //sqlmanager/ HTTP/1.1" 404 183 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:54 +0100] "GET //mysqlmanager/ HTTP/1.1" 404 184 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:55 +0100] "GET //phpmanager/ HTTP/1.1" 404 182 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:55 +0100] "GET //pmadb/ HTTP/1.1" 404 178 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:56 +0100] "GET //admin/phpmyadmin/ HTTP/1.1" 404 184 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:57 +0100] "GET //admin/phpMyAdmin/ HTTP/1.1" 404 186 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:57 +0100] "GET //admin/mysql/ HTTP/1.1" 404 183 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:58 +0100] "GET //admin/pma/ HTTP/1.1" 404 182 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:59 +0100] "GET //mysq/phpmyadmin/ HTTP/1.1" 404 186 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:59 +0100] "GET //phpMyAdmin-3.3.10.2/ HTTP/1.1" 404 190 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:32:59 +0100] "GET //phpMyAdmin-3.3.10.2/ HTTP/1.1" 404 190 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:33:00 +0100] "GET //phpMyAdmin-3.4.2.1/ HTTP/1.1" 404 190 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:33:00 +0100] "GET //phpMyAdmin-3.4.2.1/ HTTP/1.1" 404 190 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:33:02 +0100] "GET //phpmyadmin2/ HTTP/1.1" 404 183 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:33:03 +0100] "GET //PHPMYADMIN/ HTTP/1.1" 404 183 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:33:03 +0100] "GET //phpMyAdmin-2.8.1/ HTTP/1.1" 404 190 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:33:03 +0100] "GET //phpMyAdmin-2.8.1/ HTTP/1.1" 404 190 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:33:04 +0100] "GET //phpMyAdmin-2.8.0.2/ HTTP/1.1" 404 191 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro" 
60.174.109.133 - - [25/Feb/2012:01:33:04 +0100] "GET //phpMyAdmin-2.8.0.2/ HTTP/1.1" 404 191 "-" "Made by ZmEu @ WhiteHat Team - www.whitehat.ro"

Problem z opisaniem takich logów do postaci zaimplementowanej w skrypcie ips_outline.py[1][2] polega na tym, że można tam podać maksymalnie trzy podciągi identyfikujące wpis do logu. W powyższych przykładach cechą wspólną jest zwracany kod serwera HTTP "404" oraz wystąpienia ciągów "php", "admin", "my" w adresie. Sprawa komplikuje się o tyle, że mogą te ciągi występować zarówno w małych, jak i dużych znakach np. "Admin" i "admin", a nawet "ADMIN". Poza tym wcale nie muszą występować razem np. "phpadmin", "MyAdmin", "Admin". Ciąg "404" występuje zawsze ale równie dobrze morze być częścią nazwy pliku, np. zdjęć z aparatu "DSC 04041". Trzeba więc szukać go w określonej kolumnie, a obecnie ips_outline.py nie potrafi wyszukiwać tak selektywnie. Skrypt można pobrać ze strony projektu[3].

Myśląc o selektywnym wyszukiwaniu danych w logach od razu na myśl przychodzi mi najlepsze narzędzie do tego stworzone, czyli AWK. W przyszłości mam zamiar zmodyfikować mój skrypt, tak aby potrafił współpracować z tym językiem, dlaczego? Najlepszą odpowiedzią na te pytanie będzie opis jak poradziłem sobie z tymi incydentami oraz jakie są minusy takiego rozwiązania.

Pierwszą rzeczą jaką musimy zrobić to napisanie kodu AWK, który ujednolici przedstawione logi do takiej postaci, aby ips_outline.py nie miał z nim problemów. Wystarczy nam jeden ciąg identyfikujący, adres IP do zablokowania i wyszukiwana ścieżka. W systemie Debian używany jest MAWK[4] ale nic nie stoki na przeszkodzie, aby czerpać z dokumentacji GAWK[5] zwłaszcza jeżeli przedstawione przykłady są dla Ciebie niezrozumiałe.

Zanim jednak napiszemy taki kod prosty przykład. Jeżeli mamy frazę "my"
echo my | awk '{if($0 ~ /my/) print "ok"}'
kod zadziała, ale dla "My", "MY" już nie, dlatego:
echo wmYs| awk '{if($0 ~ /[Mm][Yy]/) print "ok"}'
teraz jest ok.

Mój kod AWK, który wybiera złe adresy wygląda następująco:
awk '{if ( ($9 == "404") && (($7 ~ /[Aa][Dd][Mm][Ii][Nn]/)||($7 ~ /[Mm][Yy]/)||($7 ~ /[^.][Pp][Hh][Pp]/)) ) print "block "$1" "$7 }' /var/log/apache2/access.log
Wyniki (o ile istnieją w access.log) będą miały postać:
block 207.171.3.132 //admin/index.php

Sprawdzenie rekordu źródłowego:
grep "//admin/index.php" /var/log/apache2/access.log
207.171.3.132 - - [27/Feb/2012:01:03:39 +0100] "GET //admin/index.php HTTP/1.1" 404 185 "-" "-"
Twoje logi mogą mieć inny format!

Kod AWK wybiera linie/rekordy, które:
- w kolumnie 9 obowiązkowo mają wartość "404" (podciąg również będzie dopasowany!)
- w kolumnie 7 wystąpi podciąg "admin" lub "my" lub "php", niezależnie od wielkości znaków
- podciąg "php" nie może być poprzedzony kropką (wyłączenie błędów 404 z np. "index.php")
następnie drukuje "block", IP i ścieżkę.

Teraz sprawdzony kod AWK możemy wrzucić w skrypt i korzystając z możliwości pisania do /dev/ips wysyłać tam jego wyjście. Proponuje w katalogu domowym /root założyć skrypt webcheck.sh:
touch webcheck.sh
ls -l webcheck.sh
-rw------- 1 root root 0 02-25 17:57 webcheck.sh
chmod u+x webcheck.sh
vim webcheck.sh


Zawartość skryptu wyglądałaby następująco:
#!/bin/sh
awk '{if ( ($9 == "404") && (($7 ~ /[Aa][Dd][Mm][Ii][Nn]/)||($7 ~ /[Mm][Yy]/)||($7 ~ /[^.][Pp][Hh][Pp]/)) ) print "block "$1" "$7 }' /var/log/apache2/access.log >> /dev/ips


Ostatecznie dodajemy wpis do crona:
crontab -e

 * *   *   *   *    /root/webcheck.sh > /dev/null

Skrypt będzie uruchamiany co minutę i będzie wysyłał wyprodukowane wpisy przez AWK do /dev/ips, skąd pobierze je i przeanalizuje ips_outline.py. Czas więc powiedzieć dla ips_outline.py czego ma szukać. Do rule.ips dodajemy regułę:
web phpmyadmin;;block,NULL,NULL;;block, , ;;iptables -I INPUT 3 -s param -j DROP;1;2;00:01:00

Składnię reguł opisywałem w ostatnim wpisie o ips_outline.py.
Reguła:
- nazywa się "web phpmyadmin"
- szuka rekordów zawierających ciąg "block"
- pobiera z niej adres IP znajdujący się po ciągu "block" i między znakami spacji: " "[IP]" "
- wstawia regułę blokującą z użyciem adresu IP w miejscu "param" ("1" po regule)
- uaktywnia wstawienie reguły przy drugim wystąpieniu pasującego rekordu
- ustawia czas, w którym ma wystąpić (w tym przypadku dwukrotne) dopasowanie na jedną minutę.
Jeżeli chodzi o czas jednej minuty to jego znaczenie nie ma większego wpływu w tym przypadku, chyba że chcemy "łapać" logi między dwoma wywołaniami skryptu webcheck.sh. Wtedy należy ustawić go na 2 minuty. W przeciwnym razie ips_outline.py i tak otrzyma wszystkie logi w pierwszej sekundzie minuty, a kolejne w pierwszej sekundzie kolejnej minuty.

Pozostało już tylko zresetować skrypt:
echo stop >> /dev/ips
/root/ips_outline.py > /dev/null &


Skrypt działa poprawnie i zaczął blokować ale przyjrzyjmy się dokładnie jak wygląda blokowanie.
Dziś w nocy ok. godz. 1 miał miejsce atak, skrypt zablokował go i wysłał do mnie e-maila o treść:

IPS 2012.2.27 1:4:1 web phpmyadmin: iptables -I INPUT 3 -s 207.171.3.132 -j DROP n=2 ip=207.171.3.132 [timeline: 0:0:0 in time 00:01:00]
Jak widać timeline to 0:0:0, czyli wszystko dzieje się w jednej sekundzie z jego punktu widzenia. Dzieje się tak ponieważ dostaje logi raz na minutę. Właśnie, co minutę a co dzieje się podczas tej minuty?. Zobaczmy.


Jak widać wszystkie próby miały miejsce w ciągu niespełna minuty, więc skrypt jeszcze nie mógł zareagować bo czekał na logi od AWK uruchamianego co minutę.


Ostatni atak przed zablokowaniem miał miejsce o 01:03:53, ale do tej poty bot zdążył wykonać 78 prób. Następnie sprawdzam ile razy próbował po zablokowaniu, hy zabawne również 78. Można więc powiedzieć, że ta metoda działa ale w tym wypadku zapobiegła połowie prób ataku. 
Oczywiście i tak to jest bardzo dobry wynik, ponieważ załóżmy, że mechanizm ten zablokowałby tylko ostatnią próbę, albo nawet wcześniej bot odgadłby ścieżkę do phpMyAdmin, to ile zdążyłby zrobić w ciągu niespełna pozostałej minuty? Chyba niewiele.

Mimo wszystko ten przypadek zainspirował mnie do rozbudowania ips_outline.py o możliwość wyszukiwania ciągów za pomocą AWK, tak aby mógł blokować od razu nawet takie przypadki.

Oh, oczywiście, nie wiem czemu wspominam o tym na sam koniec ;) ale najlepszą ochronę dla phpMyAdmin jest używanie reguł Order Deny,Allow w konfiguracji apache, co zresztą praktykuje.