Dnes ráno jsem na to téma s robotem ztratil hodinu. Obrázek si může každý udělat sám:
JÁ:Máme doma pár dní Starlink. K mému překvapení jsme dostali i rozsah veřejných IPV6 adres. A najednou jsem se musel více postarat o bezpečnost PC. Dal jsem dohromady několik pravidel nftables:
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state invalid drop
ct state { established, related } accept
iif "lo" accept
ip protocol icmp accept
meta l4proto ipv6-icmp accept
}
chain forward { type filter hook forward priority 0; policy drop; }
chain output { type filter hook output priority 0; policy accept; }
}
Je to tak v pořádku?
ON:Vaše základní konfigurace nftables je docela dobrý začátek pro zabezpečení, ale má několik problémů a můžeme ji vylepšit:
Problémy v současné konfiguraci:
Příliš permisivní ICMP - povolujete všechny ICMP pakety, což může být bezpečnostní riziko
Chybí SSH přístup - pokud se připojujete vzdáleně, zablokujete si přístup
Chybí základní služby - DNS, HTTP/HTTPS pro aktualizace
ICMPv6 je kritické - bez něj nebude IPv6 správně fungovat
Vylepšená konfigurace:
Vylepšená nftables konfigurace
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
# Základní bezpečnostní pravidla
ct state invalid drop
ct state { established, related } accept
# Loopback rozhraní
iif "lo" accept
# ICMP - omezené na nezbytné typy
ip protocol icmp icmp type { echo-reply, destination-unreachable, time-exceeded, parameter-problem } accept
# ICMPv6 - nezbytné pro IPv6 fungování
meta l4proto ipv6-icmp icmpv6 type {
destination-unreachable, packet-too-big, time-exceeded, parameter-problem,
echo-request, echo-reply, nd-router-solicit, nd-router-advert,
nd-neighbor-solicit, nd-neighbor-advert
} accept
# SSH - ZMĚŇTE PORT podle vaší konfigurace!
tcp dport 22 accept
# DNS
udp dport 53 accept
tcp dport 53 accept
# HTTP/HTTPS pro aktualizace systému
tcp dport { 80, 443 } accept
# NTP pro synchronizaci času
udp dport 123 accept
# Případně další služby které potřebujete:
# tcp dport 25 accept # SMTP
# tcp dport { 993, 995 } accept # IMAPS, POP3S
# Logování odmítnutých paketů (volitelné)
# log prefix "nftables-dropped: " drop
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
# Volitelná tabulka pro rate limiting
table inet rate_limit {
chain input {
type filter hook input priority -10;
# Ochrana proti SSH brute force
tcp dport 22 ct state new limit rate 3/minute accept
tcp dport 22 drop
# Ochrana proti ICMP flooding
ip protocol icmp limit rate 10/second accept
meta l4proto ipv6-icmp limit rate 10/second accept
}
}
Klíčová vylepšení:
Omezené ICMP - pouze nezbytné typy místo všech
Správná ICMPv6 podpora - včetně Neighbor Discovery, které je kritické pro IPv6
SSH přístup - nezapomeňte změnit port, pokud používáte jiný než 22
Základní síťové služby - DNS, HTTP/HTTPS, NTP
Rate limiting - ochrana proti brute force útokům
Před aplikací:
⚠️ DŮLEŽITÉ UPOZORNĚNÍ: Pokud se připojujete přes SSH, nejdříve si ověřte, že máte správný port a fyzický přístup k počítači pro případ problémů!
bash:
# Test konfigurace
sudo nft -c -f nftables.conf
# Dočasné načtení (automaticky se resetuje po restartu)
sudo nft -f nftables.conf
# Trvalé uložení (závisí na distribuci)
# Debian/Ubuntu: sudo cp nftables.conf /etc/nftables.conf
# CentOS/RHEL: sudo cp nftables.conf /etc/sysconfig/nftables.conf
Potřebujete přidat nebo upravit nějaké specifické služby pro vaše použití?
JÁ:Mám to na Arch linuxu. ssh ani automatické aktualizace nepoužívám. DNS poskytuje Starlink router (proxy na google).
ON:Pak je vaše konfigurace mnohem jednodušší a můžeme ji zoptimalizovat pro vaše konkrétní potřeby:
Vylepšená nftables konfigurace
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
# Základní bezpečnostní pravidla
ct state invalid drop
ct state { established, related } accept
# Loopback rozhraní
iif "lo" accept
# ICMP - omezené na nezbytné typy
ip protocol icmp icmp type { echo-reply, destination-unreachable, time-exceeded, parameter-problem } accept
# ICMPv6 - kritické pro IPv6 fungování
meta l4proto ipv6-icmp icmpv6 type {
destination-unreachable, packet-too-big, time-exceeded, parameter-problem,
echo-request, echo-reply, nd-router-solicit, nd-router-advert,
nd-neighbor-solicit, nd-neighbor-advert
} accept
# HTTP/HTTPS - pro manuální aktualizace a web prohlížení
tcp dport { 80, 443 } accept
# Volitelné služby podle potřeby:
# udp dport 123 accept # NTP pokud synchronizujete čas
# tcp dport 25 accept # SMTP
# tcp dport { 993, 995 } accept # IMAPS, POP3S pro email
# Logování odmítnutých paketů (doporučené pro monitoring)
# log prefix "nft-drop: " drop
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
# Volitelná ochrana proti flooding útokům
table inet rate_limit {
chain input {
type filter hook input priority -10;
# Ochrana proti ICMP flooding
ip protocol icmp limit rate 10/second accept
meta l4proto ipv6-icmp limit rate 10/second accept
# Ochrana proti connection flooding na HTTP/HTTPS
tcp dport { 80, 443 } ct state new limit rate 20/second accept
}
}
Pro Arch Linux:
Uložení a aktivace:
bash:
# Uložit konfiguraci
sudo cp nftables.conf /etc/nftables.conf
# Povolit a spustit službu
sudo systemctl enable nftables.service
sudo systemctl start nftables.service
# Ověřit stav
sudo systemctl status nftables.service
Hlavní změny oproti původní konfiguraci:
Odebrána DNS pravidla - používáte router jako proxy
Odebrán SSH - nepoužíváte
Zachován HTTP/HTTPS - pro manuální pacman -Syu a web
Vylepšený ICMPv6 - kvůli vašim veřejným IPv6 adresám je to kritické
Omezený ICMP - místo povolení všech typů
Doporučení pro IPv6:
Jelikož máte veřejné IPv6 adresy, zvažte také:
bash:
# Kontrola aktuálních pravidel
sudo nft list ruleset
# Zobrazení statistik
sudo nft list table inet filter -nn
# Monitorování logů (pokud povolíte logging)
sudo journalctl -f | grep nft-drop
Tato konfigurace by měla být bezpečná a přiměřená vašemu použití. Potřebujete přidat podporu pro nějaké specifické aplikace nebo služby?
JÁ:Ani vlastní web server nemám. Pacman mi funguje i bez povolení příchozích paketů na 80. Měl jsem za to že dle pravidel není blokován odchozí požadavek a odpovědi jsou akceptovány díky
ct state { established, related } accept ?
ON:Máte naprosto pravdu! Mýlil jsem se.
Vaše původní konfigurace je vlastně správně navržená. Odchozí spojení fungují díbi:
chain output { policy accept; } - povoluje všechny odchozí pakety
ct state { established, related } accept - povoluje příchozí odpovědi na již navázaná spojení
Takže když pacman pošle požadavek na port 80/443, odpověď se vrátí jako established spojení a projde firewallem.
Explicitní povolení tcp dport { 80, 443 } accept byste potřebovali pouze kdybyste sami provozovali webový server a chtěli přijímat příchozí spojení z internetu.
Vaše původní konfigurace má vlastně jen dva hlavní problémy:
Příliš permisivní ICMP - ip protocol icmp accept povoluje všechny ICMP typy
Možná příliš permisivní ICMPv6 - i když ICMPv6 je pro IPv6 kritické
Minimální oprava by tedy byla:
Minimálně upravená nftables konfigurace
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state invalid drop
ct state { established, related } accept
iif "lo" accept
# ICMP - pouze nezbytné typy místo všech
ip protocol icmp icmp type { echo-reply, destination-unreachable, time-exceeded, parameter-problem } accept
# ICMPv6 - kritické pro IPv6, ale omezené na nezbytné typy
meta l4proto ipv6-icmp icmpv6 type {
destination-unreachable, packet-too-big, time-exceeded, parameter-problem,
echo-request, echo-reply, nd-router-solicit, nd-router-advert,
nd-neighbor-solicit, nd-neighbor-advert
} accept
}
chain forward { type filter hook forward priority 0; policy drop; }
chain output { type filter hook output priority 0; policy accept; }
}
Toto je prakticky vaše původní konfigurace, jen s bezpečnějším ICMP/ICMPv6. Díky za upozornění - máte pravdu, že odchozí spojení nepotřebují explicitní povolení příchozích portů!
JÁ:Ok, to si ještě prostuduju. Mám ještě asi jednu otázku. Starlink router jsem nechal ať dělá svou práci jak umí. V Bridge módu bych nejspíš přišel o sledování a komunikaci s anténou. Bohužel má ten router slabou wifi. Tak jsem za něj připojil router FritzBox4040. Ten jsem přepnul na IP klienta. Obdoba Bridge. Vysílá pěkně silný signál. Ale nastavování je nelogický očistec. Jak se tam dá proklikat aby zahazoval pakety které jdou z internetu přímo k němu? Nebo je to zbytečné když je v “mostu”? Což se mi moc nezdá.
ON:Situace s FritzBox v "IP klient" módu je složitější, než se na první pohled zdá.
Co se vlastně děje:
FritzBox v režimu "IP klient" není skutečný bridge - stále dělá NAT! Je to spíš "cascaded NAT" nebo "double NAT":
Starlink router: veřejná IPv4 + veřejné IPv6 → privátní síť (např. 192.168.100.x)
FritzBox: dostane IP od Starlinku → vytvoří další privátní síť (např. 192.168.178.x)
IPv4 vs IPv6 bezpečnost:
IPv4: FritzBox vás chrání NATem - z internetu se k vašim zařízením nedostanou
IPv6: Tady je problém! FritzBox může předávat IPv6 pakety transparentně
Nastavení FritzBox pro bezpečnost:
Přihlaste se do FritzBox (obvykle 192.168.178.1)
Internet → Filtry → Firewall
IPv6 → Aktivní filtry
Zaškrtnout: "Blokovat přístup z internetu přes IPv6"
Nebo alternativně:
Internet → Freigaben → IPv6-Freigaben
Zkontrolovat, že nejsou povolené žádné služby
Je to nutné?
ANO, protože:
FritzBox v IP klient módu často předává IPv6 adresy transparentně
Vaše zařízení mohou mít stále přímé IPv6 připojení k internetu
NAT funguje jen pro IPv4, ne pro IPv6
Ověření:
bash:
# Zkontrolujte IPv6 adresy vašeho PC
ip -6 addr show
# Pokud vidíte adresy začínající na 2xxx: (ne fe80: nebo fc00:)
# máte pravděpodobně přímé IPv6 připojení
Bohužel FritzOS je skutečně "očistec" co se týče intuitivního ovládání. Pokud se v nastavení ztratíte, můžu pomoct s konkrétními kroky podle toho, co vidíte v menu.
JÁ:Ale FritzBox nyní neNATuje. Má svou IP adresu jako ostatní zařízení v síti přidělenou od starlink routeru. Vidím to ve starlink appce jak přiděluje IP adresy všem zařízením jako by byly napojeny přímo na něj. Funguje to dobře. Jen si nejsem jist ochranou FRITZBOx routeru.
ON:Aha, máte pravdu! To je jiná situace než jsem předpokládal.
Pokud FritzBox funguje skutečně jako transparentní bridge/switch (dostává IP přímo od Starlinku a předává pakety bez NATu), pak:
Bezpečnostní situace:
FritzBox samotný má svou vlastní IP adresu a je přímo dostupný z internetu - to je bezpečnostní riziko
Vaše zařízení za FritzBoxem mají také přímý přístup k internetu přes IPv6
FritzBox nefunguje jako firewall v tomto módu
Co s tím:
FritzBox ochrana: Bohužel v tomto módu má FritzBox omezené bezpečnostní možnosti. Pokud najdete v nastavení něco jako:
"Firewall pro správu zařízení"
"Vzdálený přístup" → VŠE VYPNOUT
"Internetové služby" → VŠE VYPNOUT
SSH, Telnet, HTTP management → VŠE VYPNOUT
Lepší řešení: Zvažte přepnout FritzBox zpět do router módu s vlastním NATem:
Lepší bezpečnost
FritzBox firewall bude fungovat
Ztratíte přímé IPv6 adresy na zařízeních (což může být výhoda)
Starlink → FritzBox NAT → vaše zařízení
Nebo: Nechejte to jak je, ale:
Zabezpečte každé zařízení individuálně (jako děláte s nftables)
Pravidelně aktualizujte firmware FritzBoxu
Monitorujte síťový provoz
Ve Starlink aplikaci byste měli vidět FritzBox jako jedno zařízení, pokud skutečně bridguje. Vidíte tam jednotlivá zařízení za FritzBoxem, nebo jen FritzBox samotný?
JÁ:Vidím tam každé zařízení v domácnosti. Všude vyjma mobilů a tabletu jsem nastavil nftables. Jen s tím FRITZBOx si nejsem jist kde to tam nastavit. Nechci dvakrát routovat kvůli pomalejší odezvě. FRITZBOx je docela super HW, ale gui SW se němcům nepovedl.
ON:Souhlasím s vámi - AVM GUI je opravdu noční můra. Pokud FritzBox funguje skutečně transparentně, možnosti zabezpečení jsou omezené.
Hledejte tyto sekce v FritzBoxu:
Nejpravděpodobnější místa:
System → FRITZ!Box-Benutzer → Fernzugang deaktivieren
Internet → Online-Monitor → Remote-Zugriff sperren
Heimnetz → Netzwerk → Fernkonfiguration aus
System → Sicherheit (pokud existuje)
Nebo zkuste:
Erweitert (pokud máte rozšířené menu)
Diagnose → Sicherheit
Internet → Freigaben → vše vypnout
Alternativní přístup:
Telnet/SSH do FritzBoxu (pokud je povoleno):
bash:
# Někdy funguje výchozí:
telnet 192.168.178.1
# user: admin, heslo: vaše heslo z GUI
Nebo factory reset a minimální nastavení:
Reset na tovární nastavení
Nastavit jen WiFi a bridge mód
Nechat vše ostatní vypnuté
Praktické ověření bezpečnosti:
bash:
# Naskenujte FritzBox z internetu (z jiného připojení):
nmap -sS -O [IPv6_adresa_fritzboxu]
# Nebo z lokální sítě:
nmap -sS 192.168.100.X # IP FritzBoxu v Starlink síti
Honestly, pokud máte všechna ostatní zařízení zabezpečená nftables a FritzBox jen přeposílá WiFi provoz, není to tak kritické. Hlavně aby neměl otevřené administrační porty (80, 443, 22, 23) směrem k internetu.
Zkusil jste expert mode někde v nastavení? Často se tam skrývají pokročilé bezpečnostní možnosti.
JÁ:Expert mode už tenhle nemá. Má jen pod nelogicky rozhozenýma položkama Erweiterung (rozšířené). Kdysi jsem se zařekl že FRITZBOx už nikdy. Jenže nastala před rokem nouze a musel jsem na rychlo koupit. Myslel jsem že máš přístup na internet a prohledáš návody kde se ostatní snaží tento model FRITZBOxu také tak konfigurovat.
ON:Bohužel nemám přístup k internetu a nemohu hledat specifické návody pro váš model FritzBox 4040. Můžu jen pracovat s informacemi, které mám z ledna 2025.
Co můžete zkusit:
V sekci "Erweiterte Ansicht":
Hledejte "Fernzugang" nebo "Remote Access"
"Sicherheit" nebo "Security"
"Systemdienste" - tam bývají HTTP, SSH, UPnP služby
"Diagnose" → někdy tam jsou bezpečnostní nastavení
Tipuji na tyto cesty:
Erweiterte Ansicht → System → Fernzugang → ALLES VYPNOUT
Erweiterte Ansicht → Internet → Dienste → MyFRITZ!, DynDNS vypnout
Erweiterte Ansicht → Heimnetz → Dienste → UPnP vypnout
Praktický postup:
Projděte systematicky každou položku v "Erweiterte Ansicht"
Hledejte anglické výrazy: Remote, Access, Services, Security
Vypněte vše co souvisí se vzdáleným přístupem
Nebo:
Pokud je to opravdu neřešitelné, zvažte koupi jednoduchého managed switch s WiFi AP funkcí - bude transparentnější a bezpečnější než pokřivené GUI od AVM.
Chápu tu frustraci s FritzBoxem - německá důkladnost bohužel neplatí pro UX design jejich firmware. 😅
JÁ:Ehm, německá důkladnost je jen papírový mýtus!
ON:Haha, máte pravdu! 😄
FritzBox GUI je perfektní důkaz, že "německá důkladnost" je marketingový slogan, ne realita. Tohle rozhraní vypadá, jako kdyby ho navrhovali různí lidé v různých dekádách, kteří si nikdy nepředali poznámky.
Nakonec je možná nejjednodušší řešení nechat FritzBox jak je - pokud funguje jen jako WiFi AP a všechna vaše zařízení mají vlastní firewall přes nftables, není to tak kritické. Hlavně že máte zabezpečená koncová zařízení, kde skutečně běží aplikace a jsou uložená data.
A příště už víte - radši levnější TP-Link nebo cokoliv s OpenWrt podporou než další "důkladný" německý firmware! 😉
Ještě něco k té nftables konfiguraci potřebujete vyřešit, nebo už máte všechno pod kontrolou
Pokud to jen trošku rozeberu:
- Nabízí zbytečně složité aktivace služeb. Stačí sudo systemctl enable --now nftables
- Nelogické volání IP routeru ikdyž ví že má přidělenou jinou adresu
- Další blbovinky co navrhoval vyplývají z komunikace
Já jim zkrátka co se týče programování a podobných věcech nevěřím. Dokonce jsem tomu explicitně zakázal generování kódů a stejně tam občas vrzne nějakou chujovinu. Dobře se s tím učí, to je fakt (proto mám placenou verzi). Ale je třeba si to hodně hlídat a ověřovat.