Linuxsecurity

Linux palvelimen perusturvallisuus

Linux palvelimen perusturvallisuuden takaaminen

LOGIEN TARKISTUS

#tarkistetaan kirjautumisyritykset palvelimelle reaaliaikaisesti
tail -f /var/log/auth.log

#LOGIEN VÄRITYS

apt install grc

grc tail -f /var/log/auth.log

(multitail myös useammalle logille kerralla)

FAIL2BAN

apt-get update
apt-get install fail2ban
systemctl status fail2ban
nano /etc/fail2ban/jail.conf

#ignoraa lokaalin koneen
ignoreip = 127.0.0.1/8

#määritellään bannin kesto
bantime = 600

#määritellään monta yritystä kirjautumisessa on
maxretry = 3

#tämä lähettää postia root käyttäjälle että joku on bannattu
destemail = root@localhost
sendername = Fail2Ban banned user!
mta = sendmail
action = %(action_mwl)s

#tällä saadaan postiin logitedot kätevästi
action_mw
#tällä kuitenkin saa eniten
action_mwl

#tällä komennolla pysäytetään fail2ban
systemctl fail2ban stop

#tällä aloitetaan
systemctl fail2ban start

#tällä tarkistetaan nykyinen tilanne
systemctl status fail2ban

# tarkistetaan jaili sekä estetyt ipt sekä niiden määrä
fail2ban-client status sshd

UFW PALOMUURI

apt install ufw
systemctl enable ufw
systemctl start ufw
systemctl status ufw

#avataan palomuuriin portti
ufw allow ”portti”

#avataan portti 80
ufw allow 80

OPENSSH

#Asennetaan ssh
apt install openssh-server

#Otetaan ssh käyttöön samalla myös koneen startuppiin
systemctl enable ssh

#Tarkistetaan nykyinen tilanne ssh
systemctl status sshd

#Pysäytetään ssh
systemctl stop sshd

nano /etc/ssh/sshd_config

#vaihdetaan oletus portti toiseen
#Port22

port222

#Kielletään roottina kirjautuminen
#PermitRootLogin
PermitRootLogin no

#Annetaan lassi käyttäjälle lupa kirjautua
AllowUsers lassi

#käynnistetään ssh uudestaan
systemctl restart sshd

netstat -tulpn

netstat -tulpn | grep 22

ufw allow ssh

ufw allow 22

SSH PARANTELU

#Asenntaan moduulit ja sovellukset jotka yhdistävät hyökkääjän ip-osoitteen maahan
apt-get install geoip-bin geoip-database

#Luodaan scripti joka hallitsee pääsyn
nano /usr/local/bin/ipfilter.sh

#!/bin/bash
ALLOW_COUNTRIES=”IN US”
LOGDENY_FACILITY=”authpriv.notice”

