Instalación KLOXO 64bits sobre Centos 5.5 – KLOXO 64bits – IPTABLES – WEBMIN – CSF & LFD – MOD_EVASIVE – OCULTAR VERSIONES – TRUCOS

Tutorial – Instalación KLOXO 64bits sobre Centos 5.5 – KLOXO 64bits – IPTABLES – WEBMIN – CSF & LFD – MOD_EVASIVE – OCULTAR VERSIONES – TRUCOS

He creado un tutorial que nos indica paso a paso cómo montar y configurar un servidor con los servicios más generales, (apache, php, mysql, phpmyadmin, mail, webmail … etc …) de forma GRATUITA, es decir, con coste 0.

Además vamos a instalar un panel de control gratuito que nos va a facilitar las tareas de configuración, administración y nos va a otorgar la opción de reseller, es decir de vendedor. Y por si fuera poco se podría escalar fácilmente con más máquinas.

Bueno, antes que nada os aviso, no tengo apenas experiencia (2 años trasteando) sobre gestionar servidores por lo que la guía pretende ser orientativa.
Comparto con ustedes la información que he ido recopilando desde que ando metido en esto.

Vamos a utilizar la distribución de linux Centos 5.5 de 64 bits como base para el servidor, doy por hecho que ya tenemos un servidor, lo hemos particionado y hemos instalado el sistema operativo (¿No lo tienes?, visita la guía de instalación ). Sobre ella vamos a montar un panel de control llamado Kloxo para facilitar las tareas de gestión y venta a clientes, WebAdmin para facilitar las tareas de administración de nuestro servidor, para servir nuestras páginas web Apache (Apache Web Server) aunque podremos alternar su uso en un par de clicks con Lighttpd, como base de datos vamos a utilizar MySQL, para servir contenido dinámico vamos a instalar PHP, para gestionar la base de datos online PHPMyAdmin, para el envío y recepción de e-mails utilizaremos Qmail (Qmail Mail Server) y Courier Pop/Imap Server , como servidor dns utilizaremos Bind aunque podremos alternarlo con DjbDns. Para brindar al servidor de seguridad vamos a actualizar el poderoso cortafuegos IpTables además instalaremos CSF & LFD (firewall-antiddos) y para conectarnos internamente el servidor utilizaremos SSH con llaves de seguridad.

Seguro que me dejo muchas cosas, así que te insto a que ojees el índice y lo veas por ti mismo 😀

Dejando a un lado la instalación concreta de KLOXO, en temas de seguridad el proceso es ampliable a cualquier tipo de panel de administración.
Recomiendo hacer los pasos en orden.
Instalarlo todo cuesta aproximadamente ~30 minutos 😛
Se aceptan de buen grado sugerencias, consejos y correcciones 😀
Por supuesto si creen que falta algo para hacerlo todavía más seguro me encantaría saberlo para ponerme con ello.
Poco a poco intentaré ir mejorando la guía (espero que con su ayuda)

OpcionalActualizar repositorios Centos 5.5 64 bits

1º – Instalación KLOXO 64 bits
2º – Solucionar problemas de KLOXO en entornos de 64bits
– Solucionar : Carga incorrectamente las librerías.
– Solucionar : Carga incorrectamente IONCUBE
– Solucionar : Carga incorrectamente ZEN
3º – Instalar/Actualizar IPTABLES
4º – Instalar WEBMIN (panel administrador de servidor web)
5º – Instalar y configurar CSF & LFD (firewall-antiddos)
– Añadir CSF & LFD a WEBMIN
– Solucionar : MySql load data
– Solucionar : ATD activo al reinicio
– Solucionar : ANACRON activo
– Solucionar : Ssh UseDSN no
– Solucionar : SAFECHAINUPDATE
– CSF & LFD Solucionar : DNS recursion restrictions
– CSF & LFD Solucionar : Check /var/tmp is mounted as a filesystem
– CSF & LFD Solucionar : Check /tmp is mounted as a filesystem
– CSF & LFD Solucionar : Check /dev/shm is mounted noexec,nosuid
– CSF & LFD Solucionar : Check /tmp is mounted as a filesystem
– CSF & LFD Solucionar : Check SSH PasswordAuthentication
6º – Generar clave/llave de conexión para SSH desde pc
7º – Ocultar versiones de programas
– Ocultar versión Apache
– Ocultar versión PHP
– Ocultar versión BIND
– Ocultar versión ProFTPD
Instalar y configurar mod_evasive
– Parámetros de mod_evasive
– ¿Fallo de programación en mod_evasive?

