LenkaKT L.M.A.T.

Linux: Z Intranetu do Internetu

Seriál o Linuxu, pátý díl, Softwarové noviny 11/2000

Připojení jednoho počítače k Internetu je až hříšně jednoduché. Chceme-li připojit k Internetu celou lokální síť, je to trochu složitější. V tomto díle si ukážeme jednu z možností, jak připojit lokální síť s Linuxovým serverem k Internetu. Pro připojení k Internetu není nutné do vlastní sítě nijak složitě zasahovat. Stačí koupit modem a připojit jej k serveru. Další za vás obstatá Linux IP Masquerading (IP MASQ), technologie podobná technologii NAT (Network Address Translation), používané v některých komerčních firewallech nebo routerech.

Jak IP MASQ funguje? Na serveru vznikne brána do Internetu. Server se navenek tváří jako počítač s IP adresou získanou od poskytovatele, ve vnitřní síti ale nadále představuje intranetový server se svou původní adresou. Všechny požadavky vedoucí do Internetu jsou automaticky posílány na server. Server potom správně rozesílá odpovědi jednotlivým počítačům v síti. Vlastní síť tak zvenku není vůbec vidět. IP MASQ navíc umožňuje vztyčit mezi vámi a záludným okolním světem ochrannou hradbu, aby k vám nepronikl žádný nezvaný host.

Čeho je vám třeba

Co pro zprovoznění takové technologie potřebujete? Počítač vybavený Linuxem, jenž bude sloužit jako brána a modem. Nepokoušejte se o maškarádu s jádrem, jehož číslo začíná ještě 1.X.X. Potřebujete alespoň jádro verze 2.0 nebo novější. S každou verzí jádra se postup pro spuštění maškarády trochu liší. Máte-li jádro 2.0 nebo 2.2, neměl by být s IP MASQ výraznější problém. V tomto článku se zaměříme především na verzi 2.2.X. Majitele novějších jader asi trochu zklamu: počínaje verzí 2.3. se architektura jádra lehce pozměnila a v dokumentaci zatím není příliš dobře popsáno, jak IP MASQ s tímto jádrem spustit.

IP MASQ by měl spolehlivě fungovat v těchto distribucích: Caldera (od verze 2.3), Debian (od verze 2.1), Linux Mandrake (od verze 5.3), RedHat (od verze 5.1), Slackware (od verze 7.0), SuSE (od verze 5.2) a Turbo Linux.

Při přípravě systému na spuštění IP MASQ bude velmi pravděpodobně nutné nově překládat jádro. Potřebujete proto jeho zdrojové kódy. Měly by být nedílnou součástí vašeho Linuxu (najdete je v adresáři /usr/src/linux). Jestliže je nemáte, musíte si je opatřit. Prohledejte instalační média, ze kterých jste si Linux instalovali, nebo se podívejte na server www.kernel.org, kde jsou dostupné zdrojové kódy všech dosud publikovaných verzí jádra.

Dále potřebujete zdrojové kódy modulů pro jádro. Nemáte-li doma, získáte je například na http://www.pi.se/blox/modutils/index.html nebo ftp://ftp.ocs.com.au/pub/modutils/.

