Zvažuji přechod z Linuxu na FreeBSD

Re:Zvažuji přechod z Linuxu na FreeBSD
« Odpověď #90 kdy: 13. 04. 2025, 13:39:05 »
Abych demonstroval jednoduchost konfigurace FreeBSD a také to může pomoci někomu dalšímu, rozhodl jsem se podělit se svojí konfiguraci.
Konfiguruj síť, firewall, NAT , co se má pustit po startu a také fungování jailů (kontainery).
Vše dělám tak, aby to bylo co nejkratší, přehledné a jedna věc byla jen na jednom místě.
Důležité nastavení je pak obsaženo v těchto  několika malých souborech.

/etc/rc.conf  - nastavení sítě a toho co se má při startu pustit
Kód: [Vybrat]
hostname="Bdxxx"
keymap="cz.kbd"

# přejmenuji síťovku s jménem igb0, aby bylo jasné, kam připojit kabel
ifconfig_igb0_name="prostredni"

# vytvořím bridge - virtuální switch do kterého se budou zapojovat jednotlivé jaily.
cloned_interfaces="bridge0"
# přidám externí fyzickou síťovku do bridge
# pevná adresa by se dělala takto
#ifconfig_bridge0="inet 89.xxx.xxx.xx/27 addm prostredni up"
# pro získání ip adresy se použije DPHCP
ifconfig_bridge0="addm prostredni SYNCDHCP"
ifconfig_prostredni="up"
# pokud nepoužiji DHCP, musím definovat výchozí bránu
#defaultrouter="89.xxx.xxx.xx"

# sám může být router kvůli NATu
gateway_enable="YES" # sysctl -w net.inet.ip.forwarding=1

Routování mohu přidat takto
#static_routes="net1 net2"
#route_net1="-net 81.XXX.XXX.XXX/29 -interface bridge0"
#route_net2="-net 81.XXX.XXX.XXX/28  -interface bridge0"
sshd_enable="YES"
ntpd_enable="YES"
ntpd_sync_on_start="YES"
jail_enable="YES"
jail_parallel_start="NO"
# seznam kontainerů, které se mají spustit po startu systému
jail_list=""

powerd_enable="YES"
moused_nondefault_enable="NO"
dumpdev="AUTO"
zfs_enable="YES" # zfs mount -a
pf_enable="YES"
pflog_enable="YES
Syntaxe rc.conf spočívá v  definování proměnných v shelu. Defaultní skripty pak testují existenci těchto proměnných a podle toho se zachovají.
Hodnoty proměnných bývají shodné s tím, jak by se stejná věc prováděla přímo z příkazové řádky. Tedy např. ipfconfig_bridge0="inet 89.xxx.xxx.xx/27 addm prostredni up" ve skutečnosti provede "ifconfig bridge0 inet 89.xxx.xxx.xx/27 addm prostredni up" .   Přidá do bridge0 síťovku se jménem "prostredni" a nastaví ip adresu na virtuální síťovce bridge0.
Takže syntaxe je dobře popsána v manuálových stránkách, mohu si ji nejdříve vyzkoušet z příkazového řádku a stejnou syntaxi použít ve rc.conf.  To je velké ulehčení oproti Linuxu, kdy např. konfigurační soubor sítě má úplně jinou syntaxi, než když chceme to  síť nastavit ručně z příkazové řádky.

/etc/pf.conf - nastavení firewallu a NATu
Kód: [Vybrat]
# kontrola a reload firewallu: pfctl -vf /etc/pf.conf
ext_if = "bridge0"

# Tady jsou definice společné pro všechny fyzické servery
include "/etc/ovps_shared/pf.conf"

# ukázka v dokumentaci https://docs.freebsd.org/en/books/handbook/firewalls/

nat on $ext_if from 192.168.164.0/24 to any -> $ext_if
block all

pass from { self, 192.168.164.0/24  } to any keep state

# to list table content from terminal: pfctl -t ssh_access -Ts
table <ssh_access> const $ssh_access_set
pass in quick on $ext_if proto tcp from { <ssh_access> } to any port 24
pass out all

pass in inet proto icmp all icmp-type echoreq

Pokud budou mít jaily neveřejný ip adresy, budou z rozsahu 192.168.164.0/24 a fyzický stroj jim bude dělat NAT.