if [ $# -ne 1 ]; then
echo ”Usage: `basename $0` ” 1>&2
exit 0 # return true in case of config issue
fi

if [[ ”`echo $1 | grep ’:’`” != ”” ]] ; then
COUNTRY=`/usr/bin/geoiplookup6 ”$1” | awk -F ”: ” ’{ print $2 }’ | awk -F ”,” ’{ print $1 }’ | head -n 1`
else
COUNTRY=`/usr/bin/geoiplookup ”$1” | awk -F ”: ” ’{ print $2 }’ | awk -F ”,” ’{ print $1 }’ | head -n 1`
fi
[[ $COUNTRY = ”IP Address not found” || $ALLOW_COUNTRIES =~ $COUNTRY ]] && RESPONSE=”ALLOW” || RESPONSE=”DENY”

if [[ ”$RESPONSE” == ”ALLOW” ]] ; then
logger -p $LOGDENY_FACILITY ”$RESPONSE sshd connection from $1 ($COUNTRY)”
exit 0
else
logger -p $LOGDENY_FACILITY ”$RESPONSE sshd connection from $1 ($COUNTRY)”
exit 1
fi

#Tämä muutos pitää tehdä jos halutaan että scripti juoksee!
chmod +x /usr/local/bin/ipfilter.sh

#Lisätään ssh listalle omat muutokset jotta järjestelmää ohjaa tuo uusi scripti ja muut asennetut ohjelmat.
nano /etc/hosts.deny

sshd: ALL
vsftpd: ALL

#Määritellään vielä mistä scripti löytyy.
nano /etc/hosts.allow

sshd: ALL: spawn /usr/local/bin/ipfilter.sh %a
vsftp: ALL: spawn /usr/local/bin/ipfilter.sh %a

rainloop

Postipalvelimen asennus ja konfigurointi Debianille

Postipalvelimen asennus ja konfigurointi Debianille

Miksi kukaan haluasi omaa postipalvelinta kun esim gmail outlook tai icloud ovat olemassa ja ne ovat ilmaisia jatilin teko helppoa? Eri syitä on monia, minulla ne ovat mm, yksityisyys, täysihallinta oppiminen, rajaton määrä sposteja, bulk emails sekä itse päättämä postin loppupääte eli domain. Toki nämä ilmaiset palvelut ovat siitä hyviä että niitä ei tarvitse ylläpitää ollenkaan kun taas omaa pitää kokoajan seurata mm, hyökkäysten liikenteen sekä mustallelistalle joutumista. Molemmissa tavoissa on omat hyvät ja huonot puolet, kumpikaan ei ole toista parempi.

Asennus

Oletus on että sinulla on jo valmis Linux järjestelmä jolla on ulkoinen ip-osoite sekä oma domain. Huom kiinteä ip-osoite on erittäin suositeltavaa, mutta yksityisen vaihtuva ip-osoite käy myös. Muista vain sen kohdalla helpottaa työtä ja asentaa ja tutustua ddclient tästä linkistä!

Päivitetään pakettivarasto.

apt update

apt upgrade

Myös tietoturvan kannalta on hyvä asentaa palomuuri sekä ohjelma joka estää mm, ssh ja dovecot hyökkäyksiä. Myös muita laajempia hyökkäyksenesto isp sovelluksia kuten Wazuh voidaan hyödyntää tässä linkki sen asentamiseen ja käyttöönottoon. Suositeltavaa on kuitenkin asentaa useita eri ohjelmistoja parhaan turvallisuuden takaamiseksi.

Tässä linkki pika ohjeeseen perusturvaamisen Linux palvelimelle.

Asennetaan tarvittavat ohjelmistot.

apt install curl net-tools bash-completion wget lsof nano

Lisätään pari tärkeää riviä dns ohjausta varten.

nano /etc/host.conf

Lisätään vielä domaini ja verkkoon ohjattu ip-osoite. Tätä ei tarvitse jos sinulla ei ole kiinteää ip-osoitetta!

nano /etc/hosts

Rebootataan kone jotta muutokset tulevat varmasti voimaan.

reboot

Syötetään seuraavat komennot ja varmistetaan onko nimipalvelun asetukset tehty oikein. Muista ohjata nimipalvelustasi ip-osoitteesi domainiisi jos et ole sitä jo tehnyt!

hostname
hostname -s
hostname -f
hostname -A
hostname -i

Tulosten pitäisi näyttää samantyyppisiltä:

Postfixin asennus

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Asennetaan postfix joka ohjaa postiliikenteen ulos sekä sisään internetistä palvelimellesi

apt install postfix

systemctl enable postfix

Valitaan kohta Internet Site. Sekä sen jälkeen syötetään postin domain, jos käytät alidomainia, muista syöttää päädomain. Jos syötetty domain on alidomaini, postiosoiteet ovat myös sen nimiset.

Muokataan Postfixin oletus konfiguraatio tiedostoa.

nano /etc/postfix/main.cf

Lisätään seuraava loppuun:

myhostname = oma.domain.com
mydomain = domain.com

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject

Käynnistetään postfix uudelleen ja tarkistetaan onko oikeat portit oikein konfiguroitu.

systemctl restart postfix

netstat -tlpn

Nyt pitäisi portti 25 olla auki.

Jos joskus tulee ongelmia, postipalvelimen liikennettä voi tarkistaa seuraavalla ohjelmalla. Tällä myös kokeillaan toimiiko posti lähiverkossa.

apt install mailutils

syötetään seuraavat komennot.

echo ”Terppa”| mail -s ”Testiposti” root

ls -l Maildir/new/

Myös login näkee täältä.

tailf /var/log/mail.log

Dovecotin asennus

Dovecot lajittelee postin oikeisiin postilaatikoihin sekä tämän avulla voidaan käyttää muiden osapuolien posti sovelluksia, esimerkiksi Gmailia tai Thunderbirdiä.

Asennetaan dovecot ja tarvitta ohjelmat.

apt install dovecot-core dovecot-imapd

systemctl enable dovecot

Muokataan tavallisen mukaan dovecotin oletus konfigurointi tiedostoa.

nano /etc/dovecot/dovecot.conf

Sinne lisätää tämä rivi.

listen = *, ::

Muokataan toista dovecotin tiedostoa.

nano /etc/dovecot/conf.d/10-auth.conf

Muokataan sekä lisätää seuraavat rivit.

disable_plaintext_auth = no
auth_mechanisms = plain login

Muokataan postilaatikon polkua.

nano /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:~/Maildir

Muokataan vielä viimestä konfigurointi tiedostoa.

nano /etc/dovecot/conf.d/10-master.conf

Lisätään unix_listeneriin seuraavat rivit jos niitä ei ole olemassa.

unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}