Máte-li jádro 2.0, budete pro správné nastavení potřebovat ještě IP Chains ve verzi 1.3.9 nebo novější. Měla by být součástí vaší distribuce, protože je standardně vyžadována od jádra 2.1.102 (http://www.rustcorp.com/linux/ipchains/). IP Chains je nezbytná podpora jádra sloužící k filtrování paketů a vztyčení bezpečných firewallů.

Není možné v jednom článku popsat přesně všechny možné konfigurace a situace, jež mohou při pokusech s IP MASQ a IP Chains nastat. Dobrým pomocníkem jsou v takové situaci HOWTO: návody, jak v Linuxu provést to či ono. HOWTO jsou často součástí rozsáhlejších distribucí, ale jestliže je nemáte, můžete si je stáhnout na adrese http://www.linuxdoc.org. Podstatné informace najdete především v IP Chains HOWTO, IP Masquerade HOWTO a případně v IP Firewall HOWTO.

A konečně pro připojení k Internetu potřebujete něco, čím se připojíte: funkční modem nebo pevnou linku. Server by měl mít dvě nezávislá síťová rozhranní: pro vnitřní a vnější síť. Nejčastější kombinace je rozhraní eth0 pro vnitřní síť a ppp0 pro vnější síť. Odpovídá to připojení lokální sítě pomocí modemu. Server může být do Internetu připojen i pomocí pevné linky, v takovém případě by měl mít dvě síťové karty (eth0 a eth1): opět jednu pro přístup do Internetu a jednu pro vnitřní síť.

Hrabeme si v jádře

Nejprve zkontrolujte, jakou verzi jádra vlastně máte:

[lmat@duck modules]$ uname -a Linux duck 2.2.14-5.0 #1 Tue Mar 7 20:53:41 EST 2000 i586 unknown

Jak vidíte, já mám jádro 2.2.14-5.0. Majitelé jádra 2.2.11 a starších verzí by měli být velmi opatrní: tyto verze obsahují chybu v implementaci spolupráce s IP Chains a díky tomu i potenciální bezpečnostní díru. Doporučuji pořídit novější verzi jádra.

Nyní musíte nově sestavit a přeložit jádro systému. Je pochopitelné, že k tomu musíte být přihlášeni k systému jako root. Zazálohujte data (jeden nikdy neví) a přejděte do adresáře /usr/src/linux. K sestavení nového jádra, jeho překladu a instalaci je nutné nejprve spustit program, který nastaví parametry nového jádra, jádro přeložit a nově přeložené jádro umístit na správné místo.

Nové parametry jádra můžete upravovat v grafickém i textovém režimu. Chcete-li pracovat v textovém režimu, zadejete v příkazovém řádku (musíte být v adresáři /usr/src/linux) příkaz make config. Budete postupně dotazováni, co si přejete do jádra zahrnout. Po zobrazení dotazu můžete stisknout klávesu Y, chcete-li nabízenou volbu potvrdit, nebo N jestliže nesouhlasíte. Některé ovladače mohou být po překladu zahrnuty buď přímo v jádře, nebo dostupné jako vnější zaveditelné moduly. Tam, kde je to možné, máte proto k dispozici ještě klávesu M - modul. Nápovědu získáte ve všech případech stiskem klávesy ?. Možnosti, které máte k dispozici, jsou uvedeny vždy za dotazem v hranatých závorkách, velkým písmenem je uvedeno nastavení použité při posledním překladu jádra. Chcete-li ponechat původní nastavení, stiskněte klávesu enter.

Takto zadané nastavení se ukládá do souboru /usr/src/linux/config. Soubor je velmi důležitý, protože je přesnou informací o stavu jádra. Starý soubor proto zazálohujte na bezpečné místo: kdybyste se s IP MASQ nepohodli, umožní vám uvést systém do původního stavu.

Jádro můžete sestavit i v grafickém rozhraní. Slouží k tomu samostatný nástroj, který spustíte z příkazového řádku příkazem make xconfig. I tento příkaz je nutné spouštět z adresáře /usr/src/linux jako root. Otevře se vám okno s mnoha tlačítky. Jednotlivá tlačítka slouží ke vstupu do menu pro konfiguraci souvisejících parametrů jádra. Možné volby máte vypsány v dlouhém seznamu, na levé straně můžete myší povolovat nebo zakazovat jejich nastavení (u modulů je možné rozhodovat, zda se moduly stanou). Vpravo vedle názvu položky je tlačítko pro nápovědu k jednotlivým položkám. Všechny důležité volby, které uvedu v následujícím odstavci najdete pod tlačítky Loadable module support a Networking Options. Po ukončení nastavení stiskněte Save and Exit. Nové nastavení je uloženo do souboru /usr/src/linux/config.

Většinu svých původních nastavení jádra ponechejte, uvádím jen ta, jejichž hodnota je pro chod IP MASQ rozhodující. Jednotlivé volby za sebou následují v pořadí, v jakém jste na ně dotazování při sestavování jádra v textovém režimu. Až na několik případů, kde je na to upozorněno, je nutné všechny volby povolit (odpovídá stisku Y). U každé volby je v závorce napsaná velkými písmeny proměnná, kterou najdete v souboru /usr/src/linux/config. Před sestavováním nového jádra proto stačí zkontrolovat, zda náhodou staré jádro nevyhovuje i požadavkům pro IP MASQ. Ušetříte si tak mnoho času i námahy.

  1. Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL)

    Umožní vám později povolit IP MASQ.

  2. Enable loadable module support (CONFIG_MODULES)

    Umožní jádru pracovat s moduly, tedy i s modulem pro IP MASQ.

  3. Networking support (CONFIG_NET)

    Povoluje práci sítě.

  4. Packet
    	  socket(CONFIG_PACKET)

    Není úplně nutné, ale je doporučené. Umožní vám použít nástroj TCPDUMP pro odhalení zdroje problému při výskytu obtíží.

  5. Kernel/User netlink socket (CONFIG_NETLINK)

    Volitelné, ale umožní záznam útoků na bezpečnostní hradbu (firewall).

  6. Routing messages (CONFIG_RTNETLINK)

    NEPOVOLOVAT.

  7. Network firewalls (CONFIG_FIREWALL)

    Zapíná zmíněný nástroj IP Chains.

  8. TCP/IP networking (CONFIG_INET)

    Povoluje síť pracující s protokolem TCP/IP.

  9. IP: advanced router (CONFIG_IP_ADVANCED_ROUTER)

    NEPOVOLOVAT. Není nutné pro práci IP MASQ.

  10. IP: verbose route monitoring (CONFIG_IP_ROUTE_VERBOSE)

    Užitečné, umožňuje směrovat a monitorovat podezřelé pakety.

  11. IP: firewalling (CONFIG_IP_FIREWALL)

    Dovolí vztyčit kolem vaší sítě firewall, bezpečnou hradbu.

  12. IP: firewall packet netlink device (CONFIG_IP_FIREWALL_NETLINK)

    Je volitelné, ale umožní monitorovat útoky na hradbu.

  13. IP: always defragment (required for masquerading) (CONFIG_IP_ALWAYS_DEFRAG)

    Vyžadováno pro IP MASQ.

  14. IP: masquerading (CONFIG_IP_MASQUERADE)

    Povolí vlastní práci IP MASQ

  15. IP: ICMP masquerading (CONFIG_IP_MASQUERADE_ICMP)

    Umožní pracovat s ICMP pakety. Důležité při testování funkčnosti spojení.

  16. IP: masquerading special modules support (CONFIG_IP_MASQUERADE_MOD)

    Zajistí později přístup z vnější sítě přímo na konkrétní počítače vnitřní sítě.

  17. IP: ipautofw masq support (EXPERIMENTAL) (CONFIG_IP_MASQUERADE_IPAUTOFW)

    NEPOVOLOVAT.

  18. IP: ipportfw masq support (EXPERIMENTAL) (CONFIG_IP_MASQUERADE_IPPORTFW)

    Umožňuje počítačům z Internetu pracovat přímo s jednotlivými počítači ve vnitřní síti. Používá se pro elektronickou poštu, telent a WWW.

  19. IP: ip fwmark masq-forwarding support (EXPERIMENTAL) (CONFIG_IP_MASQUERADE_MFW)

    NEPOVOLOVAT.

  20. IP: optimize as router not host (CONFIG_IP_ROUTER)

    Optimalizuje jádro pro práci se sítěmi.

  21. IP: GRE tunnels over IP (CONFIG_NET_IPGRE)

    NEPOVOLOVAT.

  22. IP: TCP syncookie support (not enabled per default) (CONFIG_SYN_COOKIES)

    Velmi doporučováno pro základní bezpečnost sítě.

  23. Network device support (CONFIG_NETDEVICES)

    Povoluje síťovou vrstvu.

  24. Dummy net driver support (CONFIG_DUMMY)

    Může pomoci při ladění problémů.

  25. /proc filesystem support (CONFIG_PROC_FS)

    Povolit.

