8.1_ Fail2ban: fail2ban.conf
Il file fail2ban.conf ha il seguente contenuto:
codice:
# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 629 $
#
[Definition]
# Option: loglevel
# Notes.: Set the log level output.
# 1 = ERROR
# 2 = WARN
# 3 = INFO
# 4 = DEBUG
# Values: NUM Default: 3
#
loglevel = 3
# Option: logtarget
# Notes.: Set the log target. This could be a file, SYSLOG, STDERR or STDOUT.
# Only one log target can be specified.
# Values: STDOUT STDERR SYSLOG file Default: /var/log/fail2ban.log
#
logtarget = SYSLOG
# Option: socket
# Notes.: Set the socket file. This is used to communicate with the daemon. Do
# not remove this file when Fail2ban runs. It will not be possible to
# communicate with the server afterwards.
# Values: FILE Default: /var/run/fail2ban/fail2ban.sock
#
socket = /var/run/fail2ban/fail2ban.sock
Nulla di complesso. Livello di dettaglio dei log, destinazione del log e socket del processo.
Il livello di dettaglio per ora va bene, voglio però cambiare la destinazione del log: Ora finisce tutto nel "/var/log/daemon.log" ma preferisco dedicargli un proprio log. Copio quindi il file, anche così com'è, in un file omonimo con estensione ".local" e sostituisco la riga "logtarget = SYSLOG" con "logtarget = /var/log/fail2ban.log".
Per integrare il tool con lo strumento di rotazione automatica dei log, è necessario creare il file "/etc/logrotate.d/fail2ban" con il seguente contenuto, in accordo con le istruzioni contenute del wiki linkato in precedenza (ovviamente con le opportune modifiche, se il file di log indicato non è quello riportato):
codice:
/var/log/fail2ban.log {
weekly
rotate 7
missingok
compress
postrotate
/usr/local/bin/fail2ban-client reload 1>/dev/null || true
endscript
}
Io lo avevo già anche se con un contenuto leggermente diverso:
codice:
/var/log/fail2ban.log {
weekly
rotate 4
compress
delaycompress
missingok
postrotate
fail2ban-client set logtarget /var/log/fail2ban.log >/dev/null
endscript
create 640 root adm
}
8.3_ Fail2ban: jail.local
Il file di configurazione originale è molto lungo e completo, per la verità anche troppo.
Inoltre, onestamente, non ho capito come funzionano gli "Action shortcuts" presenti nel file: Ho deciso pertanto di prendere il prestito il file che ho usato per i server dell'ufficio su CentOS6, opportunamente rimaneggiato.
codice:
# Fail2Ban configuration file
#
# Author: Matteo Fracassetti
#
# $Revision: 1 $
#
# La jail DEFAULT imposta definizioni predefinite per tutte le jail,
# a meno che non diversamente specificato nella jail stessa.
## Attenzione: I tempi sono espressi in secondi, quindi:
# 600 -> 10 minuti
# 1800 -> 30 minuti
# 3600 -> 1 ora
# 43200 -> 12 ore
# 86400 -> 1 giorno
# 259200 -> 3 giorni
# 604800 -> 7 giorni
## Attenzione: un valore di "maxretry = 0" indica che il ban deve avvenire
# alla prima occorrenza della regex. "maxretry = 1" invece significa dopo
# il primo "retry" e quindi alla seconda occorrenza.
## Per applicare la stessa jail a piu' log e' possibile, ad esempio, specificare
# il percorso del log nel formato "/var/www/*/logs/access_log"
[DEFAULT]
findtime = 600
backend = inotify
maxretry = 3
bantime = 86400
banaction = iptables-multiport
port = http,https
protocol = tcp
ignoreip = 127.0.0.1 192.168.200.0/24 192.168.150.0/24
Il parametro "findtime" determina l'arco temporale entro cui devo verificarsi il "maxretry": Quindi se ho un findtime impostato a 600 secondi (dieci minuti) significa che ogni IP che dovesse matchare le regex indicate nel "filter" per un numero di volte superiore al valore "maxretry", subirà l'azione configurata nel parametro "action".
Non è necessario impostare un valore troppo elevato che può, anzi, risultare deleterio: L'attività di scanner e bot generalmente produce occorrenze molto ravvicinate (anche una decina nello stesso secondo) e sono quindi sufficienti per far scattare quasi tutte le jail. Un utente impastato che sbaglia a digitare la password 3 volte di file difficilmente lo farà in meno di 10 secondi mentre se impostiamo un findtime di un'ora o di un giorno non è così improbabile che ci finisca dentro qualche utente legittimo (ad esempio: un certo supermod che cercava di leggere la sua posta durante la pausa pranzo...)
Il parametro backend è forse una delle opzioni più delicate. Fail2ban analizza i log che hanno subito modifiche recenti e per sapere quando ciè avviene può verificare il file di log ad intervalli regolari ("polling") oppure interfacciarsi con altri demoni in esecuzione sul server che si occupino per lui di monitorare le modifiche al filesystem. Di questi demoni ne esistono diversi e la documentazione sul sito ufficiale di fail2ban è un pò fumosa... L'attuale versione 0.8.x dovrebbe avere ufficialmente il supporto per i backend "FAM/Gamin/Pyinotify" anche se il supporto a "pyinotify" è indicato tra le feature della versione 0.9.x.
Fatto stà che su CentOS 6 con SELinux attivo "inotify" è l'unico backend che funzioni veramente mentre su Debian ho provato tutti i valori possibili ma il tool sembra caricare sempre e solo il backend "poller" anche se non sò se è un problema del log o del tool....
codice:
2012-09-27 22:57:17,220 fail2ban.jail : INFO Jail 'vsftpd-xferlog' uses poller
"pyinotify" dovrebbe essere il valore ottimale per un gran numero di configurazioni e comunque il tool funziona quindi ho preferito installare sul server le librerie necessarie per utilizzarlo ed impostare questo valore nella configurazione predefinita.
codice:
root@server:/home/matteo# apt-get install inotify-tools libinotifytools0 python-inotifyx python-pyinotify python-inotifyx
Del significato di maxretry ho già parlato mentre bantime indica per quanto tempo l'IP individuato dovrà essere soggetto alle azioni indicate nella banaction. Il valore è ovviamente da valutare in base al servizio monitorato ed all'azione configurata.
port permette di applicare le azioni di ban nel firewall a specifici servizi, coadiuvato dal parametro protocol.
ignoreip imposta uno o più host che non devono essere soggetti alle azioni configurate e possono essere indicati come un IP, una subnet o un range di indirizzi, un nome host o un intero dominio. Ovviamente è consigliato inserirvi sia il localhost che la rete locale, per evitare di tagliarsi fuori dal server...
codice:
#
# JAILS
#
# [SECTION_NAME]
# enabled = true
#
[apache-access_log]
enabled = true
filter = apache-access_log
action = iptables-multiport[name=apache-access, port="http,https"]
logpath = /var/log/apache2/access.log
/var/log/apache2/ssl_access.log
maxretry = 0
bantime = 3600
[apache-error_log]
enabled = true
filter = apache-error_log
action = iptables-multiport[name=apache-error, port="http,https"]
logpath = /var/log/apache2/error.log
maxretry = 0
bantime = 3600
# Ban hosts which agent identifies spammer robots crawling the web
# for email addresses. The mail outputs are buffered.
# Il percorso "/var/www/*/logs/access_log" puo' essere utile da adattare
# su una installazione che ospita molti siti.
[apache-badbots]
enabled = true
filter = apache-badbots
action = iptables-multiport[name=apache-BadBots, port="http,https"]
logpath = /var/log/apache2/access.log
/var/log/apache2/ssl_access.log
bantime = 604800
maxretry = 1
Sfruttando la configurazione predefinita, ho ridotto in 3 JAILS la verifica dei log di apache: Una che si occupi di verificare il file access.log ed ssl_access.log, una dedicata al file error.log (che, avendo una sintassi diversa, necessità di diverse regex configurate nel parametro filter) e, dalla configurazione originale, ho tenuto la "apache-badbots" ma sono tentato di rimuoverla perchè non mi convince molto...
codice:
[vsftpd-log]
enabled = true
filter = vsftpd-log
findtime = 300
port = ftp,ftp-data,ftps,ftps-data
action = iptables-multiport[name=vsftpd, port="ftp,ftp-data,ftps,ftps-data"]
logpath = /var/log/vsftpd_pubblico.log
maxretry = 10
[vsftpd-xferlog]
enabled = true
filter = vsftpd-xferlog
port = ftp,ftp-data,ftps,ftps-data
action = iptables-multiport[name=vsftpd, port="ftp,ftp-data,ftps,ftps-data"]
logpath = /var/log/vsftpd_pubblico.xferlog
maxretry = 3
Ho qui raggruppato le JAILS che si occupano di monitorare il servizio ftp.
codice:
# Jail da iRedMail
[roundcube-iredmail]
enabled = true
filter = roundcube.iredmail
action = iptables-multiport[name=roundcube, port="http,https"]
logpath = /var/log/mail.log
maxretry = 5
bantime = 3600
[dovecot-iredmail]
enabled = true
filter = dovecot.iredmail
action = iptables-multiport[name=dovecot, port="submission,pop3,pop3s,imap,imaps"]
logpath = /var/log/dovecot.log
maxretry = 5
bantime = 3600
[postfix-iredmail]
enabled = true
filter = postfix.iredmail
action = iptables-multiport[name=postfix, port="smtps,smtp,submission"]
logpath = /var/log/mail.log
bantime = 3600
maxretry = 5
Queste sono invece le jail ereditate da iredmail. Di nuovo, molte grazie a Zhang...
8.4_ filter.d/apache-access_log.conf
Nella directory filter.d presente nello stesso percorso dei files precedenti, si trovano gli script contenenti le espressioni regolari utilizzate per analizzare i log del server.
Le regex sono in perl e la rete è piena di istruzioni e tutorial: Ciò nonostante non sono così semplici da scrivere. Tempo fà l'utente Querty mi diede qualche utile indicazione qui, da cui ho attinto a piene mani. Sono sempre stato scarso e con poca pazienza in queste cose quindi le mio regex sono davvero molto rozze, ci sarebbe quasi da vergognarsi a pubblicarle... Però funzionano abbastanza bene, almeno per ora..
Quote:
Originariamente inviato da filter.d/apache-access_log.conf
Aggiornato il: 29 Settembre 2012
codice HTML:
# Fail2Ban configuration file
#
# Author: Matteo Fracassetti
# Ho semplicemente accorpato in una unica jail diversi filtri di
# diversi autori, accomunate dal log a cui si riferiscono.
#
#
[Definition]
# Option: failregex
#
failregex = <HOST> .*([/]+[\.]+[/]+)+.*$
<HOST> .*/etc/passwd.*$
<HOST> .*allow_url_include.*$
<HOST> .*proc/self/environ.*$
<HOST> .*HTTP\/(?: 1\.0|1\.1)\" 405.*$
<HOST> .*CONNECT.*$
<HOST> .*(?:WooT|w00t|wOOt|woot|Morfeus Fucking Scanner).*$
<HOST> .*(?:GET|POST).*(?:http|https)[://].*HTTP\/.*$
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex = ^<HOST> -.*\"GET.*HTTP.*(?:Googlebot/2\.1.*|Googlebot-News|Googlebot-Image/1\.0|Googlebot-Video/1\.0|Mediapartners-Google/2\.1|Mediapartners-Google|AdsBot-Google)$
Ho semplicemente accorpato diverse regex volte ad analizzare i log "access" di apache.
Principalmente sfrutto i report di logwatch per identificare le stringhe da matchare nei log ed adeguare le jail. Non è un metodo molto evoluto, anche perchè le regex sono "case sensitive" quindi basta una sola maiuscola/minuscola invertita per rendere inefficace la regex.
Inoltre, non su tutte le distro linux la stessa regex da gli stessi risultati: La quinta di questo elenco " .*/.\.\/.\.\/.*$" (o anche .*\/\.\.\/.*$) su CentOS non dà alcun riscontro: Per matchare le stesse occorrenze su CentOS6 ho dovuto riscriverla in questo modo: " .*\/[\.+]\/+.*$".
La regex in versione CentOS è anche più flessibile in quanto matcha ogni occorrenze di un carattere "/" seguito da uno o più "." seguito da uno o più "/" ripetute una o più volte ma su Debian non mi dà alcun riscontro... Lo stesso risultato, su Debian mi viene invece con questa, che ho adottato come sesta dell'elenco: .*[/]+[\.]+[/]+.*$
Per testare l'efficacia di una jail è possibile testarla con il comando seguente:
codice:
root@server:/etc/fail2ban# fail2ban-regex /var/log/apache2/ssl_access.log filter.d/apache-access_log.conf
/usr/share/fail2ban/server/filter.py:442: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import md5
Running tests
=============
Use regex file : filter.d/apache-access_log.conf
Use log file : /var/log/apache2/ssl_access.log
Results
=======
Failregex
|- Regular expressions:
| [1] .*"(GET|POST).*(http|https)[://].* HTTP\/.*$
| [2] .*/.\.\/.\.\/.*$
| [3] .*/etc/passwd.*$
| [4] .*allow_url_include.*$
| [5] .*proc/self/environ.*$
| [6] .*HTTP\/1.0" 405.*$
| [7] .*HTTP\/1.1" 405.*$
| [8] .*CONNECT.*$
| [9] .*(w00t|woot|WooT|wOOt).*$
| [10] .*Morfeus Fucking Scanner.*$
|
`- Number of matches:
[1] 0 match(es)
[2] 1 match(es)
[3] 0 match(es)
[4] 0 match(es)
[5] 0 match(es)
[6] 0 match(es)
[7] 0 match(es)
[8] 0 match(es)
[9] 0 match(es)
[10] 0 match(es)
Ignoreregex
|- Regular expressions:
|
`- Number of matches:
Summary
=======
Addresses found:
[1]
[2]
115.248.95.147 (Tue Sep 25 01:46:48 2012)
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
Date template hits:
0 hit(s): MONTH Day Hour:Minute:Second
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second Year
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second
0 hit(s): Year/Month/Day Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
13351 hit(s): Day/MONTH/Year:Hour:Minute:Second
0 hit(s): Month/Day/Year:Hour:Minute:Second
0 hit(s): Year-Month-Day Hour:Minute:Second
0 hit(s): Day-MONTH-Year Hour:Minute:Second[.Millisecond]
0 hit(s): Day-Month-Year Hour:Minute:Second
0 hit(s): TAI64N
0 hit(s): Epoch
0 hit(s): ISO 8601
0 hit(s): Hour:Minute:Second
0 hit(s):
Success, the total number of match is 1
However, look at the above section 'Running tests' which could contain important
information.
root@server:/etc/fail2ban# fail2ban-regex /var/log/apache2/access.log filter.d/apache-access_log.conf
/usr/share/fail2ban/server/filter.py:442: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import md5
Running tests
=============
Use regex file : filter.d/apache-access_log.conf
Use log file : /var/log/apache2/access.log
Results
=======
Failregex
|- Regular expressions:
| [1] .*"(GET|POST).*(http|https)[://].* HTTP\/.*$
| [2] .*/.\.\/.\.\/.*$
| [3] .*/etc/passwd.*$
| [4] .*allow_url_include.*$
| [5] .*proc/self/environ.*$
| [6] .*HTTP\/1.0" 405.*$
| [7] .*HTTP\/1.1" 405.*$
| [8] .*CONNECT.*$
| [9] .*(w00t|woot|WooT|wOOt).*$
| [10] .*Morfeus Fucking Scanner.*$
|
`- Number of matches:
[1] 0 match(es)
[2] 0 match(es)
[3] 0 match(es)
[4] 0 match(es)
[5] 0 match(es)
[6] 0 match(es)
[7] 0 match(es)
[8] 0 match(es)
[9] 0 match(es)
[10] 2 match(es)
Ignoreregex
|- Regular expressions:
|
`- Number of matches:
Summary
=======
Addresses found:
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
201.157.18.107 (Mon Sep 24 14:43:10 2012)
117.79.149.219 (Tue Sep 25 22:16:11 2012)
Date template hits:
0 hit(s): MONTH Day Hour:Minute:Second
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second Year
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second
0 hit(s): Year/Month/Day Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
152 hit(s): Day/MONTH/Year:Hour:Minute:Second
0 hit(s): Month/Day/Year:Hour:Minute:Second
0 hit(s): Year-Month-Day Hour:Minute:Second
0 hit(s): Day-MONTH-Year Hour:Minute:Second[.Millisecond]
0 hit(s): Day-Month-Year Hour:Minute:Second
0 hit(s): TAI64N
0 hit(s): Epoch
0 hit(s): ISO 8601
0 hit(s): Hour:Minute:Second
0 hit(s):
Success, the total number of match is 2
However, look at the above section 'Running tests' which could contain important
information.
Che andando a vedere risulta questo:
codice:
115.248.95.147 - - [25/Sep/2012:01:46:48 +0200] "GET /vtigercrm/modules/com_vtiger_workflow/sortfieldsjson.php?module_name=../../../../../../../..//etc/amportal.conf%00 HTTP/1.1" 404 7912 "-" "-"
201.157.18.107 - - [18/Sep/2012:16:35:56 +0200] "GET /user/soapCaller.bs HTTP/1.1" 404 475 "-" "Morfeus Fucking Scanner"
201.157.18.107 - - [24/Sep/2012:14:43:10 +0200] "GET /user/soapCaller.bs HTTP/1.1" 404 475 "-" "Morfeus Fucking Scanner"
117.79.149.219 - - [25/Sep/2012:22:16:11 +0200] "GET /user/soapCaller.bs HTTP/1.1" 404 475 "-" "Morfeus Fucking Scanner"
Oggi pesca grama: Di solito va meglio...
Il comando:
root@server:/etc/fail2ban# fail2ban-regex /var/log/apache2/ssl_access.log " .*[/]+[\.]+[/]+.*$"
può essere usato invece per testare la singola regex.
8.4_ filter.d/apache-error_log.conf
Quote:
Originariamente inviato da filter.d/apache-error_log.conf
codice HTML:
#
# Author: Matteo Fracassetti
# Ho semplicemente accorpato in una unica jail diversi filtri di
# diversi autori, accomunate dal log a cui si riferiscono.
# Version. 2
#
[Definition]
# Option: failregex
#
failregex = [[]client <HOST>[]] (?:client denied by server configuration|Invalid URI in request|Invalid method in request|request failed: URI too long|erroneous characters after protocol string).*$
[[]client <HOST>[]] user .* (authentication failure|not found|password mismatch).*$
[[]client <HOST>[]] .*(?:awstat|awstats|awstatstotal|awstatstotals|stats|setup.php).*$
[[]client <HOST>[]] File does not exist: .*(?:/~.|vtigercrm|bash_history).*$
[[]client <HOST>[]] (?:File does not exist|script not found or unable to stat): /\S*(?: \.php|\.asp|\.exe|\.pl)
[[]client <HOST>[]] File does not exist: .*(?:MyAdmin|myadmin|sql-admin|mysqladmin|mysql_admin|mysqlmanager|phpmanager|sqlmanager|sql|mysql|phpmyadmin|phpMyAdmin|mysqlphpadmin|websql|sqlweb|web|www-sql|webdb|roundcubemail).*$
[[]client <HOST>[]] .*\/etc\/passwd.*$
[[]client <HOST>[]] .*[\/]+[\.]+[\/]+.*$
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
E questo è il risultato:
codice:
root@server:/etc/fail2ban# fail2ban-regex /var/log/apache2/error.log filter.d/apache-error_log.conf
/usr/share/fail2ban/server/filter.py:442: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import md5
Running tests
=============
Use regex file : filter.d/apache-error_log.conf
Use log file : /var/log/apache2/error.log
Results
=======
Failregex
|- Regular expressions:
| [1] [[]client []] (Invalid method in request||request failed: URI too long||erroneous characters after protocol string).*$
| [2] [[]client []] client denied by server configuration.*$
| [3] [[]client []] user .* (authentication failure||not found||password mismatch).*$
| [4] [[]client []] .*(awstat||awstats||awstatstotal||awstatstotals||stats||setup.php).*$
| [5] [[]client []] File does not exist: .*(/~. ||vtigercrm||bash_history).*$
| [6] [[]client []] (File does not exist||script not found or unable to stat): /\S*(\.php||\.asp||\.exe||\.pl)
| [7] [[]client []] File does not exist: .*(MyAdmin||myadmin||sql-admin||mysqladmin||mysql_admin).*$
| [8] [[]client []] File does not exist: .*(mysqlmanager||phpmanager||sqlmanager).*$
| [9] [[]client []] File does not exist: .*(sql||mysql||phpmyadmin||phpMyAdmin||mysqlphpadmin||websql||sqlweb||www-sql||webdb).*$
| [10] [[]client []] File does not exist: .*roundcubemail.*$
|
`- Number of matches:
[1] 8 match(es)
[2] 0 match(es)
[3] 0 match(es)
[4] 8 match(es)
[5] 8 match(es)
[6] 8 match(es)
[7] 8 match(es)
[8] 8 match(es)
[9] 8 match(es)
[10] 4 match(es)
Ignoreregex
|- Regular expressions:
|
`- Number of matches:
Summary
=======
Addresses found:
[1]
62.163.93.29 (Sun Sep 23 09:49:07 2012)
201.157.18.107 (Mon Sep 24 14:43:10 2012)
115.248.95.147 (Tue Sep 25 01:46:48 2012)
118.217.12.31 (Tue Sep 25 21:41:29 2012)
117.79.149.219 (Tue Sep 25 22:16:11 2012)
94.24.41.133 (Wed Sep 26 15:44:25 2012)
146.185.20.124 (Thu Sep 27 01:51:08 2012)
70.36.118.56 (Thu Sep 27 08:04:06 2012)
[2]
[3]
[4]
62.163.93.29 (Sun Sep 23 09:49:07 2012) (already matched)
201.157.18.107 (Mon Sep 24 14:43:10 2012) (already matched)
115.248.95.147 (Tue Sep 25 01:46:48 2012) (already matched)
118.217.12.31 (Tue Sep 25 21:41:29 2012) (already matched)
117.79.149.219 (Tue Sep 25 22:16:11 2012) (already matched)
94.24.41.133 (Wed Sep 26 15:44:25 2012) (already matched)
146.185.20.124 (Thu Sep 27 01:51:08 2012) (already matched)
70.36.118.56 (Thu Sep 27 08:04:06 2012) (already matched)
[5]
62.163.93.29 (Sun Sep 23 09:49:07 2012) (already matched)
201.157.18.107 (Mon Sep 24 14:43:10 2012) (already matched)
115.248.95.147 (Tue Sep 25 01:46:48 2012) (already matched)
118.217.12.31 (Tue Sep 25 21:41:29 2012) (already matched)
117.79.149.219 (Tue Sep 25 22:16:11 2012) (already matched)
94.24.41.133 (Wed Sep 26 15:44:25 2012) (already matched)
146.185.20.124 (Thu Sep 27 01:51:08 2012) (already matched)
70.36.118.56 (Thu Sep 27 08:04:06 2012) (already matched)
[6]
62.163.93.29 (Sun Sep 23 09:49:07 2012) (already matched)
201.157.18.107 (Mon Sep 24 14:43:10 2012) (already matched)
115.248.95.147 (Tue Sep 25 01:46:48 2012) (already matched)
118.217.12.31 (Tue Sep 25 21:41:29 2012) (already matched)
117.79.149.219 (Tue Sep 25 22:16:11 2012) (already matched)
94.24.41.133 (Wed Sep 26 15:44:25 2012) (already matched)
146.185.20.124 (Thu Sep 27 01:51:08 2012) (already matched)
70.36.118.56 (Thu Sep 27 08:04:06 2012) (already matched)
[7]
62.163.93.29 (Sun Sep 23 09:49:07 2012) (already matched)
201.157.18.107 (Mon Sep 24 14:43:10 2012) (already matched)
115.248.95.147 (Tue Sep 25 01:46:48 2012) (already matched)
118.217.12.31 (Tue Sep 25 21:41:29 2012) (already matched)
117.79.149.219 (Tue Sep 25 22:16:11 2012) (already matched)
94.24.41.133 (Wed Sep 26 15:44:25 2012) (already matched)
146.185.20.124 (Thu Sep 27 01:51:08 2012) (already matched)
70.36.118.56 (Thu Sep 27 08:04:06 2012) (already matched)
[8]
62.163.93.29 (Sun Sep 23 09:49:07 2012) (already matched)
201.157.18.107 (Mon Sep 24 14:43:10 2012) (already matched)
115.248.95.147 (Tue Sep 25 01:46:48 2012) (already matched)
118.217.12.31 (Tue Sep 25 21:41:29 2012) (already matched)
117.79.149.219 (Tue Sep 25 22:16:11 2012) (already matched)
94.24.41.133 (Wed Sep 26 15:44:25 2012) (already matched)
146.185.20.124 (Thu Sep 27 01:51:08 2012) (already matched)
70.36.118.56 (Thu Sep 27 08:04:06 2012) (already matched)
[9]
62.163.93.29 (Sun Sep 23 09:49:07 2012) (already matched)
201.157.18.107 (Mon Sep 24 14:43:10 2012) (already matched)
115.248.95.147 (Tue Sep 25 01:46:48 2012) (already matched)
118.217.12.31 (Tue Sep 25 21:41:29 2012) (already matched)
117.79.149.219 (Tue Sep 25 22:16:11 2012) (already matched)
94.24.41.133 (Wed Sep 26 15:44:25 2012) (already matched)
146.185.20.124 (Thu Sep 27 01:51:08 2012) (already matched)
70.36.118.56 (Thu Sep 27 08:04:06 2012) (already matched)
[10]
115.248.95.147 (Tue Sep 25 01:46:48 2012) (already matched)
118.217.12.31 (Tue Sep 25 21:41:29 2012) (already matched)
94.24.41.133 (Wed Sep 26 15:44:25 2012) (already matched)
70.36.118.56 (Thu Sep 27 08:04:06 2012) (already matched)
Date template hits:
200 hit(s): MONTH Day Hour:Minute:Second
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second Year
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second
0 hit(s): Year/Month/Day Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
0 hit(s): Day/MONTH/Year:Hour:Minute:Second
0 hit(s): Month/Day/Year:Hour:Minute:Second
0 hit(s): Year-Month-Day Hour:Minute:Second
0 hit(s): Day-MONTH-Year Hour:Minute:Second[.Millisecond]
0 hit(s): Day-Month-Year Hour:Minute:Second
0 hit(s): TAI64N
0 hit(s): Epoch
0 hit(s): ISO 8601
0 hit(s): Hour:Minute:Second
0 hit(s):
Success, the total number of match is 60
However, look at the above section 'Running tests' which could contain important
information.
Questa è andata meglio!
3.6_ Aggiornamento di iRedMail.
Periodicamente Zhang pubblica gli aggiornamenti ad iRedMail.
La disponibilità di aggiornamenti è verificabile nella homepage del sito oppure nella homepage del pannello iRedAdmin.
Alla data corrente, l'ultimo aggiornamento è la versione iRedMail-0.8.2 bugfix release, pubblicata il 19 Settembre 2012. Tra i cambiamenti, c'è l'aggiornamento alla versione 0.8.1 di Rouncube, che io avevo già eseguito.
Per ogni aggiornamento, vengono anche pubblicate le istruzioni da seguire: Generalmente non è necessario scaricare nulla, si tratta di apportare le modifiche indicate ai file di configurazione e aggiungere o modificare delle tabelle sui database MySQL a seconda delle modifiche che Zhang ha implementato.
Il passaggio da un versione all'altra non è sempre banale ne scontato e l'unica procedura supportata ufficialmente prevede il passaggio attraverso tutte le release, da una versione rilasciata a quella immediatamente successiva. I tutorial e le istruzioni fornite sono solitamente molto precise e dettagliate quindi è sufficiente metterci un pò di attenzione.
A fagiolo, questa release fà eccezione: Vengono toccati un sacco di componenti e quindi la procedura di aggiornamento è più articolata del solito. Inoltre ci sono da scaricare le versioni aggiornate di iRedAPD e iRedAdmin. Le istruzioni sono comunque molto precise.