/etc/jail.conf  - nastavení kontainerů
Kód: [Vybrat]
  $bridge = "bridge0";
  $epair = "epair${id}";
# jailům s neveřejnou ip adresou budu dělat NAT
  $gateway = "89.XXX.XXX.XXX";
  # PATH/HOSTNAME
  path = "/jails/${name}/rootfs";
  host.hostname = "${name}";

  # VNET/VIMAGE
  vnet;
  # jeden ze dvou nových síťovek vložím do kontaineru
  vnet.interface = "${epair}b";

 # vytovří se pár síťových zařízení. Jeden se vloží do jailu jeden do bridge
  exec.prestart = "ifconfig ${epair} create up";
  exec.prestart += "ifconfig ${epair}a up descr jail:${name}";
  exec.prestart += "ifconfig ${bridge} addm ${epair}a up";
  exec.prestart += "mkdir -p ${path}/etc/ovps_shared";
# firewall pak už bude v containeru. Aby věděl, jakou má ip adresu a  název síťového zařízení, vytvořím mu soubor
# pf_local_definitions, který includne
  exec.prestart += "echo 'ext_if = \"${epair}b\"\next_ip = \"${ip}\"'>  ${path}/etc/pf_local_definitions.conf";
# pro přehled jakou má jaký kontainer ip adresu, uložím ip do souboru v jeho adresáři se jmpénem ip
  exec.prestart += "echo '${ip}'> /jails/${name}/ip";
# container má přístup k adresáři /etc/ovps_shared, kde jsou společné konfigurace a definice pro
# všechny kontainery. Nebudu se tak zbytečně opakovat a v případě změn to změním jen na jednom místě.
  exec.prestart += "mount_nullfs -o ro /etc/ovps_shared ${path}/etc/ovps_shared";


# níže nastavuji síťování pro jail
  exec.start    = "ifconfig ${epair}b ${ip} up";
  exec.start    += "route add -net 81.xxx.xxx.xxx/29  -interface ${epair}b";
  exec.start    += "route add default ${gateway}";
  exec.poststop = "ifconfig ${bridge} deletem ${epair}a";
  exec.poststop += "ifconfig ${epair}a destroy";

  exec.release = "umount -t nullfs ${path}/etc/ovps_shared";
  # STARTUP/LOGGING
  exec.start += "/bin/sh /etc/rc";
  exec.stop  = "/bin/sh /etc/rc.shutdown";
  exec.consolelog = "/var/log/jail_console_${name}.log";

  # PERMISSIONS
  allow.raw_sockets;
  exec.clean;
  mount.devfs;
  devfs_ruleset = 5;

# každý jail má také konfigurák ve svém adresáři, kde mohu nastavit jméno a ip adresu, nebo jiné
# nastavení která se liší od defaultu výše.

.include "/jails/*/config.conf";

Zde je geniální to, že nastavení, které je pro všechny jaily stejné dám do souboru /etc/jails.conf a to čím se liší dám do
/jails/nazevJailu/config.conf .   Konfig jednotlivých jailů tak může být velmi krátký. Natavuji jen jméno a ip adresu.


/jails/nazevJailu/config.conf - konfigurace jednotlivých kontainerů
Kód: [Vybrat]
nazevJailu{
  # NETWORKS/INTERFACES
  $id = "154";
  $ip = "192.168.164.${id}/24";
}

Samotný jail je pak umístěn v adresáři /jails/nazevJailu/rootfs

Pokud někdo vidí nějaké nedostatky, nebo že lze něco udělat ještě lépe, prosím napište.


Tom5

  • ***
  • 117
    • Zobrazit profil
Re:Zvažuji přechod z Linuxu na FreeBSD
« Odpověď #91 kdy: 14. 04. 2025, 08:38:29 »
Pokud někdo vidí nějaké nedostatky, nebo že lze něco udělat ještě lépe, prosím napište.

nikde nevidím IPv6... :-)

Trochu bojuji s dualstack (1xIPv4+IPv6/64) + VNET + ISP, který omezuje 1 MAC na 1 NIC. S VNET jsem to bez NAT6 nebo routingu nedokázal rozchodit :-(

Re:Zvažuji přechod z Linuxu na FreeBSD
« Odpověď #92 kdy: 14. 04. 2025, 10:20:23 »
Pokud někdo vidí nějaké nedostatky, nebo že lze něco udělat ještě lépe, prosím napište.

nikde nevidím IPv6... :-)