Po nastavení parametrů jádra je vhodné nejprve vyřešit závislosti příkazem make dep. Následuje vlastní překlad jádra. Existuje několik možností, jak jádro sestavit. Standardním postupem jsou příkazy make zImage nebo make bzImage. V takovém případě bude nové jádro po překladu uloženo v adresáři /usr/src/linux/arch/i386/boot. Jestliže používáte LILO, můžete si nové jádro rovnou i nainstalovat příkazem make lilo nebo make zlilo. Nakonec je nutné nově přeložit a nainstalovat i moduly jádra příkazy make modules a make modules_install. Po novém startu systému budete připraveni na spuštění IP MASQ.

Podrobnou nápovědu, jak postupovat při novém překladu jádra a co s ním potom vám poskytne kernel-howto. Není-li součástí vašeho Linuxu, určitě jej najdete na serveru www.linuxdoc.org, jenž doslova přetéká dokumentací a návody pro Linux.

Po sestavení nového jádra musíte ještě nově přeložit a nainstalovat moduly. Jinak IP MASQ fungovat nebude, neboť je také jedním z modulů jádra. Musíte proto ještě použít příkazy make modules a make modules_install.

Mámo, táto, přesvědč mě, že brouzdáme bezpečně!

Nyní vás čeká další velký krok: musíte zabezpečit svou vnitřní síť před útoky zvenčí. Nikdy nepropadejte jistotě, že se vám nemůže nic stát. Svět je v podstatě záludný a hnusný a žádná bezpečnostní díra nezůstane nepotrestána. Před připojením sítě k Internetu proto doporučuji podrobně prostudovat Security HOWTO.

