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:

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

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.

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í

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...