blog.orwen.org osobní názory, postřehy a nápady tak jak sem propadnou klávesnicí

25Čer/103

Jak jsem bojoval proti spammerům

V článku se ohlížím zpět na počátky ve svém aktuálním zaměstnání. Stručně v něm rekapituluji první cíl, který jsem si dal: dát do pořádku e-maily.

Jako slepý k houslím jsem se loni na podzim dostal do první linie boje proti rozesílačům spamu. Teprve jsem se rozkoukával v nové kanceláři, když si začali zaměstnanci postupně stěžovat, že jim "nechodí maily". Ukázalo se, že adresátům často končí ve spamovém koši a když už něco dojde, tak se zpožděním. To byl špatný varovný signál, který nastartovál první fázi mé mise v novém zaměstnání.

V dřevěné skříni zatím tiše šuměly servery chrlily do internetu spam. To jsem však jen několik dní tušil a čekal až mi bývalý spráce sítě sdělí root přístupy. Pročpak asi odešel a nic po sobě nenechal?

Z první diagnostiky vyplynulo, že webovému serveru útočník podstrčil jednou z mnoha děr svůj kód, získal práva uživatele Apache a vychvaloval Viagru. Zakázání funkce mail() bylo dílem okamžiku, problémy však dále trvaly a bylo jich ještě víc:

  1. po několika dnech chrlení byla IP adresa stále na blacklistu
  2. útočnk měl stále práva Apache
  3. nefungovala funkce mail() na která, jak se ukázalo byla pro organizaci nezbytná
  4. e-maily chodily s několikahodinovým zpožděním

Poslední odrážka mě navedla na důkladnou kontrolu mailového serveru, výborný nástroj qshape ukazoval hrozivou frontu, vypadající asi takto:

        T  5 10 20 40  80  160   320 640 1280 1280+
          TOTAL 17237  8 14 16 44 182 4495 11614 863    0     1
        aol.com 16908  0  0  0  0 103 4392 11550 863    0     0
   hnutiduha.cz   260  8 14 15 33  70   56    63   0    0     1
         psp.cz    21  0  0  0  3   0   18     0   0    0     0

Dočasné řešení v podobě krásného košatého příkazu

mailq | tail -n +2 | awk 'BEGIN { RS = "" } / *@aol\.com$/ { print $1 }' | tr -d '*!' | postsuper -d -

poslalo příchozí spamy do /dev/null; koncepční řešení však rozhodně není toto napsat  do Cronu. Zde se mi otevřelo velké pole ladění a optimalizace front Postfixu, nějaké úpravy Iptables by jistě taky pomohly.  Až teď, s odstupem času, mě napadá, že takové množství mailů se do fronty mohlo dostat z napadeného webserveru šumícího hned vedle; přesunul jsem tedy svou pozornost na něj.

Logický postup velel najít bezpečnostní díru v některé z webových aplikací. Ukázalo se však, že s procházením tisíců PHP a Perlových skriptů, na který si několik let každý programátor-dobrovolník nahrával co chtěl, mi nepomůže ani syslog.  Jednalo se o krásnou ukázku nefunkční (=neexistujícící) bezpečnostní politiky. Po důkladném prozkoumání většiny konfiguráků jsem e-mailový server i s IP adresou prohlásil za potápějící se loď a zvolil strategii útěk. Nutno říct, že s těžkým srdcem, které k nově objevenému kousku kyberprostoru ještě ani nestihlo přilnout.

Bod č.1 a 4. jsem koncepčně přes víkend vyřešil poměrně bezbolestnou migrací našeho mailserveru na mailserver Google Apps, to je samostatná kapitola.

PHP funkci mail() do té doby realizovanou vlastním SMTP serverem jsem opět aktivoval, ale nově ji obsluhovala služba ssmtp, která e-maily posílá přes účet na jiném serveru -- v našem případě šlo o server Google Apps, tím byl dočasně vyřešen i bod 3. Ukázalo se, že hnát spam z napadaného serveru přes Googlí službu ale není dobrý nápad. Google víc než 1000 mailů denně nepustí; nehledě na to, že organizace v rámci svých pravidelných rozesílek potřebuje občas poslat třeba i 10 000 mailů denně a navíc jim k tomu falšovat adresu odesilatele. Další věc co puritán Google nemá rád.