Jak už to v Linuxu bývá, stavba hradby zahrnuje tyto kroky: příprava konfiguračních souborů a nové spuštění sítě. Bezpečnostní pravidla pro přístup do vaší sítě se definují v souboru /etc/rc.d/rc.firewall/. Následující výpis ukazuje základní a nejjednodušší soubor pravidel:

#!/bin/sh
    #
    # rc.firewall - Initial SIMPLE IP Masquerade test for 2.1.x and 2.2.x kernels using IPCHAINS
    #
    /sbin/depmod -a

    /sbin/modprobe ip_masq_ftp
    #/sbin/modprobe ip_masq_raudio
    #/sbin/modprobe ip_masq_irc

    echo "1" > /proc/sys/net/ipv4/ip_forward

    #echo "1" > /proc/sys/net/ipv4/ip_dynaddr

    /sbin/ipchains -M -S 7200 10 160


    #/sbin/ipchains -A input -j ACCEPT -i bootp_clients_net_if_name -s 0/0 67 -d 0/0 68 -p udp

    /sbin/ipchains -P forward DENY
    /sbin/ipchains -A forward -s 192.168.0.0/24 -j MASQ

Na prvním nekomentovaném řádku souboru (to jsou řádky, které nezačínají znakem #) se natahují všechny moduly potřebné pro chod IP MASQ. Na druhém řádku se nastavuje maškaráda i pro přenosy souborů pomocí FTP. Následující dva komentované řádky dělají totéž pro RealAudio a IRC. Ten, kdo chce přes Internet poslouchat rádio nebo klábosit s kamarády v IRC síti, nechť komentáře na začátku řádku smaže.

Následující řádky, začínající slovem echo jsou životně důležité: nastavují směrování adres. (Majitelé RedHatů nechť ještě zkontrolují ve svých souborech /etc/sysconfig/network-scripts/ifcfg-*, zda mají nastavenou proměnnou FORWARD_IPV4 na hodnotu yes). První řádek je určen pro uživatele s pevně přidělenou adresou připojené pomocí pevné linky. Uživatelům připojeným k Internetu modemem nebo využívajícím dynamické přidělování adres je určen řádek druhý. Vyberte si tedy ten správný.

Další řádek nastavuje některé časové limity, jejich podrobný popis najdete v dokumentaci. Všechna tři čísla jsou v sekundách, první se týká ukončení TCP spojení, druhé ukončení přenosu paketu a třetí je pro spojení přes protokol UDP.

Další řádek je důležitý opět jen pro uživatele, kterým je dynamicky přidělována adresa. Výraz boot_clients_net_if_name by měl být nahrazen názvem zařízení, kterému bude adresa přidělována: eth0, eth1 nebo ppp0.

Poslední dva řádky konečně spouští vlastní maškarádu. Jestliže jste si pro vnitřní síť zvolili jiný rozsah adres nebo masku podsítě, upravte je na správné hodnoty.

Po uložení souboru na správné místo mu ještě změňte přístupová práva tak, aby byl spustitelný (chmod 700 /etc/rc.d/rc.firewall).

Nyní musíte ochrannou hradbu vztyčit a spustit IP MASQ. Nejjednodušším způsobem je připojit na konec souboru /etc/rc.d/rc.local řádek:

echo "Loading the rc.firewall ruleset.." /etc/rc.d/rc.firewall

Tato možnost má jednu nevýhodu: bezpečnostní pravidla se nastaví až těsně před koncem startu systému, zatímco síť je spouštěna na začátku. Během startu systému tak vystavujete nechráněný počítač do sítě. Existuje proto ještě druhá, byť trochu složitější možnost: vytvořit spouštěcí skript v adresáři /etc/rc.d/init.d/. Popis tvorby skriptu by bohužel příliš přesáhl rozsah totoho článku, zájemci je najdou v IP MASQ HOWTO. Doporučuji též IPCHAINS HOWTO

Je-li síť, kterou pomocí IP MASQ k Internetu připojujete, rozsáhlá, můžete připojení omezit jen pro některé konkrétní počítače v síti. V takovém případě upravte konec souboru /etc/rc.d/rc.firewall: Nejprve zakážeme všem počítačům přístup ven a potom na samostatných řádcích povolíme připojení jednotlivým počítačům. Následující ukázka povoluje připojení k Internetu jen pro počítače s adresou 192.168.0.2 a 192.168.0.3:

/sbin/ipchains -P forward DENY
    /sbin/ipchains -A forward -s 192.168.0.2/32 -j MASQ
    /sbin/ipchains -A forward -s 192.168.0.3/32 -j MASQ

Nastavení ostatních počítačů v síti

Nyní zbývá jen pár drobností: upravit nastavení ostatních počítačů v síti. IP MASQ se dokáže domluvit s těmito operačními systémy:

  • Linux 1.2.x, 1.3.x, 2.0.x, 2.1.x, 2.2.x

  • Solaris 2.51, 2.6, 7

  • Windows 95, OSR2, 98

  • Windows NT 3.51, 4.0, 2000 (workstation i server)

  • Windows For Workgroup 3.11 (s přidanou podporou pro TCP/IP)

  • Windows 3.1 (s balíčkem Netmanage Chameleon)

  • Novell 4.01 Server s podporou služeb TCP/IP

  • OS/2 (včetně Warp v3)

  • Macintosh OS (s MacTCP nebo Open Transport)

  • DOS (doplněný o NCSA Telnet, případně DOS Trumpet)

  • Amiga (s AmiTCP nebo AS225-stack)

  • VAX Stations 3520 a 3100 s UCX (TCP/IP pro VMS)

  • Alpha/AXP s Linuxem (Redhat)

  • SCO Openserver (v3.2.4.2 a 5)

  • IBM RS/6000 s AIX

Ve všech operačních systémech je společné, co musíte jednotlivým počítačům nastavit:

  • IP adresa by měla být v rozsahu privátních používaných v lokálních sítítch.

  • Adresa brány je IP adresa počítače, na kterém je IP MASQ spuštěn.

  • Jméno domény je jméno, které jste přidělili svému Intranetu.

  • DNS server: jednak váš DNS server pro doménu (192.168.0.1), dále případně i DNS servery poskytovatele připojení nebo DNS server v síti, ke které se připojujete.

  • Maska podsítě by měla být nastavena na 255.255.255.0

Ve Windows všechny tyto údaje vyplníte v Ovládacích panelech v položce Síť. Jestliže se ve vaší vlastní vnitřní síti nevyskytuje žádný WINS server, ponechejte nastavení WINS nevyplněná, ostatní údajte vyplňte.

V Linuxu budete muset zkontrolovat, jak máte nastaveny proměnné: IPADDR (na 192.168.0.x), NETMASK (maska podsítě, tedy 255.255.255.0), GATEWAY (adresa brány, pravděpodobně 192.168.0.1), a navíc ještě BROADCAST na 192.168.0.255.

V Linuxu stačí zastavit a znovu spustit síťové služby, ve Windows musíte až na Windows 2000 po každé změně nastavení sítě spustit znovu celý operační systém. Až nainstalujete nové jádro na server, můžete se po jeho novém spuštění zkusit ponořit do Internetu.

Autorkou tohoto webu je LenkaKT, alias Lenka Kosková-Třísková. Bádám a vyučuji na TU Liberec.

Poslední změna: 3. 3. 2011