Egy, az OpenBSD-sek által már 2011-ben javított pf hibát fixált most a FreeBSD

Címkék

A FreeBSD projekt kiadott egy pf-et (eredendően OpenBSD csomagszűrő) érintő biztonsági figyelmeztetést FreeBSD-SA-23:17.pf néven. Az OpenBSD csapat gyorsan jelezte, hogy ők nem érintettek, mert már 12 évvel ezelőtt javították a hibát. ☝‍️

Hozzászólások

Hát, ezt nem teszik ki az ablakba a FreeBSD-nél a mikuláscsomagok mellé ....

trey @ gépház

Nem mergelik a kódbázist kb pont 12 éve az OpenBSD-ből. :)

Néha cherry pickelnek belőle, néha saját kútfőből pakolgatnak bele ezt-azt.

Volt ebből többször rant már a FreeBSD listákon, hogy kár PF-nek hívni FreebSD-ben  a pf "alapú" csomagszűrőt, mert az OpenBSD-ben már 6x átírták azóta, pl match ruleok, bár azt pont most 12? évvel később szintén átemelték a 14-es FreeBSD-be.

OpenBSD-s listákon is felhívják a figyelmet hogy ne tegyél fel kérdést a FreeBSD-ben lévő PF kapcsán mert az vagy olyan vagy nem :)

Valahol érthetők a skálázhatósági és vimage érvek, de ez esetben miért nem írnak a FreeBSD-sek saját csomagszűrőt? Vagy ha egyszerűbb a pf-et gányolni, akkor legalább a triviális sec. fixeket miért nem emelik át? 12 éve még nem lehetett annyira különböző a kódbázis.

trey @ gépház

Megszokás kérdése, én hamarabb találkoztam az ipfw-vel, mint a másik kettő FreeBSD-ben levővel (és mint az iptables-szel), és nem okozott fájdalmat megtanulni. Mondjuk az elmúlt kb. 20 évben rendesen kibővült a funkciója, de mindig volt oka, hogy újra elővegyem (pl. a dummynet eredendően csak ezen keresztül volt programozható). De mivel nem tűzfalak piszkálásából élek 7/24-ben, lehet máshol van az ingerküszöböm. Meg nyilván nem is tudok mindent megcsinálni.

+1, szerintem faék egyszerű. Cserébe butább is, de ha csak egy alapvető csomagszűrő kell, akkor arra kiváló. Viszont azt ne mondja már nekem senki, hogy nehézkes, vagy nehezen megtanulható. Az egyetlen csomagszűrő, aminek tudom fejből a szintaxisát. És nem azért mert olyan sokat használom, hanem azért, mert olyan, mintha a saját szavaiddal próbálnád definiálni a szabályt.

Néhány példa:

add deny tcp from 1.2.3.4 to 5.6.7.8 443

add deny tcp from not 1.2.3.4 to me 443

add deny ip from any to me

add allow ip from any to any

stb...

 

Tud valaki ennél egyszerűbbet, vagy könnyebben megjegyezhetőt?

Pontosítsunk:

FreeBSD-ben 3 csomagszűrő van gyárilag:

- az ipfw , egyébként gyárilag ehhez van használható, könnyen bekonfigurálható alapkonfig a telepítésben ( firewall_enable=YES és firewall_type=workstation / closed / simple / client / open az rc.conf-ba, a telepítéssel kapunk egy /etc/rc.firewall-t, ami néhány alapszabályt tartalmaz a megfelelő tipus kiválasztásával )

- a Darren Reed-féle ipfilter ( ipf a parancs ), bekapcsolni könnyű ( ipfilter_enable=YES ), viszont gyárilag csak a forráscsomagok feltelepítése esetén van hozzá példakonfig ( /usr/src/contrib/ipflter/rules helyen ) azaz ellentétben az ipfw-vel, mindenképp kell valamilyen szinten ismerned a szabálynyelvét, hogy meg tudd csinálni a /etc/ipf.rules fájlt

- és a valamikori OpenBSD-s pf alapján rendszerbe integrált, szintén pf-nek nevezett valami, amire ugyanaz érvényes, mint az ipfilterre; könnyen bekapcsolható ( pf_enable=YES ), de szintén nincs gyárilag szabályhalmaz, neked kell összegányolnod egy /etc/pf.conf -ot

Fenti linked alapján igazán komoly változás pont 10 éve volt, amikor Cy Schuber

 

Update ipfilter 4.1.28 --> 5.1.2.

módosítása történt. Azóta nem sok érdemi piszkálás volt. Hiába, ami jó az jó.

Szép találat. Azért hogy ipfw-ben a stateful a gyengébb, a pf-ben meg a stateless ... (És ha nem is sokkal, de jelzi, hogy mégis az ipfw-t érzik inkább a sajátjuknak, mert azt sikerült jobb teljesítményűre tutujgatni.)

Igen, emlékszem a Darren Reed féle holmira, akörül is csak a baj volt.