Käynnistetään dovecot uudelleen jotta muokkaukset tulevat voimaan.

systemctl restart dovecot.service

Tarkistetaan että oikeat portit ovat käytössä.

netstat -tlpn

Yhteensä 4 eri porttia pitäisi olla auki, 143, 587 993 ja 25.

Jos porttia 587 ei näy, käy muokkaamassa tätä tiedostoa.

nano /etc/postfix/master.cf

Poista kommenttit näistä riveistä alusta.

smtp inet n – y – – smtpd
#smtp inet n – y – 1 postscreen
smtpd pass – – y – – smtpd
#dnsblog unix – – y – 0 dnsblog
#tlsproxy unix – – y – 0 tlsproxy
submission inet n – y – – smtpd

Webmailin asennus

Sähköposti toimii nyt, mutta monesti voi olla tarvetta webmailille. Pienitehoisille koneille ei ole järkevää asentaa tätä koska, postin lähetys ja vastaanotto voi viedä melkein kaiken tehon. Suosittelen kuitenkin asentamaan, voit aina sulkea portit ja pysäyttää apachen jottei resursseja kulu.

Asennetaan Apache sekä php ja sen tarvittavat moduulit.

apt install apache2 php libapache2-mod-php php-curl php-xml

systemctl enable apache

Tarkistetaan php versio ja käytetään tietosuojan kannalta uudempaa versiota.

php -v

Mennään Apache host kansioon ja postetaan oletus tiedosto.

cd /var/www/html/

rm index.html

Asennetaan webmaili, tälläkertaa käytän Rainloop nimistä ohjelmaa. Se on juuri sopiva minun käyttöön ja on erittäin helppo asentaa ja ottaa käyttöön.

curl -sL https://repository.rainloop.net/installer.php | php

Muokataan Apachen oletus konfugiraatio tiedostoa.

nano /etc/apache2/sites-available/000-default.conf

Lisätään alkuun seuraavat parametrit tietoturvan kannalta.

ServerTokens Prod
ServerSignature Off
FileETag None
TraceEnable off

Sekä lisätään 80 portin ”blokkiin” seuraava:

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
order allow,deny
allow from all
Options -Indexes
</Directory>

<Directory /var/www/html/data/>
Order allow,deny
Deny from all
Options -Indexes
Deny from all
</Directory>

<Directory /var/www/html/data/_data_/_default_/>
Order allow,deny
Deny from all
Options -Indexes
Deny from all
</Directory>

Tällä estetään selaimen kautta pääsy postipalvelimen konfiguraatio tiedostoihin jossa näkyy arkaluonteista tietoa.

