Archiv pro rubriku: Nezařazené

Linux: Fail2ban a Mikrotik firewall

Bezpečnost a ochrana skupiny serverů jako celku je velmi efektivní, pojďme si ukázat jak elegantně spojit firewall Mikrotik s řešením Fail2ban a chránit tak skupinu serverů jako jeden celek.

Fail2ban, nástroj dobře znám z unix světa, co dělá, jak funguje, v jednoduchosti scanuje log soubory, hledá chybné pokusy o přihlášení na jejich základě blokuje (ban) IP adresu utočníka po určitou dobu v lokálním firewallu serveru, jednoduché.

Složitěji?

Mějme následující situaci, Mikrotik jako hraniční firewall a router, za routerem skupina fyzických či virtuálních serverů, cílem je propojit fail2ban na serverech, tak aby upravovaly firewall na hraničním routeru, tedy ban bude probíhat na firewallu.

Proč?

Je pravděpodobně, že skupina serverů sdílý společný rozsah veřejných IP adres v případě pokusu o napadení jednoho serveru se automaticky začné chránit celý rozsah a to chceme, chránit celek je většinout(nikoliv vždy) efektivnější.

Obrázek pro dokreslení situace.

linux-fail2ban-mikrotik

Mikrotik firewall router

Základem je mít možnost přístupu na router Mikrotik via ssh, nejlépe pomocí klíčů, vygeneruje si tedy pár veřejný-soukromý klíč, přenést a importovat veřejný klíč na firewall router, nezadávejte při generování passphrase!

root@raspberrypi:~# ssh-keygen -t dsa
 Generating public/private dsa key pair.
 Enter file in which to save the key (/root/.ssh/id_dsa):
 Enter passphrase (empty for no passphrase):
 Enter same passphrase again:
 Your identification has been saved in /root/.ssh/id_dsa.
 Your public key has been saved in /root/.ssh/id_dsa.pub.
 The key fingerprint is:
 ac:6c:02:92:bb:b0:b8:e4:4d:bc:ac:c6:eb:1b:cd:

Vzniklý soubor id_dsa.pub přeneste na Mikrotik router (winbox, ftp, scp …), založte samostatného uživatele a importujte mu klíč, za address dosaďte IP adresu linux serveru s instalovaným fail2ban. (uživatel je omezen na přístup z této IP, nebo nechte volné pokud chcete či chráníte ssh jinak), na Mikrotiku máme vše hotovo.

[admin@ro1.faha.neutron.mojeservery.cz] > user add name=fail2ban address=xx.xx.xx.xx group=full
[admin@ro1.faha.neutron.mojeservery.cz] > /user ssh-keys import public-key-file=id_dsa.pub user=fail2ban

Linux server

Instalace fail2ban démona (Debian součásti reposítářů, pro CentOS použíjte např. tento návod).

root@raspberrypi:~# apt-get install fail2ban

Nyní ta “magie”, vytvořet soubor /usr/local/bin/mikrotik-fail2ban s tímto obsahem, za xx.xx.xx.xx dosaďte IP adresu (nebo dns, v této ukázce) firewall Mikrotik (většinou brána)

#!/bin/bash
ssh -l failban -p22 -i /root/.ssh/id_dsa ro1.faha.neutron.mojeservery.cz "$1"

Naučíme fail2ban používat Mikrotik, vytvořte soubor /etc/fail2ban/action.d/mikrotik.conf s tímto obsahem.

# Mikrotik fail2ban
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = mikrotik-fail2ban ":ip firewall filter add action=drop chain=forward dst-address=<ip> comment=AutoFail2ban-<ip>"
actionunban = mikrotik-fail2ban ":ip firewall filter remove [:ip firewall filter find comment=AutoFail2ban-<ip>]"

Jsme téměr u konce, zapneme služby které mají být kontrolovány službou fail2ban a nastavíme action na mikrotik, v našem případě si ukážeme službu FTP, editujte soubor /etc/fail2ban/jail.conf.

