Adquiriste 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 [email protected]:/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 [email protected]:/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.
1 comment on “Configurar un hosting dedicado virtual”