Magyarul, a FreeBSD-ben van három csomagszűrő:

  • a lyukas és elavult, de legalább kényelmes
  • a kevésbé népszerű, de legalább bonyolult
  • és a Darren Reed féle, amit kibasztak az OpenBSD-ből licencproblémák miatt, de valamiért megvan még a FreeBSD-ben (ki tudja milyen állapotban)

Ehhez párosul a FreeBSD dev-ek arroganciája.

Nem tűnik túl jónak a helyzet.

trey @ gépház

Azért egy licenc körüli cicaharc nem sok mindent mond a szoftver minőségéről, és fejlesztőjének tudásáról. Ha az lenne, akkor Linus "az nvidia egy pöcs" rantja alapján Linus nyeretlen kétéves, aki most kezd Basicben Snake-et programozni, a Linux meg egy játékszernek se jó valami minősítést kaphatna (így legalább azt megkaphatja :-P ) de Raadt is javított már hibát az OBSD-ben ezer évvel az után, hogy saját bevallása szerint egyszer már kijavította ugyanazat a hibát egy másik OS-ben. (Ha meglesz a link, berakom.)

Az ipfw nem bonyolult, és határozottan olvashatóbb, mint pl. az iptables (ami tudom, már halott - azaz az istenített Linuxot adminolók most tanulhatják újra immár hanyadszor is? 5? 6? a szintaxist - akkor már az ipfw ezerszer jobban teljesít, ugyanis a szintaxisa jellemzően(*) nem megváltozott, csak bővült.)

És a FreeBSD-devek arroganciája pont ugyanolyan (és ugyanolyan mértékű), mint más deveké - ez egyszerű statisztika.

Szóval valami szakmai érv? Mondjuk hogy egy tűzfalban levő hiba a nagyobb-e (és miért), vagy a Debian-fejlesztő által belehekkelt OpenSSL cukiság.

(*) pont az általam emlegetett dummynet konf épp megváltozott, de a mai napig használható a régi szintaxis - amit nem tudom mi a francért neveztek át. (Régen (és most) : ipfw pipe / queue / shed . Hivatalosan 13.1 óta : dnctl pipe / queue / sched )

A szintaktika szerintem egy bizonyos szinten már a kutyát nem érdekli szvsz. Az nftables pl még rosszabb ilyen szempontból :)

De hogy szakmai érvet is hozzak az ipfw vs pf témában , nincs pl state timeout állítási lehetőség csak globálisan.

Tud valami hasonlót az ipfw mint a pf alább?:

pass in proto tcp from any to 192.168.1.5 port 80 flags S/SA keep state (tcp. established 3600)

Vagy a max-src-conn illetve max-src-conn-rate -hez hasonló funkciót?

SYN proxy-t?

Az ipfw stateful fukciói meglátásom szerint eléggé mostohán vannak kezelve.

Azért az se baj, ha az ember ránéz a szabályrendszerre, és el tudja olvasni. (Igen, az nftables is eszembe jutott, de az még túl új.)

Nyilván, ha egy funkciót nem implementáltak, akkor nem fogom tudni megcsinálni - a felhozott három példádra ezért értelemszerűen max másfél választ tudok adni:

ipfw add check-state

ipfw add deny tcp from any to any established

ipfw add allow tcp from any to 192.168.1.5 80 in setup keep-state # a setup helyett is lehet tcpflags syn,!ack, ha ez jobban tetszik

Értelemszerűen hiányzik a state timeout, amit írtál is. Ezt explicit le is írja a doksi, hogy globális sysctl-ekkel szabályozható.

A max-scr-conn -ra ezt találtam, nem tudom mennyire fedi le, szerintem ez ugyanaz:

     To limit the number of connections a user can open you can use the
     following type of rules:

           ipfw add allow tcp from my-net/24 to any setup limit src-addr 10
           ipfw add allow tcp from any to me setup limit src-addr 4

Cserébe lehet dst-addr vagy port is, nem csak IP. Ezt a max-src-conn-rate -et *talán* a dummynetbe bele lehet szuszakolni, azt baromi rég néztem - de kétlem.

Csak hogy egyértelmű legyen: nem kutalkodtam, hogy melyik funkció mikor került bele az ipfw-be, ez most a gépemen levő 14.0 (most már -p2) manjában volt benne.

Ha már a Roecx-ről (ha már előhoztad :) le volt véve a keresztvíz annak idején és a FreeBSD-vel volt (többek közt) példálózva, akkor ez is megér egy faszkorbácsot így mikuláskor.

Eleve a FreeBSD kézikönyv is a pf-et említi először, mint tűzfalat:

https://docs.freebsd.org/en/books/handbook/firewalls/

Ha tennem kéne rá, biztos vagyok benne, hogy a pf a legnépszerűbb és legtöbbet használt. Így szerintem gáz, ha ilyen állapotban van.

trey @ gépház

Ugyanebben az általad idecitált Handbookban a PF rész ezzel kezdődik:

 

Warning

When reading the PF FAQ, keep in mind that FreeBSD’s version of PF has diverged substantially from the upstream OpenBSD version over the years. Not all features work the same way on FreeBSD as they do in OpenBSD and vice versa.