[vsftpd]
enabled  = false
port     = ftp,ftp-data,ftps,ftps-data
filter   = vsftpd
logpath  = /var/log/vsftpd.log
action = mikrotik
sendmail-whois[name=FTP, dest=havel@mojeservery.cz, sender=fail2ban-neutron@mojeservery.cz]
maxretry = 5
bantime = 300

Hotovo!

To bylo snadné, že?! Nyní postup můžete rozšířit na libovolný počet serverů v DMZ, dostanete automaticky ochranu celku při pokusu o napadnutí jednoho stroje.

Tento základní mustr lze zdokonalit, vylepšit, meze fantazii se nekladou, dejte pozor na přílišnou kreativitu.

Děkuji za Váš čas. František Havel

SMTP-CLI: Nadupaný řádkový SMTP klient pro Vaše skripty

Hledáte řádkově orientovaný, jednoduchý a přitom schopný nástroj pro odesílání emailů z Vašich skriptů?

Zkuste smtp-cli, autorem je tuzemský vývojář Michal Ludvig (logix).

SMTP-CLI (smtp-client, smtp-command line interface) je smtp klient/nástroj napsaný v jazyce Perl (jeden samostatný soubor, ~ 30kb) s podporou pro:

  • STARTSSL, SMTP-AUTH
  • IPv4, IPv6
  • plaintext zprávy, html zprávy
  • přílohy, inline obrázky, mime-type
  • charset, text-encoding
  • načítání dat ze souborů
  • skriptovatelný
  • debug, testování SMTP

Instalaci,popis nasazení, ukázky nejlépe popisují přímo stránky smtp-cli a github.

http://www.logix.cz/michal/devel/smtp-cli/
https://github.com/mludvig/smtp-cli

Podpořte autora skrz Paypal.

Dnes to bylo rychlé, díky za Váš čas. František Havel

Linux: EoIP tunel proti Mikrotik

EoIP tunel je technologie důvěrně známá ze zařízení společnosti Mikrotik, eoip (ethernet over IP) je tunelovácí nešifrovaný protokol postavený na zapouzdření ethernet rámce do standartního GRE protokolu (Geneneric Routing Encapsulation, IP protokol 47, RFC1701).

Mikrotik samotný podporuje pochopitelně i GRE tunel, ovšem můžete být v situaci, kdy bude vyžadováno použití EoIP, EoIP samotný je stavěn primárně pro tunelování L2 provozu (přenáší navíc proti GRE Ethernet hlavičku a MAC adresy), umí fragmentovat, zachová tedy MTU, má relativně nízký overhead (28bytes), vetší režii právě díky dis/assemblování a tím i nižší propustnost, ale hlavně velmi snadnou konfiguraci, proto je oblíben.

Zpět k našemu problému, na jedné straně máme Mikrotik s RouterOS a na druhé straně Linux router (např. Debian).

linux-eoip-mikrotik

