|
Vyhledávání |
Upozornění Tato příručka je určena lidem, kteří jsou zkušenými linuxovými administrátory serveru. Správa firewallu může být velmi nebezpečná. Může se například stát, že si uzavřete přístup na ssh port a budete nuceni se k serveru připojit v nouzovém režimu a opravovat chyby. V horším případě by sse mohlo stát, že si nastavíte skript, který se bude spouštět automaticky po startu serveru a zablokuje vždy všechny potřebné porty pro komunikaci se serverem. V takovém případě by jste se na server už nemuseli dostat vůbec. Jestliže se necítíte v této záležitosti příliš zdatní, raději firewall nenastavujte! Co to je firewall?Je to software, který blokuje některé porty na vašem serveru a jiné zase může otevřít pro komunikaci. Pro příklad si představte že máte barák, v něm máte přední a zadní vchod, ale ten zadní nikdy nepoužíváte. Kvůli omezení bezpečnostních rizik ho tedy zablokujete. Stejné je to u firewallu na počítači, ve zkratce zablokujete porty, které nepotřebujete. Které porty se běžně používají?Varování! Ze všeho nejdříve buďte velice opatrní, protože riskujete uzavření špatného portu. Představte si, že uzavřete SSH port a budete muset server restartovat pomocí telnet, nebo webmin. Běžně otevřené porty na serverech OVH: 21 - FTP (FTP server).
22 - SSH (šifrovaný přístup k shell). 23 - telnet (nešifrovaný přístup k shell). 25 - SMTP (SMTP server). 53 - DNS (DNS server). 80 - HTTP (web server ). 110 - POP3 (přístup na mail). 143 - IMAP (přístup na mail, nepoužíváte-li POP3). 443 - HTTP (šifrovaný přístup na web). 1000 - Webmin (Konfigurační panel serveru). Tyto porty jsou obecně otevřené, ale můžete mít na serveru programy, které otevírají jiné. Je jen na vás, které porty necháte otevřené a které uzavřete. Jakmile se rozhodnete, jste připraveni pokračovat. Iptables je mocný firewall instalovaný na všechny servery OVH. Postup práce je následující: Otevřeme některé porty a ostatní uzavřeme. Pro příklad necháme otevřené pouze porty 22 (SSH) a 80 (HTTP). Toto je pouze příklad, vaše nastavení budete muset provés podle vašich potřeb. Připojte se přes SSH jako root.
Nejdříve zkontrolujte verzi iptables: $ /sbin/iptables -V iptables v1.2.4 Verze je příliš stará, proto nainstalujeme verzi 1.2.9: $ cd /root $ wget $ tar xvfj iptables-1.2.9.tar.bz2 $ cd iptables-1.2.9 $ make KERNEL_DIR=/usr/src/linux $ make install KERNEL_DIR=/usr/src/linux $ cd /sbin $ mv iptables iptables.old $ mv iptables-restore iptables-restore.old $ mv iptables-save iptables-save.old $ ln -s /usr/local/sbin/iptables iptables $ ln -s /usr/local/sbin/iptables-restore iptables-restore $ ln -s /usr/local/sbin/iptables-save iptables-save $ /sbin/iptables -V iptables v1.2.9 Hotovo, iptables je aktualizované a můžeme pokračovat. Zde je výčet pravidel práce: $ /sbin/iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Můžeme zde vidět 3 řetězce: Input, Forward a Output. Nejdříve budeme pracovat na řetězci Input (příchozí přenos dat). Autorizujeme porty 22 a 88: $ /sbin/iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
$ /sbin/iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT -A INPUT : Nastavíme naše pravidla pro příchozí data. Zobrazíme všechny pravidla: $ /sbin/iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp — anywhere anywhere tcp dpt:ssh ACCEPT tcp — anywhere anywhere tcp dpt:www Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Sekce INPUT se plní pomalu, to je dobré znamení ;) Vidíme, že základní politikou je přijímat vše => Chain INPUT(policy ACCEPT). Chceme ale zablokovat všechen přenos dat, který jsme dříve neautorizovali. Proto přidáme pravidlo, které zablokuje ostatní porty. Ale narazíme na problém: Jakmile bude navázáno spojení našeho serveru s kernel.org serverem, například pro stažení nového kernelu, naváže se s webem spojení a bude se čekat na odpověď. Odpověď opustí kernel.org správně, ale jak dojde na server, když vše blokujeme? Naštěstí ne iptables velmi mocný příkaz a umí roztřídit pakety, podle jejich stavu. Přidáme pravidlo: $ /sbin/iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
Nyní můžeme ostatní zablokovat (Pozor, zde bude firewall plně funkční, zkontrolujte, zda máte opravdu správné nastavení, jinak si můžete nechtěně zablokovat celý server!): $ /sbin/iptables -A INPUT -i eth0 -j DROP
Pro toto pravidlo máme 2 možnosti. První je zahodit pakety, které přišli a nebyli povoleny firewallem. Klient ale v tomto případě bude čekat na odpověď dokud nevyprší čas. Druhé řešení je vrátit paket. Jestliže přijde nevyžádaný paket, vrátíme zpět klientovy chybovou hlášku a nebude tedy čekat tak dlouhou dobu, nežli vyprší čas. Odpovědět na paket je čistější, ale zahodit ho je bezpečnější. Představte si například někoho, kdo vám posílá pakety stále dokola na špatný port, váš server ho nebude moci zpracovat a s pravidlem na odpověď se bude zbytečně zatěžovat server. Rozhodnutí jak se špatnými pakety zacházet je čistě na vás ;) Pro resetování vašeho firewallu napište: $ /sbin/iptables -F INPUT
Tento příkaz vymaže všechna pravidla pro část Input. Jestliže chcete přidat pravidlo mezi první a druhé, napište toto: $ /sbin/iptables -I INPUT 2 ... následuje vaš pravidlo
Pro smazání pravidla číslo 3, napište toto: $ /sbin/iptables -D INPUT 3
Pro absolutní blokaci IP adresy: $ /sbin/iptables -I INPUT 1 -s -j DROP
Nyní je firewall spuštěný. Zkuste skenovat váš server, uvidíte otevřené pouze porty 22 a 80. Jestliže je sken velice pomalý, je to kvůli pravidlu DROP. Jestliže chcete zablokovat ICMP protokol (dotaz ping), musíte ponechat alespoň ping.ovh.net, proxy.p19.ovh.net, proxy.rbx.ovh.net a proxy.ovh.net na monitorování ping vašeho serveru. Umožní to OVH týmu zasáhnout v případě poruchy či nedostupnosti serveru. Kromě toho musíte povolit IP adresy jako v následujícím příkladu: IP adresa vašeho serveru je aaa.bbb.ccc.ddd Musíte nechat projít: aaa.bbb.ccc.250 Příklad: 213.186.57.153 musí nechat projít 213.186.57.250 Jestliže jste vlastníkem serveru HG, nechte projít IP adresu aaa.bbb.ccc.249 (dočasné pravidlo). Jestliže zablokujete všechny dotazy ping a také dotazy od OVH, nebudeme schopni zkontrolovat stav vašeho serveru, což může způsobit problém. Pro povolení pingu z monitorovacích serverů OVH napište následující příkazy: /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.ovh.net -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.p19.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.rbx.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source ping.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source IP.250 -j ACCEPT # IP = aaa.bbb.ccc according to the previous rule /sbin/iptables -A INPUT -i eth0 -p icmp --source IP.249 -j ACCEPT # temporary, only for HG server Co se týče SSH, jestliže chcete mít přístup pouze z vaší osobní IP adresy, doporučujeme ještě povolit cache.ovh.net, protože kdyby došlo k problémům na serveru, budeme schopni na serveru zasáhnout. Jestliže pro naše techniky uzavřete port 22, nebudeme moci zasáhnout, když bude server zablokován. Pro povolení SSH z našeho serveru napište následující pravidlo: /sbin/iptables -A INPUT -i eth0 -p tcp --dport 22 --source cache.ovh.net -j ACCEPT
Jestliže máte RAID filter, nezapomeňte povolit NFS připojení. My mužeme povolit cokoli, co přichází z naší interní sítě 192.168.0.0/16: /sbin/iptables -A INPUT -i eth0 -p tcp --source 192.168.0.0/16 -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p udp --source 192.168.0.0/16 -j ACCEPT Jestliže máte nastavení clusteru, musíte povolit port 79, aby mohlo OOC komunikovat s distributorem zátěže. /sbin/iptables -A INPUT -i eth0 -p tcp --dport 79 -j ACCEPT
Zde je kompletní příklad skriptu, který chrání server pomocí iptables. Nastavení není příliš přísné, protože všechny služby, které jsou na serveru jsou dostupné, ale může být použit pro vaše vlastní nastavení: /sbin/iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 110 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 10000 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 21 --source xx.xx.xx.xx -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 22 --source cache.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 22 --source xx.xx.xx.xx -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.p19.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.rbx.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source ping.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --source 192.168.0.0/16 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p udp --source 192.168.0.0/16 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 79 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -j REJECT V těchto pravidlech musíte nahradit xx.xx.xx.xx, IP adresou vašeho serveru, která je použitelná při připojení k serveru přes FTP a SSH. Jakmile je váš server perfektně nastaven, budete muset vytvořit skript, který při každém rebootu spustí toto nastavení. Zde je příklad, kde se spouští soubor Firewall, který je v adresáři /etc/init.d/: #!/bin/sh
1. chkconfig: 3 21 91 2. description: Firewall IPT=/sbin/iptables case "$1" in start) $IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT $IPT -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 110 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 10000 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 21 --source xx.xx.xx.xx -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 22 --source cache.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 22 --source xx.xx.xx.xx -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source proxy.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source proxy.p19.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source proxy.rbx.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source ping.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --source 192.168.0.0/16 -j ACCEPT $IPT -A INPUT -i eth0 -p udp --source 192.168.0.0/16 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 79 -j ACCEPT $IPT -A INPUT -i eth0 -j REJECT exit 0 ;; stop) $IPT -F INPUT exit 0 ;; echo "Usage: /etc/init.d/firewall {start|stop}" exit 1 ;; esac Skriptu dejte práva 700 a napište "/etc/init.d/firewall start" pro jeho nastartování a "/etc/init.d/firewall stop" pro jeho zastavení. Pro jeho automatické spuštění po restartu počítače zadejte: $ /sbin/chkconfig --level 3 firewall on
$ /sbin/chkconfig --level 06 firewall off Před spuštěním skriptu ho pořádně prověřte, protože se může stát, že se již nedostanete do svého počítače kvůli jeho zablokování! $ /sbin/chkconfig --level 3 firewall on
$ /sbin/chkconfig --level 06 firewall off Before launching the script at each startup, check that is correct otherwise your server will be absolutely blocked! |