Zaščita in spremljanje strežnika Debian Linux
povzetek
požarni zid
Eternetna kartica strežnika je neposredno povezana z internetom. Zato je strežnik sam tisti, ki deluje kot požar. Za to poglavje predlagam, da dobite preprost skript, ki ga bomo namestili. To deluje na naslednji način:
- Blokiramo ves dohodni promet
- Odhodni promet pustimo prost. Natakar gre kamor hoče.
- Pooblastimo ping
- Preprečite sin flood
- Preprečite skeniranje vrat
- Končno odprete dve osnovni storitvi: SSH in HTTP
Ta skript boste morali spremeniti, ko bo nova storitev implementirana na vašem računalniku. Za to morate poznati vrata poslušanja in protokol (TCP in/ali UDP).
Če ste na primer namestili strežnik za glasovni klepet, kot je mumble, posluša vrata 64738 v TCP in UDP. Nato morate v skript dodati naslednje vrstice
1
2
3
|
# Serveur mumble
iptables –t filter –A INPUT –p tcp —dport 64738 –j ACCEPT
iptables –t filter –A INPUT –p udp —dport 64738 –j ACCEPT
|
Skratka, ne dam več razlage. V Googlu boste našli tisto, kar potrebujete, ko boste to potrebovali.
Namestili smo skript. Če že nimate nameščenega GIT-a, ga morate vnesti
1
|
apt–get install git
|
Dobimo kodo
1
|
git clone https://github.com/Sispheor/Linux_Scripts.git
|
Postavimo se v datoteko
1
|
cd Linux_Scripts/
|
Skript kopiramo v init.d
1
|
cp Firewall.sh /etc/init.d/myfirewall
|
Naredimo ga izvedljivo
1
|
chmod +x /etc/init.d/myfirewall
|
Postavimo ga ob zagonu
1
|
update–rc.d myfirewall defaults
|
In končno ga lansiramo
1
|
/etc/init.d/myfirewall
|
Zaščita proti vdorom
Stroji, ki so izpostavljeni internetu, so nenehno tarča poskusov brutalne sile in napadov DOS. Da se zaščitimo, bomo postavili majhen program, imenovan Fail2Ban.
Kot opomnik, Fail2Ban je program, napisan v pythonu in je na voljo v večini repozitorijev Linuxa, katerega cilj je preprečiti napade s surovo silo. Fail2ban bere dnevnike iz različnih strežnikov (SSH, Apače, FTP…) Če želite preveriti ponavljajoče se napake pri preverjanju pristnosti in dodati pravilo iptables za prepoved izvornega naslova IP.
namestitev
1
|
apt–get install fail2ban
|
Za pravilno uporabo Fail2Ban je treba narediti več sprememb:
- Fail2ban se mora zagnati PO skriptu požarnega zidu v initd. Kako to storiš? spremeniti morate skript /etc/init.d/fail2ban in dodati ime skripta požarnega zidu v oznake LSB v Required-Start. Torej, če je skript požarnega zidu v svojih oznakah LSB imenovan "myfirewall", bi morale oznake LSB fail2ban izgledati takole:
1
2
3
4
5
6
7
8
9
10
11
12
|
### BEGIN INIT INFO
# Provides: fail2ban
# Required-Start: $local_fs $remote_fs $myfirewall
# Required-Stop: $local_fs $remote_fs
# Should-Start: $time $network $syslog iptables firehol shorewall ipmasq arno-iptables-firewall
# Should-Stop: $network $syslog iptables firehol shorewall ipmasq arno-iptables-firewall
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/stop fail2ban
# Description: Start/stop fail2ban, a daemon scanning the log files and
# banning potential attackers.
### END INIT INFO
|
-
Privzeto so zapori fail2ban nekoliko preveč permisivni, spremeniti jih je treba tako, da je število poskusov manjše in čas prepovedi daljši. To se zgodi v /etc/fail2ban/jail.conf, tukaj je primer conf:
1
2
3
|
ignoreip = 127.0.0.1/8
bantime = –1 # ban infini
maxretry = 3
|
- V tej isti konfiguracijski datoteki bomo spremenili kontaktni e-poštni naslov
1
|
destemail = moua@gmail.com
|
- In končno, še vedno v tej konfiguracijski datoteki, spremenimo privzeto dejanje, tako da Fail2Ban pošlje e-pošto s popolnim poročilom o prepovedanem naslovu.
1
|
action = %(action_mwl)s
|
- Težava pri fail2ban je, da ne vztraja pri prepovedanih ip-jih… Ko ponovno zaženemo, so slabi fantje v redu in jim je spet odprta vrstica. Če želite obdržati prepovedane ips, morate spremeniti datoteko /etc/fail2ban/action.d/iptables-multiport.conf, ki določa (med drugim) dejanja v primeru prepovedi in v primeru zagona fail2ban. V primeru prepovedi dodamo ip v besedilno datoteko. Na začetku fail2ban preberemo to besedilno datoteko in prepovemo vse IP-je, ki jih vsebuje.
1
2
3
4
|
actionstart = iptables –N fail2ban–<name>
iptables –A fail2ban–<name> –j RETURN
iptables –I <chain> –p <protocol> –m multiport —dports <port> –j fail2ban–<name>
cat /etc/fail2ban/ip.blacklist | while read IP; do iptables –I fail2ban–<name> 1 –s $IP –j DROP; done
|
1
2
|
actionban = iptables –I fail2ban–<name> 1 –s <ip> –j DROP
echo ‘<ip>’ >> /etc/fail2ban/ip.blacklist
|
- Druga dobra stvar, če imate več strežnikov, je, da veste, kdo pošilja pošto. Za to uredimo datoteko /etc/fail2ban/action.d/sendmail-whois-lines.conf. Kar se mene tiče, sem za 3 dejanja (actionstart, actionstop in actionban) spremenil vrednost med oglatimi oklepaji, kjer je zapisano »[Fail3Ban]« z imenom mojega strežnika.
1
2
3
4
5
6
7
8
|
actionstop = printf %%b « Subject: [Serveur_test] : stopped
Date: `date –u +« %%a, %%d %%h %%Y %%T +0000 »`
From: Fail2Ban <>
To: n
Hi,n
The jail has been stopped.n
Regards,n
Fail2Ban » | /usr/sbin/sendmail –f
|
Privzeto je aktiven samo zapor SSH. Na koncu konfiguracijske datoteke /etc/fail2ban/jail.conf boste našli vnaprej konfiguriran seznam zapornikov. Če jih želite aktivirati, morate samo spremeniti stanje spremenljivke »omogočeno«. Če na primer naknadno namestimo spletni strežnik, bomo tako aktivirali ustrezen zapor
1
2
3
4
5
6
|
[apache]
enabled = true
port = http,https
filter = apache–auth
logpath = /var/log/apache*/*error.log
maxretry = 6
|
Ostaja le še ponovni zagon programa, da se upoštevajo spremembe
1
|
/etc/init.d/fail2ban restart
|
Zaščita pri skeniranju vrat
To je eden od prvih korakov za vdor v stroj na internetu: skeniranje vrat.
Ta tehnika je sestavljena iz skeniranja odprtih vrat na ciljnem stroju. Vsako od njegovih vrat ustreza dostopnim storitvam. Heker lahko nato v eni od zadevnih storitev poišče napako za vdor v vaš sistem. Izvedli bomo orodje za preprečevanje tega skeniranja.
Namestitev portsentry
1
|
apt–get install portsentry
|
Konfiguracija se izvede v datoteki /etc/portsentry/portsentry.conf. Tukaj vam pokažem samo vrstice za spreminjanje
1
2
3
4
5
6
7
8
9
|
# blocage en cas de detection d’attaque
BLOCK_UDP=« 1 »
BLOCK_TCP=« 1 »
# ajout d’une route pour bloquer l’attaque
KILL_ROUTE=« /sbin/route add -host $TARGET$ reject »
# ajout d’une regle iptables en plus pour bloquer également
KILL_ROUTE=« /sbin/iptables -I INPUT -s $TARGET$ -j DROP »
# envoi d’un mail pour prévenir l’admin
KILL_RUN_CMD=« echo ‘Blocage scan de port $TARGET$’ | mail -s ‘scan port ban $TARGET$’ moua@gmail.com »
|
Znova zaženemo storitev, da upoštevamo
1
|
/etc/init.d/portsentry restart
|
Test iz odjemalca Linux. Bodite previdni, ta ukazna vrstica bo prepovedala IP, ki je povzročil napad.
1
|
nmap –v –PN –p 0–2000,60000 192.168.0.101
|
Za odstranitev prepovedi odstranimo cesto.
1
|
route del <ip> rejected
|
Nato uredimo datoteko /etc/hosts.deny in izbrišemo vrstico z ustreznega ip-ja, ki je videti takole
1
|
ALL: 192.168.0.47 : DENY
|
Strežnik je trenutno dovolj zaščiten. Drugi zaščitni ukrepi bodo vzpostavljeni, ko bo storitev vzpostavljena.
Prešli bomo na zadnji korak konfiguracije strežnika: spremljanje.
V tej fazi strežnik deluje dobro in ima minimalno varnost. Toda kaj se zgodi, če iz nekega razloga ena od storitev pade? V tem zadnjem poglavju se bomo osredotočili na del spremljanja strežnika.
Spremljanje in nadzor trdega diska
Trdi disk je osrednji organ namenskega strežnika. Sčasoma se lahko pojavijo majhna poslabšanja, ki vodijo do izgube podatkov ali nestabilnosti sistema.
Če imate tako kot jaz strežnik Kimsufi pri OVH, morate vedeti, da ste odgovorni za spremljanje trdega diska naprave. V primeru okvare slednjega boste morali obvestiti gostitelja, da bo lahko zamenjal del.
Ideja je torej preveriti stanje strežniškega diska, da bi diagnosticirali morebitno težavo, ki bi lahko vodila do preventivne zamenjave diska. Za to bomo uporabili protokol SMART. SMART je tehnologija, ki je implementirana v trde diske in tako omogoča nenehno zbiranje informacij o zdravju opreme.
Kot običajno se namestitev izvede prek upravitelja paketov
1
|
apt–get install smartmontools
|
Disk bomo identificirali z ukazom fdik -l.
1
|
fdisk –l
|
Disk je torej nda. Običajno je to sda, če imate v strežniku samo en disk.
Hiter majhen ročni test
1
|
smartctl –H /dev/sda
|
Naročilo se mora vrniti
1
2
|
=== START OF READ SMART DATA SECTION ===
SMART overall–health self–assessment test result: PASSED
|
Če ukaz ne vrne "PASSED", pomeni, da disk poda orožje v levo.
Zdaj bomo preverili, kaj je izvedljivo s SMART-om vašega diska.
1
|
smartctl –c /dev/sda
|
Kar daje za disk mojega osebnega strežnika
Zanimiva vrstica je “Self-test supported”. Pogon lahko samostojno diagnosticira.
Ta vrstica vam daje tudi predstavo o predvidenih časih testiranja. Za kratek test (kratek) je v mojem primeru minuta. 43 minut za dolgo (podaljšano).
Začeli bomo samo s hitrim testom
1
|
smartctl –t short /dev/sda
|
Rezultat nas prosi, da počakamo minuto.
1
2
3
4
5
6
|
=== START OF OFFLINE IMMEDIATE AND SELF–TEST SECTION ===
Sending command: « Execute SMART Short self-test routine immediately in off-line mode ».
Drive command « Execute SMART Short self-test routine immediately in off-line mode » successful.
Testing has begun.
Please wait 1 minutes for test to complete.
Test will complete after Sat Aug 31 19:39:48 2013
|
Na koncu te minute si lahko ogledamo rezultat z ukazom:
1
|
smartctl –l selftest /dev/sda
|
Kdo nam daje
=== ZAČETEK RAZDELKA BRANJE PAMETNIH PODATKOV ===
SMART Revizija strukture dnevnika za samotestiranje številka 1
Število Test_Description Status Preostala življenjska doba (ure) LBA_of_first_error
# 1 Kratke hlače brez povezave Opravljeno brez napak 00 % 8867 -
# 2 Kratke hlače brez povezave Opravljeno brez napak 00 % 8863 -
Opravljeno brez napak, tako da je vse v redu! Skratka, to je bil ročni del, da se prepričam, da je vse v redu. Zdaj bomo malo avtomatizirali. Lažje ne bi moglo biti. Smartmontools ima lastnega demona, ki ga morate samo prilagoditi.
Da bi se demon zagnal ob zagonu strežnika, odpakiramo naslednjo vrstico v datoteki / etc / default / smartmontools
1
|
start_smartd=yes
|
Nato uredimo datoteko /etc/smartd.conf.
Ukažemo privzeto vrstico.
1
|
# DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner
|
Dodamo svoj zapis.
1
|
/dev/sda –a –d sat –o on –S on –s (S/../.././02|L/../../7/03) –m moua@gmail.com –M test
|
Razlaga parametrov
-a: Spremljajte zdravje diska
-d: Določite vrsto diska
-o: Preizkus brez povezave
-S: Samodejno shranjevanje
-m: naslov ali pošljite opozorilno e-pošto
-M: v testnem načinu, da takoj preverite, ali je pošiljanje pošte v redu
Program zaženemo, da upoštevamo spremembe.
1
|
/etc/init.d/smartmontools start
|
Prejeli bomo testno e-pošto
1
|
|
Vse je v redu, ponovno uredimo konfiguracijsko datoteko, da zamenjamo parameter -M takole
1
|
/dev/sda –a –d sat –o on –S on –s (S/../.././02|L/../../7/03) –m moua@gmail.com –M exec /usr/share/smartmontools/smartd–runner
|
Začnemo znova, da upoštevamo in je konec. Naslednje e-poštno sporočilo, ki ga prejme od njega, je treba upoštevati, ker bo to pomenilo, da obstaja težava z diskom.
1
|
/etc/init.d/smartmontools restart
|
Majhen nadzor
Pravim "majhen", ker je v smislu nadzora na Linuxu težka artilerija (nagios, centreon, skinken, itd...). Tukaj bomo samo postavili majhno orodje v obliki skripte, ki je nameščeno v cron in se imenuje MotdStat.
Ta mali program naredi dve stvari:
- Nadziranje majhnega strežnika z e-poštnimi opozorili
- Pokaži nekaj konstant na ssh povezavi
Tukaj je majhna ideja o tem, kaj orodje ponuja kot prikaz za povezavo SSH
Program ni na voljo v uradnih repozitorijih. Tukaj morate dobiti arhiv s spletnega mesta. Če ga želite namestiti, morate prevesti vire.
1
|
tar xzf MOTDstat–0.0.3.tar.gz
|
1
|
cd MOTDstat–0.0.3
|
1
|
make install
|
Testirati
1
|
motdstat —generate
|
Sporočilo se nato ustvari v datoteki / etc / motd in se mora pojaviti po prijavi v SSH povezavo.
Ta ista ukazna vrstica je dodana v crontab, da se avtomatizira generiranje, na primer vsakih 5 minut.
Uredite crontab
1
|
crontab –e
|
Dodajte naslednjo vrstico in zaprite datoteko
1
|
*/5 * * * * /usr/bin/motdstat —generate
|
Vsakih 5 minut bo datoteka / etc / motd (motd = sporočilo dneva) posodobljena z najnovejšimi sistemskimi konstantami.
Vsa konfiguracija se zgodi na enem mestu, bodisi v / etc / motdstat, lahko pa navedete naslednje datoteke:
-
fstab_limits : tukaj dodamo particije za spremljanje z omejitvijo, ki jo lahko dosežete pred e-poštnim opozorilom
-
motdstat.conf : Glavna konfiguracija programa. Tu bomo na primer vnesli ciljno e-pošto za opozorila
-
netservice : Nadzor vrat, ki jih je treba poslušati na stroju
-
Postopek : Procesi, ki se morajo izvajati na stroju
Konfiguracijske datoteke so precej preproste, ne bom podrobneje opisal.
V primeru težave, kot je ustavitev storitve ali preseganje praga prostora na disku, vam bo poslano e-poštno sporočilo. V primeru cron zažene skript vsakih 5 minut. Na vas je, da izberete zakasnitev zaznavanja prek vrstice crontab. Upoštevajte pa, da se ob vsakem zagonu skripta v primeru opozorila pošlje e-poštno sporočilo, dokler težave niste rešili.