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:
- po několika dnech chrlení byla IP adresa stále na blacklistu
- útočnk měl stále práva Apache
- nefungovala funkce mail() na která, jak se ukázalo byla pro organizaci nezbytná
- 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.
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ěč?

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.
- 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.
Nudný příspěvek o tom co zrovna dělám zajímavého
Od každé oblasti tři body...
Škola
- dodělávám interpret vlastního programovacího jazyka (zatím umí výrazy a podmínky)
- snažím se opravit si zápočet z předmětu Práce s motorovou pilou
- přes víkend potřebuji stihnout vlastní implementaci neuronové sítě co dokáže efektivně rozkládat činnost do více vláken
Duha
- o víkendu přecházíme na nový webserver (desítky desítky let starých systémů a databází), držte nám palce
- vyvíjím jednoduchý webový systém pro evidenci, vyhledávání a prezentaci ekoformářů (ocenil jsem Kohana framework, ale bohužel to musím dělat bez něj
, doufám, že to už je moje poslední aplikace bez frameworku ) - snažím se postupně tvořit zadání zakázky našeho nového intranetu integrovaného do Google Apps, teď jsme rozjeli jeho alfaverzi
Osobní
- dnes jdu na rande na film Cesta
- konečně mi funguje Touchbook, tak zkouším co (ne)umí
- včera jsem naložil maso, zítra se bude grilovat :-p
Moje kancly
Za svůj život jsem měl dvě zaměstnání. V prvním jsem pracoval něco přes půlrok, ve stávajícím už jsem stejně dlouho. Čas na bilancování. Zkusím ale nehodnotit své minulé zaměstnavatele, ale kanceláře, které mi laskavě poskytli.
Kancelář první -- suterén plný vývojářů
Když zamíříte do školního suterénu a u výtahů pípnete kartou, dostanete se na Ústav pro informační systém Mendelovy univerzity. Uvolněné, napůl univerzitní prostředí; dveře pokryté programátorskými vtipy. Na konci chodby je vlevo vstup do velké místnosti čítající víc než deset pohlavně vyvážených vývojářů. Místností se ozývá několik různých rytmů klávesnic, programátoři koukají na terminály -- občas prohodí zdánlivě mimo kontext nějakou vtipnou poznámku. Občas se tu objeví někdo z jiného kanclu a iniciuje krátkou desetislovnou pracovní poradu. Vzadu na policích vynikají trofeje vypitých lahví a plechovek z "temabuildingových akcí".
Můj stůl (na snímku dominuje stůl kolegy, kterého jsem později nahradil) je většinou prázdný, občas se na něm válí entitně relační diagram nebo žlutý lísteček s nesrozumitelným nápisem.
Kancelář druhá -- bývalá serverovna
Tato miniaturní místnost o rozměrech 2x2m, které nikdo neřekne jinak než serverovna, se nachází v bývalém sídle Hnutí DUHA na Bratislavské. Samotná poloha v srdci brněnského Bronxu vnucuje správci sítě, který jde o sobotní noci řešit problém s výpadkem serveru, silně motivační myšlenku: má vzrušující zaměstnání. S narůstajícím množstvím výpadků však i tyto návštěvy zevšední a Bratislavská se stane jeho druhým domovem.
Na snímku je místnost po generálním úklidu, který bohužel výrazně narušil původní charakter tohoto místa. Vlevo, vpravo, pod stropem i pod stolem je hardware. Většinou nefunkční, zbastlený, nebo aspoň deset let starý. Na stole se většinou válí šroubky, CDčka, staré záruční listy, lístečky s hesly, zmatené TODO seznamy. Okno je zatemněné lepenkou, na kterou bývalý správce sítě zvenku nakreslil téměř neviditelný obrys Tuxe v nadživotní velikosti. Spolu se zaprášenými knihami, zbytky jídla, starého oblečení a karimatky, na které tu můj předchůdce spával, tvoří tyto střípky věrnou mozaiku ajťáckého životního stylu, který už nikdo neuvidí ve světle blikajících kontrolek hučících serverů. Nastoupil totiž cloud computing...
Kancelář třetí -- v koutku vstupní haly
Parkem, kolem Veřejného ochránce práv, přes Českou -- tudy se můžete dostat do nového reprezentativního sídla Hnutí DUHA. Zaměstnanci si obvykle vystačí s čipovou kartou a znalostí kódu u vstupních dveří. Vstupní místnost je rozdělena mohutnou přepážkou za kterou sedí šéf provozního oddělení, vítá návštěvy a vyřizuje telefonáty. Kanceláří každou chvíli někdo prochází; můj pracovní stůl je naštěsí schovaný v koutku za tiskárnou. Hardware jsem většinou povyhazoval; nově zbudovaná borová police je tak zatím nevyužitá. Servery mi příjemně hučí po levici, ale už to není to pravé ajťácké doupě.
Na stole mi leží UML diagramy nového intranetu (z druhé strany je obvykle text testovací stránky tiskárny), smlouvy s dodavateli a koncept vznikající dokumentace k počítačové síti. CRTčkový monitor zapojuji jen v případě potřeby -- především když programuji. To mi pak ruch kancelářská ruch trochu vadí. Bílá stěna by si zasloužila nějaký prvek -- asi plakát, nebo nástěnku; nejlépe obojí.
Závěr
Všechny kanceláře byly výborně situované -- jedna ve škole, kousek od školy v zajímavé oblasti, třetí v blízkosti parku a s výhledem na zbudování zahradní stezky na Špilberk, pod kterým sídlíme. Ostatní aspekty nevím jak srovnat, mám prostě pocit, že moje stávající kancelář je nejlepší
a to je asi důležitý. Hm, ... kdyby tam nebyla zavedaná hlavní Duhová telefonní linka, byl bych si tím jistější.
Budování střechy na chatě a všetečné otázky
"Proč vlastně existuje klampířská živnost?" Padla po půl dni práce na střeše otázka. "Věřím tomu že za dva dny praxe by to mohl dělat každej".
Následující diskuze se točila kolem toho, kolik by komu stačilo, aby se stal profesionálním klempířem. Fakt je, že rychlost pokrývání střechy během ní docela rostla.
Přijde mi, že takových povolání je hafo -- stačí trochu "common sense", Google, případně rada zkušenějšího kamaráda. Nebo ne?
Z víkendového pokrývání střechy mám jen pár fotek sbíjení štítu a netradičního použití žebříku
.
Moje práce
K úvahám o tom, že bych začal pracovat mě v průběhu života vedlo spoustu faktorů, hlavně touha získat nějaké zkušenosti a zaměřit se konečně na nějaký obor dost úzce, abych o něm taky něco dlouhodobě věděl a nepřipadal si jak informační bojler.
Všechny mé dřívější "práce" byly pouze dočasné (farmář, překladač zboží, číšník) a jejich příčinou byla jen společností vsugerovaná představa, že potřebuji peníze. Opravdové zaměstnání jsem jsem však získal v době, kdy jsem je potřeboval nejmíň a opravdovým motivem proč jsem požádal o zaměstnání v OKD ÚIKT MZLU byla nutnost šlehnout si přirozená sedativa, která by zmírnila bolest z duševních ran, které jsem utrpěl při vstupu do nové životní etapy. O tom však ale mnohem později. Pracovat jsem chtěl a potřeboval.
Ano, opravdu jsem nečekal, že budu dostávat nějaké peníze. Představa, že budu vyvíjet univerzitní informační systém (UIS) instalovaný na pěti českých a zahraničních univerzitách, denně ho používá ho více než 20 000 lidí -- ano za to bych si ještě nechal platit. Ale abych ho vyvíjel v jazyce, ve kterým jsem zatím napsal jen "Hello World"? Nakonec, proč ne. Stejně mě to na hodinu vychází jak když jsem večer doplňoval nápoje v Tescu.
Koupil a přečetl jsem si učebnici, prolítnul pár diplomových prací, zopakoval si základy SQL, naučil se pracovat s klasikou vim a mutt. Dbman nepočítám, ten je intuitvní. No, stejně mám pocit, že mi to nejde. To je problém, protože jsem ve zkušební době a kdo ví, co si myslí moji šéfové.
Tak jako tak primární účel moje práce splnila. Jako bonus mě fakt baví, vydělávám a pokud to půjde, určitě bych u ní pár let chtěl zůstat a naučit se něco pořádnýho. Navíc "projektant a analytik informačních systémů", nezní to krásně?





