Protección para el usuario apache

Este pequeño tip en el user apache me lo encontre en varios servidores a los que «analice» :D, esta bien pensando por el admin que se lo ingenio pero se olvido de securizar otros servicios/usuarios.

Consultamos el directorio de apache en /etc/passwd y aparece algo como
apache:x:48:48:Apache:/var/www:/bin/false
Ai se puede apreciar que su directorio del usuario es /var/www
Me dirijo a ese directorio y creo un archivo llamado .bashrc y en el solo escribo exit
lo guardo y listo; lo mismo con los otros usuarios que se deseen bloquear

Instalar Varnish en CentOS 5 y CentOS 6

Varnish es un acelerador para HTTP que está causando furor en el mundo del hosting y en general en el mundo Linux. Varnish aparece como alternativa al poderoso Nginx, que durante mucho tiempo fue el rey en cuanto a la optimización a nivel de cache, proxy y balanceo de carga para los servicios web. Varnish además de hacer todo lo que hace Nginx con mejor rendimiento, también tiene algunas característiacs destacables, como por ejemplo:

  • Lenguaje propio VLC, que permite al usuario manipular varnish a su gusto.
  • Concebido desde el comiento para utilizarse en sistemas 64 bits
  • Soporte parcial de ESI
  • No necesita reiniciar para tomar los cambios de configuraciones

La forma de funcionar de Varnish es muy sencilla, pero a la vez efectiva:  se guarda la información de cada request en la memoria virtual y el S.O es quien decide qué es guardado y que es paginado al disco duro. Esto es muy útil para que no se cachee información mientras se mueve al disco duro por otras aplicaciones.

varnish

Cada request desde el cliente genera hilos independientes y una vez se llega al límite de hilos, las nuevas conexiones son puestas en cola y recién a medida que se liberan otras, estas nuevas comienzan a despacharse. Sólo si la cola de peticiones pendientes alcanza un gran límite recién serán descartadas.

Un escenario ideal es tener apache, lighttpd o nginx en el puerto 8080 y Varnish en el 80 para actuar como proxy delante del webserver. En fin, ahora que ya tenemos una ideal general de como funciona, vamos a la parte divertida:

Para instalar Varnish vamos a seguir los siguientes pasos:

Si bien este repo es para RHEL/CentOS 5.x, funciona perfecto en la versión CentOS 6.x.

Instalamos el repositorio:

 rpm --nosignature -i http://repo.varnish-cache.org/redhat/varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpm 

Instalamos Varnish

yum install varnish 

Lo configuramos para iniciar al arranque del sistema:

chkconfig varnish on 

Iniciamos Varnish

service varnish start 

Para comprobar si está funcionando, basta con tipear:

service varnish status

Finalmente, resta configurar el servicio desde dos archivos clave:

/etc/sysconfig/varnish, para configurar el servicio a nivel general

/etc/varnish/default.vlc, para configurar las directivas propias que afectarán a cada sitio web.

 

Más información en la web oficial de Varnish

No space left on device: mod_rewrite… Solución para servidor web Apache

servidor apache

servidor apache

En alguna ocasión me he topado con que al reiniciar Apache después de matar todos los procesos con killall -9 httpd el servidor Apache no quiere arrancar, Apache start [FALLA], dando en el log el error de más arriba. Se trata de que Apache no ha liberado recursos del sistema y debemos hacerlo nosotros. En concreto se trata de semáforos. Linux tiene dos comandos que me ayudan a hacer esto (ipcs e ipcrm). Por si acaso antes vamos a eliminar los procesos zoombie:

Ver procesos zoombie:

# ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’

Matar procesos zoombie (tardará un poco):

# kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’`

Este es el error al reiniciar o arrancar Apache:

[crit] (28) No space left on device: mod_rewrite: could not create rewrite_log_lock Configuration Failed

Solución:

Revisar los semáforos de Apache

# ipcs -s | grep apache

Eliminamos todos los semáforos de los procesos de Apache

# ipcs -s | grep apache | perl -e ‘while () { @a=split(/\s+/); print `ipcrm sem $a[1]`}’

Iniciar Apache

# service httpd start

Script en bash para cambiar el puerto de Apache en todos los dominios en Plesk

Si quereis cambiar el puerto en todos los vhost`s en Plesk, tendreis que cambiar el numero 80 (puerto Apache default de Plesk) dentro del archivo httpd.include de cada vhosts, y si teneis muchos vhosts en el servidor o servidores… como no tengais este pequeño script en bash, os podeis morir en el intento

#!/bin/bash
MY_FILEPATH="/var/www/vhosts"
MY_FILE="httpd.include"
MY_REPLACE=":81"
find $MY_FILEPATH  -name $MY_FILE -exec perl -p -i -e "s[:80][$MY_REPLACE]g" {} \;
service httpd restart"

Funciones a deshabilitar en php.ini – Tips para securizar php

Y es que, cada vez se ven mas destrozos a causa de las webs mal hechas (o poco actualizadas) en php . Que si postnuke, que si phpnuke, phpbb, mybb y un larguisimo etc. Ya que esto es un dolor de cabeza para cualquier sysadmin, algo a tener en cuenta es el deshabilitar ciertas funciones de php en el php.ini, y el que las quiera.. que las habilite en el .htaccess de su virtualhost bajo su responsabilidad, no? Empezamos:

Editamos fichero de configuración de PHP php.ini

#vi /etc/php.ini

buscamos la linea que contiene disable_functions. Posiblemente tenga un ; delante, que sirve para inutilizarla. Eliminamos el ; y dejamos la linea de esta forma:

disable_functions = system, exec, popen, passthru, shell_exec, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate

Asi, nos cargamos unas cuantas funciones peligrosas que a mas de uno le han dejado sin dormir.

Por otro lado, es de esperar el estar atentos a cosas como el safe_mode, allow_url_fopen y demas… pero creo que eso ya lo puse en otro post anterior 🙂