Azaz aki nem vak, az legalább kap egy figyelmeztetést - nem úgy, mint amikor a fél világ kevéssé biztonságosan használta a félrepeccselt a szoftvert :-P

Ja, ki mit használ? Rakj ki róla szavazást!

> Linuxot adminolók most tanulhatják újra immár hanyadszor is? 5? 6? a szintaxist

ezt kifejthetned... 25 ev alatt nem sok valtozasra emlexem, volt 20+ eve az ipchains->iptables valtas, de ott a szintaxis nem nagyon valtozott csak a parancs neve, es a nat-olast kulonvalasztottak.

meg most van ugye az uj nftables, ami meg mindig nem nagyon terjedt el, en se hasznalom pedig napi szinten buzergalok linux tuzfalakat. ehhez mondjuk tenyleg ujra kell tanulni 0-rol, de 25 ev alatt 1x belefer.  raadasul az nftableshez van elvileg iptables frontend, amivel az nft-t tudod a regi szintaxissal hasznalni.

Mintha az ipchains előtt is lett volna valami, de ezen túlmenően nem szabad elfelejtkezni arról, hogy vannak az ilyen apróságok, mint at egyes disztrók által előszeretettel reszelt firewalld, meg ufw meg - régebben suse-firewall - meg még mit tudom én micsoda. És addig nincs baj, amíg te csak iptables parancsokkal operálsz, de ha bárki elkezdi bármiféle előtétprogramokkal baszogatni, akkor abból minden lesz, de főleg káosz. Én erre gondoltam leginkább.

Ja van iptables frontend az nft-hez (iptables-nft ), ami nft rulesetet generál a kernelbe ez a default általában az újabb disztrókban (Deianban pl 11 óta). Meg van az iptables-legacy ami iptables ruleokat generál a kernelbe bele, pl a Proxmox békésen ezt használja a 12-es Debian-on most is.

Aztán amikor olyan extensionra fut rá az iptables-nft rule generátor ami nftablesben nem létezik (vagy mert sz*rtak megírni a rule transzlátort) akkor berántja a megfelelő XT_ akármi modult aztán pillázol ki kivel van.

Az egészért jár egy virtuális tockos az egész bagázsnak aki ezt kitalálta.

És nem segít az nftables elterjedésén (végülis még csak 2014 óta van a 3.13-ban jelent meg , bár kb a  4.9-ben lett használható), hogy amúgy egészen "kis" projektek pl Proxmox, Docker, Libvirt nagy ívben sz*rnak megírni a natív nftables támogatást.

_újra_

De nyilván értetted. Amúgy értelemszerűen nem várom el, hogy egyetérts Bízom benne, hogy nem olyan környezetben dolgozol, ahol egyidejűleg kell ugyanazt a tűzfalszabályt 6 különböző nyelven is megírni.

Messziről jött ember azt mond amit akar...

El tudom képzelni h. kurvanagy az egó mind2 oldalnál ebben a témában. Tesz az egyik fél egy látványos gesztust a másik felé, amit a másik fél értelmezhet arrogánsnak is, és megindul az egymással cicaharc. Ezek az ópenszószos szemétdombon kapirgáló kakasok már csak ilyenek.

A windows tűzfalról meg senki sem tudja hogy honnan van, működik-e jól, vagy h. csinál-e egyáltalán bármit is a háttérben. Azt vagy használod v. nem. Ha szándékosan kikapcsolod mert nem használod, akkor visszakapcsolja magát legkésőbb a következő peccskedd utáni szopós-szerdán.

Szerintem annyira szégyellni való nincs rajta. Bugok, lyukak vannak mindenben, majd javítani fogják. Az OpenBSD sem hibátlan, pl. a Spectre-re a mai napig nincs patch-ük. Igen, a SMT/HTT-t default letiltották, de az nem oldja meg teljesen a problémát, csak a hatását csökkenti. Igazából ma már minden ilyen modern OS, meg hálózati rendszer tele van bugokkal és sechole-okkel, a különbség csak az, hogy amíg a zárt kódos rendszerek (MS, Apple, stb.) ülnek rajta, abban reménykedve, hogy más még nem jött rá, meg különböző soha napján kis-patch-keddekig húzogatják a foltozási időt, addig ezek a FOSS projektek nyíltan publikálják, és általában órákon, napokon belül meg is oldják, jön ki rá a patch, update.

A lényeg ezekben, hogy valaki megtalálja őket, jelentse, foltozza. Teljesen érdektelen, hogy milyen súlyos, meg hány évek lyuk, ha egyszer gyorsan foltozásra kerül.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Credits:        Yuxiang Yang, Ao Wang, Xuewei Feng, Qi Li and Ke Xu from Tsinghua University

Már megint ezek a "semmihez se értő" kínaiak ... 

trey @ gépház

Pont ezért szeretem a FreeBSD-t, mert nem kapkodnak átvenni minden újdonságot azonnal. Látom, hogy problémák lehetnek a jelzett hibánál.

Akkor is, ha szerepel a konfigban?

scrub in on $ext_if all fragment reassemble no-df random-id max-mss 1440
antispoof quick for $ext_if