Configurar un hosting dedicado virtual

Dedicated Virtual ServerAdquiriste un hosting dedicado virtual y sabes que tienes muchas cosas que ajustar, pero no sabes qué ni por dónde comenzar. Esta es una guía para ayudarte a «tunear» tu hosting dedicado virtual. Manos a la obra:

Configuración Linux

Hay algunas cosas que puedes hacer, que variarán legeramente dependiendo del servidor que estás utilizando. Estos ajustes son para un servidor corriendo CentOS, pero deben funcionar para la mayoría de los servidores dedicados virtuales.

Deshabilitar DNS

Si tu proveedor de hosting maneja los DNS para tu dominio, puedes deshabilitar el serivicio DNS de tu servidor.

disable dns
/etc/init.d/named stop
chmod 644 /etc/init.d/named

El comando chmod quita los permisos de ejecución desde script, haciendo que el servicio no se inice en el arranque del servidor.

Deshabilitar SpamAssassain

Si no estás utilizando cuentas de correo en el mismo servidor, entonces no hay necesidad de correr herramientas anti-spam.

/etc/init.d/psa-spamassassin stop
chmod 644 /etc/init.d/psa-spamassassin

Deshabilitar xinetd

El proceso xinetd posee un número de otros procesos, ninguno de los cuales son útiles en un servidor web típico (ojo, yo deshabilité este servicio y me dejó de funcionar el FTP, así que lo reactivé otra vez).

/etc/init.d/xinetd stop
chmod 644 /etc/init.d/xinetd

Limitar el uso de memoria de Plesk

Si utilizas el panel plesk, puedes forzarlo a utilizar menos memoria agregando un archivo de opciones.

vi /usr/local/psa/admin/conf/httpsd.custom.include

Agrega las siguientes líneas al archivo:

MinSpareServers 1
MaxSpareServers 1
StartServers 1
MaxClients 5

Note que esta opción se sabe que trabaja en servidores dedicados de MediaTemple, pero no ha sido verificada en otros.

Deshabilitar o apagar Plesk (opcional)

Si sólo utilizas Plesk una vez al año, hay muy pocas razones para dejarlo corriendo. Tenga en cuenta que este paso es completamente opcional, y un poco más avanzado.

El siguiente comando apaga Plesk:

/etc/init.d/psa stop

Con el siguiente comando evitas que se active en startup:

chmod 644 /etc/init.d/psa

Tenga en cuenta que si usted lo inhabilita, entonces no se puede arrancar manualmente sin cambiar los permisos de archivo de nuevo (chmod u+x).

Configuración MySQL

Habilitar Query Cache

Abra el archivo /etc/my.cnf y agregue las siguientes líneas a la sección [mysqld]:

[mysqld]
query-cache-type = 1
query-cache-size = 8M

Puede agregar más memoria si desea, pero no utilice mucha.

Deshabilitar TCP/IP

Un sorprendente número de hosts pueden acceder a MySQL en TCP/IP por defecto, lo cual no hace sentido para un sitio web. Usted puede averiguar si está escuchando mysql en TCP/IP con el siguiente comando:

netstat -an | grep 3306

Para desactivar, agrege la siguiente línea al archivo /etc/my.cnf:

skip-networking

Configuración Apache

Abra su archivo httpd.conf, encontrado en /etc/httpd/conf/httpd.conf

Encuentre una línea como esta:

Timeout 120

Cámbiela a esto:

Timeout 20

Encuentre la sección que incluye estas líneas y ajústela a algo similar a esto:

StartServers       2
MinSpareServers    2
MaxSpareServers    5
ServerLimit        100
MaxClients         100
MaxRequestsPerChild  4000

Nota: Dependiendo de su servidor y su tráfico puede que necesite variar un poco estos números

Configuración PHP

Una de las cosas a tener en cuenta cuando ajusta un servidor en la plataforma de PHP es que cada hilo de apache solo carga un PHP en una localización de memoria separada. Esto significa que un módulo de memoria no utilizado agrega 256k de memoria a PHP, a través de 40 hilos de apache estarías gastando 10MB de memoria.

Quite módulos de PHP no necesarios

