Let’s encrypt už brzy

Špatných zpráv bylo za poslední týden víc než jsme zvyklí a tak trochu odlehčím atmosféru. Před 14 dny jsme dokončili kód, který umožní spustit podporu Let’s encrypt na Roští. Zmiňoval jsem to i dřív, ale raději ještě jednou napíši: Museli jsme kompletně přepsat způsob, jakým jsou domény u aplikací uloženy. A co z toho plyne? Čeká nás masivní migrace.

V současné době jsou domény u aplikací uloženy ve velkém text fieldu a oddělené mezerou nebo novým řádkem. Systém s tím doposud nějak pracoval, ale určitě vás napadne, že spravovat tímto způsobem domény je nepohodlné. Nejvážnější problém jsou oprávnění. Tedy že subdomény z jedné domény druhého řádu je možné používat mezi více účty. Kontrola tohoto stavu je v současné době obalena hromadou kódu, který není nutný, protože ho může pohlídat databáze. A to je také to, oč jsme se snažili.

V nové verzi administraci bude mít každá doména druhého řádu zónu a v ní subdomény a tyto subdomény budou přiřazeny aplikacím. Pokud budete chtít použít u aplikace jen doménu třetího řádu, tak to samozřejmě nevadí, ale zónu pro celou doménu vám stejně vytvoříme. Není nějak povinné ji používat, ale je lepší, když na ní svoji doménu u registrátora namíříte.

Nicméně, tímto krokem získáme záznam v databázi pro každou doménu/subdoménu a můžeme k němu ukládat i další věci jako třeba informaci, že má být s SSL certifikátem nebo že pro ni máme získat certifikát ze služby Let’s encrypt.

A to je důvod, proč to tak dlouho trvá a ještě chvilku trvat bude. Migrace, kterou chystáme nebude snadná, nebude bez problémů a nebude hotová během pár minut. Musíme se na ní připravit, upravit naše vývojové prostředí a všechno pořádně otestovat. Všechno by se mělo rozjet příští týden ve čtvrtek a pokud to půjde dobře, další týden už bude možné aktivovat Let’s encrypt u vašich domén.

Kromě toho budeme schopni začít s implementací registrace domén, ale ještě předtím se chceme věnovat nové funkci „Služby“, která vrátí MongoDB tam kam patří, do naší administrace.

Jsme stále pod útokem

Dnes ráno došlo k dalšímu útoku na náš load balancer a proto jsme byli opět nuceni odpojit připojení ze zahraničí pro jeho IP adresu. Během včerejška jsme přesunuli všechny weby, které  u nás měly DNS zóny, na nový load balancer s Anti-DDOS ochranou a rozeslali emaily s informacemi pro domény, které u nás zóny nemají.

Tady je znění rozeslaného emailu:

Dobrý den,

v minulém týdnu jsme se stali objetí DDOS útoku, který na nějaký čas vyřadil náš load balancer. Došlo k jeho zahlcení a jedinou účinnou ochrannou, kterou jsme mohli rychle nasadit, bylo odpojení příchozího provozu ze zahraničí s výjimkou Slovenska. Útok nebyl veden přímo na nás, ale na jednoho z našich zákazníků. Během víkendu se nám podařilo vymyslet plán, jak se podobným problémům vyhnout. Rozhodli jsme se ve spolupráci s datacentrem Master DC umístit provoz na Roští.cz za technologii Radware DefensePro, která umí podobné útoky odfiltrovat a nepouštět je až k serveru. Ten totiž není uzpůsoben k tomu, aby se s nimi vyrovnal. Více informací si můžete přečíst na našem blogu na následující URL adrese:

http://blog.rosti.cz/jsme-pod-ddos-utokem-5-gbps/

Součástí řešení je bohužel změna IP adres. Uživatelům, kteří u nás mají vedené DNS záznamy jsme nastavení už změnili, ale jak možná tušíte, tento email dostáváte proto, že DNS záznamy k vaší doméně či doménám u nás nemáte. Chceme vás tedy poprosit o změnu A a AAAA záznamů na následující hodnoty:

A: 185.58.41.93 (z 83.167.253.87)
AAAA: 2a01:430:144::2 (z 2a01:430:225::9)

Změnu nemusíte uspěchat, ale důrazně ji doporučujeme. Netušíme, který konkrétní web byl pod útokem, protože charakter útoku nám to neprozradil. Pokud se jednalo zrovna o váš web, tak bez změny DNS záznamů nebudeme příště schopni ho efektivně ochránit. Níže posíláme seznam domén, které v současné době ukazují na původní IP adresy:

* SEZNAM DOMÉN

Omlouváme se za nepříjemnosti a děkujeme za pochopení.


Vaše Roští.cz.

Současně s tímto bychom vás chtěli poprosit, abyste zvážili, zda k nám DNS zóny nepřesunout. U CZ domén stačí nastavit NSSET ROSTICZ, u ostatních domén NS servery:

  • ns1.rosti.cz
  • ns2.rosti.cz

Budeme pak schopni takto nečekané změny provádět operativně sami.

Jsme pod DDOS útokem 5 Gbps

Řada z vás si všimla, že máme poslední dva dny problémy s dostupností. S pomocí technické podpory datacentra Master DC se nám je daří držet na uzdě, bohužel tím, že máme vypnutý provoz směrem ze zahraničí. Ale pojďme se na to podívat popořadě.

DDOS je typ útoku, u kterého desítky tisíc počítačů z celého internetu posílají požadavky na jeden server. V našem případě jde o UDP flood a TCP SYN flood o síle 3 až 5 Gbps v závislosti na denní době. Přes noc útok ustal a ráno zase začal.

V serverech máme 1 Gbps síťové karty, takže podle grafů server končil se svým firewallem někde u 890 Mbps, což je tak 200-400 × víc, než běžný průměrný provoz. Cokoli dalšího se už k serverů nedostalo a bylo zahozeno switchi na cestě přes datacentrum. Na běžný provoz na lince už nedostalo a tak se server tvářil, že neodpovídá. Packet loss v této době byl 95 %, tedy 19 paketů z 20 se nedostalo do cíle.

Podobné útoky jsou bohužel každodenní realitou internetu a neexistuje proti nim efektivnější obrana než linka a síťové prvky, které ten provoz zvládnou.

Cílem útoku jsme s jistotou nebyli my, protože by nám útočník pravděpodobně šel po homepage, která je oddělená od ostatních aplikací. Cílem je jeden z našich klientů a bohužel nemáme jak zjistit, který to je. Všechny aplikace z nového Roští jsou schovány za IP adresu určenou pro load balancery, takže pokud někdo má útočit na našeho klienta, půjde po této adrese, což se stalo.

Naším současným opatřením je vypnutí provozu ze zahraničí. Klienti, o kterých víme, že jsou na tomto provozu závislí, tak je přesměrováváme na jiný load balancer, který není pod útokem. Nemůžeme ale takto přesunout všechny, protože nevíme, na který konkrétní web je veden útok.

Naštěstí ale víme, je infrastruktura Master DC si s něčím takovým umí poradit, takže jediným problém je, dostat tento provoz od serverů pryč. Rozhodli jsme se tedy load balancer umístit do Master Cloudu, kde je k dispozici služba Radware DefensePro. Všechen provoz tedy půjde sem a odsud bude přesměrován na server, kde běží konkrétní aplikace. Řešení je tedy stejné, jen load balancer se přesune z našich serverů do cloudu.

Radware DefensePro funguje na základě statistiky. Dokáže si zmapovat běžný provoz a všechno ostatní odfiltruje. Nemáme s tímto řešením žádné zkušenosti, ale věříme, že v Master DC vědí, proč ho mají. Teď jen doufáme, že útok opadne na dostatečně dlouhou dobu, aby se Radware DefensePro naučilo, jak naši uživatelé komunikují. Tahle změna bude vyžadovat úpravu DNS záznamů. Uživatelé, kteří mají DNS u nás, se nemusí o nic starat. Ostatním pošleme email s informacemi. Ke změně dojde během neděle, takže příští týden už pojedeme zase bez zádrhelů.

