Ping projde z klienta VPN, služba TCP neodpovídá a ufw allow 443/tcp nezmění vůbec nic. Když aplikace běží na hostiteli za bránou, a ne na bráně samotné, bylo to povolení napsáno pro špatnou cestu provozu. Paket není adresován firewallu a není doručen místnímu procesu, takže vstupní pravidla ho nikdy nevidí. Oprava je pravidlo trasy zaměřené na předávaný tok a důkaz pro něj už je v logu.

Rozhodněte, zda je cíl místní, nebo předávaný

Čtěte paket tak, jak ho vidí jádro. Provoz doručený službě na bráně je místní vstup. Provoz, který brána směruje dál na jiného hostitele, je předávaný a UFW drží pro obě cesty oddělené sady pravidel. Rozdíl určuje cílová adresa a vyhledání trasy, ne rozhraní, na kterém paket dorazil.

Řádek logu se stejným rozhraním v polích IN i OUT může stále popisovat směrovaný paket, protože tunel, který přenáší klienty dovnitř a ven z jednoho zařízení, vypadá přesně tak. Cílová adresa tuto otázku vyřeší rychleji než názvy rozhraní. Dvakrát viděné stejné jméno místní doručení nedokazuje a vymýšlet tunelové rozhraní, které nasazení nikdy nevytvořilo, také nepomůže.

Přečtěte si blok, než přidáte jakékoli pravidlo

Zopakujte jeden autorizovaný pokus o připojení a zaznamenejte jeho zdroj, cíl, protokol a cílový port tak, jak je zaznamenala brána. Porovnejte tyto čtyři hodnoty se záznamem v logu a se skutečným umístěním služby. Dřívější úspěšný ping dokazuje jen to, že jeho vlastní výměna byla povolena, a firewall může TCP SYN k aplikaci ošetřit zcela jinak.

sudo dmesg | grep "UFW BLOCK" | tail -n 5
sudo ufw status numbered

První příkaz vrátí verdikt i s jeho poli a druhý ukáže, co je už načteno a v jakém pořadí. Přečtěte si oba, než cokoli upravíte, protože dřívější zákaz nad vaším pravidlem vysvětluje stejný symptom i bez jakéhokoli chybějícího pravidla.

Napište nejužší pravidlo trasy, které sedí

V tomto příkladu klienti přicházejí přes tun0 z 172.20.8.0/24, služba naslouchá na 10.30.0.15 na portu 8443 a brána vychází přes ens5. Tyto hodnoty byly zvoleny tak, aby nevypadaly jako výchozí hodnota cloudového VPC 10.0.0.0/16 ani domácí síť 192.168.0.0/16, a 8443 drží příklad stranou od vlastního posluchače 443 na bráně.

sudo ufw --dry-run route allow in on tun0 out on ens5 proto tcp from 172.20.8.0/24 to 10.30.0.15 port 8443

Zkušební běh vypíše sadu pravidel, která by vznikla, což je nejlevnější způsob, jak zjistit, zda vaše pravidlo dopadne před existujícím zákazem, nebo po něm. Ověřte názvy rozhraní a vnitřní adresy proti nasazení, ne proti příkladu, a pamatujte, že když se překlad cílové adresy provede první, filtr vidí už přeložený cíl.

Udržte zpáteční cestu stavovou

UFW sleduje povolená spojení, takže odpovědi na povolený předávaný tok se propustí bez výslovného opačného pravidla. Přidání neomezeného pravidla opačným směrem, aby to fungovalo, rozšiřuje politiku daleko za jedinou službu a pro běžnou výměnu požadavku a odpovědi není potřeba. Držte zpáteční cestu implicitní a sadu pravidel čitelnou.

Pravidlo použijte až poté, co zkušební běh odpovídá vašemu záměru, a pak potvrďte, že ho seřazený seznam ukazuje na očekávaném místě. Uchovejte posluchač VPN a pravidla správy jako oddělené záležitosti, protože jejich změna je jiné rozhodnutí než povolení jedné aplikace. Poznamenejte změnu tam, kde je zapsaná topologie, aby ji příští inženýr nemusel znovu objevovat ze zachycených paketů.

sudo ufw route allow in on tun0 out on ens5 proto tcp from 172.20.8.0/24 to 10.30.0.15 port 8443
sudo ufw status numbered

Zkontrolujte, co za vás UFW nemůže vynutit

Správné pravidlo stále potřebuje předávání v jádru a trasu, která se dostane ke službě. Potvrďte obojí, než firewall obviníte podruhé.

sysctl net.ipv4.ip_forward
ip route get 10.30.0.15

Pak se podívejte mimo hostitele. V cloudové instanci politika UFW hosta nenahrazuje bezpečnostní skupiny, ACL podsítí ani vlastní konfiguraci předávání poskytovatele, takže místní blok je důkaz o jedné vrstvě, ne důkaz, že všechny ostatní vrstvy službu propouštějí.

Skončete testem nového spojení s povoleným firewallem, z povoleného zdroje a z nesouvisejícího. Vypnutí UFW odstraní symptom a zničí důkaz v jediném příkazu, a proto by to měl být poslední experiment, ne první.

Související články