– Otras cositas
– Consejo sobre Kloxo, eliminar usuarios MySQL no necesarios y/o remotos
– Codificación de idioma Apache

Espero que el tutorial les sirva de ayuda para montar o configurar su servidor.

Sus comentarios serán bien recibidos 😀

Capturar salidas y errores a partir de stderr y stdout

Vamos a tratar de explicar el control sobre el flujo de datos STDERR y STDOUT.

STDOUT representa el flujo de salida de comandos, ficheros … etc …

STDERR representa el flujo de salida de errores.

Básicamente, STDERR es lo mismo que STDOUT, la diferencia es que contiene posibles errores que el programa reporta por pantalla al usuario.

En el siguiente ejemplo vamos a utilizar un error producido por «cat» (lee ficheros) y lo vamos a guardar en un fichero utilizando «>» (STDOUT)

$cat mi_fichero.txt > mi_log.log

En este caso, mi_fichero.txt no existe. Dado que «>» es utilizado sólo para STDOUT, el fichero mi_log.log será creado, pero está vacío.
En cambio, podremos ver en la consola el error devuelto por STDERR:

cat: mi_fichero.txt: No such file or directory

Si queremos capturar este mensaje de error en un fichero mi_log.err tendremos que añadir el número «2» a «>» (STDERR):

cat mi_fichero.txt 2> mi_log.err

Aquí le estamos indicando a Bash que capture el descriptor número 2 (STDERR) y lo envié al fichero. Recordemos que STDIN es 0 y STDOUT es 1.

De igual manera se puede mezclar STDOUT y STDERR. La utilidad de esto la encontramos cuando queremos ejecutar algún programa de forma automática (utilizando cron, por ejemplo) o desde un script y deseamos capturar toda la información posible en algún fichero al que podamos acceder posteriormente.

Entonces, el tema es bastante sencillo. Vamos a hacer un «tail» (lee el final de un fichero) de dos ficheros «/var/log/dmesg» y «mi_fichero.txt» y todas las salidas vamos a enviarlas a dos ficheros mi_log.out y mi_log.err.

$tail /var/log/dmesg mi_fichero.txt >mi_log.out 2> mi_log.err

dmesg sabemos que existe, por lo tanto las ultimas líneas devueltas por «tail» serán capturadas por el STDOUT al fichero mi_log.out. En cambio el error devuelto al no encontrar el fichero mi_log.txt será enviado por STDERR a mi_log.err:

tail: cannot open mi_fichero.txt for reading: No such file or directory

También podemos enviar las dos salidas a un único fichero e incluso encauzarlas como STDIN para otro programa.
Para capturar las dos salidas vamos a utilizar «2>&1» lo cual vamos a ver en muchos scripts.

$tail /var/log/dmesg mi_fichero.txt > mi_log.log 2>&1

La mejor manera de silenciar a un programa para que no perturbe la ejecución de nuestro script es enviar todas las salidas a /dev/null.

$tail /var/log/dmesg mi_fichero.txt > /dev/null 2>&1

Si nuestro script necesita ejecutar otro programa y necesita tan sólo de su «exit status», el usuario que ejecuta el script no verá que programas estamos utilizando y no recibirá los posibles errores que de otra manera aparecerían en pantalla.
En segundo lugar, podemos realizar otro tipo de comprobaciones dirigiendo STDERR y STDOUT como STDIN de otro programa.
Supongamos que creamos un script que sólo funciona con OpenSSH. Para comprobar que la versión que está instalada en el sistema es OpenSSH podemos utilizar lo siguiente:

$/usr/bin/ssh -v 2>&1 | grep -q OpenSSH ; echo $?
0

Si nuestro cliente de SSH no fuera el OpenSSH obtendriamos lo siguiente:

$/usr/bin/ssh -v 2>&1 | grep -q OpenSSH ; echo $?
1

En el caso de que nuestra versión de «grep» no tenga la opción «q quiet» volvemos a utilizar /dev/null

ssh -v 2>&1 | grep OpenSSH >/dev/null 2>&1 ; echo $?
0

Donde $? es una variable que contiene el «exit status» del último comando ejecutado, en este ejemplo es grep.

Basado en : http://monocaffe.blogspot.com/

