Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.
Bylo vydáno OpenBSD 7.7. Opět bez písničky.
V Tiraně proběhl letošní Linux App Summit (LAS) (Mastodon). Zatím nesestříhané videozáznamy přednášek jsou k dispozici na YouTube.
Projekt Netfilter/IPtables založil roku 1998 sympatický Rusty Russel, který je také autorem předchůdce IPtables - projektu IPchains. Rusty je také zakladatelem týmu vývojářů (tzv. Netfilter Core Team), kteří se o celý rozsáhlý projekt starají. Projekt se postupem času z prostého paketového filtru obdařeného jen základními vlastnostmi rozrostl do podoby, v jaké jej spatřujeme dnes - totiž do funkčně košatého nástroje, s jehož pomocí lze implementovat i velice složité stavové firewally včetně možnosti práce s překladem adres (Network Address Translation, dále jen NAT) a "trackingu" spojení (connection tracking). Práce s NAT umožňuje zejména "maškarády" (masquarades), "forwardování" portů (port forwarding) a "přesměrovávání" (redirecting). Rusty Russel se i nadále aktivně účastní vývoje projektu, ovšem aktuální osobou číslo jedna je dnes vynikající Harald Welte.
Napsat kvalitní script, který nastaví slušný firewall není zcela jednoduché, ale zase není zapotřebí z toho dělat až přílišnou vědu. Celková koncepce Netfilteru je poměrně složitá, ale věřte mi, že je zároveň až geniálně jednoduchá. Každý nadto k problematice nakonec přistupuje docela jinak, než jak mu radí druzí. Proto prosím přistupujte k tomuto dokumentu spíše nezávazně.
Lidé také uvažují rozdílně, když píší script pro nastavení tabulek Netfilteru. Existují v zásadě dva způsoby, jak můžete při psaní firewallu přemýšlet:
V čem se oba přístupy liší? Řekněme, že když si jen tak "scriptujeme,"
pak v podstatě neděláme nic jiného, než že tabulky paketového filtru
plníme nějakými daty pomocí příslušného prográmku (obvykle
/sbin/iptables
), přičemž nás příliš nezajímá, co to vlastně vnitřně
dělá.
Avšak "programujeme-li," pak si klidně v pojmosloví Netfilteru můžeme nahradit slovo "řetězec" (chain) slovem "funkce." Pohybujeme se pak ve sféře kdy nám Netfilter/IPtables umožňuje procedurální vyjádření našich síťově-bezpečnostních potřeb. Netfilter je totiž vnitřně prakticky plnohodnotný programovací jazyk, v němž lze krom zmíněných "funkcí" implementovat i podmínky a dokonce cykly.
Oba zmíněné způsoby uvažování mají význam především psychologický. Praktický efekt je nulový a výsledná tabulka v obou případech stejná. Někomu se prostě firewally píší lépe tak a někomu onak. Rusty Russel například volí druhý ("programovací") způsob. Ostatně aby ne! On je přeci vynikající programátor. Avšak i my, kteří třeba programovat ani vůbec neumíme, se nyní směle pokusíme naučit nastavit svůj první firewall.
V této kapitolce jste zaslechli několik důležitých pojmů jako například "chain" a "tabulka." Vysvětlíme si je v následující sekci, která pojednává obecně o koncepci Netfilteru.
Paketový filtr je software, který prohlíží hlavičky procházejících
paketů a rozhoduje, co se má se kterým paketem stát. Typicky může být
packet zahozen (DROP
), akceptován (ACCEPT
)
nebo popř. může být informace o něm zalogována (LOG
). Obecně těmto akcím říkáme v terminologii Netfilteru "cíl" (target), neboli co se s paketem má stát, kam ho chceme směřovat apod. Lze s ním
samosebou dělat mnohé další, i třeba velice složité, kejkle, pro něž si obvykle vytváříme targety vlastní. Pro
začátek však vystačíme s těmito třemi akcemi.
Dnešní svět je nebezpečný na všech úrovních reality, tedy i na úrovni
reality počítačových sítí. Chceme proto mít kontrolu nad tím, co se k
nám dostane, a co od nás odchází. O něčem bychom rádi věděli, něčeho se
raději zbavíme bez povšimnutí. V obecné rovině nám přesně toto projekt
Netfilter umožňuje. Program iptables
je součástí projektu Netfilteru a slouží k
nastavování paketového filteru. Jeho manuálová stránka je velice
rozsáhlá a dobře napsaná. Po pochopení základních způsobů konfigurace
Netfilteru se v ní již pohybujeme poměrně lehce.
Pro začátek máme k dispozici tři vestavěné řetězce, do nichž můžeme ukládat nová pravidla:
INPUT
OUTPUT
FORWARD
Program iptables
nám umožňuje několik základních akcí.
Pohodlně můžeme:
iptables -N
iptables -X
iptables -P
iptables -L
iptables -F
iptables -Z
Dále máme k dispozici několik způsobů jak nakládat s pravidly uvnitř specifikovaného řetězce:
iptables -A
iptables -I
iptables -R
iptables -D
Teď, když víme, co všechno můžeme dělat na úrovni celých řetězců pravidel, přejdeme k pravidlům samotným a podíváme se, co všechno nám Netfilter umožní specifikovat. Pro přehlednost si uvedeme jen ty nejdůležitější věci:
Zdrojovou a cílovou adresu lze specifikovat pomocí přepínačů
--source
(zdroj) a --destination
(cíl). Oba přepínače mají i své zkrácené verze -s
či --src
a -d
či --dst
. Lze
specifikovat jak symbolické jméno (např. localhost
nebo
www.abclinuxu.cz
- tuto variantu nedoporučuji) tak IP
adresu či celou síť (např. 127.0.0.1
,
12.34.56.78/32
, 98.76.54.32/27
, pro všechny
adresy vůbec pak 0/0
).
Negace většiny specifikací lze docílit znakem vykřičníku. Např.
-s ! 127.0.0.1
vyhoví kterémukoli paketu, který nepřichází
z localhost
. Negaci, nebo chcete-li "inverzi", lze použít
pro většinu určujících pravidel, je však vždy raději lepší konzultovat
manuálovou stránku man iptables
.
Protokol lze určit pomocí přepínače --protocol
(zkráceně -p
). Příkladem může být -p ! tcp
,
čemuž by vyhověly všechny datagramy, které nejsou TCP.
Důležitá je též možnost určit síťové zařízené, na němž chceme
filtrovat. Toho lze docílit přepínači --in-interface
(zkráceně -i
) pro vstupní interface a
--out-interface
(zkráceně -o
) pro výstupní
interface.
Je nutné pamatovat na skutečnost, že řetězec
INPUT
nemá výstupní interface a že řetězec
OUTPUT
nemá vstupní interface. Obě, vstupní i výstupní,
zařízení má pouze řetězech FORWARD
.
Dále chceme-li specifikovat například zařízení eth1
,
eth2
a eth3
, lze tak udělat v jediném
pravidle pomocí znaku "plus" např. takto: -i eth+
.
Je-li zapotřebí filtrovat či jinak nakládat s fragmentovanými
pakety. které vznikají vetšinou díky tomu, že příliš velké pakety
některá zařízení neumí přenést, lze tak učinit pomocí přepínače
--fragment
(zkráceně -f
).
Poté, co jsme probrali nutné minimum k iptables
,
obrátíme pozornost k jejich rozšířením.
iptables
... a další kapitoly ... (prosím o rezervaci, -- Matouš)
Ukázkový script na nastavení firewallu může vypadat např. takto:
---CUT--- #!/bin/bash # eth0 - náš interface do světa # lo+ - viz `man iptables' # bráníme se proti smurf-proofingu, "mrtvým" chybovým hláškám a IP spoofingu if [ -e /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts ]; then /bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts fi if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ]; then /bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses fi # for i in /proc/sys/net/ipv4/conf/* ; do # /bin/echo "1" > $i/rp_filter # done # úplně vymažeme starý firewall /bin/cat /proc/net/ip_tables_names | while read TABLE; do /sbin/iptables -t $TABLE -L -n | while read C CHAIN REST; do if [ "X$C" = "XChain" ]; then /sbin/iptables -t $TABLE -F $CHAIN fi done /sbin/iptables -t $TABLE -X done # a všechno vynulujeme /sbin/iptables -Z /sbin/iptables -t nat -Z /sbin/iptables -t mangle -Z # úplně vypnout firewall lze přepínačem "stop" if [ "$1" == "stop" ]; then # defaultní politika bude akceptovat /sbin/iptables -P OUTPUT ACCEPT /sbin/iptables -P INPUT ACCEPT /sbin/iptables -P FORWARD ACCEPT # a smitec exit 0; fi # defaultní politika bude zahazovat /sbin/iptables -P OUTPUT DROP /sbin/iptables -P INPUT DROP /sbin/iptables -P FORWARD DROP # povolíme provoz na loopbacku /sbin/iptables -A OUTPUT -o lo+ -j ACCEPT /sbin/iptables -A INPUT -i lo+ -j ACCEPT # úplně se odříznete od světa přepínačem "panic" if [ "$1" == "panic" ]; then exit 0; fi # povolíme všechna odchozí spojení /sbin/iptables -A OUTPUT -p tcp -o eth0 -j ACCEPT /sbin/iptables -A OUTPUT -p udp -o eth0 -j ACCEPT /sbin/iptables -A OUTPUT -p icmp -o eth0 -j ACCEPT # špatně navazovaná spojení, fragmenty a nesmysly zahazujeme /sbin/iptables -A INPUT -i eth0 -m state --state INVALID -j DROP # /sbin/iptables -A INPUT -i eth0 -f -j DROP /sbin/iptables -A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -j DROP # bráníme se proti SYN floodu /sbin/iptables -N STOP_FLOODS /sbin/iptables -A STOP_FLOODS -m limit --limit 1/s --limit-burst 5 -j RETURN /sbin/iptables -A STOP_FLOODS -j DROP /sbin/iptables -A INPUT -i eth0 -p tcp --syn -j STOP_FLOODS # povolíme již navázaná nebo námi iniciovaná TCP a UDP spojení /sbin/iptables -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT # některé ICMP pakety přeci jenom povolíme, ale floodovat nás nebudou /sbin/iptables -N CHOOSE_ICMP /sbin/iptables -A CHOOSE_ICMP -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -A CHOOSE_ICMP -p icmp --icmp-type 0 -m length --length 28:84 -j ACCEPT /sbin/iptables -A CHOOSE_ICMP -p icmp --icmp-type 3 -m length --length 28:84 -j ACCEPT /sbin/iptables -A CHOOSE_ICMP -p icmp --icmp-type 8 -m length --length 28:84 \ -m limit --limit 1/s --limit-burst 5 -j ACCEPT /sbin/iptables -A CHOOSE_ICMP -p icmp --icmp-type 11 -m length --length 28:84 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -j CHOOSE_ICMP # povolíme vzdálené připojení pomocí SSH /sbin/iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT # povolíme vzdálené připojení pomocí SSH z IP.AD.RE.SA pouze # /sbin/iptables -A INPUT -i eth0 -s IP.AD.RE.SA -p tcp --dport 22 -j ACCEPT # odmítneme spojeni na AUTH a resetujeme ho /sbin/iptables -A INPUT -i eth0 -p tcp --dport 113 -j REJECT --reject-with tcp-reset # konec ---CUT---Případný port-scan programem NMap pak dopadne asi takto:
---CUT--- #> nmap -P0 -TInsane NA.SE.IP.ADRESA Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2005-12-24 16:48 CET All 1663 scanned ports on SYMBOLICKE.JMENO.TLD (NA.SE.IP.ADRESA) are: filtered Nmap finished: 1 IP address (1 host up) scanned in 87.792 seconds ---CUT---Zkusme si stroj "pingnout" paketem velkým 1400 bytů.
---CUT--- #> ping -c1 -s 1400 NA.SE.IP.ADRESA PING NA.SE.IP.ADRESA (NA.SE.IP.ADRESA) 1400(1428) bytes of data. --- NA.SE.IP.ADRESA ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms ---CUT---
Normální ping
ale projde.
---CUT--- $> ping -c1 NA.SE.IP.ADRESA PING NA.SE.IP.ADRESA (NA.SE.IP.ADRESA) 56(84) bytes of data. 64 bytes from NA.SE.IP.ADRESA: icmp_seq=1 ttl=58 time=12.6 ms --- NA.SE.IP.ADRESA ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 12.632/12.632/12.632/0.000 ms ---CUT---
Stejně tak projde mtr
bez změny parametrů (používá ICMP pakety, které se ve výchozím nastavení vejdou do specifikovaného rozsahu, mají velikost 64 bytů). Zkusíme-li ale mtr -i 0.1 NA.SE.IP.ADRESA
, tak už náš stroj bude vykazovat ztrátovost paketů.
Dokument vytvořil: vladka, 29.8.2005 12:13 | Poslední úprava: Nicky726, 26.3.2009 16:32 | Další přispěvatelé: ©, hmm | Historie změn | Zobrazeno: 13031×
Tiskni
Sdílej: