Integrera Crowdsec:s blocklista i pfSense

15 Jul 2022

CrowdSec Logo

Crowdsec är ett sånt där företag som gör bra saker lite i det dolda. Genom att driva en molntjänst som underhåller blocklistor med IP-adresser från enheter på Internet som ägnar sig åt dumma saker kan man, om man har rätt brandvägg för det, blockera trafik till sin infrastruktur redan innan den kommer fram till sitt mål. På detta sätt kan man undvika attacker och liknande otrevligheter, och det bästa av allt är att det är gratis för hemanvändare att använda tjänsten.

Man kan också köra en agent på en dator hemma som matar Crowdsec med IP-adresser när attacker och annat dyker upp, vilket väldigt många företag och organisationer redan gör. Kort sagt – det är win-win för alla som är inblandade.

Därmed inte sagt att det är helt enkelt att sätta upp om man har en brandvägg som inte stödjer Crowdsec. Jag kör fortfarande pfSense hemma. Jag har övervägt att byta till OPNSense just för att OPNSense har stöd för exempelvis Crowdsec utan en massa fulhack men har inte orkat komma till skott med mitt byte. Så hur löser man det då? Jag googlade runt och hittade en guide som denna guide delvis är baserad på. Jag har skrivit min varient på den och framför allt utökat den med information om hur man får det hela att fungera på ARM64-arkitekturen och försökt göra det hela tydligare.

Det första är att installera Crowdsec:s synkstjänst för deras IP-lista. Har man en dator med en x86-processor i så är detta inte överdrivet komplicerat men har man som jag ett Pimox-kluster så blir det genast en aning mer komplicerat, även om det inte är omöjligt. Programvaran för att installera Crowdsec-programvaran som regelbundet synkar IP-listan finns för ARM64 och låter sig installeras utan problem. Det man också behöver installera är deras repo och sedan själva paketet för Crowdsec för att få en programvara som heter cscli som krävs för att få en API-nyckel som i sin tur krävs för att kunna hämta hem IP-blocklistan. API-nyckeln får man fram genom att ge cscli -oraw bouncers add cloudflarebouncer, och därefter lägger man in den i filen
/etc/crowdsec/bouncers/crowdsec-blocklist-mirror.yaml.
På raden lapi_key lägger du in API-nyckeln, och raden lapi_url ska sättas till lapi_url: <a href="http://127.0.0.1:8080/">http://127.0.0.1:8080/</a> om den inte redan är det. Raden listen_uri sätter du till listen_uri: 0.0.0.0:41412 och under trusted_ips lägger du in adressen till din brandvägg.

När detta är inlagt och klart kan man starta tjänsten och samtidigt se till att den startar när servern bootar upp:
systemctl enable crowdsec-blocklist-mirror && systemctl start crowdsec-blocklist-mirror

Det var väl enkelt? Ja, så här långt är det inte så vansinnigt komplicerat. Det knepiga var att hitta rätt paket för ARM64 vilket tog en stund.

Det “roliga” är det som kommer nu: integrationen i pfSense.

Först pch främst skapar man ett alias i brandväggen i pfSense:

CrowdSec

URL:en till blocklistan visas när man har installerat Crowdsecs synktjänst, men för att göra det enkelt så ser den ut så här:
http://ip-adress-till-servern:41412/security/blocklist

Därefter får du logga in i pfSense via SSH. Har du inte slagit på den funktionen tidigare så är det dags att göra det nu.

När du befinner dig i shell på pfSense skapar du filen forceupdate.sh (eller vad du nu vill döpa den till) och lägger den i /root eller var du vill placera den. I filen ska följande text finnas:

/usr/bin/touch -t 1001031305 /var/db/aliastables/CrowdSec.txt
/usr/bin/nice>/usr/bin/nice -n20 /etc/rc.update_urltables now forceupdate

Notera att filnamnet på första raden (CrowdSec.txt) skapas utifrån vad du döpte alias:et till tidigare i brandväggsinställningarna så dessa två måste matcha.

Därefter lägger du in ett jobb i Crontab (installera tillägget Cron i pfSense om du inte redan gjort det) som ser ut så här:

CrowdSec

Spara jobbet och sedan kan du titta i loggarna för Crowdsec Blocklist Mirror på servern där du installerade det. Du borde se rader som ser ut så här:

==> crowdsec-blocklist-mirror_access.log <== 10.0.2.1 - - [15/Jul/2022:12:45:00 +0000] “GET /security/blocklist HTTP/1.1” 200 147224 "" “pfSense/2.6.0-RELEASE:f065cfff3e2c15c43528”

Om det inte dyker upp kan du gå in i Firewall -> Aliases -> URLs och sedan klicka på den lilla stapelikonen uppe till höger (bredvid frågetecknet). Välj därefter CrowdSec som Table och klicka till sist på Update:

CrowdSec

Kolla samtidigt i loggen på servern där du installerade Crowdsec för att se att en hämtning gjorts. Loggarna ligger under /var/log och är fyra till antalet:

crowdsec_api.log crowdsec-blocklist-mirror_access.log crowdsec-blocklist-mirror.log crowdsec.log

Till sist skapar du en blockregel i brandväggens regelverk:

CrowdSec

Notera att IP-adresslistan inte dyker upp direkt – det kan ta 30-60 minuter innan den är nedladdad första gången så få inte panik om inget händer direkt.

CrowdSec

Det du ser till höger är min statistik ungefär 30 minuter efter att jag implementerat blockregeln för IP-adresserna i Crowdsec:s lista. Detta om något är ett gott bevis på att det Crowdsec gör inte bara är bra utan också direkt nödvändigt och desto fler som är med och nyttjar, och bidrar, till tjänsten gör att vi alla får ett säkrare Internet.

För den som undrar: jodå, Crowdsec är installerat på alla mina publika servrar och både blockerar och rapporterar in attackförsök.

CrowdSec

Det tog inte ens fem minuter så hade den första fula fisken fångats och blockerats på en av mina servrar. Långnäsa på dig, var du nu befinner dig.