Zde je na místě otázka, k čemu někdo potřebuje falšovat hlavičky mailů, nebo rozesílat denně 10 000 mailů? To první slouží ke tzv "zprostředkování odeslání e-mailu": zákazník si prostě přeje, aby e-mail odeslala organizace, ale pod jeho adresou, viz příklad. A hromadné rozesílky se dají jednoduše vysvětlit rozesíláním e-mailového zpravodaje tisícům registrovaných zájemců.

Rozhodl jsem se pro potřeby takových to rozesílek nahradit PHP funkci mail() vlastní implementací, která bude vlastní odesílání zajišťovat tak, že odesílaný e-mail uloží do databáze. Minutový cron na touto databází spouští prioritní frontu a vlastní odeslání realizuje. Budovaný systém má spoustu výhod:

  • snadná kontrola aplikací -- vím která co odesílá, můžu ji zablokovat
  • přiřazení priority odeslání, například při rozesílce rozesílky zpravodaje trvající desítky hodin prioritní forntu "předběhnou" e-maily tlačící na poslance
  • statistiky odeslaných e-mailů

Vymyšleno, implementováno. Funkční. Systémem už k dnešku proteklo 30 000 mailů k plné spokojenosti všech zúčastněných. Tím byl vyřešen i problém 3.

A samotný útočník s právy Apache? Toho nejprve vyhnaly zvýšené restrikce v php.ini. Koncepční řešení proběhlo teprve nedávno kompletní outsourcovanou reinstalací celého webserveru a rozdělením jednotlivých aplikací do "bezpečnostních zón" pomocí FCGI. Preventivně jsme zavedli FTPS, revidovali veškeré účty programátorů a zavedli pořádnou bezpečnostní politiku.

Filed under: IT, práce 3 Comments
12Čer/100

Obhájil jsem interpret vlastního jazyka

celebrating smile

Velká sláva, právě jsem obhájil jeden z nejtěžších předmětů na PEF Mendelu. Jeho náročnost nespočívá, jak už to na PEFce většinou bývá, v hrátkách s abstraktními strukturami -- pilířem předmětu je projekt před kterým je teoretická zkouška pouhou prerekvizitou k pochopení zadání.

Kompletní projekt je ke stažení v sekci Moje tvorba. Viz také dokumentace v PDF, nebo GoogleDoc.

Filed under: IT, PEF MENDELU No Comments
4Čer/100

Touch Book, kritický druhý dojem (HW)

Doprava a komunikace AI

Touch Book je průsvitnýAlways Innovating mně do krabice zapomněla přibalit adaptér, takže jsem si zapnutého Touch Booku užil jen pár minut. Bohužel, sehnat 5V adaptér schopný propouštět dost proudu s kompatibilním konektorem se ukázalo jako velký oříšek. Konektor jsem nakonec odřezal ze staré solární nabíječky a adaptér sehnal v GM Electronics.

Ukázalo se však, že notebook se odmítá nabíjet. Teprve po proměření vyšlo najevo, že mi GMko prodalo vadný adaptér. S odřezaným konektorem se však reklamuje špatně tak je tu teď aspoň veřejně očerňuji: Nekupujte adaptéry v GM Electronics.

Mezitím mi Always Innovating (tj. asi za týden) poslalo na moji žádost adaptér nový. Aspoň že tak :) . Nezávisle na tom jsem se notebook pokoušel reklamovat, ale bez reakce. Dojem z komunikace AI je tedy smíšený.

Nevýhody

Zaměřím se pouze na nevýhody, abych se po minulém pozitivně laděném příspěvku vrátil do mezí objektivity.

Touch Book pěkně zobrazuje slajdy z teorie grafů

Největším negativem je dle mého názoru výdrž baterie v tabletové části. Nejspíš se jedná jen o můj problém, protože reálná výdrž mého kusu je přibližně půl hodiny, zatímco specifikace říká 3-5 hodiny. Abych byl výrobku nekřivdil -- skutečně ty cca 4 hodiny vydrží, ale po půlhodině provozu už jakýkoli dotyk displeje způsobí vypnutí. Ale třeba na poslech hudby se použít dá. Bohužel jsem nepřišel na to jak Touch Book uspat, nebo alespoň vypínat/zapínat displej.

