Skip to content

FreeBSD Eldveggsuppsetning


FreeBSD býður upp á nokkra eldveggi, við munum hér sjá uppsetningu á PF eldveggnum frá OpenBSD.

Eldveggurinn virkjaður

Kveikjum á eldveggnum með því að ganga úr skugga um að eftirfarandi lína sé til staðar í rc.conf:

rc.conf
pf_enable="YES"
Þetta mun hlaða kjarnaeiningunni pf.ko við ræsingu. Sjálfgefna ástand PF er að leyfa allt, til þess að maður læsi sig ekki úr kerfinu við það eina að kveikja á eldveggnum.

Til þess að hlaða PF einingunni undir eins án endurræsingar getum við keyrt kldload pf.

Stilling eldveggsins

Það fer eftir tilgangi þjónsins, en við viljum líklega breyta sjálfgefnu stillingunni í að banna allt. Áður en við gerum það skulum við vera viss um að við höfum tengingu á þjóninn framhjá eldveggnum, annað hvort beintenging við þjóninn eða fjartengt stjórnborð.

Hægt er að skoða sýnidæmi í /usr/share/examples/pf/. Stillingar pf eru síðan skráðar í /etc/pf.conf. Byrjum á því að skrá netupplýsingar okkar í breytur, þannig að ef t.d. nafn tengildisins eða IP fangið breytist getum við einfaldlega uppfært breytuheitið til að uppfæra allar reglurnar okkar.

Note

Hér nota ég mínar upplýsingar, breyturnar mega heita hvað sem er og skiptið gildunum út fyrir þau í ykkar umhverfi.

/etc/pf.conf
pub_interface="vtnet0"
wg_interface="wg0"

pub_ip="0.0.0.0" # (1)!
wg_ip="10.0.0.1"
  1. Notið ykkar eigið IP-fang hér

TCP/IP pakkar geta verið brotnir upp í flugi sínu til þjónsins. Notið eftirfarandi reglu til að henda öllum asnalega litlum brotum og skynsamlega endurbyggja aðra pakka. Þetta getur tekið á kerfið en reglur eru byggðar á heilum pökkum o g sé þetta ekki gert gæti kerfið upplifað tengingartruflanir.

Beitum svo PF ekki á tengildið lo0 þar sem það er einungis notað af þjóninum sjálfum til að tala við sjálfan sig.

/etc/pf.conf
pub_interface="vtnet0"
wg_interface="wg0"

pub_ip="0.0.0.0"
wg_ip="10.0.0.1"

set skip on lo0
scrub in
Því næst skrifum við reglur sem bannar innkomandi tengingar, leyfir útværar tengingar og leyfir svo nokkrar sértilgreindar tengingar.

/etc/pf.conf
pub_interface="vtnet0"
wg_interface="wg0"

pub_ip="0.0.0.0" 
wg_ip="10.0.0.1"

set skip on lo0
scrub in

block in
pass out

pass in on $pub_if proto tcp from any to ($pub_if) port 22 # (1)!
pass in on $pub_if proto udp to ($pub_if) port 444 # (2)!
pass in on $pub_if inet proto icmp to ($pub_if) icmp-type { unreach, redir, timex, echoreq } # (3)!
  1. Þessi regla leyfir SSH tengingar. ($pub_if) þýðir "öll ip-föng á tengildinu pub_if sem við tilgreindum að er vtnet0.
  2. Hér leyfum við UDP traffík á port 444, þar sem wireguard hlustar. Hér sleppum við einnig from any stæðunni, það er sjálfgefið, en hægt er að nota það til að sía tengingar.
  3. Grunn-ICMP beiðnir, leyfir m.a. þjóninum að svara ping-i.

Note

Höfum í huga að ólíkt mörgum öðrum eldveggjum þá gildir hér sú regla sem passar seinast, þ.a. block in reglan kemur efst, og reglur á eftir henni hafa forgang.

Eftir að reglurnar okkar hafa verið skrifaðar getum við villuprófað þær með