Abra el archivo php.ini, ubicado usualmente en /etc/php.ini (En algunas distribuciones hay un directorio /etc/php.d/ con un número de archivos .ini, uno para cada módulo.

Comente cualquier línea loadmodule que tenga los siguientes módulos:

  • odbc
  • snmp
  • pdo
  • odbc pdo
  • mysqli
  • ioncube-loader
  • json
  • imap
  • ldap
  • ncurses

Caché de código de operación de PHP (Opcode Cache)

Hay un número de opcode caches que puedes utilizar, incluyendo APC, eAccelerator, y Xcache, esta última posee gran estabilidad.

Descargue xcache y extráigalo en un directorio, y corra los siguientes comandos desde el directorio del código fuente de xcache:

phpize
./configure --enable-xcache
make
make install

Abra su archivo php.ini y agregue una nueva secci para xcache. Necesitará ajustar los paths si sus módulos php son cargados desde otro lugar.

vi /etc/php.ini

Agregue la siguiente sección al archivo:

[xcache-common]
zend_extension  = /usr/lib/php/modules/xcache.so
[xcache.admin]
xcache.admin.user       = "myusername"
xcache.admin.pass       = "putanmd5hashhere"
[xcache]
; Change xcache.size to tune the size of the opcode cache
xcache.size         = 16M
xcache.shm_scheme   = "mmap"
xcache.count        = 1
xcache.slots        = 8K
xcache.ttl          = 0
xcache.gc_interval  = 0
; Change xcache.var_size to adjust the size of variable cache
xcache.var_size     = 1M
xcache.var_count    = 1
xcache.var_slots    = 8K
xcache.var_ttl      = 0
xcache.var_maxttl   = 0
xcache.var_gc_interval =     300
xcache.test         = Off
xcache.readonly_protection = On
xcache.mmap_path    = "/tmp/xcache"
xcache.coredump_directory =   ""
xcache.cacher       = On
xcache.stat         = On
xcache.optimizer    = Off

Backups automáticos

Crear un Script de Backup Automático

Cree un directorio /backups, con un subdirectorio /backups/files

mkdir -p /backups/files

Ahora cree un script backup.sh dentro del directorio back ups:

vi /backups/backup.sh

Agregue lo siguitente al archivo, ajustando las rutas y el password de mysqldump:

#!/bin/sh

THEDATE=`date +%d%m%y%H%M`

mysqldump -uadmin -pPASSWORD DATABASENAME > /backups/files/dbbackup$THEDATE.bak

tar -cf /backups/files/sitebackup$THEDATE.tar /var/www/vhosts/my-website-path/httpdocs
gzip /backups/files/sitebackup$THEDATE.tar

find /backups/files/site* -mtime +5 -exec rm {} \;
find /backups/files/db* -mtime +5 -exec rm {} \;

El script primero creará una variable fecha para que todos los archivos sean nombrados igual para un mismo backup, a continuación, vuelca la base de datos, tarea los archivos web y los comprime en gzip. Los comandos find se utilizan para quitar cualquier archivo con 5 días de antiguedad, ya que no vamos a querer agotar mucho espacio en el servidor.

Haga el script ejecutable con el siguiente comando:

chmod u+x /backups/backup.sh

Ahora necesitará asignarlo para que corra automáticamente con cron. Asegúrese que esté utilizando una cuenta que pueda acceder aldirectorio back up.

crontab -e

Agregue la siguiente línea al crontab:

1       1       *       *       *       /backups/backup.sh

Puede probar el script ejecutándolo.

Sincronizar los Backups fuera del servidor con Rsync

Ya tienes backups automáticos en el servidor, puedes sincronizarlos a cualquier parte con la utilidad rsync. Deberás ajustar claves ssh para inicio de sesión automático (artículo pendiente, mientras tantos, si sabes inglés, aquí lo tienes: Add Public SSH Key to Remote Server in a Single Command)

Puedes probarlo corriendo este comando en una máquina linux o Mac en otra ubicación:

rsync -a user@website.com:/backups/files/* /offsitebackups/

Esto tomará un buen tiempo para ejecutar la primera vez, pero del lado de tu computadora local debes tener una copia de los archivos en el directorio /offsitebackups/. (Asegúrese de haber creado este directorio antes de ejecutar el script)

Puede programarlo añadiendo una línea de crontab:

crontab -e

Agregue la línea siguiente, que ejecutará rsync cada hora en la marca de 45 minutos. Se dará cuenta de que usamos la ruta completa a rsync aquí.

45 * * * * /usr/bin/rsync -a user@website.com:/backups/files/* /offsitebackups/

Puede programarlo para que se ejecute a una hora diferente, o una sola vez por día. Depende de usted.

Note that there are a lot of utilities that will allow you to sync via ssh or ftp. You don’t have to use rsync.

Seguridad

Lo primero debe hacer es asegurarse de que usted tiene una cuenta de usuario regular para usarla a través de ssh, y asegurarse de que usted puede utilizarla para cambiar a root. Es una muy mala idea permitir el acceso directo a root a través de ssh.

Deshabilitar inicion de sesión como Root sobre SSH

Abra el archivo /etc/ssh/sshd_config, y busque la siguiente línea:

#PermitRootLogin yes

Cámbiela a esto:

PermitRootLogin no

NOTA: Asegúrese de que usted tiene una cuenta de usuario normal y que puede hacerla root antes de realizar este cambio, de lo contrario puede te bloquees.

Deshabilitar SSH Version 1

No hay razón de utilizar otra cosa que no sea SSH version 2, es más seguro que las versiones anteriores. abra el archivo /etc/ssh/sshd_config, y busque las siguiente sección:

#Protocol 2,1
Protocol 2

Asegúrese de que sólo utiliza Protocol 2 como se mostró anteriormente.

Reiniciar SSH

Para que los cambios surtan efecto debemos reiniciar el servicion SSH

/etc/init.d/sshd restart

Verificar Puetos Abiertos

Usted puede utilizar el siguiente comando para ver qué puertos el servidor está escuchando:

netstat -an | grep LISTEN

no debe tener otra cosa más que los puertos 22, 80, y posiblemente 8443 para plesk.

Configure un Firewall

Artículo en inglés: Using Iptables on Linux‎

Si lo desea, puede configurar tablas de ip para bloquear más conexiones. Por ejemplo, puede bloquear el acceso a cualquier otro puerto que no sea de su red de trabajo. Si usted tiene una dirección IP dinámica ingnore esta opción.

Si ya ha seguido todos los pasos de esta guía hasta el momento, probablemente no es necesario añadir también un servidor de seguridad, pero es bueno entender sus opciones.

No Responses

Leave a Reply

Tu dirección de correo electrónico no será publicada.