S tím souvisí i další nevýhoda, kterou je fakt, že při provozu na baterie se nejdřív vybije tabletová část; pak už stroj sosá z akumulátoru v klávesnici. Po půlhodině provozu tak ani nemůžu bez vypnutí např. displej otočit (oddělit a připojit ke klávesnici obráceně).

Další nevýhody už nejsou tak markantní:

  • Touch Book má rozhodně nejhorší touchpad co jsem kdy zažil
  • po dvou týdnech mu upadla packa (tj. jedna za čtyř distančních gumových podložek na spodní straně).
  • na měkčím povrchu (např. postel) se notebook kácí dozadu

A  příště napíšu něco o software :) .

Filed under: IT, recenze No Comments
2Čer/100

Jak nemá vypadat datový rozvaděč a co s tím

Když jsme se s Duhou stěhovali do nového sídla, jednou z věcí na kterou jsem se opravdu těšil byl datový rozvaděč. Místo kam vedou všechny síťové kabely od počítačů.
Ve starém sídle nic takového nebylo -- kabely prorůstaly budovou jako plíseň a když jsme si odpojili našich 7 switchů, přišly si stěžovat hned dvě firmy, které na nás byly napíchnuté. Chaos.
A jak vypadal onen datový rozvaděč?

Datový rozvaděč

Vpravo nahoře jsou vyvedené do patch panelů síťové zásuvky stanic, vlevo nahoře vykukují rackové aktivní prvky a ta hromada dole je jsou modemy, routery a switche D-link a Zyxel.

Omlouvám se za hroznou kvalitu fotek, považujte to za nástroj security by obscurity konceptu. Protože do hromady vlevo momentálně přispíváme hned čtyřmi zařízeními, rozhodli jsme se dva plně obsazené šesnáctiportové switche nahradit jedním rackovým. Zároveň jsme v tu dobu koupili nové APčko a router, tak z toho vznikla pěkná nadílka.Switch, router a APčko

  • router Linksys s podporou 802.1q, VPN s spousty dalšího
  • switch Linksys SLM248G
  • Wifi router Linksys WRT320N

Příští týden mám zkoušku z předmětu Počítačové sítě II, tak si pořádně pohraju s návrhem sítě. Třeba VLANami se  dají dělat pěkné kusy :) . Rozhodně plánuji rozjet load balancing, VLANy (alespoň pro VoIP a servery) a nějaký monitoring. Duhu teď čeká růžová a spolehlivá budoucnost.

Za pár dní se tu objeví fotka datového rovaděče v novém, tak doufám, že to bude poznat :-) .

Aktualizace: Tak už je hotovo :-) : Malá zařízemí (tj. modem a router) byla přesunuta na poličku. Dva switche nahradila jejich racková varianta a kabeláž byla sepnuta.

Nový datový rozvaděč

Filed under: IT, práce No Comments
25Kvě/100

Interpret programovacího jazyka Výplod

Přibližně za měsíc zveřejním kód svého interpretu programovacího jazyka Výplod. V čem je tento jazyk tak výjimečný, že si zaslouží svůj vlastní interpret? Vůbec ničím. Přesto, že se jedná o jeden z projektů, který se mi nepovedlo napasovat na nic praktického, strávil jsem nad ním tolik času, že si zaslouží být oslavován protivným smajlíkem.  celebrating smile

Jednou z osobitých (tedy nad rámec zadání) vlastností jazyka je jeho typování. Několik let starý první dojem z typování v Perlu ve mě tak hluboko zakořenil, že jsem se pokusil některé z principů implementovat. A tak vznikl jazyk ve kterém se snoubí nevýhody statického i slabého typování. Předvedu na ukázce automatické konverze řetězce na číslo (a naopak).

// promene je nutne deklarovat a jeste pred pouzitim jim tak urcit datovy typ
int $p;
string $s,$o;

reads $s;

// pokud porovnavame retezec s cislem, dojde automaticke konverzi retezce
// na cislo o hodnote poctu znaku v retezci
if ($s > 10) {
 echo 'Moc dlouhe slovo.';
}