# pfctl -nf /etc/pf.conf
Ef keyrir hljóðlaust eru engar málfræði- né stafsetningarvillur í skránni, en þetta varar þig ekki við því ef að reglurnar læsa þig úti.

Þegar við erum ágætlega viss um að við munum geta talað við þjóninn eftir þessar reglur getum við virkjað þær með

# pfctl -f /etc/pf.conf

Ef við erum ennþá tengd getum við séð hvaða reglur eru í gildi með pfctl -sr. Við getum einnig eytt reglunum okkar með pfctl -Fa, en ef ætlunin er að hlaða nýjum reglum frá annarri skrá óvirkjast reglurnar frá gömlu skránni, þannig óþarfi er að eyða núverandi reglum fyrst.

Til villugreiningar getum við notað pflog, virkið það með pflog_enable="YES" í rc.conf

Blacklistd

Nú þegar eldveggurinn er græjaður og þjónninn okkar ekki alveg jafn berrassaður og áður getur verið góð hugmynd að bæta varnir okkar gegn yrkjanetum (e. botnets). Blacklistd er samskonar þjónusta og fail2ban, fyrir þá sem þekkja, en það virkar þannig að þröskuldur er settir á netþjónustur sem þjónninn býður upp á, þannig að ef of örar eða margar tengingartilraunir frá sömu IP tölunni mun banna þá IP tölu. Bætum þeirri virkni við eldvegginn okkar með því að setja eftirfarandi línuna fyrir ofan fyrstu regluna okkar.

/etc/pf.conf
~~~
anchor "blacklistd/*" in on $pub_if

block in
pass out
~~~

Næst þurfum við að segja kerfinu að keyra blacklistd við ræsingu:

# sysrc blacklistd_enable=YES

Nú mun þjónustan virkjast við næstu endurræsingu eða handvirka ræsingu, nýtum tækifærið og stillum þjónustuna. Stillingar fara í skrána /etc/blacklistd.conf. Hún hefur tvö svæði, [local] og [remote]. Local svæðið skilgreinir reglur fyrir staðværar þjónustur, t.a.m. SSH og svoleiðis, á meðan Remote skilgreinir reglur fyrir fjarræna hluti, svosem reglur byggðar á ákveðnum IP addressum. Skipanin er þannig að Local er á undan remote og hver regla er ein lína með 6 gildum, t.d.:

[local]
22  stream  *   *   3   24h
*   *       *   *   3   *

Frá vinstri til hægri erum við með:

  1. Tengi (e. port) þjónustunnar, hér SSH
  2. Tengill þjónustunnar, stream fyrir TCP og dgram fyrir UDP. Hér má vel nota *.
  3. Samskiptaregla, má vera tcp, udp, tcp6, udp6 og numeric. Oftast best að nota * sem á við þetta allt.
  4. Eigandi þess sem er keyrandi á tenginu.
  5. Það "anchor" sem þessi regla á við, það sjálfgefna er blacklistd sem við settum í pf.conf skrána okkar, * notar sjálfgefna gildið.
  6. Hversu margar tilraunir þarf til að banna tenginguna
  7. Hversu lengi á að banna, sjálfgefna tímaeiningin er sekúnda en nota má m, h og d fyrir mínútur, klukkutíma og daga.

Með þessari reglu eru öll þau sem misheppnast þrisvar að tengjast við SSH bönnuð í 24 tíma, og hvaða beiðnir sem er bannast í mínútu.

Nú getum við skilgreint Remote reglurnar okkar. Við erum klaufar þannig við ætlum að gefa okkur 10 tilraunir í stað þriggja og bönnum okkur einungis í klukkutíma.. Við getum einnig sett lengri banntíma fyrir fólk sem okkur er illa við.

[remote]
0.0.0.0 *   *   *   *   10  1h   # (1)!
  1. Notið ykkar eigið IP-fang.

Blacklistd virkar bara ef forritin sem það þjónustar styður það. SSH gerir það, bætið eftirfarandi línu í /etc/ssh/sshd_config:

UseBlacklist yes
og endurræsið svo sshd þjónustuna.