Domény a MongoDB

Máme za sebou další PoSobotu a tak je možná čas se podívat trochu zpátky. Poslední měsíc řešíme dva problémy a to je MongoDB a správu domén. Obojí se nám trochu protahuje, takže vám alespoň zkusím nastínit, kde je problém.

MongoDB nám udělala čáru přes rozpočet, když nám ztratila informace s několika přístupy. Data zůstala netknuta, ale uživatelé se k nim nedostali. Rozhodli jsme se kvůli tomuto incidentu podporu pro MongoDB na chvilku vyhodit z administrace. Pokud MongoDB potřebujete, napište nám na podporu, databázi vám samozřejmě dáme.

Abychom mohli MongoDB vrátit zpátky do administrace, musíme udělat jednu důležitou změnu a to vytvořit službu, kterou pracovně nazýváme „services“. Bude to další sekce v administraci pod aplikacemi, kde ale nebudou vaše skripty s HTTP výstupem, ale budou tam databáze, alespoň tedy ze začátku hlavně databáze.

Když se to podaří, budete si moci vytvořit vlastní instanci MySQL, PostgreSQL, ElasticSearch a MongoDB, které budou společné pro všechny vaše aplikace. Všechno bude samozřejmě připravené k použití, ale pokud máte nějaké speciální požadavky na konfiguraci, s touto službou je budete moci realizovat. Cena kontejnerů s databázemi bude stejná jako s aplikacemi. Bude tedy záležet jen na vaší aplikaci, kolik toho bude potřebovat.

S tímhle budeme mít ještě dost práce, takže nebudu říkat, že to za 14 dní bude, ale tohle je naše priorita číslo jedna hned po doménách.

Domény jsou momentálně naše největší bolest, protože jsou uloženy v databázi dost nesystémově, což nám v současnosti komplikuje implementaci SSL certifikátů přes Let’s Encrypt a další služby, které jedna za druhou implementují své API. Podporu pro domény jsme měli už dvakrát napsanou, ale nemůžeme se shodnout, jak to nakonec má být, takže oboje implementace jsme hodili do koše.

A tak jako všechny dobré věci, i tahle se nakonec vyřeší náhodou. Pustili jsme se do mikroservicy s REST API, která bude spravovat naše load balancery. Díky tomu dostaneme z administrace opravdu hodně kódu a přesuneme starosti s SSL úplně mimo ni, což nám nakonec pomůže propojit domény v aplikacích, DNS a poště tak, abychom zajistili bezpečnost i čistý design.

První dvě zahozené implementace sice fungovaly, ale při testování jsme v nich našli chyby, které bychom do produkce poslat nemohli a navíc by nás stálo strašně moc času je vyřešit. Napotřetí to tedy snad vyjde. Nechceme slibovat termíny ale už nadcházející víkend budeme snad vědět, zda to bude za 14 dní nebo někdy později.

A tak pokračujeme dál, držte nám palce a na další PoSobotě snad už s podporou SSL.

PHP 7.0 je tu a k němu nový server

Dlouho jsme na blog nic nepsali, ale teď se nám podařilo dokončit něco, co stojí za zmínku. Nasadili jsme stabilní PHP 7.0, které už se nemusíte bát používat produkčně. Kromě toho máme nový server a také jste si mohli všimnout změn při placení. Ale teď postupně.

Mezi obrazy máme PHP 7.0 už nějaký čas, ale uživatelům jsme ho nedoporučovali. Čekali jsme na podporu ze strany komunitního repositáře Dotdeb, který nám PHP 7.0 naservíroval do Debianu a my se mohli soustředit „jen“ na integraci do našeho prostředí. Dělali jsme dříve nějaké pokusy s vlastními buildy PHP, ale Dotdeb má celý proces odladěný a není důvod této práce nevyužít.