Trochu bojuji s dualstack (1xIPv4+IPv6/64) + VNET + ISP, který omezuje 1 MAC na 1 NIC. S VNET jsem to bez NAT6 nebo routingu nedokázal rozchodit :-(
IPv6 neřeším neb nepoužívám. Nicméně v mém případě  záměrně není vnitřní síť oddělena od té venkovní. A NAT používám jen proto, aby měly kontainery s neveřejnou ip adresou přístup na internet.

Pokud má kontainer veřejnou ip adresu, nebo pokud by měl ipv6 ip adresu, může komunikovat s vnějším světem napřímo. Tedy kontainer se nastavuje úplně stejně jako by se jednalo o další fyzický stroj připojené do téže sítě jako fyzický stroj. Má i svůj firewall.

Co se týče routování ipv6 a pf mluvilo  se v tomto vlákně o tom že je to zabagované. Nevím jestli se vás to týká nebo ne.

Tom5

  • ***
  • 117
    • Zobrazit profil
Re:Zvažuji přechod z Linuxu na FreeBSD
« Odpověď #93 kdy: 14. 04. 2025, 14:20:16 »
Pokud někdo vidí nějaké nedostatky, nebo že lze něco udělat ještě lépe, prosím napište.

nikde nevidím IPv6... :-)

Trochu bojuji s dualstack (1xIPv4+IPv6/64) + VNET + ISP, který omezuje 1 MAC na 1 NIC. S VNET jsem to bez NAT6 nebo routingu nedokázal rozchodit :-(
IPv6 neřeším neb nepoužívám. Nicméně v mém případě  záměrně není vnitřní síť oddělena od té venkovní. A NAT používám jen proto, aby měly kontainery s neveřejnou ip adresou přístup na internet.

Pokud má kontainer veřejnou ip adresu, nebo pokud by měl ipv6 ip adresu, může komunikovat s vnějším světem napřímo. Tedy kontainer se nastavuje úplně stejně jako by se jednalo o další fyzický stroj připojené do téže sítě jako fyzický stroj. Má i svůj firewall.

Chápu. Tak to máte jiný use-case. Ten můj je spíš takový ten běžný VPSkový - jedna veřejná IPv4 a blok IPv6 a hromada dualstack kontejnerů (u každého jedna veřejná IPv6+priviátní IPv4 s rdr z veřejné). V tuhle chvíli mi to funguje na aliasech (tj. bez VNET), protože NAT6 se mi nechce dělat a routing zase nepodporuje ISP.

Citace
Co se týče routování ipv6 a pf mluvilo  se v tomto vlákně o tom že je to zabagované. Nevím jestli se vás to týká nebo ne.

Pokud myslíte ten pfsense s CURRENT verzí, tak já používám klasický 14.2-RELEASE, takže problém nemám, alespoň ne s FreeBSD :-)

Re:Zvažuji přechod z Linuxu na FreeBSD
« Odpověď #94 kdy: 14. 04. 2025, 15:14:09 »
Chápu. Tak to máte jiný use-case. Ten můj je spíš takový ten běžný VPSkový - jedna veřejná IPv4 a blok IPv6 a hromada dualstack kontejnerů (u každého jedna veřejná IPv6+priviátní IPv4 s rdr z veřejné). V tuhle chvíli mi to funguje na aliasech (tj. bez VNET), protože NAT6 se mi nechce dělat a routing zase nepodporuje ISP.

Já mám sice k dispozici více veřejných ipv4. Takže kromě fyzického stroje mohou mít veřejnou i některé jaily, ale běžně to nepoužívám a jaily mají jen neveřejnou ipv4.   Protože ipv6 nepotřebuji tak to neřešeím, ale jaily by kromě neveřejné ipv4 rozhodně mohli mít i ipv6.  Tedy nevidím v čem je to jiný use case.  Podle mne je to typický use case. Netipické možná je, že vše se připojuje jen k jedné počítačové síti jedním kabelem. A tatáž síť je i u uvnitř vytvořeného brigde. Tedy všichni mohou komunikovat se všemi jako by se vůbec nejednalo o jaily.  A firewally jsou jen na úrovni samotných jailů. Je to takto jednodušší a nejsem ničím omezován.
Obvykle většinou ostatní vytváří novou síť pro jaily, který je oddělena od venkovní síťe. Jiný use case to ale  moc není.  On vám totiž stejně nikdo z internetu nemůže jen tak útočit na neveřejnou ip adresu a i kdyby, ip adresy z kterých jsou služby přístupné určuje firewall každého jailu.


