Hapi 1. Konfigurimi i IPFW
Hapi 2. Instaloni dhe konfiguroni SSHGuard
Hapi 3. Krijo një skript rregullash
Hapi 4. Fillimi dhe testimi
Hapi 5. Të jesh vigjilent...
Serverët VPS janë shpesh në shënjestër nga ndërhyrës. Një lloj i zakonshëm sulmi shfaqet në regjistrat e sistemit si qindra përpjekje të paautorizuara për hyrje ssh. Vendosja e një muri zjarri është shumë i dobishëm, por në vetvete mund të mos kontrollojë në mënyrë adekuate përpjekjet përçarëse për ndërhyrje.
Ky tutorial tregon se si të ndërtoni një pengesë të zgjeruar të ndërhyrjes për FreeBSD duke përdorur dy programe, ipfwmurin e zjarrit dhe sshguard. SSHGuard është një program i vogël shtesë që monitoron regjistrat e sistemit për hyrje "abuzive". Kur shkelësit përpiqen të kenë akses, sshguardudhëzon ipfwtë bllokojë trafikun që vjen nga adresa IP e shkelësit. Më pas shkelësi mbyllet në mënyrë efektive.
Pasi të kuptohet se si funksionojnë këto programe, menaxhimi i mbrojtjes së serverit është mjaft i thjeshtë. Megjithëse ky udhëzues përqendrohet në konfigurimin e FreeBSD, pjesë të tij zbatohen për OS dhe softuer të tjerë të murit të zjarrit.
Hapi 1. Konfigurimi i IPFW
FreeBSD ofron 3 mure zjarri në GENERICkernelin e tij të paracaktuar ( ), ipfw, pf, dhe ipfilter. Secili ka avantazhe dhe tifozë, por ipfwështë softueri vendas i murit të zjarrit të FBSD dhe mjaft i thjeshtë për t'u përdorur për qëllimet tona. Vlen të përmendet se ipfwbën shumë gjëra siç tregon faqja e tij e njeriut, megjithatë aftësi të tilla si NAT, formimi i trafikut, etj., nuk nevojiten për situatën tipike VPS. Për fat të mirë, veçoritë bazë të murit të zjarrit plotësojnë lehtësisht kërkesat tona.
Për të nisur murin e zjarrit në kohën e nisjes, shtoni sa vijon në /etc/rc.conf:
firewall_enable="YES"
firewall_script="/usr/local/etc/IPFW.rules"
firewall_logging="YES"
serviceKomandës është në dispozicion për të filluar / stop firewall me dorë:
[user@vultr ~]$ sudo service ipfw start
Natyrisht, ipfwnuk do të bëjë asgjë derisa të shtojë rregulla, shpesh nga një skedar, në këtë shembull të vendosur në /usr/local/etc/IPFW.rules. Skedari i rregullave në fakt mund të gjendet kudo ose të ketë ndonjë emër, për sa kohë që përputhet me parametrin "firewall_script". Skedari i rregullave përshkruhet në detaje më poshtë.
sshguardvjen në disa shije për përdorim me mure të ndryshme zjarri. Përdorni programin pkgpër të marrë dhe instaluar sshguard-ipfw:
[user@vultr ~]$ sudo pkg install sshguard-ipfw
Në shumicën e rasteve kjo është gjithçka që duhet bërë. Ndryshorja e duhur futet automatikisht /etc/rc.confpër të nisur me nisjen:
sshguard_enable="YES"
Standardet normalisht funksionojnë mirë. Nëse nevojiten vlera të ndryshme, sshguardfaqja e njeriut jep informacion të detajuar rreth parametrave:
# sshguard--program defaults, so don't need to be in rc.conf unless assigning different value
# sshguard_pidfile="/var/run/sshguard.pid"
# sshguard_watch_logs="/var/log/auth.log:/var/log/mail"
# sshguard_blacklist="40:/var/db/sshguard/blacklist.db"
# sshguard_safety_thresh="40"
# sshguard_pardon_min_interval="420"
# sshguard_prescribe_interval="1200"
Mund të filloni sshguardme servicethirrjen e zakonshme :
[user@vultr ~]$ sudo service sshguard start
Hapi 3. Krijo një skript rregullash
Pjesa më e vështirë është krijimi i grupit të rregullave të murit të zjarrit. ipfwmund të përdorë /etc/rc.firewallskriptin e dhënë , por ai duhet të modifikohet për të akomoduar SSHGuard, si dhe skenarë të ndryshëm operacionalë. Një numër i faqeve të internetit dhe Manuali FreeBSD kanë informacion të dobishëm për ta bërë këtë. Sidoqoftë, shkrimi i një skedari rregullash nuk është aq i vështirë, përveç kësaj, një grup rregullash me porosi mund të jetë më i lehtë për t'u kuptuar dhe ndryshuar kur është e nevojshme.
Një tipar i rëndësishëm i ipfwrregullave është se ndeshja e parë fiton që do të thotë se rendi i rregullave është i rëndësishëm. Në ipfw, çdo rregull është një komandë, dhe skedari i rregullave është një skrip i ekzekutueshëm i guaskës. Kjo lejon që grupi i rregullave të ndryshohet duke ndryshuar rregullat dhe më pas duke ekzekutuar skedarin e rregullave si skript i guaskës:
[user@vultr /usr/local/etc]$ sudo ./IPFW.rules
Në përgjithësi, një skedar rregullash do të përcaktojë një variabël për ipfwkomandën, më pas pastron rregullat aktuale, nxjerr rregulla të përgjithshme, më pas do të vazhdojë të vendosë rregullat "out", e ndjekur nga rregullat "in". Faqja manuale ipfw dhe burime të tjera përmbajnë një mori informacionesh në lidhje me strukturën e rregullave dhe opsionet të cilat janë të shumta për të mos thënë aspak.
Meqenëse versioni sshguard i FreeBSD është përditësuar në versionin 1.6.2, metoda e futjes së rregullave të bllokimit për shkelësit ka ndryshuar. Tani adresat e shkelësve mbahen në një tabelë ipfw (tabela 22 për të qenë specifike), në vend që të futen në rregullat mbi 55000 si më parë.
Për fat të mirë, është shumë e thjeshtë të konfigurosh skedarin e rregullave për të përdorur tabelën. Është vetëm një çështje për të vendosur rregullin e tabelës në vendin e duhur dhe për t'u siguruar që të përdorni sintaksën e saktë kur shkruani rregullin.
Kur sshguardgjen një shkelës, ai vendos adresën e shkelësit në listën e tij të zezë dhe gjithashtu fut adresën në ipfwtabelë në mënyrë që të "shkaktojë" mohimin e aksesit. Ky rregull do të përmbushë këto qëllime:
01000 deny ip from table\(22\) to any
Është ende e nevojshme të vendosen rregulla që lejojnë shërbimet hyrëse mbi 01000 në këtë rast. Për shembull, le të themi se adresa 10.20.30.40është një shkelës në tabelën 22, dhe ne kemi këtë rregull ipfw:
56420 allow tcp from any to me dst-port 22 in via $vif
Meqenëse ipfwndeshet me rregullin 01000 përpara rregullit 56420 , 10.20.30.40është i bllokuar . Nuk do të shihet fare nga rregulli "lejo 22 in". Nëse rregulli i lejimit do të kishte një numër "të rregullt" si 00420 , trafiku i keq do të lejohej dhe nuk do të bllokohej kurrë (sepse 00420 është më pak se 01000 dhe "fitimet e ndeshjes së parë").
Një veçori e këndshme e versionit të përditësuar është se tani kur sshguard nis të gjitha adresat në listën e zezë shtohen në tabelë dhe janë të disponueshme për të bllokuar pa vonesë shkelësit në hyrje. Lista e zezë është kumulative dhe ruhet ndërmjet seancave.
Në këtë pikë, ndoshta është e arsyeshme të tregohet një ipfwgrup rregullash i plotë i modifikuar për sshguard. Komentet duhet ta bëjnë mjaft të lehtë ndjekjen e logjikës së rregullave:
#!/bin/sh
# ipfw config/rules
# from FBSD Handbook, rc.firewall, et. al.
# Flush all rules before we begin.
ipfw -q -f flush
# Set rules command prefix
cmd="ipfw -q add "
vif="vtnet0"
# allow all for localhost
$cmd 00010 allow ip from any to any via lo0
# checks stateful rules. If marked as "keep-state" the packet has
# already passed through filters and is "OK" without futher
# rule matching
$cmd 00101 check-state
# allow DNS out
$cmd 00110 allow tcp from me to any dst-port 53 out via $vif setup keep-state
$cmd 00111 allow udp from me to any dst-port 53 out via $vif keep-state
# allow dhclient connection out (port numbers are important)
$cmd 00120 allow udp from me 68 to any dst-port 67 out via $vif keep-state
# allow HTTP HTTPS replies
$cmd 00200 allow tcp from any to any dst-port 80 out via $vif setup keep-state
$cmd 00220 allow tcp from any to any dst-port 443 out via $vif setup keep-state
# allow outbound mail
$cmd 00230 allow tcp from any to any dst-port 25 out via $vif setup keep-state
$cmd 00231 allow tcp from any to any dst-port 465 out via $vif setup keep-state
$cmd 00232 allow tcp from any to any dst-port 587 out via $vif setup keep-state
# allow icmp re: ping, et. al.
# comment this out to disable ping, et.al.
$cmd 00250 allow icmp from any to any out via $vif keep-state
# alllow timeserver out
$cmd 00260 allow tcp from any to any dst-port 37 out via $vif setup keep-state
# allow ntp out
$cmd 00270 allow udp from any to any dst-port 123 out via $vif keep-state
# allow outbound SSH traffic
$cmd 00280 allow tcp from any to any dst-port 22 out via $vif setup keep-state
# otherwise deny outbound packets
# outbound catchall.
$cmd 00299 deny log ip from any to any out via $vif
# inbound rules
# deny inbound traffic to restricted addresses
$cmd 00300 deny ip from 192.168.0.0/16 to any in via $vif
$cmd 00301 deny ip from 172.16.0.0/12 to any in via $vif
$cmd 00302 deny ip from 10.0.0.0/8 to any in via $vif
$cmd 00303 deny ip from 127.0.0.0/8 to any in via $vif
$cmd 00304 deny ip from 0.0.0.0/8 to any in via $vif
$cmd 00305 deny ip from 169.254.0.0/16 to any in via $vif
$cmd 00306 deny ip from 192.0.2.0/24 to any in via $vif
$cmd 00307 deny ip from 204.152.64.0/23 to any in via $vif
$cmd 00308 deny ip from 224.0.0.0/3 to any in via $vif
# deny inbound packets on these ports
# auth 113, netbios (services) 137/138/139, hosts-nameserver 81
$cmd 00315 deny tcp from any to any dst-port 113 in via $vif
$cmd 00320 deny tcp from any to any dst-port 137 in via $vif
$cmd 00321 deny tcp from any to any dst-port 138 in via $vif
$cmd 00322 deny tcp from any to any dst-port 139 in via $vif
$cmd 00323 deny tcp from any to any dst-port 81 in via $vif
# deny partial packets
$cmd 00330 deny ip from any to any frag in via $vif
$cmd 00332 deny tcp from any to any established in via $vif
# allowing icmp re: ping, etc.
$cmd 00310 allow icmp from any to any in via $vif
# allowing inbound mail, dhcp, http, https
$cmd 00350 allow udp from any 53 to me in via $vif
$cmd 00360 allow tcp from any 53 to me in via $vif
$cmd 00370 allow udp from any 67 to me dst-port 68 in via $vif keep-state
$cmd 00400 allow tcp from any to me dst-port 80 in via $vif setup limit src-addr 2
$cmd 00410 allow tcp from any to me dst-port 443 in via $vif setup limit src-addr 2
# SSHguard puts offender addresses in table 22. Set up the table rule
# Please note the '\(22\)' syntax, necessary since it's run as shell command
$cmd 01000 deny ip from table\(22\) to any
# allow inbound ssh, mail. PROTECTED SERVICES: numbered ABOVE sshguard blacklist range
$cmd 56420 allow tcp from any to me dst-port 22 in via $vif setup limit src-addr 2
$cmd 56530 allow tcp from any to any dst-port 25 in via $vif setup keep-state
$cmd 56531 allow tcp from any to any dst-port 465 in via $vif setup keep-state
$cmd 56532 allow tcp from any to any dst-port 587 in via $vif setup keep-state
# deny everything else, and log it
# inbound catchall
$cmd 56599 deny log ip from any to any in via $vif
# ipfw built-in default, don't uncomment
# $cmd 65535 deny ip from any to any
Hapi 4. Fillimi dhe testimi
Nevojat e sistemit ndryshojnë dhe zgjedhjet e ndryshme të porteve për të bllokuar ose zhbllokuar pasqyrohen në grupin e rregullave. Pasi të përfundojë grupi i rregullave, ruani skedarin në /usr/local/etc/IPFW.rules, dhe filloni shërbimet FBSD:
# service ipfw start
# service sshguard start
Firewall-i i shtuar tani duhet të funksionojë! Kontrollo sshguard:
[user@vultr ~]$ sudo pgrep -lfa ssh
Nëse sshguardpo funksionon, shfaqet pid dhe linja e plotë e komandës:
720 /usr/local/sbin/sshguard -b 40:/var/db/sshguard/blacklist.db -l /var/log/auth.log -l /var/log/maillog -a 40 -p 420 -s 1200 -w /usr/local/etc/sshguard.whitelist -i /var/run/sshguard.pid
Kjo tregon grupin e rregullave të murit të zjarrit me statistika dhe herën e fundit që një paketë përputhej me rregullin:
[user@vultr ~]$ sudo ipfw -cat list
Pas orëve ose ditëve, adresat e shkelësve shtohen në listën e zezë dhe gjithashtu në tabelën 22. Për të parë të gjitha adresat në tabelë, përdorni këtë komandë:
ipfw table 22 list
Rezultati printohet si:
10.10.10.118/32 0
10.10.10.72/32 0
...
Siç përshkruhet më sipër, lidhjet nga këto adresa nuk lejohen. Natyrisht, në ekzekutimin e parë sshguardnuk do të ketë asnjë adresë në listë, por me kalimin e kohës mund të zgjasë shumë. Një opsion është krijimi i rregullave të veçanta të bllokimit për adresat me hyrje të shumta në tabelë dhe më pas fshirja e tyre nga lista e zezë.
Hapi 5. Të jesh vigjilent...
Është një ide e mirë që herë pas here të kontrolloni regjistrat për t'u siguruar që ndërhyrjet janë të kontrolluara. Në përgjithësi, /var/log/auth.logdhe /var/log/securityjanë informuese. Boshllëqet ose gabimet në mbulimin e shërbimeve të rrjetit mund të bëhen të dukshme. Modifikimi i rregullave të murit të zjarrit sipas nevojës është një pjesë normale e administrimit të serverit.
Në versionet e mëparshme të sshguard, kur /var/db/sshguard/blacklist.dbskedari ishte rritur, ai mund të parandalonte sshguardfillimin në nisjen e sistemit. Heqja ose riemërimi i skedarit të listës së zezë lejohet sshguardtë fillojë. Ky problem duket se është rregulluar në versionin më të fundit sshguard, kështu që ky zgjidhje ndoshta nuk është më i nevojshëm.
Sigurohuni që të vendosni në listën e bardhë adresën IP nga e cila jeni lidhur me sesionin SSH. Nëse e mbyllni veten aksidentalisht, mund të lidheni gjithmonë me konsolën noVNC në https://my.vultr.com dhe në listën e bardhë të IP-së tuaj.
Duke përmbledhur, duke përdorur kombinimin ipfwdhe sshguardndihmon në mbajtjen e sistemit tuaj FreeBSD të sigurt dhe të kryejë punën e tij. Minimizimi i aktivitetit ndërhyrës të rrjetit ka një përfitim shtesë: më pak "zhurmë" e bën më të lehtë gjurmimin dhe sintonizimin e funksionimit të sistemit, duke kontribuar në një server më të sigurt dhe më të mirë.
Mbrojtja efektive e një sistemi/serveri FreeBSD nuk është veçanërisht e komplikuar. Ndërsa kërkohet një përpjekje modeste për ta vënë atë në funksion, ajo shpërblehet në VPS dhe siguri më të madhe të projektit.