Projekt linux-eoip implementoval proprietární řešení EoIP Mikrotik, autorem je Denys Fedoryshchenko , stáhneme zdrojový kód, přeložíme, nainstalujeme, nastavíme. (https://code.google.com/p/linux-eoip, předpokládejme nainstalovaný překladač GCC)

root@raspberrypi:/usr/src# wget https://linux-eoip.googlecode.com/files/linux-eoip-0.5.tgz
root@raspberrypi:/usr/src# tar -xvzf linux-eoip-0.5.tgz
root@raspberrypi:/usr/src# cd linux-eoip-0.5
root@raspberrypi:/usr/src/linux-eoip-0.5# ./configure
root@raspberrypi:/usr/src/linux-eoip-0.5# make
root@raspberrypi:/usr/src/linux-eoip-0.5# make install

Máme nainstalováno, v /usr/local/bin/eoip je samotný démon, k samotnému spuštění je potřeba ještě konfigurační soubor, ukázka a spuštění démona.

root@raspberrypi:~# cat /etc/eoip.cfg 
[zeoip0]
id=50
dst=x.x.x.x
root@raspberrypi:~# /usr/local/bin/eoip /etc/eoip.cfg

Konfigurační soubor je velmi jednoduchý, id je ekvivalent tunnel-id na Mikrotiku, dst je ekvivalent remote-address, tedy vzdálená adresa protějšího routeru, soubor může obsahovat libovolné množství tunelů, konfigurace na Mikrotik routeru najdete v sekci /interface eoip postačí pouze dodržet shodná tunnel-id a vyplniť korektní adresu protějšku.

Po spuštění bude vytvořeno nové rozhraní s názvem uvedeným v eoip.cfg, v našem případě zeoip0, chová se jako konec tunelu, je možné na něj nasadit spojovací ip adresy, použít ho pro routing či dále bridge-ovat, lze ho zmiňovat v iptables apod.

TIP! Šifrování provozu EoIP tunelem lze dosáhnout např. vytvořením PPTP tunelu mezi dvěma routery a EoIP tunel vystavět v rámci PPTP tunelu, přihlédneme-li k menší bezpečnosti  je to jednoduchý způsob, jak výkonově (CPU) tak konfiguračně, na vše ostatní je IPSec, pokud tedy máme dostatečně výkonný router.

Závěrem, pro zvídavé geeky doporučuji udělat si čas prostudovat si zdrojové kódy projektu linux-eoip, jsou velmi jednoduché, přehledné a dají Vám přehled o tom jak vlastně funguje takové zapouzdření, co na to jádro atd., prostě dobré čtení.

A to je vše, děkuji za Váš čas. František Havel

Mikrotik: partitions, k čemu je to dobré?

Funkce partitioning nebo raději hezky česky rozdělení NAND flash paměti na oddíly byla představena v RouterOS verze 6 ještě behěm vývoje této řady, konkrétně v6rc5, pojďme si ji v rychlosti představit a ukázat její možnosti.

Partitioning umožňuje:

  • rozdělení interní flash paměti na oddíly (max 8)
  • instalace OS separátně do každého oddílu
  • nastavit aktivní boot oddíl
  • nastavit fallback oddíl pokud aktivní selže (vhodné pro upgradování RB s možností návratu v případě selhání)
  • integrované nastroje pro rozdělení, klonování bežícího systému do oddílu, uložení/obnova aktuální (running) konfigurace z/do oddílu
  • podpora RouterBOARD s architekturou MIPS, PowerPC, CCR (x86 platforma není podporována)

Typická aplikace pro rozdělení je nasazení/testování nové verze RouterOS s možností návratu k předchozí, pojďme na to.

[admin@MikroTik] > /partitions print
Flags: A – active, R – running # NAME FALLBACK-TO
0 AR part0 next

(zde vidíme pouze jeden oddíl je aktivní (A) tedy bootujeme z něj a running (R), právě z něj běžíme )

[admin@MikroTik] > partitions repartition partitions=2
Repartitioning requires reboot. Continue, yes? [y/N]:

(vytvoříme si dva oddíly, je vyžadován reboot, původní part0 zůstane zachován pouze se změní velikost).

mikrotik-partitions-3 mikrotik-partitions-4

Předchozí printscreen zobrazuje dva oddíly (part0, part1), původní part0 obsahuje náš systém, oddíl part1 je zatím prázdný jak je z obrázků vidět, nyní je možné pomocí funkce copy udělat kopii oddílu part0 -> part1, položka Fallback To je nastavitelná, výchozí hodnota next určuje chování v případě selhání bootování z part0 zkusit další oddíl v tomto případě tedy part1.

Jdeme do finále, naklonujeme aktivní systém, pro případ zálohy a uložíme aktuální konfiguraci od oddílu part1.

[admin@MikroTik] > /partitions copy-to part1
status: done

mikrotik-partitions-5 mikrotik-partitions-6

[admin@MikroTik] /partitions> save-config-to part1
status: done

Hotovo! V oddílu part1 máme klon systému včetně konfigurace, vzdálený upgrade RouterOS občas nedopadne nejlépe, zařízení přestane reagovat a je nutný zásah s fyzickou přítomností, bohužel systém je po tuto dobu nefunkční, chytrý fallback nám zachránil situaci, máme zpět původní systém, takový “safe mode” nad celým systémem.

TIP: použít scheduler pro pravidelnou kopii konfigurace na záložní oddíl (např. 1x denně bude dostačovat)

Oficiální dokumentace Mikrotik, http://wiki.mikrotik.com/wiki/Manual:Partitions.

A to je vše, děkuji za Váš čas. František Havel

Linux: Blokujeme čínu,rusko firewallem a ipset

S Čínou i Ruskem jsou potíže, jsou veliké.

Nedávno zde proběhl článek Linux firewall: Blokujeme pomocí IPSET jak blokovat rozsáhlá pravidla v linux firewallu bez výkonové penalizace.

Dnes bych rád na toto téma lehce navázal, ukážeme si jak efektivně zablokovat provoz z konkrétní země, v našem případě jde o Čínu a Rusko, bude to jednoduché a rychlé, slibuji.

Co budeme potřebovat? Nástroj IPset,wget a seznam rozsahů konkrétní země.

Vytvoříme si dvě hash tabulky, následně stáhneme pomocí nástroje wget soubor veřejných rozsahů, aplikujeme v jednoduchém cyklu na ipset a poté pouze nasadíme iptables.

Pojďme na to!

root@havel-machine:~# ipset -N china hash:net
root@havel-machine:~# ipset -N russia hash:net

root@havel-machine:~# wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone
root@havel-machine:~# wget http://www.ipdeny.com/ipblocks/data/countries/ru.zone

root@havel-machine:~# for i in $(cat cn.zone ); do ipset -A china $i; done
root@havel-machine:~# for i in $(cat ru.zone ); do ipset -A russia $i; done

root@havel-machine:~# iptables -A INPUT -p tcp -m set --match-set china src -j DROP
root@havel-machine:~# iptables -A INPUT -p tcp -m set --match-set russia src -j DROP

A to je vše! Dejte si pozor kam umístíte iptables DROP pravidla, musí být povětšinou před zbytkem pravidel, jinak nebudou mít efekt.

Prozkoumejte podrobněji www.ipdeny.com , k dispozici jsou i agregované seznamy rozsahů (v našem případě použit ne-agregovaný seznam, ipset agreguje za nás), pěkný je online generátor pravidel do iptables,ipchain,ipfw.acl. Co mě překvapilo je i seznam IPv6 rozsahů http://www.ipdeny.com/ipv6/ipaddresses/blocks/ , prostě skvělé.

K dokonalosti je vhodné celé řešení zabalit do scriptu, ošetřit možné chyby kolem wget a pravidelně aktualizovat, nechávám za domácí úkol.

Díky za Váš čas. František Havel

Zemřel sir Terry Pratchett, Úžasná Zeměplocha žije dál.

Dnes ve věku 66 let zemřel Terry Pratchett, děkujeme, nezapomeneme. RIP

http://www.bbc.com/news/entertainment-arts-31858156

Měl výraz sekačky na trávu, která právě zjistila, že si tráva založila odbory.

Míň vlasů k česání, ale na druhou stranu zase větší kus obličeje k mytí… 

"Varuju vás!Jsem zoufalý muž!" "To je naběračka, kámo. Ale hezkej pokus."

"Čas je droga. Když ho užíváte příliš mnoho, zahubí vás." 

"... Já měl dojem, že filozofové jsou lidé, kteří uvažují logicky!" 
Didactylos pokrčil rameny. 
"Víš, já to vidím tak, že logika je jen způsob, jak se mýlit ve velkém."

terry_81600230_21d7e4b7-0ef8-45f5-a72f-496371c890fe

Cloud computing (IaaS, PaaS. SaaS) a jak ho uchopit?

V jednoduchosti je krása, cloud je uvnitř složitý, navenek jednoduchý, není cílem tohoto článku popsat cloud, definovat, opakovat, na jasném popisu se neshodnout dnes ani odborníci.

Spíše než popis vnitřní krásy interní složitosti cloudu uvažujme o něm jaké o distribučním modelu vývoje informačních technologiích, platformu pro poskytování software, služeb i infrastruktury.

Dokáže Váš IT koordinátor správně uchopit celou myšlenku cloudu, využít jeho potenciál, vybrat vhodné služby pro Váš, cloud dnes nejsou jen virtuální servery a zdaleka ne každá firma poskytující virtuální servery poskytuje cloud i když to ráda tvrdí.

Klíčové je pochopení distribučního modelu, zeptejte se svého cloud poskytovatele jaký distribuční model poskytuje, pokud Vám odpoví, že všechny, buďte ostražití.

Distribuční model

  • IaaS (Infrastructure as a Service), infrastruktura jako služba, zákazník si pronajímá části škálovatelné infrastruktury (servery, disková úložiště, procesorový čas, paměť , síťovou infrastruktury) ať už skutečné nebo virtualizované, typickým představitelem jsou dnes právě virtualizované servery. Populární nástrojem respektive komplexním řešením pro IaaS je Openstack , díky otevřenému API je široce přijímán, jedna z výhod je možnost přechodu zákazníka mezi poskytovateli IaaS, laicky řečeno obdobně jako když změníte mobilního operátora.
  • PaaS (Platform as a Service), platforma jako služba, v nejužší představě jde o aplikační platformu, službu pronájmu kompletních prostředků pro vývoj, udržbu životního cyklu aplikace, často je součástí framework či specifické IDE, vývojové a ladící nástroje. Nejde tedy o pronájem již hotové aplikace, ty je třeba si vyvinout, PaaS představuje pouze “motor” pro Vaše aplikace, zákazník nemá většinou možnost odejít k jinému PaaS poskytovateli. Typický představitel PaaS je Google App Engine.
  • SaaS (Software as a Service), software jako služba, zákazník si kupuje pouze přístup k aplikaci, nevlastní licenci, přistupuje k ní typicky přes prohlížeč či nějakou formu vzdálené plochy. Výhodný nástroj pro běžné a méně náročné aplikace, předem známé náklady a nízké počáteční náklady, centralizované updaty software. Typickou ukázkou je dnes Google Apps, Outlook.com nebo z českých luhů a hájů Flexibee, Icewarp. Dejte si vždy pozor na smlouvy v tomto případě pronájmu software.

Konec, shrnutí, a co Váš poskytovatel, Váš ICT koordinátor, Vaše IT, nyní máte základní přehled o modelech cloudových služeb, ptejte se jich na vhodnou volbu a proč právě to, či ono.

Typická chyba, pronájem služeb typu SaaS je dnes velmi populární, dokáže obsloužit široké spektrum požadavků, z pohledu poskytovatele je mnohdy snažší i dražší směrem k zákazníkovi poskytnout IaaS, typicky virtuální server, v silné konfiguraci, nabídnout software, licence, podporu administrace, vyřešit vzdálený přístup, vše stojí nemalé měsíční finanční prostředky.

Buďte chytří, buďte cloud!

Děkuji za Váš čas. František Havel.

Linux: Jak zjistit veřejnou IP adresu v terminálu?

Dnes to bude jednoduché, ale překvapivě se tento problém poměrně hojně vyskytuje v běžných provozních podmínkách.

Přepokládejme následující scénář, máme Linux systém schovaný za NAT , tedy na rozhraní máme neveřejnou lokální IP adresu a funkční síťování v podobě výchozí brány a DNS, přístup k mašíne je skrze ssh, neni k dispozici grafické prostředí, pouze terminál.

Jaká je naše veřejná IP adresa, jak nás vidí svět?

Jednoduše, nejčastěji používám nástroj curl, telnet bohužel, bohudík už přestává být standartní současní distribucí.

havel@havel-machine:~$ curl ifconfig.me
46.167.201.250
(používám hlavně toto neb se mi to dobře pamatuje)

Další funkční služby podobné ifconfig.me.

  • havel@havel-machine:~$ curl ip-addr.es
  • havel@havel-machine:~$ curl icanhazip.com
  • havel@havel-machine:~$ curl ident.me
  • havel@havel-machine:~$ curl whatismyip.akamai.com

Nakonec pár dalších netradičních možností aneb jde to i jinak a proto Linux* milujeme.

  • havel@havel-machine:~$ dig +short myip.opendns.com @resolver1.opendns.com
  • havel@havel-machine:~$ curl -s checkip.dyndns.org | sed ‘s/.*Moje  adresa: \([0-9\.]*\).*/\1/g’
  • havel@havel-machine:~$ wget -q -O – checkip.dyndns.org | sed -e ‘s/[^[:digit:]\|.]//g’

A to je vše, dalších způsobů bude jistě na “tuny”.

Hezké je např. toto velmi jednuché API http://api.ident.me.

Díky za Váš čas. František Havel

 

SERVER: Z 0 na 100% za méně než hodinu!

Automatizována IT infrastruktura je hudba budoucnosti, je to klíč ke spolehlivému, efektivnímu fungování.

Moment, moment, jak budoucnosti a co pak znamenají všechny ty zkratky jako puppet, CFengine, chef, salt? Pravda, žadná budoucnost, ale realita současnosti!

Rozhodli jsme se v MOJEservery.cz už od začátku to udělat jinak, správně, nezáleží kolik serverů máte k administraci, zda-li jeden nebo 1000, inovace v podobě automatizace se vždy vyplatí.

S příchodem dvou nových zákazníků v podobě dvou virtuálních serverů s linux systémem jsme byli postavaní před rozhodnutí jak do budoucna rozumně adminovat větší množství serverů.

Po prostudování možností padla volba CMS (Configuration Management System) na nástroj puppet.

Puppet, je cms nástroj, jde o klient/server software pro popis vaši IT infrastruktury  v “jednoduchém” jazyce a následné udržení infrastruktury dle přechodzí definice.

Puppet se skládá ze serveru (master) a agentů (nodů, klientů), master se snaží udržet konfiguraci dle definice na agentu či skupině agentů.

Proč puppet?

  • obsažen ve std. repositářích námi používaných distribucí (Debian, Ubuntu LTS server)
  • předhledná syntaxe ( individuální pohled, ale dobře se nám to čte )
  • nativní podpora pro konfiguraci komponent systému i software (Apache, MySQL, APT, …)
  • podpora a rozšířenost
  • puppet forge ( komunitní repositář modulů )

A co bylo dál? Připravili jsme puppet master server, připravili si první čistý server Debian stable v KVM virtualizaci, následoval popis instalace jednotlivých komponent pro puppet, které jsem následně spojili do jednoho celku.

A výsledek?

  • vytvoření virtuálního server v IAAS ~ 30minut (zde máme ještě dost co zlepšovat, vize je napojení se na API, např. deltacloud)
  • zprovoznění puppet agenta a spuštění deploymentu
  • SUMA sumárum: 45 minut
  • Produktem je kompletně připravený server pro provoz web aplikaci s PHP, SQL, PHP-FPM, Apache, Fastcgi, NTP, Postfix, FTP, SCP, Denyhost, Firewall, Memcached.

A co se tím dá ještě dělat? Tak se podívejte a tam směřujeme.

Automatisation-AWS-PuppetLabs

Doporučuji na rozjezd přečíst tuto šťavnatou diplomovou práci, Michal Bryxí FAV ZČU Plzeň 2011.

A to je vše, příště si třeba ukážeme něco praktického.

Díky za Váš čas, František Havel.