Notebook 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.