Tom5

  • ***
  • 117
    • Zobrazit profil
Re:Zvažuji přechod z Linuxu na FreeBSD
« Odpověď #95 kdy: 14. 04. 2025, 18:09:32 »
Protože ipv6 nepotřebuji tak to neřešeím, ale jaily by kromě neveřejné ipv4 rozhodně mohli mít i ipv6.  Tedy nevidím v čem je to jiný use case.

Právě protože IPv6 nepouživáte, tak máte jiný případ užití tj. use case a zároveň patrně můžete použít víc MAC adres pro vaše veřejné IP adresy, což někteří ISP neumožňují (Hetzner např.).

Citace
On vám totiž stejně nikdo z internetu nemůže jen tak útočit na neveřejnou ip adresu a i kdyby, ip adresy z kterých jsou služby přístupné určuje firewall každého jailu.

Jako že důvěřujete L2 vrstvě?

P.S.: Ale asi už jsem to vyřešil a vše mi běží s VNET vč. public IPv6 a vše na jedné MAC adrese.

Re:Zvažuji přechod z Linuxu na FreeBSD
« Odpověď #96 kdy: 14. 04. 2025, 19:17:05 »

Právě protože IPv6 nepouživáte, tak máte jiný případ užití tj. use case a zároveň patrně můžete použít víc MAC adres pro vaše veřejné IP adresy, což někteří ISP neumožňují (Hetzner např.).
Kdybych IPv6 chtěl používat, prostě si ji na některém JAILu nastavím a předpokládám, že nemusím nic dalšího měnit.
Ale je fakt, že možné omezení poskytovatele internetu na jedinou  MAC mne nenapadlo. Nechápu moc smysl toho omezení v případě, že dává více adres, zjevně  si tím něco ulehčuje na úkor zákazníka.
Jak se to dělá? To se vaše síťovka směrem do internetu musí tvářit, že obsluhuje všechny veřejné ip adresy, ale ve skutečnosti je neobsluhuje, ale jen přeroutuje do VNET?  To jde?

Jako že důvěřujete L2 vrstvě?
Tomuhle takto nerozumím. Vím jen, že pakety směrem z internetu chodí výhradně z výchozí brány poskytovatele. A ten provoz na jiné než naše veřejné IP adresy nedovolí, leda že by tam měl něco hodně špatně. A to nejen on, ale i další po cestě. (ano obecně se na to spoléhat nelze) Kromě rozumně se chovajícího poskytovatele nás pro jistotu chrání i firewall, který běží i na všech neveřejných ip adresách. Tedy v dalším oddělení sítí nevidím žádný smysl, kromě toho si vše zkomplikovat.

jjrsk

  • *****
  • 717
    • Zobrazit profil
Re:Zvažuji přechod z Linuxu na FreeBSD
« Odpověď #97 kdy: 15. 04. 2025, 08:39:09 »
Tomuhle takto nerozumím. Vím jen, že ...
Jinak receno, pana Boha si nevidel, ale veris, ze existuje ...

Najdi si neco na tema sourcerouting, napriklad ... to je jeden z milionu zpusobu jak ti dostat na router pakety s destinaci na privatni IP.

Re:Zvažuji přechod z Linuxu na FreeBSD
« Odpověď #98 kdy: 15. 04. 2025, 09:49:58 »
Tomuhle takto nerozumím. Vím jen, že ...
Jinak receno, pana Boha si nevidel, ale veris, ze existuje ...

Najdi si neco na tema sourcerouting, napriklad ... to je jeden z milionu zpusobu jak ti dostat na router pakety s destinaci na privatni IP.