S PHP 7.0 jsme se rozhodli změnit jednu věc – už nepoužíváme Apache, ale Nginx + PHP-FPM. Proti Apachi nic nemáme, ale mod_php pouvažujeme za špatný koncept. Jedinou velkou překážkou by mohla být podpora pro .htaccess, která je bez Apache samozřejmě pryč. Nicméně u nás máte plnou kontrolu nad web serverem a jeho konfigurací, takže pokud .htaccess opravdu potřebujete, tak použijte nástroj na převedení .htaccess do konfigurace Nginxu na winginx.com a váš kód bude opět fungovat a navíc rychleji. Je to dáno tím Apache se zapnutou podporou .htaccess s každým requestem testuje přítomnost .htaccess v aktuálním adresáři i nadřazených adresářích a pokud na nějaký narazí, tak ho zpracuje. Tato operace se nedá cachovat, protože by pak Apache nereagoval na změny v těchto souborech.

Během ledna jsme pořídili nový server, nainstalovali a umístili do racku. Pár týdnů se zdánlivě nic nedělo, ale to není tak úplně přesné, protože jsme do administrace dodělávali podporu pro více serverů. Ta tam byla již od začátku, ale až s novým serverem jsme tuto funkci začali testovat a nakonec dostali až do produkce. Nová administrace má teď k dispozici tři web servery a na nich spoustu místa pro nové aplikace. Aplikace založené v posledních 14 dnech tedy už běží na novém, rychlejším hardwaru.

Abych nezapomněl, už u nás můžete platit kartou. Od začátku jsme pracovali na vlastním fakturačním systému, který jsme měli ještě před založením Roští a bylo nám líto ho nevyužít. A tak jsme se v lednu s Martinem bavili o Fakturoidu, že by mohl mít pro Roští docela pozitivní přínos a také bychom se zbavili jednoho systému, o který se musíme starat.

Netrvalo to moc dlouho a pustili jsme se do implementace. Úpravy kódu zabraly jen pár hodin, za to migrace dat a ladění celého platebního workflow nás stálo 4 dny. Ale vyplatilo se. Máme platbu kartou, nemusíme se starat o fakturaci, účetní si exportuje data, která potřebuje a účetně jsme otevřeli Roští platbám z celého světa a hlavně z docela komplikované Evropy.

Koncem roku jsme se také stali plátci DPH. Bohužel jsme kvůli tomu museli mírně zvednout ceny. Na druhou stranu nám to pootevřelo dveře k větším klientům.

A co budeme dělat dál? Určitě domény. Už máme hotový kód, který z domén dělá záznam v databázi, což je klíčové pro mnoho věcí. Částečně jsme implementovali podporu pro SSL certifikáty k těmto doménám a se slinou v koutku už koukáme na Let’s encrypt, které nám ale spoustu věcí úplně neulehčuje, třeba limitem kolik certifikátů můžeme stáhnout za hodinu a za den. Kromě certifikátů se nám konečně otevře cesta k registraci domén. Nechci slibovat nějaké termíny, ale doufám, že příště vám už budu psát o tom, jak implementujeme API nějakého registrátora.

Druhá věc, kterou máme v plánu, je naše API. K němu máme napsáno jen velmi málo. Máme dokumentaci, kterou zatím upravujeme a diskutujeme nad tím, co má být vlastně cílem, k čemu ho budeme používat my a k čemu naši uživatelé, ale už nejsme daleko od skutečné implementace. Opět nebudu slibovat termíny, ale slíbím vám API, přes které budete moct přidávat, upravovat, mazat a monitorovat aplikace. Stejně jako domény, tak API vyžaduje nějaký refactoring v naší administraci. Část logiky dnes máme na místech, kde ji úplně nechceme a než se pustíme do API, musí být tato část vyřešena.

A to je zatím vše. Pracujeme na Roští každý den a jsme rádi, že se vám líbí. Víme to, protože za poslední tři měsíce jsme vyrostli dvakrát. Děkujeme, že jste s námi a že díky vám můžeme posunovat hosting v České Republice za hranice FTP a PHP.