Realizar backup a MySql desde PHP

Voy a explicar como realizar un backup o copia de seguridad de tu base de datos MySql desde PHP.

//servidor MySql
$C_SERVER='tu_servidor';
//base de datos
$C_BASE_DATOS='tu_base_de_datos';
//usuario y contraseña de la base de datos mysql
$C_USUARIO='tu_usuario';
$C_CONTRASENA='tu_contraseña';
//ruta archivo de salida 
//(el nombre lo componemos con Y_m_d_H_i_s para que sea diferente en cada backup)
$C_RUTA_ARCHIVO = '/ruta_hasta/backups/backup_'.date("Y_m_d_H_i_s").'.sql';
//si vamos a comprimirlo
$C_COMPRIMIR_MYSQL='true';


//comando
$command = "mysqldump --opt -h ".$C_SERVER." ".$C_BASE_DATOS." -u ".$C_USUARIO." -p".$C_CONTRASENA.
     " -r \"".$C_RUTA_ARCHIVO."\" 2>&1"; 
 
//ejecutamos
system($command);

//comprimimos
if ($C_COMPRIMIR_MYSQL == 'true') {
 system('bzip2 "'.$C_RUTA_ARCHIVO.'"');
}


*Supongo que el tutorial es aplicable a cualquier tipo de base de datos siempre y cuando tenga una consola y comandos correspondientes, sería cuestión de adaptar el código.

Mantenimiento MySql en PHP aplicable a otras bases de datos

Bueno, una manera bastante sencilla de realizar un mantenimiento de una base de datos MySql básico sería algo así :

* Conocer como crear el conector $link.
Te dejo el tutorial por si te interesa: Tutorial Conexión a MySql desde PHP

//conectamos
mysql_conecta($link);
//listamos tablas
$tablas=mysql_query("SHOW TABLES FROM box",$link);
//recorremos todas las tablas
while($ft=mysql_fetch_array($tablas)){
//optimizamos las tablas
mysql_query("OPTIMIZE TABLE ".$ft[0],$link);
//otras tareas ...
}

Crear una tarea programa en el cron de sistemas UNIX

En sistemas tipo UNIX, como Linux, FreeBSD o Darwin (Mac OS X), es posible utilizar tareas cron para realizar tareas periódicas. Pasar el antivirus, realizar copias de seguridad, optimizar bases de datos … etc … etc …

Qué hacer

Nota: La sintaxis puede diferir según la versión de cron en su sistema.

  1. Inicie una sesión shell como root y escriba el siguiente comando para iniciar un editor tipo VI:
    crontab -u root -e
  2. Pulse ‘i‘ para insertar texto.
  3. Una tarea cron requiere cinco entradas indicando la fecha y hora, y el nombre y ruta del programa a ejecutar. Utilice un espacio o una tabulación entre cada entrada:

    minuto(0-59) hora(0-23) día_del_mes(1-31) mes(1-12) día_de_la_semana (0-7) (parámetro opcional que indica la ruta del interprete del script a ejecutar) /ruta/elscript.loquesea

    Puede utilizar el asterisco «*» como carácter comodín. Así «0 10 * * * /ruta/script.sh» equivale a «0 10 1-31 1-12 0-7 /ruta/script.sh«. En este caso, el script se ejecutará a las diez de la mañana todos los días.

    Por ejemplo, para realizar un escaneado con Sophos Anti-Virus en el que se borren los elementos infectados de forma automática a las 8 de la noche en Linux (en Darwin no es necesario indicar la ruta a sweep), utilice:
    0 20 * * * /usr/local/bin/sweep /directorio/subdirectorio -remove

    Es posible utilizar nombres, en inglés, para indicar el mes o el día de la semana. Para el domingo puede utilizar Sunday, 0 ó 7.

  4. Una vez especificada la tarea, pulse ‘Esc’ para dejar el modo de inserción.
  5. Pulse ‘ZZ‘ (‘z’ mayúsculas dos veces). Se mostrará un mensaje del tipo:
    /crontab.zUcAAFwPVp: 1 lines, 24 characters
    crontab: installing new crontab

La tarea ya se ha guardado y se enviará un mensaje de confirmación a root.

Para más información sobre cron o crontab, lea las páginas man correspondientes. Por ejemplo, para ver las páginas man de crontab:

man crontab

Fuente: www.esp.shopos.com