Linux naudoju kasdien ir įvairiausioms paskirtims, kadangi tai labai galinga sistema, ne visuomet įmanoma viską prisiminti. O komandos naudojamos rečiau dažniausiai esti sudėtingesnės ir įdomesnės, tokioms šis administratoriaus užrašų skyrelis ir skiriamas. Jeigu žinai daugiau įdomių komandų ir turi noro pasidėti viešai, siųsk jas adresu doc [et a] atviras [taškas] lt!
Šifravimas
Šiandieniniame technologijų pasaulyje, šifravimo technologijos tapo neatsiejama kasdienybė. Tarnybinės stotys šifruoja prisijungimus, duomenų srautus liudijimų pagalba. Šiuos liudijimus sudaro šifravimo raktas, kurio pagalba užšifruojami slaptažodžiai, prisijungimo vardai, duomenų srautai, bei kiti duomenys. Taip pat tarnybinės stoties duomenys, pvz.: miestas, apskritis ir šalis kurioje veikia tarnybinė stotis; domenas, kuriuo naudojasi stotis, bei prižiūrinčio asmens elektroninio pašto adresas. Be viso šito, yra ir sertifikavusios bendrovės duomenys, kuri atsakinga už liudijime nurodytų duomenų tikrumą. Paprastai tokios bendrovės pardavinėja liudijimų pasirašymo paslaugas, todėl plačiai pripažįstami liudyjimai kainuoja ir ne visai mažus pinigus. Tačiau bandymų, bei smulkioms reikmėms galima naudoti ir paties pasirašytus liudijimus, apie kuriuos kalbama šiame dokumente.
OpenSSL
Technologija leidžianti sukurti, pasirašyti, nuskaityti liudijimus, bei jų pagalba šifruoti duomenis. Ši programinė įranga sutinkama beveik visuose Linux, BSD, Solaris šeimos sistemose ir ne tik. Slackware taipogi pateikia šią programinę įrangą.
Liudijimai
Liudijimai yra kelių rūšių. Tai CA (Certification Authority) - priklausantys šakninėms įstaigoms, pasirašančioms kitus liudijimus. Šio tipo liudijimai jau būna pateikiami su beveik visomis naršyklėmis, bei operacijų sistemomis. Pagal juos visi kiti liudijimai atpažįstami kaip galiojantys/negaliojantys, tikri/netikri. CLIENT - skirti naudojimui darbiniuose kompiuteriuose, kurių dėka galima jungtis prie įvairių paslaugų nenaudojant slaptažodžių, naudotojai atpažįstami pagal šiuos liudijimus. Server - šio tipo liudijimai naudojami tarnybinėse stotyse, prisijungimų, bei duomenų srautų šifravimui (Pašto tarnybos, HTTPS starnybos, FTPS tarnybos ir kita).
Sukūrimas
Norint susikurti liudijimą, užtenka pasinaudoti keliomis komandomis. Pirmiausia, sukuriamas raktas:
# openssl genrsa 2048 -sha256 > raktas.pem
Šio rakto pagalba, sukuriama užklausa liudijimo pasirašymui:
# openssl req -new -key raktas.pem > užklausa.csr
Paleidus šią komandą, reikės atsakyti į keletą klausimų apie šalį, apskritį, bei miestą kur veikia stotis. Kompanijos pavadinimą, padalinį, domeną, pašto adresą, bei liudijimo slaptažodį. Atitinkamai užpildoma:
Country Name (2 letter code) [AU]:LT State or Province Name (full name) [Some-State]:Kauno Apskritis Locality Name (eg, city) []:Kaunas Organization Name (eg, company) [Internet Widgits Pty Ltd]:Atviras Organizational Unit Name (eg, section) []:Atviras Common Name (e.g. server FQDN or YOUR name) []:atviras.lt Email Address []:info@atviras.lt Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:SlaptasSlaptažodis An optional company name []:
Gaunamas failas užklausa.csr
užšifruotu turiniu:
-----BEGIN CERTIFICATE REQUEST----- MIIC7DCCAdQCAQAwgZExCzAJBgNVBAYTAkFVMRgwFgYDVQQIDA9LYXVubyBBcHNr cml0aXMxDzANBgNVBAcMBkthdW5hczEQMA4GA1UECgwHQXR2aXJhczEQMA4GA1UE CwwHQXR2aXJhczETMBEGA1UEAwwKYXR2aXJhcy5sdDEeMBwGCSqGSIb3DQEJARYP aW5mb0BhdHZpcmFzLmx0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA 4wDyMnugjv40qxxjtWH7F+D/tO6z9m+duyY6UOYB+ipriPVV/x1Efymw1rzBFP0D nWGAvFPU3OvXrVr+TCkE/KWHWCaN1cEz+mYq4ozUmD5/4x9JXimP/8RGahfB6kdQ Fb4juClBvp1lgSG2KbeC6FInG96pDMqfCvQOiRlqPOiZU2nYlm/zHyUQ6Bqhnnvj VCcRRSydR0YDfz5wg3P8BmL4sBfMBCk77GRpcrlESsr9sdrgOX58p4ZQbQXxy7b/ oViP6DeVEXu45usdaVGPctAsHF1ppss/Wc62Z9m5SIcCXs4buBs0YOrLKSa8g50e ZDTO7+2m83auvNCgikODyQIDAQABoBUwEwYJKoZIhvcNAQkHMQYMBGFzZGYwDQYJ KoZIhvcNAQEFBQADggEBAGbdxQbj/bkTGm5g4unWpw9Q3bZ79Dcragd4sjv95Owa XihyD8jPrGcIQvnRZk7e3Fit9GAhp41PpiNpYqU9GdF7ipKfLqe5znbkiSzrncDc vlQ4eRvGwoCqzjbpy6IVifp9PbgLuwLn/moAEyNGp6F5ZuweCrIP3GfCZbU7WxEc 6AiD4cDf0aOtezACsHSNydeAetuXEjIhr9CFwz4LZtFcDCqiTg8JPQNFvObN2gFK plaviNRwNqm49rTMV9AS7W7NrUCCcT7uvOU5CyP4hMQqrCAtTXFYvtIV74OqqJ2N 0eA6foMsZ5nBGVq//KWIieLzbeX0rlWpVOB5r4zxNwI= -----END CERTIFICATE REQUEST-----
Pasirašymas
Minėtą turinį reikia pateikti kuriai nors iš šakninių įstaigų (CA), pardavinėjančių liudijimų pasirašymo paslaugas. Viena iš tokių veikiančių Lietuvoje: sertifikatai.lt. Laisvo kodo, bendruomenės veikla remiama įstaiga (tačiau pripažįstama tik laisvo kodo pasaulyje): CaCert.org. Pateikę savo užklausos turinį kuriai nors iš panašių kompanijų, gausite pasirašytą liudijimą liudijimas.pem
kuris galios tam tikrą laiką (už kurį sumokėsite). Šį liudijimą galima naudoti įvairių tarnybų veikloje.
Paties pasirašyti liudijimai
Ne visi naudoja tarnybines stotis komerciniams tikslams, todėl ne visi gali pateisinti pinigų išleidimą liudijimų pasirašymui. Tačiau šifruoti savo slaptažodžius, bei srautą norisi. Asmeniniams, bei bandymų tikslams laisvai galima naudotis savo paties pasirašytais liudijimais. Nepatogumas tik toks, jog programos (priklausomai nuo tarnybos: naršyklės, pašto klientai, ftp klientai ir t.t.) pirmo susijungimo metu parodys pranešimą, jog liudijimas nepatikimas, nes paties pasirašytas ir t.t. reikės pridėti išimtį (kadangi jūsų pačių CA liudijimas naudotas pasirašymui nėra platinamas su šiomis programomis). Ką gi, šiuo atveju, tai nedidelė kaina.
Kadangi kuriamas SERVER tipo liudijimas, tikėtina, jog bus naudojamas įvairių tarnybų veiklai. Užbėgant įvykiams už akių, visus susijusius failus laikysime /etc/liudijimai/
aplanke, kuris turi būti sukurtas:
# mkdir /etc/liudijimai && cd /etc/liudijimai
Sukuriamas ir pasirašomas liudijimas, galiojantis 5 metus (1825-ias dienas):
# openssl req -x509 -nodes -days 1825 -newkey rsa:2048 -keyout liudijimas.key -out liudijimas.pem
Vėl gi, reikės atsakyti į tuos pačius, kaip aukščiau minėti klausimus:
Country Name (2 letter code) [AU]:LT State or Province Name (full name) [Some-State]:Kauno Apskritis Locality Name (eg, city) []:Kaunas Organization Name (eg, company) [Internet Widgits Pty Ltd]:Atviras Organizational Unit Name (eg, section) []:Atviras Common Name (e.g. server FQDN or YOUR name) []:atviras.lt Email Address []:info@atviras.lt
Gauti failai liudijimas.pem
ir liudijimas.key
talpina liudijimą ir raktą. Gera mintis juos apsaugoti nuo pašalinių akių:
# chmod 600 liudijimas.pem liudijimas.key
Outlook .p12
Jeigu jungimuisi prie pašto tarnybų naudojama outlook programa (iš ms office paketo), jai galima pagaminti tam tikrą sertifikatą p12 (įeina raktas, ca ir sertifikatas).
# openssl pkcs12 -export -in liudijimas.pem -inkey liudijimas.key -certfile liudijimas.pem -out liudijimas.p12 -name "Vardenis"
Vietoj vardenis rašomas vardas, komanda paprašys įvesti slaptažodį, galima sugalvoti bet kokį, vėliau vardo ir slaptažodžio prireiks įkeliant liudijimas.p12 į outlook programą.
Šaltiniai
Parengta naudojantis šiais šaltiniais:
Logrotate
Logrotate - patogus įrankis tarnybinės stoties žurnalo tvarkymui. Pagrindinė paskirtis: žurnalo failų skaidymas į mažesnius (lengviau peržiūrimus), bei kaupimas nustatant saugojimo laiką (kad ilgainiui šie failai neperpildytų failų sistemos). Slackware sistemoje logrotate įdiegiama ir naudojama pagal nutylėjimą. Tereikia peržiūrėti nustatymus ir galimai prisitaikyti juos savo poreikiams.
Nustatymai
Bendriniai
Bendriniai nustatymai yra /etc/logrotate.conf
byloje:
# /etc/logrotate.conf
#
# logrotate is designed to ease administration of systems that generate large
# numbers of log files. It allows automatic rotation, compression, removal, and
# mailing of log files. Each log file may be handled daily, weekly, monthly, or
# when it grows too large.
#
# logrotate is normally run daily from root's crontab.
#
# For more details, see "man logrotate".
# rotate log files weekly:
weekly
# keep 4 weeks worth of backlogs:
rotate 4
# create new (empty) log files after rotating old ones:
create
# uncomment if you want to use the date as a suffix of the rotated file
#dateext
# uncomment this if you want your log files compressed:
compress
# some packages install log rotation information in this directory:
include /etc/logrotate.d
# Rotate /var/log/wtmp:
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
# Rotate /var/log/btmp:
/var/log/btmp {
monthly
create 0600 root root
rotate 1
}
# Note that /var/log/lastlog is not rotated. This is intentional, and it should
# not be. The lastlog file is a database, and is also a sparse file that takes
# up much less space on the drive than it appears.
# system-specific logs may be also be configured below:
Kaip ir visos nustatymų bylos Slackware sistemoje, taip ir ši yra gausiai aprašyta. Angliškai skaitantys jau spėjo perprasti bendrinius nustatymus, jog pagal nutylėjimą žurnalo failai yra pertvarkomi kartą į savaitę, kaupiant keturių savaičių trukmės įrašus. Apdoroti įrašai suspaudžiami. Nustatymai atskiroms tarnyboms imami iš /etc/logrotate.d/
aplanko. Jo turinys Slackware sistemoje:
# ls /etc/logrotate.d/
viso 28K
-rw-r--r-- 1 root root 213 Spa 17 12:09 httpd
-rw-r--r-- 1 root root 222 Spa 17 12:34 mcelog
-rw-r--r-- 1 root root 790 Spa 17 11:56 mysql
-rw-r--r-- 1 root root 264 Spa 17 12:19 syslog
-rw-r--r-- 1 root root 223 Spa 17 12:19 ulogd
-rw-r--r-- 1 root root 108 Spa 17 12:16 vsftpd
-rw-r--r-- 1 root root 100 Lie 31 2013 wpa_supplicant
Naudingos nuostatos
Paminėsiu kelias naudingas nuostatas, padedančias išsaugoti tvarkingą /var/log
aplanką. Viena iš mėgiamiausių yra olddir
:
olddir /var/log/seni
Šis nustatymas, visus apdorotus žurnalus padės į /var/log/seni aplanką.
|
Kita naudinga nuostata:
create 640 root adm
640 nurodo leidimus, kurie bus uždėti apdorotiems žurnalams, priskiriant juos root naudotojui, bei adm grupei (root adm). |
Pavyzdys httpd žurnalų bylų apdorojimui:
# nano /etc/logrotate.d/httpd
/var/log/httpd/*_log {
olddir /var/log/seni/httpd
rotate 52
notifempty
missingok
compress
delaycompress
create 640 root root
sharedscripts
postrotate
/etc/rc.d/rc.httpd restart
endscript
}
Logrotate apdorotus apache žurnalus padės į /var/log/seni/httpd aplanką, nustatys 640 leidimus, priskirs juos root naudotojui, bei root grupei.
|
Nustatymų tikrinimas
Jeigu pataisėte arba sukūrėte bylą /etc/logrotate.d/
aplanke, patartina ją patikrinti (nedarant įtakos patiems žurnalams) galima pasinaudojus logrotate -d
(debug) parinktimi:
# logrotate -d /etc/logrotate.d/httpd
reading config file /etc/logrotate.d/httpd
olddir is now /var/log/seni/httpd
Handling 1 logs
rotating pattern: /var/log/httpd/*_log 1048576 bytes (52 rotations)
olddir is /var/log/seni/httpd, empty log files are not rotated, old logs are removed
considering log /var/log/httpd/*_log
log /var/log/httpd/*_log does not exist -- skipping
not running postrotate script, since no logs were rotated
Jeigu buvo įvelta klaidų, iškart matysis.
Paleistis
Logrotate programa paleidžiama per cron sistemą, kartą per dieną. Cron įrašas yra /etc/cron.daily/logrotate
byloje. Šią bylą perkeliant į /etc/cron.weekly
arba /etc/cron.monthly
ji bus paleidžiama atitinkamai kas savaitę arba kas mėnesį (neįsivaizduoju kodėl tai reikėtų daryti, bet…). Norint paleisti dažniau, bylos turinį reiktų perkelti į crontab:
# crontab -e
Šaltiniai
Plačiau apie logrotate galima pasiskaityti info puslapyje:
-
# info logrotate
Find
Find yra galingas paieškos įrankis, kurio dėka galima atlikti įvairias, sudėtingas operacijas. Šis įrankis leidžia ne tik surasti norimus failus, bet ir atlikti su jais įvairius veiksmus.
Failų, priklausančių naudotojui / grupei suradimas
Kartais reikia surasti failus, priklausančius kokiam nors naudotojui:
find /home -user meisteris
arba grupei:
find /home -group ftpusers
Masinis leidimų nustatymas
Dažnas find
panaudojimo atvejis yra leidimų nustatymas. Galima masiškai nustatyti leidimus į 775 aplankams, bei 664 failams:
find . -type d -exec chmod 775 {} \; find . -type f -exec chmod 664 {} \;
Leidimai nustatomi naudojantis paieška pagal tipą: -d
aplankai (directory), -f
failai (files. Taškas .
reiškia, jog bus surasti visi aplankai įskaitant paslėptus (.aplankas), bei tėvinius (..), todėl po šios komandos reikia pasitikrinti viršesnių aplankų leidimus, arba užduoti kitokią paiešką:
find . -type d -name \* -exec chmod 775 {} \;
Šitaip paslėpti, bei tėviniai aplankai išliks nepakitę.
Masinis teksto pakeitimas
Kai kada prireikia pakeisti pasikartojantį tekstą daugybėje failų į kažą kitą:
find . -type f -exec rpl -R senastekstas naujastekstas {} \;
Masinė teksto paieška failų viduje ir atitinkamai šių failų pašalinimas:
find -type f -exec grep -q "\From: Postmaster@126.com\>" {} \; -delete
Masinis failų pervadinimas
Jeigu prireiktų pervadinti daugybe failų, galima tai atlikti panaudojus vieną komandą:
find . -name '*U-*' -exec bash -c 'mv $0 ${0/U-/S_}' {} \;
Failų pavadinimuose esantys U-
bus pakeisti į S_
. Pvz.:
$ ls
viso 32K
-rw-r--r-- 1 meisteris users 854 Bal 30 09:29 U-cpan.adoc
-rw-r--r-- 1 meisteris users 1,8K Geg 11 16:08 U-find.adoc
-rw-r--r-- 1 meisteris users 4,7K Bal 30 09:22 U-logrotate.adoc
-rw-r--r-- 1 meisteris users 1,6K Bal 30 20:35 U-mysql.adoc
-rw-r--r-- 1 meisteris users 7,2K Bal 30 09:24 U-ssl.adoc
-rw-r--r-- 1 meisteris users 198 Geg 11 15:02 U-tar.adoc
$ find . -name '*U-*' -exec bash -c 'mv $0 ${0/U-/S_}' {} \;
$ ls
viso 32K
-rw-r--r-- 1 meisteris users 854 Bal 30 09:29 S_cpan.adoc
-rw-r--r-- 1 meisteris users 1,8K Geg 11 16:08 S_find.adoc
-rw-r--r-- 1 meisteris users 4,7K Bal 30 09:22 S_logrotate.adoc
-rw-r--r-- 1 meisteris users 1,6K Bal 30 20:35 S_mysql.adoc
-rw-r--r-- 1 meisteris users 7,2K Bal 30 09:24 S_ssl.adoc
-rw-r--r-- 1 meisteris users 198 Geg 11 15:02 S_tar.adoc
Senų failų apdorojimas:
Kai kuriais atvejais pravartu surasti failus, senesnius nei tam tikras laikotarpis. Šitai galima atlikti nurodant -mtime
parametrą. Norint ištrinti failus senesnius, nei metai, galima nurodyti -mtime +365
parametrą:
find /kelias/iki/failų/ -type f -mtime +365 -exec rm {} \;
Ciklai
Tai puikus būdas atlikti pasikartojančias operacijas. Keletas jų:
Tam tikros failo dalies pervadinimas:
for file in *.key;do mv -i "${file}" "${file/-key-/-dkim.key-}";done
Kiekvienas failas, kurio pavadinimas baigiasi .key bus pervadintas į .dkim.key
Tar
Tar archyvai padalinti į smulkius failus:
tar czpvf - /kelias/iki/failų | split -d -b 100M - tardisk
Išskleidimas:
cat tardisk* | tar xzpvf -
Perl Modulių Diegimas Per CPAN
Paprastas ir greitas būdas, leidžiantis įdiegti naujausias modulių versijas automatiškai išsprendžiant visas galimas priklausomybes. Tačiau yra vienas trūkumas: sunkiau sekti kokie moduliai yra įdiegti sistemoje.
CPAN Aktyvavimas
CPAN Slackware sistemose būna įdiegtas pagal nutylėjimą, tereikia suaktyvinti jo apvalkalą:
# perl -MCPAN -e shell
Jei tai daroma pirmą kartą, tuomet gausite kelis klausimus į kuriuos galima atsakyti tiesiog y
. Po kelių minučių matysite CPAN komandinę eilutę:
cpan shell -- CPAN exploration and modules installation (v1.9456)
Enter 'h' for help.
cpan[1]>
CPAN modulių diegimas
Minėtoje CPAN komandų eilutėje įrašius install modulio::pavadinimas
, modulis bus parsiųstas ir įdiegtas:
cpan[1]> install Captcha::reCAPTCHA
Mysql
Šios duomenų bazės naudojimas yra smarkiai paplitęs reiškinys, todėl tikėtina, jog teks daugiau ar mažiau su ja susidurti dažnam Linux naudotojui.
Duomenų peržiūra
Duombazės pasirinkimas:
mysql> use dbpavadinimas;
Lentelės peržiūra:
mysql> show tables;
Lentelės savybės:
mysql> describe oc_users;
Lentelės duomenų peržiūra:
mysql> SELECT * FROM lentelės_pavadinimas;
+-----------+--------------------------------------------------------------+-------------+
| uid | password | displayname |
+-----------+--------------------------------------------------------------+-------------+
| usr1 | pLnaQ.7kv/vxpTBAEiDRATp3GasdfafdsadsfasdfaseDlu | NULL |
| Admusr | $dsfsdfsdfsfsdfdsfH.IrItvaerzJufdf Ndsafsaf RWJ8mPu | NULL |
+-----------+--------------------------------------------------------------+-------------+
2 rows in set (0.00 sec)
Duomenų įvedimas
Lentelės sukūrimas:
mysql> CREATE TABLE `lentelės_pavadinimas` (`Index_ID` int(1) NOT NULL AUTO_INCREMENT, `NAME` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, PRIMARY KEY (`Index_ID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Duomenų įrašymas į lentelę:
mysql> INSERT INTO `lentelės_pavadinimas` (`uid`,`password`) VALUES ('Admusr2','pLnaQ.7kv/vxpTBAEiDRATp3GasdfafdsadsfasdfaseDlu');
Duomenų pakeitimas:
update lentelės_pavadinimas set password='pLnaQ.7kv/vxpTBAEiDRATp3GasdfafdsadsfasdfaseDlu' where uid='Admusr';
Mikrotik
Kadangi šie maršrutizatoriai savo kainų lygyje yra visiškai puikūs, tikėtina, jog ne mane vieną ištiks jų valdymo reikalai.
Juodieji sąrašai
Kiekvienas tinklų ir tarnybinių stočių prižiūrėtojas neišvengiamai susidurs su internetų blogiukais, nuolatos mėginančiais atakuoti, nuskaityti, spėlioti slaptažodžius ir visaip kitaip apsunkinti reikalus. Tiesa, jų IP adresus galima užblokuoti. Tačiau šie adresai dėl įvairių priežasčių kinta, o jų sąrašų palaikymas yra pernelyg didelis darbas vienišam administratoriui. Laimė, galima pasinaudoti bendriniais kenkėjiškų IP adresų sąrašais, kuriuos palaiko tam tikros bendruomenės. Kadangi naudoju MikroTik maršrutizatorių, pamaniau, būtų šaunu nusikratyti blogiukais dar jiems nepasiekus mano serverių.
Viena bėda, šie IP sąrašai būna suformatuoti labai įvairiai, o MT RouterOS naudoja savitą formatą šių sąrašų sudarymui. Reikės trijų skriptų. Vieno Linux webserveryje, kitų – Mikrotik maršrutizatoriuje.
Linux
Linux aplinka pasižymi gausybe privalumų, kuomet reikalas liečia skriptus. Šiais privalumais ir bus pasinaudota. Sukuriamas skriptas, kuris nuskaito minėtus bendruomenių sąrašus, atrenka ir pašalina vienodus įrašus, ir gautą sąrašą suformatuoja MTik priimtinu stiliumi. Galutinis sąrašas padedamas į http serveriui prieinamą aplanką.
# nano /usr/local/bin/blacklist-gen.sh
Skripto turinys, kintamuosius reikia užpildyti pagal savas aplinkybes:
#!/bin/sh
# Script to generate blacklist in .rsc format
# WTF license by Meisteris
now=$(date);
# Variables
DocRoot=/srv/web/ownsystem.eu/htdocs
RSC=blacklist-temp.rsc
RSCP=blacklist.rsc
owner=apache:apache
header="# Generated by Meisteris on $now"
dshield='http://feeds.dshield.org/block.txt'
spamhaus='http://www.spamhaus.org/drop/drop.lasso'
openbl='http://www.openbl.org/lists/base_30days.txt.gz'
blocklistde='http://lists.blocklist.de/lists/all.txt'
badguys='http://cinsscore.com/list/ci-badguys.txt'
shunlist='http://www.autoshun.org/files/shunlist.csv'
forumspam='http://www.stopforumspam.com/downloads/toxic_ip_cidr.txt'
fullbogons='http://www.team-cymru.org/Services/Bogons/fullbogons-ipv4.txt'
honeypot='http://www.projecthoneypot.org/list_of_ips.php?t=d&rss=1'
# Grab a random value between 0-200.
value=$RANDOM
while [ $value -gt 200 ] ; do
value=$RANDOM
done
# Sleep for that time.
sleep $value
# Setup Header
echo $header > $DocRoot/$RSC
echo "/ip firewall address-list" >> $DocRoot/$RSC
# Dshield http://feeds.dshield.org/block.txt
wget -q -O - $dshield | awk --posix '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.0\t/ { print "add list=blacklist address=" $1 "/24 comment=BlackList";}' >> $DocRoot/$RSC
# Spamhaus http://www.spamhaus.org/drop/drop.lasso
wget -q -O - $spamhaus | awk --posix '/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\// { print "add list=blacklist address=" $1 " comment=BlackList";}' >> $DocRoot/$RSC
# OpenBL http://www.openbl.org/lists/base_30days.txt.gz
wget -q -O - $openbl | gunzip | awk --posix '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/ { print "add list=blacklist address=" $1 " comment=BlackList";}' >> $DocRoot/$RSC
# BlocklistDE http://lists.blocklist.de/lists/all.txt
wget -q -O - $blocklistde | awk --posix '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/ { print "add list=blacklist address=" $1 " comment=BlackList";}' >> $DocRoot/$RSC
# Cinscore badguys http://cinsscore.com/list/ci-badguys.txt
wget -q -O - $badguys | awk --posix '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/ { print "add list=blacklist address=" $1 " comment=BlackList";}' >> $DocRoot/$RSC
# Shunlist http://www.autoshun.org/files/shunlist.csv
wget -q -O - $shunlist | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | awk '{ print "add list=blacklist address=" $1 " comment=BlackList";}' >> $DocRoot/$RSC
# Forum SPAM http://www.stopforumspam.com/downloads/toxic_ip_cidr.txt
wget -q -O - $forumspam | awk --posix '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/ { print "add list=blacklist address=" $1 " comment=BlackList";}' >> $DocRoot/$RSC
# Full bogons http://www.team-cymru.org/Services/Bogons/fullbogons-ipv4.txt
wget -q -O - $fullbogons | awk --posix '/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/ { print "add list=blacklist address=" $1 " comment=BlackList";}' >> $DocRoot/$RSC
# Project Honey Pot Directory of Dictionary Attacker IPs http://www.projecthoneypot.org/list_of_ips.php?t=d&rss=1
wget -q -O - $honeypot | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | awk '{ print "add list=blacklist address=" $1 " comment=BlackList";}' >> $DocRoot/$RSC
# Remove duplicate entries and sort list
sort -u $DocRoot/$RSC > $DocRoot/$RSCP
# CleanUP and leave
rm $DocRoot/$RSC
chown $owner $DocRoot/$RSCP
chmod 640 $DocRoot/$RSCP
exit 0
Įsitikinus, jog skriptas veikia, pravartu nurodyti, jog sistema jį laikas nuo laiko automatiškai įvykdytų:
# ln -s /usr/local/bin/blacklist-gen.sh /etc/cron.dayly/
RouterOS
Kai jau turime pasiekiamą blacklist.rsc sąrašą, belieka padaryti, jog maršrutizatorius jį automatiškai parsisiųstų, nuskaitytų ir laikas nuo laiko atnaujintų. Tam naudojami du skriptai, kuriuos įdiegti galima paprasčiausiai nukopijavus žemiau esantį tekstą į RouterOS terminalą:
# Script which will download the blacklist as a text file
/system script add name="Download_blacklist" source={
/tool fetch url="http://www.ownsystem.eu/blacklist.rsc" mode=http;
:log info "Downloaded blacklist.rsc from ownsystem.eu";
}
# Script which will Remove old Begone list and add new one
/system script add name="Replace_blacklist" source={
:foreach i in=[/ip firewall address-list find ] do={
:if ( [/ip firewall address-list get $i comment] = "BlackList" ) do={
/ip firewall address-list remove $i
}
}
/import file-name=blacklist.rsc;
:log info "Removal old blacklist and add new";
}
# Schedule the download and application of the dshield list
/system scheduler add comment="Download blocklist" interval=7d name="DownloadBlackList" on-event=Download_blacklist start-date=jan/01/1970 start-time=02:42:00
/system scheduler add comment="Apply badguys List" interval=7d name="InstallBlackList" on-event=Replace_blacklist start-date=jan/01/1970 start-time=02:52:00
Ir viskas, jeigu yra noro, galima paderinti paleidimo laiką, intervalus. IP adresai atsiras Address List po vardu „blacklist“. Teliks sukurti ugniasienės taisykles, bet tai jau kita istorija.