Jako je fajn si to ověřit a vědět o tom, ale zas třeba stran toho source routingu se to jak na Linuxu, tak na FreeBSD  (nevím možná dekády už) ve výchozím stavu ignoruje a musíš to explicitně povolit přes sysctl.
V pf, které máš pak většinou zapnuté v těch jailech, je to tak, že jakmile má paket v headeru IP options (včetně toho SR), tak ho blokuje, pokud neuděláš pravidlo, co to zas explicitně povolí (např. pass in quick on epair4b all allow-opts).
Stejně tak je tam jednoduše použitelný antispoof, co můžeš aplikovat v každém jailu (antispoof for epair4b inet).

Re:Zvažuji přechod z Linuxu na FreeBSD
« Odpověď #99 kdy: 15. 04. 2025, 09:58:42 »
Tomuhle takto nerozumím. Vím jen, že ...
Jinak receno, pana Boha si nevidel, ale veris, ze existuje ...

Najdi si neco na tema sourcerouting, napriklad ... to je jeden z milionu zpusobu jak ti dostat na router pakety s destinaci na privatni IP.

Tak by mne zajímalo, jak tedy přesně mohu ten útok zopakovat, abych si zkusil útočit  sám na sebe.

Když zadám do googlu "example of source route attack", tak to najde jen teoretické tlachání. Nikde žádný příklad, jak se mohu zkusit připojit na neveřejnou ip adresu přes internet, pokud znám veřejnou ip adresu routeru nebo prostě počítače ve stejné lokální síti? Brání něco takový příklad někde uvést?

A nějaký seznam nejpoužívanějších z těch miliónů způsobů by nebyl?  Rád bych si zkusil útočit sám na sebe.

Podotýkám, že hlavní obrana je firewall na každém containeru a to i s neveřejnou ip adresou. A oddělení sítě by to zlepšilo jen o to, že nemůže být teoreticky použit router mého poskytovatele.

Re:Zvažuji přechod z Linuxu na FreeBSD
« Odpověď #100 kdy: 15. 04. 2025, 15:02:35 »
Tomuhle takto nerozumím. Vím jen, že ...
Jinak receno, pana Boha si nevidel, ale veris, ze existuje ...

Najdi si neco na tema sourcerouting, napriklad ... to je jeden z milionu zpusobu jak ti dostat na router pakety s destinaci na privatni IP.

Tak by mne zajímalo, jak tedy přesně mohu ten útok zopakovat, abych si zkusil útočit  sám na sebe.

Když zadám do googlu "example of source route attack", tak to najde jen teoretické tlachání. Nikde žádný příklad, jak se mohu zkusit připojit na neveřejnou ip adresu přes internet, pokud znám veřejnou ip adresu routeru nebo prostě počítače ve stejné lokální síti? Brání něco takový příklad někde uvést?

A nějaký seznam nejpoužívanějších z těch miliónů způsobů by nebyl?  Rád bych si zkusil útočit sám na sebe.

Podotýkám, že hlavní obrana je firewall na každém containeru a to i s neveřejnou ip adresou. A oddělení sítě by to zlepšilo jen o to, že nemůže být teoreticky použit router mého poskytovatele.

Nemohu se zbavit dojmu, že to jsou takové urban legendy, které se předávají mezi generacemi adminů.

Nicméně, když už se diskuze stočila k tomuto - považuji za naprostou samozřejmost, že je toto ošetřené firewallem na hranici sítě.
V sítích, do kterých tak či onak fušuji, je to zpravidla udělané tak, že je síť připojená přes router s RouterOSem. Ve firewallu se pak zahazují pakety, přícházející WAN interfacem, které při tom mají dst adresu z rozsahu private networks nebo localhostu.
Od toho se odvíjí, že nepoužívám na IPv4 IPsec v tunelovém režimu, protože tam se, alespoň v RouterOSu, resp. asi i v Linuxu, na WAN interface objevují pakety, rozbalené IPsecem, které ale mají adresy z privátního rozsahu. Aby takové, legitimní, firewall dokázal rozeznat od paketů podvržených, je potřeba značkovat a to je vopruz. A zvyšuje to riziko nějaké chyby.
Pokud už potřebuji, aby procházely nějaké pakety od ISP, který nepoužívá sdílené adresy 100.64.0.0/10 (RFC6598), tak tam je pravidlo s explicitní výjimkou.

Re:Zvažuji přechod z Linuxu na FreeBSD
« Odpověď #101 kdy: 15. 04. 2025, 15:25:14 »
Ono je také rozdíl, pokud zabezpečujete počítačovou síť kanceláře, kde může být třeba jeden server.

