Firewall, router, gateway
Snad nejčastější otázka, která se zde ve fóru opakuje, je „Jak použít počítač s Ubuntu, připojený k internetu, pro sdílení připojení pro další počítače?“. Možných řešení je mnoho, pokusím se nastínit jedno, velmi jednoduché, efektivní a podle mého názoru i bezpečné. Lze jej snadno použít i pro připojení a zabezpečení celé menší domácí nebo firemní počítačové sítě.
Konfigurace IP adres
Na výběr máte 3 metody:
Ubuntu metoda
V Ubuntu veškeré nastavení sítě lze provádět pomocí dvou souborů a to /etc/network/interfaces a již výše zmiňovaného /etc/resolv.conf, žádné další příkazy nejsou třeba akorát po editaci, je potřeba znovu načíst script který se o to vše postará a který se spouští po každém startu a tak editace těchto souborů vám zajistí správné nastavení i do budoucna, restart tohoto scriptu provedeme:
sudo /etc/init.d/networking restart #další volby jsou "start" a "stop"
Nastavení /etc/network/interfaces
- Statická adresa - stejné nastavení jako nahoře
# The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 10.0.0.2 gateway 10.0.0.1 netmask 255.255.255.0 network 10.0.0.0 broadcast 10.0.0.255
- Dynamická adresa - to je adresa přidělená vaším serverem nebo poskytovatelem
# The loopback network interface auto lo iface lo inet loopback # The primary network interface - use DHCP to find our address auto eth0 iface eth0 inet dhcp
Klasická metoda
Centrem celého řešení je počítač se dvěma síťovými kartami (eth0, eth1) a s nainstalovaným Ubuntu.
Tento počítač je síťovou kartou eth0 trvale připojen k internetu. Naprosto nehraje roli, jestli má toto rozhraní veřejnou nebo privátní adresu (za NAT), jestli je IP nastavena staticky nebo přes DHCP. Konfiguraci IP pro toto rozhraní stanovuje poskytovatel připojení k internetu. Rekněme, že se jedná o tyto hodnoty:\ IP adresa: AAA.BBB.CCC.DDD\ Maska: EEE.FFF.GGG.HHH nebo /ZZ\ Výchozí brána: III.JJJ.KKK.LLL\ DNS server: MMM.NNN.OOO.PPP
Pokud máte masku ve tvaru netmask EEE.FFF.GGG.HHH převeďte ji do tvaru prefix /ZZ programem, který nainstalujte z balíčku ipcalc
ipcalc 255.255.255.0 | grep Netmask
kde pro hodnotu netmask 255.255.255.0 dostanete prefix 24 se kterou budeme dále pracovat:
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111.00000000
Druhá síťová karta tohoto počítače (eth1) může být připojena přímo kříženým kabelem k dalšímu počítači, nebo nekříženým kabelem k nějakému aktivnímu prvku (např. switch), ke kterému budou připojeny další počítače.
Na rozhraní eth1 provedeme nastavení pro privátní síť, například takto:\ IP adresa: 10.0.0.1\ Maska: 255.255.255.0 po převodu /24
Totoho nastavení dosáhneme zadáním příkazu
sudo ip address add 10.0.0.1/24 dev eth1
Na ostatních počítačích, které se prostřednictvím „serveru“ s Ubuntu budou připojovat k internetu, provedeme nastavení takto:\ IP adresa: 10.0.0.2 (na poslední pozici cokoliv 2-254)\ Maska: 255.255.255.0 po převodu /24 (stejná jako maska na rozhraní eth1 serveru)\ Výchozí brána: 10.0.0.1 (ip adresa rozhraní eth1 serveru)\ DNS server: MMM.NNN.OOO.PPP (stejný jako DNS server používaný serverem)
Na strojích s Windows XP tyto hodnoty zadáte v Local Area Connection → Properties → Internet Protocol (TCP/IP) → Properties.\ Na strojich s Linuxem DNS server nastavte v souboru /etc/resolv.conf (adresu nastavte podle vaší potřeby)
nameserver 10.0.0.1
IP adresu a masku nastavíte příkazem
sudo ip address add 10.0.0.2/24 dev eth1
a výchozí bránu příkazem
sudo route add default gw 10.0.0.1
Pokud nyní zkusíte ping na adresu serveru, pakety by měly správně přicházet. Vše lze výrazně zjednodušit nainstalováním a nastavením DHCP serveru na počítač s přímým připojením k internetu.
Alternativní metoda
Tato metoda je ideální, pokud moc nechcete dumat nad tím, proč je něco tak, jak je, ale chcete mít rychle internet na dvou PC…
Na následujícím příkladu je počítač, který má dvě síťové karty:
- eth0 je síťová karta připojená k internetu
- eth1 je síťová karta připojená k domácí síti
- 192.168.0.1 je IP adresa počítače, který zprostředkovává připojení k síti (pozor, mluvím o vnitřní adrese, vnější může být jakákoliv!)
- 255.255.255.0 po převodu /24 je maska podsítě ve vnitřní síti
Otevřeme terminál a zadáme následující příkazy:
sudo -s ip address add 192.168.0.1/24 broadcast 192.168.0.255 dev eth1 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward apt-get install dnsmasq ipmasq /etc/init.d/dnsmasq restart dpkg-reconfigure ipmasq # vyberte možnost Po nahození sítových rozhraní nano /etc/sysctl.conf # doplňte řádek net.ipv4.ip_forward = 1 /etc/init.d/networking restart exit
Na druhém počítači pak nastavíme:
- IP: 192.168.0.2
- Maska podsítě: 255.255.255.0 po převodu /24
- Brána: 192.168.0.1
- DNS: Podle providera různé. Doporučuji DNS zjistit na připojeném počítači a to samé zadat do druhého
Firewall a routování
V Ubuntu je k dispozici celá řada nástrojů pro konfiguraci iptables. Po vyzkoušení řady z nich jsem si vybral FireHOL. Nemá (nebo má?) sice pěkné grafické klikací rozhraní jako třeba Firestarter, zato razí zásadu, která se mi nesmírně líbí: Jednoduché věci se dají dělat jednoduše, zároveň ale není nijak znemožněno nebo znepříjemněno nastavování složitějších konstrukcí.
Nainstalujte balík firehol
.
Konfigurace firewallu je uložena v souboru /etc/firehol/firehol.conf, jako příklad uvádím stav s povolenými pouze základními službami pro odchozí spojení (http, https, ftp, dns, ssh, icq, jabber apod.). Serverové služby jsou zakázané. Další nastavení najdete na domovské stránce FireHOLu: http://firehol.sourceforge.net/ V posledních řádcích je definované směrování z internetu do privátní sítě.
# # $Id: client-all.conf,v 1.2 2002/12/31 15:44:34 ktsaou Exp $ # # This configuration file will allow all requests originating from the # local machine to be send through all network interfaces. # # No requests are allowed to come from the network. The host will be # completely stealthed! It will not respond to anything, and it will # not be pingable, although it will be able to originate anything # (even pings to other hosts). # version 5 # Accept all client traffic on any interface # interface any world # client all accept DEFAULT_CLIENT_PORTS="1024:65535" server_icq_ports="tcp/5190" client_icq_ports="default" interface eth1 internal protection strong 10/sec 10 policy drop server dns accept server netbios_ns accept server netbios_dgm accept server netbios_ssn accept server samba accept server squid accept server icmp accept server ping accept client all accept interface eth0 external protection strong 10/sec 10 policy drop server icmp accept server ping accept server ssh accept client dns accept client icmp accept client ping accept client telnet accept client http accept client https accept client ftp accept client ntp accept client ssh accept client icq accept client jabber accept client webcache accept router internal2external inface eth1 outface eth0 masquerade route all accept
Firewall aktivujete úpravou souboru /etc/default/firehol (START_FIREHOL=NO změňte na START_FIREHOL=YES) a zadáním
sudo firehol restart
Nyní můžete na všech počítačích přistupovat na internet, v rámci privátní sítě můžete sdílet soubory, adresáře a tiskárny. Firehol se automaticky spouští s každým startem počítače. V případě zájmu o FireHOL rád blíže vysvětlím jeho funkci a jednotlivé položky v konfiguračním souboru.
Zdroje dalších informací
- http://cs.wikipedia.org/wiki/IP_adresa Pokud nerozumíte slovu ipadresa tak článek pro vás
- http://www.root.cz/serialy/vse-o-iptables/ Seriál o iptables na root.cz
- http://deja-vix.sk/sysadmin/firewall.html Vynikající návod ve slovenštině pro Debian (použitelné i pro Ubuntu)
- http://www.debianhelp.co.uk/network.htm V angličtině ale stručný a jasný
Grafická úprava: Tento návod potřebuje důležité grafické a stylistické úpravy. Více...
Konvence: Tento návod nesplňuje některé z na Wiki zavedených konvencí. Více...