SSL Certbot

SSl salaa kaiken liikenteen sinun ja palvelimen välillä. Se tekee hakkereiden ja muiden kaappaajien hyökkäyksistä vaikeampaa.

Asennetaan certbot joka sertifikaatin myöntää, tässä voi myös käyttää itse allekirjoitettuja mutta itse suosin certbottia sen kätevyydestä ja monipuolisista asetuksista.

apt install apache-certbot

Luodaan uusi sertifikaatti sivustolle.

certbot certonly -d oma.domain.com

Hyväksytää käyttö sekä valitaan webroot johon syötät apachen juuripolun. Oletus on /var/www/html/

Tämän jälkeen otetaan Apacheen ssl käyttöön ja ohjataan http liikenne salattuun https protokollaan.

nano /etc/apache2/sites-available/000-default.conf

Lisätään portille 443 oma ”blokki”

<VirtualHost *:443>
ServerName oma.domain.com

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
order allow,deny
allow from all
Options -Indexes
</Directory>

<Directory /var/www/html/data/>
Order allow,deny
Deny from all
Options -Indexes
Deny from all
</Directory>

<Directory /var/www/html/data/_data_/_default_/>
Order allow,deny
Deny from all
Options -Indexes
Deny from all
</Directory>

SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/oma.domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/oma.domain.com/privkey.pem
</VirtualHost>

Tältä pitäisi konfiguraation näyttää suurinpiirtein.

Avataan vielä portit webliikenteelle.

ufw allow 80

ufw allow 443

Rainloop konfigurointi

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Avataan selaimesta oma.domain.com/?admin. Oletus tunnukset ovat admin:12345

Muista vaihtaa käyttäjänimi sekä salasana! Jos saat allaolevan ilmoituksen, pysäytä apache tai estä portti 80 ja palaa takaisin korjaamaan Apachen konfuguraatio. Data polkua ei saisi näkyä ollenkaan, voit toki kokeilla onko ilmoitus väärässä menemällä oma.domain.com/data ja oma.domain.com/data/_data_ sekä niiden alikansoihin.

Polkujen pitäisi näyttää tämän tyyppisiä ilmoituksia.

Seuraavaksi lisätään domaini jotta palvelimet osaavat siirtää postin oikeaan osoitteeseen. Mennään kohtaan Domains ja painetaan Add Domain. Voit myös poistaa valmiina luodut domainit.

Suosittelen käyttämään Porttia 143 ja 587, ne ovat ylesimmät joten liikenne varmasti toimii. Muista myös ottaa STARTTLS salaus käyttöön! Rainloop tukee myös yhteystietoja. Voit ottaa ne käyttöön jos tarvitset niitä. En koe itse tarvitta niille, muista olla avaamatta porttia 3306 internettiin tietokantaa tehdessä!

Luodaan vielä käyttäjä postiin.

adduser lassiiz

Luodaan vain salasana käyttäjälle, muuta ei tarvitse. Kun käyttäjä on luotu, mene postin kirjautumis-sivulle.

Jos et asettanut oletusdomainia, syötä käyttäjäksi, username@oma.domain.com. Salasana on sama minkä juuri syötit käyttäjää tehdessä. Suosittelen myös disabloimaan ssh kautta kaikki ylimääräiset käyttäjät. Toki muut webmailit kuten IredMail käyttää erillistä tietokantaa käyttäjien tekemiseen joka on turvallisempaa oletuksena.

Postilaatikon pitäisi avautua ja näyttää tältä.

DKIM luonti

DKIM ja DMARC ovat varmenteita joilla varmistetaan että lähettäjä on oikeasti se mikä väittää olevansa. Esimerkiksi et voi lähettää postia google.com domainina ja väittää muille että omistat tämän. Ellet sitten ole saanut heiltä omaa postilaatikkoa.

Asennetaan dkim ohjelma jolla oikeat avaimet luodaan.

apt install opendkim opendkim-tools

nano /etc/opendkim.conf

Tarkistetaan löytyykö seuraavat rivit.