Nebo pokud zabezpečujete farmu serverů.


V kanceláři je navíc třeba řešit to, že je možné nějakou chybou připojit i ne úplně dobře zabezpečené počítače. Nebo třeba notebook, tablet či telefon přes wifi, který správce nemusí mít pod kontrolou. Do sítě se také připojují webkamery, tiskárny a další zařízení, které se nemusí vůbec chovat ideálně. Tedy je potřeba to hlídat na tom routeru.


Ale pokud zabezpečuji farmu serverů, tak je snadnější si ohlídat firewall na jednotlivých serverech.  A na druhou stranu nechci jeden router, který by se mohl polámat a celou farmu odstavit. Také být úzkým hrdlem přístupu.


Ink

  • *****
  • 674
    • Zobrazit profil
    • E-mail
Re:Zvažuji přechod z Linuxu na FreeBSD
« Odpověď #102 kdy: 15. 04. 2025, 15:49:34 »
A na druhou stranu nechci jeden router, který by se mohl polámat a celou farmu odstavit. Také být úzkým hrdlem přístupu.

Hm, takže ty servery se připojují bez routeru?

Re:Zvažuji přechod z Linuxu na FreeBSD
« Odpověď #103 kdy: 15. 04. 2025, 16:37:13 »
A na druhou stranu nechci jeden router, který by se mohl polámat a celou farmu odstavit. Také být úzkým hrdlem přístupu.

Hm, takže ty servery se připojují bez routeru?

Ano bez routeru v naší správě. Myslím že serverhousing má nějakou redundanci a i kdyby ne, jistě má náhradní zařízení, které je schopen nasadit v řádu desítek minut. Na celou serverovnu jistě má nějaká náhradní. A i konfigurace je pro něj triviální, nebo to dělá denně. Naproti tomu já se routerOS učit nehodlám (když už tak openWRT) a kdyby router dělal jeden z Linuxových strojů, tak jsou to zbytečné náklady, starosti a ten stroj se může polámat a pak nejde nic.   
Vím že spousta lidí by téměř vše řešila routerem navíc a zjevně má představu, že všechno ostatní je špatně, ale já mezi ně nepatřím.

Tom5

  • ***
  • 117
    • Zobrazit profil
Re:Zvažuji přechod z Linuxu na FreeBSD
« Odpověď #104 kdy: 15. 04. 2025, 17:48:07 »
Ale je fakt, že možné omezení poskytovatele internetu na jedinou  MAC mne nenapadlo. Nechápu moc smysl toho omezení v případě, že dává více adres, zjevně  si tím něco ulehčuje na úkor zákazníka.

Tak pod pojmem bezpečnost se schová řada nastavení a omezení :-). Mám pocit(?), že Proxmox defaultně také filtruje MAC u VM... Fakt je, že je to jeden ze způsobů jak omezit právě útoky na L2.

To se vaše síťovka směrem do internetu musí tvářit, že obsluhuje všechny veřejné ip adresy, ale ve skutečnosti je neobsluhuje, ale jen přeroutuje do VNET?  To jde?

Jde. Ale není to zadarmo. Je to triviální IP redirect :-) Prakticky stačí v jailech mít bránu na IPv6 adresu bridge. Bridge interface zajistí forward na správnou bránu se svojí odchozí MAC :-)

Bylo by asi lepší to napsat v netgraphu a přepisovat MAC, ale nemám to na nějaké extra zátěže, takže zatím mi to takhle stačí. Uvidím, jak se to bude vyvíjet. Možná na to dojde.

Jako že důvěřujete L2 vrstvě?
Tomuhle takto nerozumím. Vím jen, že pakety směrem z internetu chodí výhradně z výchozí brány poskytovatele.

Je to samozřejmě závislé na daném řešení konkrétního ISP. Takže zatímco u Hetznera cizí provoz (snad) není, tak u Akamaie nedávno býval docela čilý ruch (dnes už ne) a na ten interface bych nic nevystrčil, byť to asi nějak ošetřené měli. Ale nevím jak a jak velká je šance, že jim při změnách něco nedopadne. Takže tomu a priory nevěřím. A vytvářet ty jaily s IPv4 na čistě virtuálním bridgi není pro mne žádná komplikace.