// operator + aplikovany na retezce slouzi k jejich spojovani
$s = '* ' + $s + ' *';

// pri prirazeni opet dochazi ke konverzi na cislo udavajici pocet znaku
$p = $s;

while ( $p > 0) {

  // tady zas konvertujeme cislo na retezec (pridavam k retezci)
  $o = $o + $p;
  $p = $p - 1;
}

echon $o;
echon $s;
echon $o;

Výsledkem tohoto programu je pak něco takového:

87654321
* ahoj *
87654321

Pokud někoho zaujal výraz ve kterém sčítám řetězec s číslem a položil si otázku jak má interpret poznat, který z operandů se má typově přizpůsobit tomu druhému, odpovědí je jedna ze záludností jazyka. Pokud je jeden z operandů řetězec, je vždy výraz převáděn na řetězec. Záleží tedy na pořadí v jakém dochází k vyhodnocování výrazu, viz vševysvětlující ukázka:

echon 'hello ' + 2 + 1;
echon 2 + 1 + ' hello';
echon 'hello ' + (2 + 1);

Vypíše:

hello 21
3 hello
hello 3

Zde je možná na místě zmínit, že výrazy vyhodnocuji tak, že je před vyhodnocením převedu do postfixové notace (zpracování je pak výrazně jedodušší).

Při návrhu jazyka jsem neměl žádnou vizi. Místo jazyků originálních typu Brainfuck, tak vznikl cestou nejmenšího odporu hybrid Cčka a PHPčka. Jaký jazyk byste navrhli vy?

Filed under: IT, PEF MENDELU No Comments
29Bře/105

Je lepší Touch Book nebo iPad?

Protože moje poškozené Asus EEE skočilo jako server, chci za něj náhradu z otevírajícího se trhu s tablety. Ale jakou? V tomto článku se zamyslím nad dvěma variantami:

  1. populární iPad od Apple
  2. neznámý Touch Book od Always Innovating.

Hloupé srovnání harware vybavení

Při pohledu do úplně základníchch HW specifikací je zřejmé, že je iPad prostě lepší:

iPad Touch Book
Displej 9.7-inch, 1024x768 8.9 inches 1024x600
Úložná kapacita 16-64GB 8GB
Procesor ARM: Apple A4, 1GHz ARM: Texas Instruments OMAP3530 600MHz
Wi-Fi 802.11a/b/g/n 802.11a/b/g

Ostatní podstatné hodnoty jako výdrž baterie nebo hmotnost jsou velice podobné. Udělat teď závěr by však bylo velkou chybou. Chci totiž napsat tenhle článek tak, aby bylo jasné, proč si Touch Book koupím mnohem radši :-) .

Často vytýkané nedostatky iPadu

Fičura Ipad Touch Book
Multitasking
GPS dá se dokoupit a zapojit do vnitřního USB
Náhradní baterie v klávesnici
Rozšiřitelná paměť výměnou karty
USB port tři vnější, čtyři vnitřní
Vestavěný foťák/kamera
Podpora pro Adobe Flash
SD Slot vnitřní
HDMI Out
Native Widescreen
Open SDK
více operačních systémů

Teď už by zvávěr mohl vypadat jinak -- iPad je dobrý v tom co umí, ale vlastně toho moc neumí. Touch Book má proti němu mnohem širší využití po HW stránce (můžu do něj strčit flashku, foťák, nabíječku na mobil nebo si zvětšit s úložnou kapacitu) a především poskytuje více softwarových funkcí (multitasking, otevžené vývojové prostředí, podpora více OS, Flash, ...), zde si na sebe Apple upletl bič díky své uzavřenosti.

Mně jde především o to mít univerzální a otevřený nástroj, proto byl pro mě Touch Book jasnou volbou. Máte-li rádi stylové jednoúčelovky, kupte si iPad.

Tolik ke srovnání na základě toho, co jsem o obou tabletech našel na internetu. Odlítám teď na týden pryč, a až se vrátím, Touch Book už tu na mě bude čekat. Pak se tu objeví i nějaké postřehy z praxe.

Aktualizace: Už jsem napsal první kritické hodnocení, je zaměřené na hardware.

Filed under: IT 5 Comments