En server er en herlig ting fordi man kan mange ting med den.
Dog følger der et par negative ting med at have en offentlig server, den bliver muligvis portscanned ellers så er der bots der tjekker for upatchede systemer de kan finde en bagvej til, ja faktisk er der ret mange farer derude, især hvis man lader systemer stå åbne.

Ufw & fail2ban kan klare mange ting, men det er ikke en helgardering – du skal også sørge for at din servers pakker er opdaterede og sørge for at kun køre det minimale, altså det du skal bruge og intet mere.

Jeg har selv en VPS der kører en proxy til mit uptime system, så den kan tjekke udefra om tingene kører – den har jeg for nylig sikret lidt mere med ufw og fail2ban. Jeg vil nedenunder skrive lidt om hvad jeg har gjort og hvorfor.
Desværre har jeg ikke muligheden for et styre system som f.eks Alpine, så jeg valgte debian.


Dårlig performance?

Jeg brugte nogle dage på at diagnosticere hvad problemet kunne være til at mit uptime systems tal var helt forkerte, ting gik ned og noget blev sågar disconnected. Det var så slemt at jeg på et tidspunkt bad min internetudbyder om at holde øje med min linje for at sikre mig at alt var som det skulle være. Det var det selvfølgelig, og jeg måtte så i tænkeboks.

Der blev forsøgt lidt af hvert, men intet så ud til at hjælpe – jeg fik så en ide:

Det endte med at jeg valgte at holde øje med min ufw(Uncomplicated Firewall) log på min VPS – det virkede som om at det jeg brugte min VPS til bare ikke virkede pålideligt, og jeg så at min firewall simpelthen blev portscanned, samt der generelt bare var alt for meget aktivitet i loggen når man tænker på det er en random server et sted, der ikke engang hoster hjemmesider eller andre offentlige services.


Tid til at stramme op!

Det første jeg gjorde var at installere fail2ban og satte min ufw op til kun at godtage requests fra min IP, alt andet skulle gerne blive afvist.
Med ufw sat op – så var det på tide at kigge på jails i fail2ban.
Som alle andre anbefaler vil jeg også synes at du skal ind i /etc/fail2ban/ og finde jail.conf den kopierer du og kalder jail.local – alt hvad du laver af rettelser i jail.conf vil potentielt blive overskrevet når programmet skal opdateres, det omgår du ved at lave dine rettelser i jail.local som forbliver, og er den primære pr automatik.

UFW jail?

I bunden af din /etc/fail2ban/jail.local fil tilføjer du flg:

[ufw]
enabled=true
filter=ufw.aggressive
logpath=/var/log/ufw.log
maxretry=3
bantime=10080m

bantime sætter du selv, min står på 1 uge da min VPS desværre bliver ramt ret hårdt.
Inden du lukker jail.local, skal du finde banaction samt banaction_allports og skriver ufw efter =, så det ser sådan ud:

banaction = ufw
banaction_allports = ufw


Derefter, stadigvæk inde i jail.local finder du flg setting:

ignoreip = 122.33.444.55 ::1

Der skifter du 122.33.444.55 til den eller de ip adresser den skal acceptere forbindelser fra.
IP adresserne adskilles bare af et mellemrum. Gem filen som jail.local og så burde du være færdig deri.


Derefter laver du flg fil: /etc/fail2ban/filter.d/ufw.aggressive.conf – og skriver flg deri:

[Definition]
failregex = [UFW BLOCK].+SRC= DST
ignoreregex =

Dette er en meget aggressiv setting – jeg gør det da min VPS desværre bliver ramt ret hårdt.

Så er du klar til at starte fail2ban op.

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Efter godt 4 dage med ovenstående settings ser min fail2ban-client status ufw sådan her ud:

Ja, 229 bannede IP adresser på blot 4 dage er skræmmende.
Men det har hjulpet gevaldigt på stabiliteten af min forbindelse til min proxy. Så jeg fortryder bestemt ikke at jeg fik installeret fail2ban.

OPDATERING:

Den samme kommando kørt ca. en måned inde ser sådan her ud:

Altså har det været en super god ide at sætte det filter på, ellers tror jeg simpelthen aldrig jeg havde kunne bruge den pålideligt.


Opsætning mere velegnet til webservers:

Hvis vi har med webservers at gøre, ville jeg lave individuelle jails til de forskellige services man vil sørge for ikke bliver angrebet eller misbrugt.
Mit sudo fail2ban-client status ser pt sådan her ud:

Jeg har for nyligt sat en mindre aggressiv ufw profil.
Der er flere resourcer til at finde nogle rigtig gode jails der ikke nødvendigvis lukker alle andre ude der IKKE forsøger at finde svagheder i din eventuelle nginx opsætning eller nogle af de ting du hoster.

Her er en til nginx fra github.
Her er en anden til nginx, også fra github.


Afsluttende:

En ufw.aggressive setting er IKKE anbefalet til f.eks webservers som nginx/apache osv, der skal der langt mere sofistikerede filters til, for ikke at ramme dem der rent faktisk bare forsøger at besøge dit site.
Jeg har gjort flg da det kun er forbindelser fra få godkendte maskiner som ikke sådan lige ændrer deres IP adresser der skal håndteres.

Categories: