Configuración y Seguridad en PHP.INI

Lo primero es definir las funciones a no utilizar o no permitir su ejecución en nuestros servidores, mi recomendación es ser conservadores, no excederse ni limitar a los usuarios, pero si controlar la ejecución de las que consideramos potencialmente peligrosas o que simplemente no quermos mostrar, las siguientes sin mi recomendación:
disable_functions = popen,exec,system,passthru,proc_open,shell_exec,phpinfo,
disk_free_space,diskfreespace,leak,set_time_limit,
show_source,pclose,proc_nice,proc_terminate,
proc_get_status,proc_close,pfsockopen

También está evitar la carga dinámica de módulos (más información: http://www.gonullyourself.org/ezines/phrack/62/p62-0x0a_Attacking_Apache_Modules.txt ) con:
enable_dl = Off
Luego, apagar register_globals y no permitir la creación de variables al vuelo entre otras cosas con:
register_globals = Off
Otras funciones un tanto incomodas o innecesarias como expose_php (ej ?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 )
expose_php = Off
Setear open_basedir para minimizar el acceso al sistema de ficheros, si usas apache con vhost como es mi caso, el setear open_basedir en php.ini no será de tanta utilidad como se esperaría, falta hacerlo en cada vhost, una ayuda sería esta:
<VirtualHost 127.0.0.1:80>
ServerAdmin webmaster@dominio.com
DocumentRoot "/www/htdocs"
ServerName midominio.com
ServerAlias www.midominio.com
...
<Directory "/www/htdocs">
Options -Indexes FollowSymLinks -ExecCGI
AllowOverride All
DirectoryIndex index.php index.html
Order allow,deny
Allow from all
<IfModule mod_php5.c>
php_admin_value open_basedir "/www/htdocs:/tmp"
</IfModule>
</Directory>
</VirtualHost>

o simplemente:
open_basedir = /www/htdocs:/tmp
Definitivamente desactivar allow_url_fopen, puede parecer una buena idea en principio, pero no todos controlarán lo que pasa por sus urls (ejem: http://midominio.com/?configile.php=http://dominio-hack.ru/config-spam.php)
El resto parece carpintería, pero a tener en cuenta, apagar
magic_quotes_gpc = Off
output_buffering = Off

Y por último pero no menos importante, setear variables como:
max_execution_time =
max_input_time =
memory_limit =
post_max_size =
upload_max_filesize =

MicroOptimizaciones Apache en CentOS

Lectura recomendada: http://httpd.apache.org/docs/trunk/mod/core.html#rlimitcpu
Luego de eso agregar a tu archivo httpd ( /etc/httpd/conf/httpd.conf)
#Limitando el tiempo de CPU
RLimitCPU 15 20
#Limitando la memoria- de 50 a 82MB
RLimitMEM 52428800 85983232
#Limitando el numero de procesos
RLimitNPROC 8 12

Apache KeepAlive
La funcionalidad de Apache KeepAlive permite (presisamente lo que dice su nombre) mantener abierta la conexión TCP entre un cliente y el servidor, lo que lleva a que se den múltiples peticiones en la misma conexión. Esto puede reducir los tiempos de carga de una página en particular en las páginas web con gran cantidad de imágenes, ya que elimina la sobrecarga de tener varias conexiones abiertas. En tu archivo de configuración de httpd busca las entradas de KeepAlive, y asegurarse de que están habilitados, lo siguiente es adaptarlo a tus necesidades, ej.:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 8

lo siguiente sería deshabilitar el HTTP TRACE method (por temas de seguridad) más info en: http://publib.boulder.ibm.com/httpserv/ihsdiag/http_trace.html
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]

La idea es no limitarnos solo a apache, sino optimizar además algunos detalles de php, en nuestro php.ini setear correctamente los valores (según requerimientos) estos tiempos han funcionado bien para mi:
max_execution_time = 60     ; Maximum execution time of each script, in seconds
max_input_time = 120    ; Maximum amount of time each script may spend parsing request data
memory_limit = 80M      ; Maximum amount of memory a script may consume

Instalación de memcached en CentOS

#Descarga el archivo fuente desde: http://www.memcached.org/
wget -c http://memcached.googlecode.com/files/memcached-1.4.10.tar.gz
tar -xzvf memcached-1.4.10.tar.gz cd memcached-1.4.10
#Instalar prerequisitos:
yum install libevent libevent-devel -y
# Configurar LDFLAGS='-Wl,--rpath /usr/local/lib' ./configure --prefix=/usr/local
#Compilar
make
#Instalar
make install
# prueba que esté funcinando:
memcached -u root -d && ps aux | grep memcached
echo si todo sale bien, mata el proceso, con pkill memcached
Continuar leyendo “Instalación de memcached en CentOS”

Apache ITK en Centos 5

A continuación una guía para la instalación de mpm-itk en CentOS 5.
Apache es aún el servior Web de mayor uso en línea, sirve miles de aplicaciones y todas ellas con diversas configuraciones y requerimientos, además es utilizado en una inmenza mayoría de servidores compartidos o hosting y a pesar de las excelentes caracteristicas de apache como servidor Web, en condiciones de su uso compartido (siendo hosting el caso más popular) plantea diversos problemas, el principal es relaiconado a los permisos de acceso a ficheros, es decir de seguridad y es justamente donde itk entra a jugar.
ITK es un módulo de multiprocesamiento más para apache que agrega una nueva caracteristicas, la posibilidad de ejecutar apache con el userid de un usuario diferente por cada virtualhost, además permite cambiar el valor nice del proceso que corresponde a dicho vhost.
Continuar leyendo “Apache ITK en Centos 5”

Implementación de servidores con Linux (CentOS)

Desde alcancelibre.org me he descargado hace ya unas semanas un interesante libro que muestra de forma practica como montar un servidor con CentOS.
Altamente recomendable si planeas montar/gestionar un server. link de descarga:  http://www.alcancelibre.org/filemgmt/index.php?id=1
OT: Lo único es que yo no llamaría a toda las Distros GNU, y me ha molestado un tris verlo, ya que no todas distros llevan el GNU por delante o deciden ponerlo en su nombre y el poner el nombre de las licencias en las distros está como rallado además de ser feo y atrevido, imaginate algo como:
{Apache Licence,GNU,Artistic Licence,BSD,MIT Licence,Mozilla Licence,ETC….}/Linux.
Por demás se trata de una lectura recomendable.

Preparando un servidor exclusivo para trabajo con Joomla!

Nuestro objetivo:

Contar con un servidor Web listo para trabajar con Joomla y WordPress, que aproveche al máximo los recursos físicos con que disponemos y pueda entregar comodidad a la hora de desarrollar directamente sobre el. Buscamos evitar los errores comunes que se producen en los hosting y entregar un performance adecuado a nuestras aplicaciones.
Nota: Debe quedar claro que al conseguir estos objetivos contaremos con un servidor listo para el trabajo con la mayoría de cms y aplicaciones php disponibles no solo Joomla y WordPress. Continuar leyendo “Preparando un servidor exclusivo para trabajo con Joomla!”