Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube).
Provozovatel čínské sociální sítě TikTok dostal v Evropské unii pokutu 530 milionů eur (13,2 miliardy Kč) za nedostatky při ochraně osobních údajů. Ve svém oznámení to dnes uvedla irská Komise pro ochranu údajů (DPC), která jedná jménem EU. Zároveň TikToku nařídila, že pokud správu dat neuvede do šesti měsíců do souladu s požadavky, musí přestat posílat data o unijních uživatelích do Číny. TikTok uvedl, že se proti rozhodnutí odvolá.
Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.
Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.
V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).
Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
V dnešním díle bychom si měli podrobněji rozebrat nastavení routeru a ukázat si, jak se pracuje s jednou minidistribucí určenou právě k provozování routeru.
V minulých dílech jsem si o DMZ řekli něco málo obecně, prošli jsme si i
modelové topologie sítí, proto si myslím, že byste si určitě měli přečíst i
minulé díly (pokud jste tak již neučinili ).
Hned na úvod bych chtěl podotknout, že routování je opět docela velké téma, o kterém by se toho dalo napsat hodně. Doufám, že tento článek bude obsahovat alespoň to základní (poznámky, připomínky a případné otázky prosím pište v diskuzi, pokusím se na ně odpovědět).
Takový linuxový router je, co se peněz týče, poměrně levná záležitost. Bude vám na něj stačit nějaký stařičký počítač (klidně i 486 či nějaké staré Pentium) a libovolná distribuce Linuxu. Můžete použít běžnou distribuci (RedHat, Debian atd.), kterou patřičně "ořežete" a necháte v ní jen to, co je potřeba. Nebo můžete použít speciální minidistribuci. Poměrně zajímavý je projekt LRP - Linux Router Project, což je distribuce na jednu disketu (!). Jak se s ní pracuje si řekneme dále.
Nejprve si, ale (opět trošku obecněji) projděme základní nastavení sítě v Linuxu (pozn. vše, co se netýká LRP, jsem testoval v distribuci RedHat 7.3, takže doufám, že vše bude podobně fungovat i jinde).
V mnoha UNIXech každé síťové rozhraní má svůj "soubor" v adresáři
/dev
. V Linuxu tomu tak není; každé síťové zařízení je
vytvářeno dynamicky v softwaru, který jej momentálně potřebuje (není tedy
reprezentováno patřičným "souborem zařízení").
Prvním předpokladem úspěchu je mít funkční síťovou kartu. Pokud máte
nějakou běžnou síťovku a originální jádro z vaší distribuce, tak by to
většinou neměl být problém. Jestli vaše jádro s kartou spolupracuje
si můžete ověřit při startu systému ve výpisech z jádra nebo pokud to
nestihnete zkuste příkaz dmesg | grep eth0
(příp.
eth1
...). Pokud je vše v pořádku, tak se vám může zobrazit
třeba něco takového:
eth0: VIA VT6102 Rhine-II at 0xf0000000, 00:c0:9f:18:dc:b1, IRQ 11.
eth0: MII PHY found at address 1, status 0x7809 advertising 01e1 Link 0000.
Ještě podotknu, že pro projevení se změn není třeba restart počítače, vše bude fungovat buď ihned nebo stačí restartovat službu network např. takto:
# service network restart
nebo
# /etc/init.d/network restart
Dále si můžeme (pokud to již nemáme z dřívějška) nastavit jméno počítače
a to příkazem hostname
:
# hostname router
Pro další nastavení sítě můžete v RedHatu použít program
/usr/bin/netconfig
, pomocí něhož nastavíte např. IP adresu,
masku sítě, DNS server atd. a který vypadá asi tak jako vidíte na
obrázku:
My si ale ukážeme jak se vše nastaví pomocí příkazového řádku a konfiguračních souborů.
Základním nástrojem (příkazem) pro nastavování IP adresování ve většině
distribucí Linuxu je ifconfig
. Základní tvar tohoto příkazu
je:
ifconfig zařízení adresa volby
Samotný příkaz ifconfig
nám vypíše aktuální stav. Tento
příkaz má spoustu voleb. Pokud vás budou zajímat i jiné než ty, o kterých
bude řeč, tak zkuste obvyklé man ifconfig
.
Nejdříve si nastavíme tzv. rozhraní "loopback" (česky se překládá jako "místní smyčka") Loopback je speciální rozhraní, které umožňuje síťové připojení ke svému vlastnímu počítači. Je mu vyhrazena IP adresa 127.0.0.1. Konfigurace tohoto rozhraní je jednoduchá, stačí napsat:
# ifconfig lo 127.0.0.1
Nyní již přejdeme k síťové kartě, příklad nastavení může vypadat třeba takto:
# ifconfig eth0 192.168.1.1 netmask 255.255.255.0 up
Tento příkaz nastaví IP adresu a masku podsítě, systém si sám odvodí adresu pro všesměrové vysílání (broadcast), která bude 192.168.1.255. Pokud byste někdy chtěli rozhraní eth0 deaktivovat použijte příkaz:
# ifconfig eth0 down
Podobně bychom nastavili všechna ostatní síťová rozhraní (v případě routeru musíte mít minimálně dvě).
To, co jsme teď provedli, má jednu chybu: po restartu o veškeré
nastavení přijdeme. Proto v případě, že všechno funguje (základní
diagnostickou utilitou je ping) je třeba vše zapsat do patřičných
konfiguračních souborů. Je ještě možnost příkazy ifconfig
...
zapsat do nějakého rc.X sktriptu, ale není to moc používané ani elegantní
(ale fungovalo by to ).
Nastavení síťového rozhraní:
/etc/sysconfig/network-scripts/ifcfg-*
Jméno stroje (hostname) a výchozí brána: /etc/sysconfig/network
Nastavení síťového rozhraní a routování:
/etc/network/interfaces
Můj soubor ifcfg-eth0
vypadá třeba takto:
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
Obdobně nastavíme i soubory pro ostatní rozhraní (např. ifcfg-eth1).
Samotný routovací proces je relativně jednoduchý. Příchozí paket je porovnán s údaji v routovací tabulce a podle toho, který údaj je nejpřesnější, tak na to rozhraní je paket následně odeslán. A právě aby toto mohlo fungovat je potřeba mít správně nastavenou routovací tabulku. K tomu je používán speciální příkaz, který zadané argumenty převádí na volání jádra, které potom samotné routování provádí. Tento příkaz se jmenuje route. Obecný tvar tohoto příkazu je:
route prikaz typ cilsit netmask maska gw brana dev dn
Výpis routovací tabulky můžete získat např. pomocí příkazu:
# /sbin/route -n
parametr "-n" zajistí, že se nebudou převádět IP adresy na jména (čili nepotřebujeme funkční DNS), výsledek může vypadat nějak takto:
Destination | Gateway | Genmask | Flags | Metric | Ref | Use | Iface |
192.168.1.0 | 0.0.0.0 | 255.255.255.0 | U | 0 | 0 | 0 | eth0 |
127.0.0.0 | 0.0.0.0 | 255.0.0.0 | U | 0 | 0 | 0 | lo |
0.0.0.0 | 192.168.1.254 | 0.0.0.0 | UG | 0 | 0 | 0 | eth0 |
Flags |
Shrnutí stavu spojení, písmena znamenají: U     spojení je aktivní (UP) H     cíl představuje hostitelský počítač G     cíl představuje bránu (Gateway) |
Metric | Vyjadřuje délku trasy, má smysl u systémů, kde lze do jednoho cíle dojít několika cestami (viz. náš druhý příklad). Trase s nižší metrikou se obvykle dává přednost. Tyto informace nevyužívá samotné jádro, ale některé routovací protokoly (např. OSPF). |
Ref | Počet referencí na tuto trasu, informaci opět nepoužívá jádro Linuxu, ale uvádí se protože ji mohou využívat jiné operační systémy. |
Use | Počet úspěšných hledání ve vyrovnávací paměti tras. Hodnotu lze zobrazit zadáním příkazu route -F. |
Nejlépe asi bude vše si demonstrovat na příkladech. Nejdříve si představme malou ethernetovou síť, kde nám router spojuje pouze lokální síť LAN a internet (pochopitelně na takovém routeru by běžela spousta jiných věcí jako např. proxy server, firewall, možná mail server atd., ale o to nám teď nejde). Protože je to síť malá, používáme statické routování a IP adresy třídy C.
Pro směrování paketů do lokální sítě na routeru nastavíme:
# route add -net 192.168.1.0 netmask 255.255.255.0
eth0
A pro připojení na internet (místo eth1
bychom v malé síti
mohli použít třeba ppp0
):
# route add default eth1
Na pracovních stanicích v síti LAN je potřeba nastavit:
# route add default gw 192.168.1.1 eth0
Tím určíme, že pakety, které nemají adresu v místní síti, se budou posílat na router (který je pak předá dál na internet).
Ve druhém příkladě již budeme mít síť větší, s několika routery, a proto bude pro nás výhodné použít tzv. dynamické routování, ke kterému používáme démona routed, jež je součástí balíčku NetKit, a který zajišťuje dynamické routování s pomocí protokolu RIP, tzn. v případě výpadku jednoho z routerů jsou aktualizovány všechny ostatní a pakety mohou putovat jinou cestou.
Třídu IP adresy si zvolíme podle potřeby (podle velikosti sítě), pro ilustraci použiji opět třídu C.
Na každém routeru musíme provést pouze dva příkazy, takže např. na routeru 1 provedeme:
# route add -net 192.168.1.1 netmask 255.255.255.0 eth0
# /usr/sbin/routed
Obdobně nastavíme i router 2, 3 a 4. Poté už by se měl démon routed postarat o všechno ostatní. Při spuštění automaticky nalezne všechny aktivní síťové porty a odesílá a přijímá zprávy na každé síťové zařízení, aby bylo možné určit a aktualizovat routovací tabulku na všech routerech. Tohle je velice důležité, protože v případě selhání jednoho routeru se automaticky aktualizují tabulky a pakety mohou putovat jinou cestou.
Na routeru 1 by bylo ještě potřeba nastavit NAT (stejně tak na routeru v prvním příkladu), ale tomu se budeme věnovat v některém z příštích dílů společně s paketovými filtry.
Protože je defaultně zakázáno předávání (přeposílání) paketů, je nutné toto povolit příkazem:
# echo "1" > /proc/sys/net/ipv4/ip_forward
Tento příkaz musíme zadat do nějakého rc skriptu (např.
/etc/rc.d/rc.local
), aby se provedl při každém startu, nebo
můžeme editovat soubor /etc/sysctl.conf
, řádek "Controls IP
packet forwarding".
Tolik tedy k nastavení routování pod "normální" distribucí Linuxu, nyní přejdeme k něčemu speciálnímu.
Jedna velmi zajímavá minidistribuce, která má své kořeny v distribuci Debian, a kterou můžete použít na váš router. Nejzajímavější na ní je to, že se vejde na jednu disketu (můžete samozřejmě použít i např. ZIPku nebo HDD). Pokud si chcete tuto distribuci vyzkoušet, tak na adrese www.linuxrouter.org najdete odkazy na ftp servery, ze který si můžete stáhnout zabalený "image" diskety, a poté jej např. takto "nakopírovat" na disketu:
# gunzip idiot-image_1440KB_FAT_2.9.8_Linux_2.2.gz
# dd if=idiot-image_1440KB_FAT_2.9.8_Linux_2.2 of=/dev/fd0
Pak již stačí jen restartovat počítač a nechat jej z této diskety nabootovat. Je asi jasné, že tak malá distribuce nebude příliš hardwarově náročná, v dokumentaci můžete najít následující příklady použitého hardwaru:
Ne, že by jste s podobnými staříčky nemohli provozovat nějakou klasickou
distribuci, ale museli byste ji pořádně ořezat (a možná nejlépe připravit
na jiném stroji) a navíc byste potřebovali HDD . Výhodou může být i to,
že váš systém poběží z "read-only media" a také to, že v tak malém systému
je jen to, co je nezbytně nutné, tzn. žádné zbytečně běžící služby a
programy, které zvyšují bezpečnostní riziko.
To, co chvíli vypadá jako výhoda, se rázem stává nevýhodou, takže jeden
z problémů, na který byste mohli narazit, je nedostatečná kapacita diskety.
Zvláště v případě, kdy budete chtít využít možnost do systému doinstalovat
např. DHCP, SSH či PortSentry (bezpečnostní utilita, která vás upozorní v
případě, že vám někdo zkouší skenovat porty) atd. V takovém případě si buď
můžete sehnat HDD (někde na smetišti dějin, třeba 100 MB ), či
naformátovat běžnou disktetu až na 1680 KB (jak to udělat je popsáno v
dokumentaci).
Pojďme si říci jak to vlastně funguje. Bootovací médium (v našem případě
disketa) obsahuje linuxové jádro (pomocí LRP patches lze vytvořit LRP
kernel z normálního kernelu), při bootování je obsah rozbalen do paměti
resp. do ramdisku (/dev/ram0
) a pak je ramdisk připojen jako
kořenový disk (/), systém nadále samozřejmě běží v paměti. Je logické, že
všechny změny, které provedete je potřeba zapsat na disketu, protože jinak
byste o ně při restartu přišli. Toto lze provést jak pomocí jednoduchého
menu, které se vám zobrazí po nabootování, tak i automaticky v
určitých nastavených intervalech (ztráta všeho nastavení po restartu může
být i výhodou, pokud něco nastavíte špatně, tak pokud jste již neprovedli
zálohu, stačí restart a máte "čistý systém").
Po spuštění se přihlaste jako root, heslo je zatím prázdné (doporučuji
ihned nastavit pomocí příkazu passwd
). Poté by se vám mělo
objevit "Linux Router Project - configuration menu", pomocí kterého
se dá vše celkem pohodlně nastavit, a také je v něm důležitá položka a to
"Back-up ramdisk". Pokud z něj vyskočíte (klávesa "q"), můžete se do něj
zpět vrátit příkazem lrcfg
.
Nějaké konkrétní podrobnosti zde uvádět nebudu, protože možností je opravdu mnoho, takže doporučuji si pročíst dokumentaci, kterou můžete najít třeba na této adrese. Navíc jsou všechny konfigurační soubory samozřejmě okomentovány.
LRP není jediná minidistribuce určená k provozování routeru, takže pokud vy používáte nebo znáte jinou, tak budu rád, když se podělíte o zkušenosti v diskuzi.
Tolik tedy dnes, v příštích dílech seriálu se začneme zabývat firewally.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej: