Puede darse el caso de que al seleccionar "cron del sistema" en la configuración de cron, veamos que no ejecuta lo configurado en el crontab.
En mi caso aparecía esta línea de error en el log de owncloud:
{"reqId":"7qmGW1I+Gcvxg36z+5RO","remoteAddr":"","app":"cron","message":"Missing memcache class \\OC\\Memcache\\APCu for local cache","level":4,"time":"2016-01-14T19:00:01+01:00"}
El caso es que tenía configurado en el config.php de owncloud el parámetro:
'memcache.local' => '\\OC\\Memcache\\APCu',
Y faltaba configurar en el fichero de configuración de php, /etc/php.ini/apcu.ini el parámetro:
apc.enable_cli=1
También hay que crear el fichero del crontab para el usuario apache que es mi caso:
crontab -u apache -e
y añadir la siguiente línea:
*/15 * * * * php -f /var/www/html/owncloud/cron.php > /dev/null 2>&1
Con esto se ejecutará cron.php cada 15 minutos.
jueves, 14 de enero de 2016
viernes, 2 de octubre de 2015
owncloud pdf sin imágenes
El problema se plantea cuando al abrir un pdf desde owncloud utilizando el pdfviewer (app que tenemos activada por defecto) vemos que las imágenes insertadas en el pdf (jpg) aparecen como marcos en blanco. Esto hasta la versión 8.1 se resuelve editando el fichero /var/www/htdocs/owncloud/apps/files_pdfviewer/tests/bootstrap.php y modificándolo añadiendo las líneas en rojo. Con esto se soluciona para chrome, para firefox no.
global $RUNTIME_NOAPPS;
$RUNTIME_NOAPPS = true;
if (!defined('PHPUNIT_RUN')) {
define('PHPUNIT_RUN', 1);
}
require_once __DIR__.'/../../../lib/base.php';
\OC::$loader->addValidRoot(\OC::$SERVERROOT . '/tests');
+\OC_App::loadApp('files_pdfviewer');
if(!class_exists('PHPUnit_Framework_TestCase')) {
require_once('PHPUnit/Autoload.php');
}
OC_Hook::clear();
OC_Log::$enabled = false;
Con la versión 8.1.3 me descargué el pdfviewer de aquí ya que con el que viene con la actualización no me funcionaba el chrome tampoco. Con esta si que funciona el chrome, se ven las imágenes jpg de los pdf.
Para el firefox de momento creo que no hay solución, solo deshabilitar el csp en la configuración about:config buscar security.csp.enabled y ponerlo a false.
Fuentes:
https://github.com/owncloud/files_pdfviewer/pull/65
https://github.com/owncloud/files_pdfviewer/issues/60
global $RUNTIME_NOAPPS;
$RUNTIME_NOAPPS = true;
if (!defined('PHPUNIT_RUN')) {
define('PHPUNIT_RUN', 1);
}
require_once __DIR__.'/../../../lib/base.php';
\OC::$loader->addValidRoot(\OC::$SERVERROOT . '/tests');
+\OC_App::loadApp('files_pdfviewer');
if(!class_exists('PHPUnit_Framework_TestCase')) {
require_once('PHPUnit/Autoload.php');
}
OC_Hook::clear();
OC_Log::$enabled = false;
Con la versión 8.1.3 me descargué el pdfviewer de aquí ya que con el que viene con la actualización no me funcionaba el chrome tampoco. Con esta si que funciona el chrome, se ven las imágenes jpg de los pdf.
Para el firefox de momento creo que no hay solución, solo deshabilitar el csp en la configuración about:config buscar security.csp.enabled y ponerlo a false.
Fuentes:
https://github.com/owncloud/files_pdfviewer/pull/65
https://github.com/owncloud/files_pdfviewer/issues/60
jueves, 10 de septiembre de 2015
iptables: Banear ips automaticamente con lista
Esta es una solución sencilla para tener una lista de ips baneadas que podemos administrar fácilmente.
Hay soluciones más complejas y avanzadas como esta. Yo he optado por la más simple ya que de momento el volumen de ataques no es demasiado alto.
Esta solución la he sacado de este enlace el script esta explicado muy bien. Tiene algún fallito. falta declarar la variable TEMP y falta poner el parametro "-f" en el comando cp de la función unban. Este es el script tal y como yo lo estoy utilizando.
Creamos la carpeta /etc/myOwnFirewall y el script myOwnFirewall dentro de ella
El contenido del script sería el siguiente
En centos y redhat es algo distinto a debian el funcionamiento de iptables los cambios en las reglas no se guardan a no ser que lo forcemos con "service iptables save".
Yo no me he complicado mucho y ejecuto el script con el parámetro start en el inicio del sistema en el rc.local y borro el fichero .lock en el shutdown. He aprovechado el script de iptables en el init.d y he añadido la línea rm -f /etc/myOwnFirewall/.lock en la función stop(). De este modo cuando se detiene el servicio iptables borra el fichero .lock que le sirve al script para saber si el baneado de ips está activo.
El funcionamiento del script está muy bien explicado en este enlace
Hay soluciones más complejas y avanzadas como esta. Yo he optado por la más simple ya que de momento el volumen de ataques no es demasiado alto.
Esta solución la he sacado de este enlace el script esta explicado muy bien. Tiene algún fallito. falta declarar la variable TEMP y falta poner el parametro "-f" en el comando cp de la función unban. Este es el script tal y como yo lo estoy utilizando.
Creamos la carpeta /etc/myOwnFirewall y el script myOwnFirewall dentro de ella
mkdir /etc/myOwnFirewall
vi /etc/myOwnFirewall/myOwnFirewall
vi /etc/myOwnFirewall/myOwnFirewall
El contenido del script sería el siguiente
#!/bin/bash
# myOwnFirewall v0.1
#
# Script para banear IPs
#
# Author: Rolando Caldas
# http://rolandocaldas.com
#
# https://github.com/rolando-caldas/myOwnFirewall
BANNED_IPS="/etc/myOwnFirewall/banList.txt"
LOCK="/etc/myOwnFirewall/.lock"
TEMP="/etc/myOwnFirewall/temp"
function banIP {
if [ -f ${LOCK} ]
then
if [ $# -eq 0 ]
then
echo "You must enter an ip address"
else
ip=$1
exists=false
for i in `cat $BANNED_IPS`; do
if [ $i = $ip ]
then
exists=true
fi
done
if [ $exists = false ]
then
echo $ip >> $BANNED_IPS
iptables -I INPUT -s $ip -j DROP
iptables -I OUTPUT -s $ip -j DROP
echo "IP ${ip} banned"
else
echo "IP ${ip} already in the list"
fi
fi
else
echo "myOwnFirewall is not running"
fi
}
function restartScript {
stopScript
startScript
}
function showHelp {
echo "Usage: myOwnFirewall {start|stop|restart}"
}
function startScript {
if [ -f ${LOCK} ]
then
echo "myOwnFirewall is already running"
exit
else
` > ${LOCK}`
for i in `cat $BANNED_IPS`; do
iptables -I INPUT -s $i -j DROP
iptables -I OUTPUT -s $i -j DROP
done
echo "myOwnFirewall started"
fi
}
function stopScript {
if [ -f ${LOCK} ]
then
for i in `cat $BANNED_IPS`; do
iptables -D INPUT -s $i -j DROP
iptables -D OUTPUT -s $i -j DROP
done
rm ${LOCK}
echo "myOwnFirewall stopped"
else
echo "myOwnFirewall is not running"
fi
}
function unbanIP {
if [ -f ${LOCK} ]
then
if [ $# -eq 0 ]
then
echo "You must enter an ip address*"
else
ip=$1
exists=false
for i in `cat $BANNED_IPS`; do
if [ $i = $ip ]
then
exists=true
else
echo $i >> $TEMP
fi
done
if [ $exists = false ]
then
echo "IP ${ip} doesn't in the list"
else
cp -f $TEMP $BANNED_IPS && rm $TEMP
iptables -D INPUT -s $ip -j DROP
iptables -D OUTPUT -s $ip -j DROP
echo "IP ${ip} unbanned"
fi
fi
else
echo "myOwnFirewall is not running"
fi
}
case "$1" in
ban)
banIP $2
exit
;;
restart)
restartScript
exit
;;
start)
startScript
exit
;;
stop)
stopScript
exit
;;
unban)
unbanIP $2
exit
;;
*)
showHelp
exit
;;
esac
# myOwnFirewall v0.1
#
# Script para banear IPs
#
# Author: Rolando Caldas
# http://rolandocaldas.com
#
# https://github.com/rolando-caldas/myOwnFirewall
BANNED_IPS="/etc/myOwnFirewall/banList.txt"
LOCK="/etc/myOwnFirewall/.lock"
TEMP="/etc/myOwnFirewall/temp"
function banIP {
if [ -f ${LOCK} ]
then
if [ $# -eq 0 ]
then
echo "You must enter an ip address"
else
ip=$1
exists=false
for i in `cat $BANNED_IPS`; do
if [ $i = $ip ]
then
exists=true
fi
done
if [ $exists = false ]
then
echo $ip >> $BANNED_IPS
iptables -I INPUT -s $ip -j DROP
iptables -I OUTPUT -s $ip -j DROP
echo "IP ${ip} banned"
else
echo "IP ${ip} already in the list"
fi
fi
else
echo "myOwnFirewall is not running"
fi
}
function restartScript {
stopScript
startScript
}
function showHelp {
echo "Usage: myOwnFirewall {start|stop|restart}"
}
function startScript {
if [ -f ${LOCK} ]
then
echo "myOwnFirewall is already running"
exit
else
` > ${LOCK}`
for i in `cat $BANNED_IPS`; do
iptables -I INPUT -s $i -j DROP
iptables -I OUTPUT -s $i -j DROP
done
echo "myOwnFirewall started"
fi
}
function stopScript {
if [ -f ${LOCK} ]
then
for i in `cat $BANNED_IPS`; do
iptables -D INPUT -s $i -j DROP
iptables -D OUTPUT -s $i -j DROP
done
rm ${LOCK}
echo "myOwnFirewall stopped"
else
echo "myOwnFirewall is not running"
fi
}
function unbanIP {
if [ -f ${LOCK} ]
then
if [ $# -eq 0 ]
then
echo "You must enter an ip address*"
else
ip=$1
exists=false
for i in `cat $BANNED_IPS`; do
if [ $i = $ip ]
then
exists=true
else
echo $i >> $TEMP
fi
done
if [ $exists = false ]
then
echo "IP ${ip} doesn't in the list"
else
cp -f $TEMP $BANNED_IPS && rm $TEMP
iptables -D INPUT -s $ip -j DROP
iptables -D OUTPUT -s $ip -j DROP
echo "IP ${ip} unbanned"
fi
fi
else
echo "myOwnFirewall is not running"
fi
}
case "$1" in
ban)
banIP $2
exit
;;
restart)
restartScript
exit
;;
start)
startScript
exit
;;
stop)
stopScript
exit
;;
unban)
unbanIP $2
exit
;;
*)
showHelp
exit
;;
esac
En centos y redhat es algo distinto a debian el funcionamiento de iptables los cambios en las reglas no se guardan a no ser que lo forcemos con "service iptables save".
Yo no me he complicado mucho y ejecuto el script con el parámetro start en el inicio del sistema en el rc.local y borro el fichero .lock en el shutdown. He aprovechado el script de iptables en el init.d y he añadido la línea rm -f /etc/myOwnFirewall/.lock en la función stop(). De este modo cuando se detiene el servicio iptables borra el fichero .lock que le sirve al script para saber si el baneado de ips está activo.
El funcionamiento del script está muy bien explicado en este enlace
jueves, 3 de septiembre de 2015
Apache: baneo de ips por códigos de error y palabras clave.
Este "jail" es sencillo y efectivo permite banear las ips en el momento aparece en el log de accesos de apache alguno de los códigos de error que especificamos en el "failregex" del filtro.
Es necesario incluir en "ignoreregex" las palabras clave de aquellos falsos ataques, errores que provoca por ejemplo owncloud con las subidas de instantáneas (cuando tenemos sincronizado nuestro android para que suba las fotos automáticamente).
Añadimos las siguientes líneas al archivo de conguración jail.local
maxretry: Especifica cuantos intentos vamos a dejar antes de banear la ip.
Ahora creamos el archivo de filtrado en /etc/fail2ban/filters.d/apache-misc.conf y dentro de el colocamos el siguiente contenido:
Todas estas palabras clave son a modo de ejemplo. Son las que podría un atacante intentar localizar.
Lo que si me ha funcionado son las dos últimas líneas para evitar los falsos errores 404 que provocaba owncloud.
Reiniciamos fail2ban
Fuente:http://www.linux-magazine.com/Online/Features/Intrusion-Detection-with-fail2ban
Es necesario incluir en "ignoreregex" las palabras clave de aquellos falsos ataques, errores que provoca por ejemplo owncloud con las subidas de instantáneas (cuando tenemos sincronizado nuestro android para que suba las fotos automáticamente).
Añadimos las siguientes líneas al archivo de conguración jail.local
[apache-misc]
enabled = true
filter = apache-misc
action = iptables-multiport[name=apache-misc,port="80,443"]
sendmail-whois[name=apache-misc, dest=alertas@micorreo.com, sender=alertas@micorreo.com, sendername="Fail2Ban"]
logpath = /opt/lampp/logs/access_log
maxretry = 1
enabled = true
filter = apache-misc
action = iptables-multiport[name=apache-misc,port="80,443"]
sendmail-whois[name=apache-misc, dest=alertas@micorreo.com, sender=alertas@micorreo.com, sendername="Fail2Ban"]
logpath = /opt/lampp/logs/access_log
maxretry = 1
maxretry: Especifica cuantos intentos vamos a dejar antes de banear la ip.
Ahora creamos el archivo de filtrado en /etc/fail2ban/filters.d/apache-misc.conf y dentro de el colocamos el siguiente contenido:
[Definition]
failregex =.*"[A-Z]* /(cms|user|muieblackcat|db|cpcommerce|wp-login|joomla|awstatstotals|wp-content|wp-includes|pma|phpmyadmin|myadmin|mysql|mysqladmin|sqladmin|mypma|admin|xampp|mysqldb|pmadb|phpmyadmin1|phpmyadmin2).*"
.*\" (502|500|417|416|415|414|413|412|404|405|403|401|400)
ignoreregex = .*\"GET \/.*(ciruela|press|mailto|domestic|word|externalShares).*
.*\"HEAD \/.*SubidasInstant.*
.*\"GET \/.*SubidasInstant.*
failregex =
ignoreregex = .*\"GET \/.*(ciruela|press|mailto|domestic|word|externalShares).*
.*\"HEAD \/.*SubidasInstant.*
.*\"GET \/.*SubidasInstant.*
Todas estas palabras clave son a modo de ejemplo. Son las que podría un atacante intentar localizar.
Lo que si me ha funcionado son las dos últimas líneas para evitar los falsos errores 404 que provocaba owncloud.
Reiniciamos fail2ban
service fail2ban restart
Fuente:http://www.linux-magazine.com/Online/Features/Intrusion-Detection-with-fail2ban
Apache: mitigando ataque DOS con fail2ban
Básicamente configurando de este modo fail2ban conseguimos parar a un atacante que haga exageradas peticiones GET o POST que podrían dejar frito nuestro servidor.
Añadimos las siguientes líneas al archivo de conguración jail.local
maxretry: Especifica cuantos intentos vamos a dejar antes de banear la ip.
findtime: Es el período de tiempo en segundos que estamos contando los “reintentos” (300 segundos = 5 minutos).
bantime: Es el tiempo que debemos esperar para liberar las peticiones, osea el tiempo que la IP estará baneada, en este caso se trata de 5 minutos.
Ahora creamos el archivo de filtrado en /etc/fail2ban/filters.d/http-dos.conf y dentro de el colocamos el siguiente contenido:
Reiniciamos fail2ban
Una manera sencilla de comprobar el funcionamiento de nuestra configuración anterior es utilizando ab (Apache Benchmark - parte del paquete apache2-utils) , así:
Fuente:http://rootear.com/seguridad/mitigar-ataques-ddos-fail2ban
[http-dos]
enabled = true
filter = http-dos
action = iptables-multiport[name=http-dos,port="80,443"]
sendmail-whois[name=http-dos, dest=alertas@micorreo.com, sender=alertas@micorreo.com, sendername="Fail2Ban"]
logpath = /opt/lampp/logs/access_log
maxretry = 300
findtime = 300
bantime = 300
enabled = true
filter = http-dos
action = iptables-multiport[name=http-dos,port="80,443"]
sendmail-whois[name=http-dos, dest=alertas@micorreo.com, sender=alertas@micorreo.com, sendername="Fail2Ban"]
logpath = /opt/lampp/logs/access_log
maxretry = 300
findtime = 300
bantime = 300
maxretry: Especifica cuantos intentos vamos a dejar antes de banear la ip.
findtime: Es el período de tiempo en segundos que estamos contando los “reintentos” (300 segundos = 5 minutos).
bantime: Es el tiempo que debemos esperar para liberar las peticiones, osea el tiempo que la IP estará baneada, en este caso se trata de 5 minutos.
Ahora creamos el archivo de filtrado en /etc/fail2ban/filters.d/http-dos.conf y dentro de el colocamos el siguiente contenido:
[Definition]
failregex =.*\"(GET|POST).*
ignoreregex =
failregex =
ignoreregex =
Reiniciamos fail2ban
service fail2ban restart
Una manera sencilla de comprobar el funcionamiento de nuestra configuración anterior es utilizando ab (Apache Benchmark - parte del paquete apache2-utils) , así:
ab -n 500 -c 10 http://tu-sitio-web-punto-com:80/
Fuente:http://rootear.com/seguridad/mitigar-ataques-ddos-fail2ban
miércoles, 12 de agosto de 2015
Owncloud - The "Strict-Transport-Security" HTTP header is not configured . . .
Editamos httpd.conf. Con este Header el servidor web informa a los navegadores que nunca cargue una página utilizando http. Deben cagar páginas solo como https
Para redireccionar los accesos http a https
Fuente: https://doc.owncloud.org/server/8.1/admin_manual/configuration_server/harden_server.html
Header always add Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
Para redireccionar los accesos http a https
<VirtualHost *:80>
ServerName localhost
Redirect permanent / https://mi.url/
</VirtualHost>,
ServerName localhost
Redirect permanent / https://mi.url/
</VirtualHost>,
Fuente: https://doc.owncloud.org/server/8.1/admin_manual/configuration_server/harden_server.html
martes, 11 de agosto de 2015
Owncloud - No memory cache has been configured. To enhance your performance please configure a memcache if available
En este enlace esta explicado con detalle. En mi caso tenía instalado php 5.5 y añadí la siguiente línea en el el config.php de owncloud
'memcache.local' => '\OC\Memcache\APCu',
Suscribirse a:
Entradas (Atom)