AutoRestart Yes
AutoRestartRate 10/1h
UMask 002

Syslog yes

Domain lassinsivut.eu
KeyFile /etc/dkimkeys/dkim.key
#Selector 2007
#Canonicalization simple
Mode sv
#SubDomains no
Canonicalization relaxed/simple

ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable

#Socket inetst
#Socket local:/var/run/opendkim/opendkim.sock
Socket inet:12301@localhost
#
PidFile /var/run/opendkim/opendkim.pid

OversignHeaders From

TrustAnchorFile /usr/share/dns/root.key

UserID opendkim:opendkim

 

Yhdistetään Postfixiin.

nano /etc/default/opendkim

Lisätään rivi tiedostoon.

SOCKET=”inet:12301@localhost”

Kerrotaan vielä postfixille että käyttää tuota.

nano /etc/postfix/main.cf

milter_protocol = 2
milter_default_action = accept

Muodaan avaimille kansio

mkdir /etc/opendkim
mkdir /etc/opendkim/keys

Määritellään vielä domaini sekä aliverkko jotka määritellään turvallisiksi

nano /etc/opendkim/TrustedHosts

127.0.0.1
localhost
192.168.0.1/24

*oma.domain.com

Luodaan avaimille ”pöydät”.

nano /etc/opendkim/KeyTable

mail._domainkey.oma.domain.com oma.domain.com:/etc/opendkim/keys/oma.domain.com/mail.private

Luodaan vielä avaimille ”kirjotuspöytä”

nano /etc/opendkim/SigningTable

*@oma.domain.com mail._domainkey.oma.domain.com

 

Nyt luodaan avaimet joissa hyödynnetään juuri tehtyjä konfiguraatioita. Komentoon olisi voinut suoraan syöttää yllämainitut, mutta tulevaisuudessa uusien domainien liittäminen sekä avainten uudelleenluonti helpottuu huomattavasti.

cd /etc/opendkim/keys

mkdir oma.domain.com

cd oma.domain.com

Luon esimerkissä 1024 pituisen avaimen, suosittelen kuitenkin oletusta eli 2048. Minun nimipalvelu ei kuitenkaan salli sitä joten käytän lyhyempää.

opendkim-genkey -b 1024 -s mail -d oma.domain.com

Vaihdetaan avaimien omistaja

chown opendkim:opendkim mail.private

nano -$ mail.txt

mail._domainkey IN TXT ”v=DKIM1; k=rsa; p=OMA-HENKILÖKOHTAINEN-AVAIN” ; —– DKIM key mail for oma.domain.com

Kopio ja tallenna tuo avain, sitä käytetään nimipalvelussa myöhemmin. Tarvitaan vain p= eteenpäin heittomerkkien sisällä oleva avainkoodi.

Lopuksi vielä käynnistetään postfix sejä opnedkim.

service postfix restart
service opendkim restart

Nimipalvelu

Tarvitaan A-tietueen lisäksi muutama muu. MX, sekä dmarc , dkim ja spf TXT muodossa.

MX tietue: oma.domain.com

Arvoksi: oma.domain.com

DMARC: _dmarc.oma.domain.com

Arvoksi: v=DMARC1; p=quarantine; sp=quarantine; rua=mailto:dmarc_acc@oma.domain.com; ruf=mailto:dmarc_afrf@oma.domain.com; rf=afrf; fo=0:1:d:s;

SPF: oma.domain.com

Arvoksi: v=spf1 mx ip4:oma-ip-osoite -all

DOMAIN KEY: mail._domainkey.oma.domain.com

Arvoksi: v=DKIM1; h=sha256; k=rsa; p=OMA-HENKILÖKOHTAINEN-AVAIN

Kun kaikki on valmista, voit tarkistaa sekä tarkkailla omaa postipalvelintasi esimerkiksi tästä sivustosta. Saatavilla on monta eri testiä. Muista kuitenkin että nimipalvelun muutokset voivat viedä jopa 48 tuntia voimaan tulemiseen. Joten testit eivät välttämättä näytä heti asennuksen jälkeen oikein.