VPS Ubuntu: Configuración sobre un dominio [Editado 2021]
El dominio sobre el que descansará el VPS sera pymestic.es, cuyo FQDN quiero que sea vps0.pymestic.net
El índice del artículo podría ser este:
Registros DNS en el panel del dominio Resolución inversa en el panel del vps Primera conexión como root vía SSH Instalación de iredmail - Comprobad el webmail - Comprobad el panel de control de email - Nos están atacando? - Cambiar puerto SSH - DKIM: amavisd-new showkeys | testkeys Qué más cosas vamos a hacer? - Editar las urls / alias por defecto - Antivirus: cómo manejarnos con ClamAV [clamav y clamav-update] - Instalar y configurar rkhunter anti-malware y anti-rootkit - Resolver errores: 'perl warning Setting locale failed' - Verificar y cambiar si es necesario la configuración de fecha y hora del sistema Debian - Importante: Como se ve desde fuera nuestro VPS [nmap] - fail2ban: modificar configuración para recibir emails de alerta [el analizador de logs e iptables] Servidor Web Apache - crear un usuario webmaster - activar mod rewrite en apache2 - instalar y ocultar phpMyadmin - crear una base de datos para wordpress - descargar y descomprimir la ultima release de wordpress - crear un virtualhost en apache para WordPress - habilitar el nuevo sitio en apache - instalar wordpress - configuración de descarga automática - instalación del idioma o idiomas preferidos - Instalar un firewall a WordPress: wordfence Otras recomendaciones: securizar un poco Apache2 y deshabilitar wp-cron.php - Opcional: Instalar un servidor de ftp interno (localhost) - Certificado digital gratuito Let's Encrypt Direcciones web con Utilidades DNS y más
Registros DNS en el panel del dominio
Lo primero es configurar la zona DNS de este dominio, para ello desde el panel de control de mi dominio agrego estas zonas (en la imagen server.pymestic.net se corresponde a vps0.pymestic.es en nuestro ejemplo de hoy):
En el caso del SPF yo permito que todos mis VPS hablen sin problemas entre sí, añado sus IP’s, en vuestro caso puede ser suficiente de momento ‘v=spf1-all‘.
Resolución inversa en el panel del vps
Ahora en Ramnode configuramos el nombre del host, y la red, el PTR de resolución inversa:

En la imagen server.pymestic.net se corresponde a vps0.pymestic.es en nuestro ejemplo de hoy
Como el sistema operativo ya tiene unos años, es un Debian 7, reinstalaremos y esta vez será Ubuntu 16.04 64 bit Server:
Así que pincharemos en reinstalar:
Y elegiremos la distribución Ubuntu 16.04 64 bits.
Primera conexión como root
Tras la instalación conectamos por primera vez como root a ssh:
ssh root@vps0.pymestic.es
Importante comprobar antes de seguir si el FQDN del VPS es correcto. Para ello desde dentro utilizamos el comando hostname con la opción -f:
hostname -f
Si no da el FQDN con el que estamos trabajando ‘vps0.pymestic.es‘ es mejor repasar las DNS. Os adjunto una serie de direcciones web con utilidades para los dolores de cabeza con DNS y servidores de email al final de este artículo.
Lo primero que suelo hacer al iniciar una máquina nueva es actualizarla, aunque se acaba de instalar es posible que quede colgando alguna cosa:
apt-get update && apt-get upgrade
Tras esto me instalo mis cositas, por ejemplo mi editor:
apt-get install nano aptitude host htop
Instalación de iredmail
Cuando tengamos el sistema a nuestro gusto procedemos a descargarnos el bundle iredmail.
En el momento de escribir el post es este: https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.5-1.tar.bz2
Así que desde dentro del servidor con el comando wget lo descargamos:
wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.5-1.tar.bz2
Al tratarse de un bz2 descomprimimos con las opciones ‘jxvf’:
tar -jxvf iRedMail-0.9.5-1.tar.bz2
Esto nos crea un directorio, nos metemos en el:
cd iRedMail-0.9.5-1/
Y ejecutamos el siguiente script:
bash iRedMail.sh
Se nos harán unas preguntas, donde en la mayoría respetaremos lo que nos ofrece por defecto: /var/vmail
En el caso del servidor web, yo prefiero Apache, así que con las flechas de cursor ‘arriba’ y ‘abajo’ hacemos la selección, y con el ‘ESPACIO’ se fija, por último pulsamos ‘INTRO’ para continuar:
Como backend yo prefiero MySQL, igual que antes con las ‘flechas de cursor’ hacemos la selección, con el ‘ESPACIO’ se fija y con ‘INTRO’ continuamos:
Nos pregunta sobre el primer dominio, leed esta información ya que es importante:
Yo elijo pymestic.net, y a continuación la contraseña para postmaster@pymestic.net, que será el administrador del dominio de correo.
En el siguiente paso nos comenta que DKIM y SPF = Reputación de un servidor de correo, vienen de serie, y podemos elegir que paquetes instalaremos, a mi me gusta roundcube como Webmail, y por supuesto fail2ban para analizar logs y manejar iptables, y por último awstats para las estadísticas:
Continuamos:
La descarga e instalación de todos los paquetes tardará un rato.
Al final muestra un resumen que conviene copiar y guardar para posteriormente repasar y subsanar posibles errores menores, revisar rutas, etc.
Recomiendo siempre usar iptables:
El resumen final de lo que ha sucedido con la instalación, también es importante guardarlo para su posterior revisión, recibiremos un email en el buzón postmaster con mucha información:
******************************************************************** * Start iRedMail Configurations ******************************************************************** [ INFO ] Create self-signed SSL certification files (2048 bits). [ INFO ] Generate Diffie Hellman Group with openssl, please wait. [ INFO ] Create required system account: vmail, iredadmin, iredapd. [ INFO ] Configure Apache web server. [ INFO ] Configure PHP. [ INFO ] Configure MySQL database server. [ INFO ] Setup daily cron job to backup SQL databases with /var/vmail/backup/backup_mysql.sh [ INFO ] Configure Postfix (MTA). [ INFO ] Configure Dovecot (POP3/IMAP/Managesieve/LMTP/LDA). [ INFO ] Configure ClamAV (anti-virus toolkit). [ INFO ] Configure Amavisd-new (interface between MTA and content checkers). [ INFO ] Configure SpamAssassin (content-based spam filter). [ INFO ] Configure iRedAPD (postfix policy daemon). [ INFO ] Configure iRedAdmin (official web-based admin panel). [ INFO ] Configure Fail2ban (authentication failure monitor). [ INFO ] Configure Roundcube webmail. [ INFO ] Configure Awstats (logfile analyzer for mail and web server). ************************************************************************* * iRedMail-0.9.5-1 installation and configuration complete. ************************************************************************* ERROR: /var/log/clamav/freshclam.log is locked by another process ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log). ******************************************************************** * URLs of installed web applications: * * - Roundcube webmail: https://server.pymestic.net/mail/ * * - Web admin panel (iRedAdmin): https://server.pymestic.net/iredadmin/ * * You can login to above links with below credential: * * - Username: postmaster@pymestic.net * - Password: * ******************************************************************** * Congratulations, mail server setup completed successfully. Please * read below file for more information: * * - /root/iRedMail-0.9.5-1/iRedMail.tips * * And it's sent to your mail account postmaster@pymestic.net. * ********************* WARNING ************************************** * * Please reboot your system to enable all mail services. * ********************************************************************
Como dice conviene hacer un reboot del sistema para activar todos los servicios instalados, cuyo resumen es este:
- postfix
- dovecot
- spamassassin
- clamav
- roundcube
- Apache2
- MySQL
- fail2ban
- awstats
En la carpeta siguiente tenéis información ‘vital‘:
root/iRedMail-0.9.5-1/iRedMail.tips
Así que reiniciamos el VPS:
reboot
Comprobad el webmail
Conviene leer el correo que ha llegado a postmaster@ con instrucciones y rutas. En este momento ya debemos poder acceder al webmail vía esta dirección: https://server.pymestic.net. Utilizando como usuario postmaster@pymestic.net y la clave elegida durante el proceso de instalación. Entrad y leer el correo recibido.
Podéis enviar un email desde consola a una cuenta de email de fuera del dominio:
echo "Hola mundo" | mail -s "email desde pymestic.net" jblancov@gmail.com
Comprobad el panel de control de email
De la misma forma el panel de administración lo tenéis disponible aquí: https://server.pymestic.net/iredadmin/. Entrad con las mismas credenciales.
Nos están atacando?
Si miráis las iptables tras 10 minutos de instalación ya tenemos algunas IP’s baneadas por fuerza bruta contra el servicio ssh:
El comando iptables -L -n muestra esto:
Chain fail2ban-sshd (1 references) target prot opt source destination REJECT all -- 223.179.130.237 anywhere reject-with icmp-port-unreachable REJECT all -- 175.160.243.37 anywhere reject-with icmp-port-unreachable REJECT all -- 183.94.10.184 anywhere reject-with icmp-port-unreachable RETURN all -- anywhere anywhere
Cambiar puerto SSH
Conviene pues cambiar el puerto ssh.
Para ello si usamos openssh-server en Debian modificaremos el archivo /etc/ssh/sshd_config:
nano /etc/ssh/sshd_config
Localizamos el puerto actual 22:
Port 22
Y lo cambiamos por otro, que sea bien alto (1024-65535):
Port 19122
En nuestro caso usamos iptables, que por defecto deniegan todo, y teníamos abierto el puerto 22, ahora debemos modificar el fichero /etc/default/iptables para sustituir 22 por nuestro puerto, de lo contrario no se aceptaran las conexiones SSH desde fuera del VPS.
# Keep state. -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Loop device. -A INPUT -i lo -j ACCEPT # Allow PING from remote hosts. -A INPUT -p icmp --icmp-type echo-request -j ACCEPT # ssh -A INPUT -p tcp --dport 22 -j ACCEPT # http, https -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 443 -j ACCEPT # smtp, submission -A INPUT -p tcp --dport 25 -j ACCEPT -A INPUT -p tcp --dport 587 -j ACCEPT # pop3, pop3s -A INPUT -p tcp --dport 110 -j ACCEPT -A INPUT -p tcp --dport 995 -j ACCEPT # imap, imaps -A INPUT -p tcp --dport 143 -j ACCEPT -A INPUT -p tcp --dport 993 -j ACCEPT # ldap/ldaps #-A INPUT -p tcp --dport 389 -j ACCEPT #-A INPUT -p tcp --dport 636 -j ACCEPT # MySQL service. # Note: Please make sure MySQL service is not binding to localhost with # 'bind-address=127.0.0.1'. #-A INPUT -p tcp --dport 3306 -j ACCEPT # PostgreSQL service. #-A INPUT -p tcp --dport 5432 -j ACCEPT # ftp. #-A INPUT -p tcp --dport 20 -j ACCEPT #-A INPUT -p tcp --dport 21 -j ACCEPT # ejabberd #-A INPUT -p tcp --dport 5222 -j ACCEPT #-A INPUT -p tcp --dport 5223 -j ACCEPT #-A INPUT -p tcp --dport 5280 -j ACCEPT COMMIT
Dejaremos esta linea así:
# ssh -A INPUT -p tcp --dport 19122 -j ACCEPT
Ahora hay que reiniciar el servidor.
Conectamos usando el nuevo puerto:
ssh root@pymestic.net -p 19122
La magia la hace el parámetro -p(port).
Cuando podamos conectar (repasad pasos) continuaremos con las DNS para dar de alta el registro DKIM en las DNS del dominio, para así mejorar la reputación del servidor de correo electrónico.
DKIM DNS – amavisd-new showkeys | testkeys
Ahora para completar las DNS y con ello la reputación del correo, con este comando vemos la key DKIM en el servidor, y procedemos a dar de alta un registro en las DNS del dominio:
amavisd-new showkeys
... key#1 1024 bits, i=dkim, d=pymestic.net, /var/lib/dkim/pymestic.net.pem dkim._domainkey.pymestic.net. 3600 TXT ( v=DKIM1; p= MIG...)
Hay que aislar la cadena incluida entre paréntesis, quitando las comillas. Es cómodo si copiais la salida del comando a un bloc de notas, y ponéis el ‘churro‘ en una sola linea quitando las dobles comillas.
El nombre del host ha de ser ‘dkim._domainkey‘ sin las comillas.
Haced un registro TXT en las DNS de vuestro dominio con ese nombre de host y el churro en este formato:
v=DKIM1; p=MIGblablabla...
Después desde el servidor utilizaremos este otro comando:
amavisd-new testkeys
para comprobar que tras la propagación de DNS (esto puede tardar un tiempo), el resultado es PASS. Si transcurren 24 horas y no da PASS, revisad los pasos.
amavisd-new testkeys
Cuando consigamos el pass, tendremos montado un servidor de correo bastante bien configurado.
... TESTING#1 pymestic.net: dkim._domainkey.pymestic.net = pass
Qué más cosas vamos a hacer
Iremos comentando cosas de fail2ban, el analizador de logs que incorpora, y trabajaremos con iptables para mantener una seguridad casi máxima.
Instalaremos rkhunter y/o chkrootkit dos anti-malware y anti-rootkit, que actualizaremos y dejaremos con todas las firmas de los ficheros del sistema actualizadas en sus bases de datos para analizar futuros cambios en el sistema de ficheros.
Veremos como manejarnos con el Antivirus, compuesto por los paquetes: clamav y clamav-update, el primero el motor del antivirus, el segundo el actualizador de bases de virus.
Tocaremos también la base de datos en MySQL vmail donde se almacena la configuración del correo electrónico, sobre todo la tabla alias que nos permitirá hacer cosas como:
Por ello y para que sea más cómodo instalaremos phpMyadmin. Pero ocultaremos su url, y no la dejaremos escuchando en la ruta por defecto pymestic.net/phpmyadmin, igualmente hay que cambiar los alias y urls que deja la instalación por defecto de iredmail, para ello hay que editar el fichero de los host virtuales SSL de Apache2.
Editar las urls / alias por defecto
Al utilizar software libre y open source tenemos un problema:
Todo el mundo conoce las configuraciones por defecto.
Los sitios web gestionados por Apache2 se almacenan en Debian en la carpeta /etc/apache2/sites-available/:
ls /etc/apache2/sites-available/ -ltr total 20 -rw-r--r-- 1 root root 1332 Jul 5 2016 000-default.conf -rw-r--r-- 1 root root 6437 Jan 6 14:14 default-ssl.conf.2017.01.06.14.01.33 -rw-r--r-- 1 root root 7507 Jan 6 14:15 default-ssl.conf
Tenemos que editar ‘default-ssl.conf‘ y localizar los alias hacia el final del fichero:
Alias /iredadmin/static /opt/www/iredadmin/static/ WSGIScriptAlias /iredadmin /opt/www/iredadmin/iredadmin.py/ Alias /mail /opt/www/roundcubemail/ Alias /awstats/icon /usr/share/awstats/icon/ Alias /awstatsicon /usr/share/awstats/icon/ ScriptAlias /awstats /usr/lib/cgi-bin/
Cambiando según nuestras preferencias:
Alias /panel/static /opt/www/iredadmin/static/ WSGIScriptAlias /panel /opt/www/iredadmin/iredadmin.py/ Alias /emilio /opt/www/roundcubemail/ Alias /awstats/icon /usr/share/awstats/icon/ Alias /awstatsicon /usr/share/awstats/icon/ ScriptAlias /visitas /usr/lib/cgi-bin/
Ahora hay que reiniciar el servicio apache2 (el servidor web), aunque con un reload de configuración es suficiente:
service apache2 reload
Y probar alguna de las direcciones con los nuevos alias, por ejemplo el panel.
Las credenciales siempre serán las mismas, buzón postmaster y la contraseña durante la instalación.
Aunque conviene borrarlo, esta y más información la tenéis en el fichero config de la instalación. Y en
root/iRedMail-0.9.5-1/iRedMail.tips
Es conveniente, editar la página web por defecto que tiene un refresh es otra cosa que deberíamos plantearnos hasta tener una web definitiva y desactivar este virtualhost:
nano /var/www/html/index.html
Antivirus
Veremos como manejarnos con el Antivirus, compuesto por los paquetes: clamav y clamav-update, el primero el motor del antivirus, el segundo el actualizador de bases de virus. Que se ejecuta simplemente así:
freshclam
El antivirus lo podemos ejecutar así:
clamscan -r --infected --log=/root/clamscan-`date +%d-%m-%y.log` /var/www
Con lo que escaneará la carpeta /var/www, pero solo mostrará archivos infectados, y generará un fichero de log en /root/clamscan-`date +%d-%m-%y.log`
El comando date usado entre las comillas del operador grave produce esta salida, para disponer de un log diario:
date +%d-%m-%y 07-01-17
Si queremos hacer un análisis profundo, y de todo el disco, una forma de hacerlo sería:
clamscan / --log=/root/clamavprofundo.log --recursive=yes --infected
Podemos añadir tantas opciones como queramos (leed el manual):
--detect-pua=yes --scan-mail=yes --phishing-sigs=yes --phishing-scan-urls=yes --algorithmic-detection=yes --scan-archive=yes --scan-html=yes --scan-pdf=yes --scan-ole2=yes --scan-elf=yes --scan-pe=yes
Pequeña chuleta de comandos para el antivirus:
Actualizar la base de datos de virus
freshclam
Escanear un directorio
clamscan -r /home/
Eliminar archivos infectados
clamscan --infected --remove --recursive /home
Gestión de los demonios:
/etc/init.d/clamav-daemon start /etc/init.d/clamav-freshclam start /etc/init.d/clamav-daemon status /etc/init.d/clamav-freshclam status
Versión:
clamdscan -V
Como siempre un poco de RTFM no viene mal, así que:
clamscan --help
Instalar y configurar rkhunter anti rootkits
Instalamos el paquete:
aptitude install rkhunter
Hacemos un:
rkhunter --propupd
khunter --propupd [ Rootkit Hunter version 1.4.2 ] File updated: searched for 176 files, found 136
Hacemos un update:
rkhunter --update
rkhunter --update [ Rootkit Hunter version 1.4.2 ] Checking rkhunter data files... Checking file mirrors.dat [ No update ] Checking file programs_bad.dat [ Updated ] Checking file backdoorports.dat [ No update ] Checking file suspscan.dat [ No update ] Checking file i18n/cn [ No update ] Checking file i18n/de [ No update ] Checking file i18n/en [ No update ] Checking file i18n/tr [ No update ] Checking file i18n/tr.utf8 [ No update ] Checking file i18n/zh [ No update ] Checking file i18n/zh.utf8 [ No update ]
Y estamos listos para lanzarlo:
rkhunter -c --enable all --disable none
Lo que además de guardar en un log todo detalle ‘/var/log/rkhunter.log’, da como resultado este informe:
System checks summary ===================== File properties checks... Required commands check failed Files checked: 136 Suspect files: 0 Rootkit checks... Rootkits checked : 375 Possible rootkits: 0 Applications checks... Applications checked: 4 Suspect applications: 0 The system checks took: 47 seconds All results have been written to the log file: /var/log/rkhunter.log One or more warnings have been found while checking the system. Please check the log file (/var/log/rkhunter.log)
Podemos lanzarlo haciendo que en la salida estandar solo aparezcan los Warnings:
rkhunter -c --enable all --disable none --rwo
rkhunter -c --enable all --disable none --rwo Warning: Checking for prerequisites [ Warning ] Unable to find 'lsattr' command - all file immutable-bit checks will be skipped. Warning: The following processes are using deleted files: Process: /usr/sbin/dovecot PID: 445 File: (deleted)/run/dovecot/login-master-notifybc3ade1158dfcc57 Process: /usr/sbin/mysqld PID: 933 File: (deleted)/tmp/ib5S4Qt5 Process: /usr/sbin/apache2 PID: 957 File: Process: /usr/sbin/apache2 PID: 960 File: Process: /usr/sbin/apache2 PID: 961 File: Process: /usr/sbin/apache2 PID: 962 File: Process: /usr/sbin/apache2 PID: 963 File: Process: /usr/sbin/apache2 PID: 981 File: Process: /usr/sbin/apache2 PID: 982 File: Process: /usr/sbin/apache2 PID: 1312 File: Process: /usr/sbin/sshd PID: 1314 File: Process: /usr/lib/dovecot/imap-login PID: 1332 File: (deleted)/run/dovecot/login-master-notify6d2c61652831dde4 Process: /usr/lib/dovecot/imap PID: 1334 File: (deleted)/var/vmail/vmail1/pymestic.net/p/o/s/postmaster-2017.01.06.14.01.33/Maildir/dovecot-uidlist Process: /usr/lib/dovecot/imap-login PID: 1714 File: (deleted)/run/dovecot/login-master-notify6d2c61652831dde4 Warning: No output found from the lsmod command or the /proc/modules file: /proc/modules output: lsmod output: Warning: The SSH and rkhunter configuration options should be the same: SSH configuration option 'PermitRootLogin': yes Rkhunter configuration option 'ALLOW_SSH_ROOT_USER': no
Lo que permite ir al grano, ver y decidir si resolver problemas: como que root no pueda iniciar sesión por SSH, que veremos más adelante.
O por ejemplo instalar el paquete lsattr que parece según la salida anterior que no lo tenemos instalado en nuestro sistema operativo:
aptitude install e2fsprogs
Si volvemos a ejecutar rkhunter nos avisa de que dos comandos no están en la base de datos rkhunter.dat generada mediante la opción propupd que ejecutamos tras su instalación:
whereis lsattr lsattr: /usr/bin/lsattr /usr/share/man/man1/lsattr.1.gz root@server:/etc/fail2ban# rkhunter -c --enable all --disable none --rwo Warning: The file '/usr/bin/chattr' exists on the system, but it is not present in the 'rkhunter.dat' file. Warning: The file '/usr/bin/lsattr' exists on the system, but it is not present in the 'rkhunter.dat' file.
Debemos pues si estamos seguros reconstruir la base de datos de binarios rkhunter.dat, y esto nos pasará cada vez que instalemos nuevos paquetes o actualicemos los existentes. Así pues, si estamos seguro de que los nuevos binarios (ejecutables) son seguros la rehacemos:
rkhunter --propupd
Y para terminar de forma opcional podríamos hacer unos pequeños ajustes en el fichero de configuración de rkhunter:
nano /etc/rkhunter.conf
Estas variables son susceptibles de ser personalizadas:
- MAIL-ON-WARNING=”your_user@domain.com”
- MAIL_CMD=mail -s “[rkhunter] Warnings found for ${HOST_NAME}”
- ALLOW_SSH_ROOT_USER=yes
Tras tocar los ficheros de configuración, la podemos revisar por si hemos cometido errores con este comando que testea la configuración actual:
sudo rkhunter -C
Además podemos automatizar una tarea para que haga el scan cada cierto tiempo. En Linux manejamos las tareas programadas mediante cron, y para cada usuario tenemos un crontab, que se lista con la opción -l y se edita (con tu editor preferido) con la opción -e:
crontab -l > crontab.backup
Con eso hacemos backup del cron actual a un fichero llamado crontab.backup.
crontab -e
Con esto editamos el cron del usuario actual se supone que root. Al ser la primera vez nos permite elegir editor, yo como siempre nano:
crontab -e Select an editor. To change later, run 'select-editor'. 1. /bin/ed 2. /bin/nano <---- easiest 3. /usr/bin/vim.basic Choose 1-3 [2]: 2
Si aún no tienes tu editor preferido instalado, puedes hacerlo y después ejecutar este comando select-editor
Y nos muestra el actual:
30 3 * * * /bin/bash /var/vmail/backup/backup_mysql.sh # iRedAPD: Clean up expired tracking records hourly. 1 * * * * python /opt/iredapd/tools/cleanup_db.py > /dev/null # iRedAPD: Convert SPF DNS record of specified domain names to IP # addresses/networks every 30 minutes. */30 * * * * python /opt/iredapd/tools/spf_to_greylist_whitelists.py >/dev/null # iRedMail: Cleanup Amavisd database 1 2 * * * python /opt/www/iredadmin/tools/cleanup_amavisd_db.py >/dev/null # iRedMail: Cleanup Roundcube SQL database 2 2 * * * /usr/bin/php /opt/www/roundcubemail/bin/cleandb.sh >/dev/null # iRedMail: update Awstats statistics for web 1 */1 * * * /usr/bin/perl /usr/lib/cgi-bin/awstats.pl -config=web -update >/dev/null # iRedMail: update Awstats statistics for smtp 1 */1 * * * /usr/bin/perl /usr/lib/cgi-bin/awstats.pl -config=smtp -update >/dev/null
Añadimos al final:
15 02 * * * /usr/bin/rkhunter --cronjob --update --quiet
Dejándolo así:
A las dos y cuarto de la madrugada se ejecutará en modo ‘quiet’ sin necesidad de interacción del usuario ‘quiet’.
Podéis averiguar la versión, por si consultáis en foros así:
rkhunter --versioncheck [ Rootkit Hunter version 1.4.2 ] Checking rkhunter version... This version : 1.4.2 Latest version: 1.4.2
Resolver errores: perl warning Setting locale failed
perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LANG = es_ES.UTF-8 are supported and installed on your system. perl: warning: Falling back to the standard locale. locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory
Para solucionar el error de perl basta con usar un par de comandos:
locale-gen es_ES.UTF-8
Y después:
dpkg-reconfigure locales
El segundo comando preguntara 2 cuestiones. La primera:
Y después:
Por último hacemos update y upgrade, que era uno de los que provocaban el error.
Verificar y cambiar la hora del sistema
De poco sirve monitorizar los servicios de un VPS si no hablamos el mismo uso horario.
Cuando escribo estas líneas son las 10:59 pero el comando date en el servidor escupe esto otro:
date sáb ene 7 04:58:37 EST 2017
Con este par de comandos lo solucionamos:
cp /etc/localtime /etc/localtime.old cp /usr/share/zoneinfo/Europe/Madrid /etc/localtime
Ahora sí:
date sáb ene 7 11:03:57 CET 2017
Una forma menos bruta es mediante el comando:
dpkg-reconfigure tzdata
Importante: Como se ve desde fuera nuestro VPS
nmap pymestic.net Starting Nmap 6.40 ( http://nmap.org ) at 2017-01-07 11:29 CET Nmap scan report for pymestic.net (81.4.108.118) Host is up (0.087s latency). rDNS record for 81.4.108.118: server.pymestic.net Not shown: 991 filtered ports PORT STATE SERVICE 22/tcp closed ssh 25/tcp open smtp 80/tcp open http 110/tcp open pop3 143/tcp open imap 443/tcp open https 587/tcp open submission 993/tcp open imaps 995/tcp open pop3s Nmap done: 1 IP address (1 host up) scanned in 6.41 seconds
Con el comando nmap podemos ver que puertos están abiertos.
Tras un reboot de la máquina, el 22 que todavía pululaba:
Starting Nmap 6.40 ( http://nmap.org ) at 2017-01-07 12:56 CET Nmap scan report for pymestic.net (81.4.108.118) Host is up (0.088s latency). rDNS record for 81.4.108.118: server.pymestic.net Not shown: 993 filtered ports PORT STATE SERVICE 25/tcp open smtp 80/tcp open http 110/tcp open pop3 143/tcp open imap 443/tcp open https 587/tcp open submission 995/tcp open pop3s Nmap done: 1 IP address (1 host up) scanned in 16.31 seconds
fail2ban: modificar configuración para recibir emails
Vamos a modificar el comportamiento por defecto de fail2ban, editando la jaula local. En la carpeta /etc/fail2ban tenemos todo lo necesario:
cd /etc/fail2ban/ root@server:/etc/fail2ban# ls -ltr total 40 drwxr-xr-x 2 root root 4096 mar 19 2014 jail.d drwxr-xr-x 2 root root 4096 mar 19 2014 fail2ban.d drwxr-xr-x 2 root root 4096 ene 6 20:14 action.d -rw-r--r-- 1 root root 1510 ene 6 20:15 fail2ban.conf -rw-r--r-- 1 root root 13773 ene 6 20:15 jail.conf -rw-r--r-- 1 root root 1567 ene 6 20:15 jail.local drwxr-xr-x 2 root root 4096 ene 6 20:15 filter.d
Editamos jail.local, y lo dejamos así:
# Refer to /etc/fail2ban/jail.conf for more examples. [DEFAULT] # time is in seconds. 3600 = 1 hour, 86400 = 24 hours (1 day) findtime = 3600 bantime = 86400 maxretry = 5 ignoreip = 127.0.0.1 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 destemail = postmaster@pymestic.net sender = root action = %(action_mw)s [sshd] enabled = true filter = sshd action = iptables[name=ssh, port=0:65535, protocol=tcp] #iptables-allports %(mta)s[name=%(__name__)s, dest=%(destemail)s, protocol=%(protocol)s, chain=%(chain)s] logpath = /var/log/auth.log [sshd-ddos] enabled = true filter = sshd-ddos action = iptables-allports %(mta)s[name=%(__name__)s, dest=%(destemail)s, protocol=%(protocol)s, chain=%(chain)s] logpath = /var/log/auth.log [roundcube-iredmail] enabled = true filter = roundcube.iredmail action = iptables-multiport[name=roundcube, port=http,https,smtp,submission,pop3,pop3s,imap,imaps,sieve, protocol=tcp] %(mta)s[name=%(__name__)s, dest=%(destemail)s, protocol=%(protocol)s, chain=%(chain)s] logpath = /var/log/mail.log findtime = 3600 [dovecot-iredmail] enabled = true filter = dovecot.iredmail action = iptables-multiport[name=dovecot, port=http,https,smtp,submission,pop3,pop3s,imap,imaps,sieve, protocol=tcp] %(mta)s[name=%(__name__)s, dest=%(destemail)s, protocol=%(protocol)s, chain=%(chain)s] logpath = /var/log/dovecot.log [postfix-iredmail] enabled = true filter = postfix.iredmail action = iptables-multiport[name=postfix, port=http,https,smtp,submission,pop3,pop3s,imap,imaps,sieve, protocol=tcp] %(mta)s[name=%(__name__)s, dest=%(destemail)s, protocol=%(protocol)s, chain=%(chain)s] logpath = /var/log/mail.log
Donde los cambios radican en la segunda línea de las acciones:
%(mta)s[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]
Y el email de destino se controla con la variable:
destemail = postmaster@pymestic.net
De nuevo la lista ignoreip la tendrás que adaptar a tus necesidades.
Cuando hayas acabado de editar el fichero hay que reiniciar fail2ban:
service fail2ban restart
Y conviene comprobar el status por si hubiesemos cometido algún error:
service fail2ban status ● fail2ban.service - LSB: Start/stop fail2ban Loaded: loaded (/etc/init.d/fail2ban) Active: active (running) since sáb 2017-01-07 11:57:10 CET; 4s ago Process: 1513 ExecStop=/etc/init.d/fail2ban stop (code=exited, status=0/SUCCESS) Process: 1546 ExecStart=/etc/init.d/fail2ban start (code=exited, status=0/SUCCESS) CGroup: /system.slice/fail2ban.service └─1556 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock -p /var/run/fail2ban/fail2ban.pid ene 07 11:57:10 server fail2ban.filter[1556]: INFO Added logfile = /var/log/mail.log ene 07 11:57:10 server fail2ban.filter[1556]: INFO Set maxRetry = 5 ene 07 11:57:10 server fail2ban.filter[1556]: INFO Set findtime = 3600 ene 07 11:57:10 server fail2ban.actions[1556]: INFO Set banTime = 86400 ene 07 11:57:10 server fail2ban.jail[1556]: INFO Jail 'sshd' started ene 07 11:57:10 server fail2ban.jail[1556]: INFO Jail 'sshd-ddos' started ene 07 11:57:10 server fail2ban.jail[1556]: INFO Jail 'roundcube-iredmail' started ene 07 11:57:10 server fail2ban.jail[1556]: INFO Jail 'dovecot-iredmail' started ene 07 11:57:10 server fail2ban.jail[1556]: INFO Jail 'postfix-iredmail' started ene 07 11:57:10 server fail2ban[1546]: Starting authentication failure monitor: fail2ban. ene 07 11:57:10 server systemd[1]: Started LSB: Start/stop fail2ban.
Servidor Web Apache
Como es obvio queremos montar nuestra web, mediante WordPress por ejemplo, para empezar fuerte y rápido. Seguiremos estos pasos:
- crear un usuario webmaster
- activar mod rewrite en apache2
- instalaremos y securizaremos phpMyadmin: Hay que saber la clave de root para MySQL, la tenéis en el email que mando a postmaster la instalación de iredmail./li>
- crear una base de datos para wordpress
- descargar y descomprimir la última release de wordpress
- crear un virtualhost en apache para WordPress
- habilitar el nuevo virtualhost en apache
- instalar wordpress
- configuración de descarga automática
- instalación del idioma o idiomas preferidos
- probar wordpress y permisos de carpetas de subida de archivos
- instalación de un firewall a wordpress: wordfence
- securizar un poco Apache2
- Opcional: Servidor FTP: vsftpd
- Opcional: Certificado SSL => https (redirigir todo el tráfico http a https)
crear un usuario webmaster
useradd -s /bin/bash -d /var/www/vhosts -m -g www-data webmaster
Y le damos una clave con passwd:
root@server:/var/www# useradd -s /bin/bash -d /var/www/vhosts -m -g www-data webmaster root@server:/var/www# passwd webmaster Introduzca la nueva contraseña de UNIX: Vuelva a escribir la nueva contraseña de UNIX: passwd: contraseña actualizada correctamente
Para salir del lío, usad con cuidado estos dos comandos:
chown -R webmaster:www-data /var/www/vhosts
chmod -R 775 /var/www/vhosts/
Hacemos un listado de directorio donde se ubican los ficheros para que sirva Apache:
ls -la /var/www/ total 16 drwxr-xr-x 4 root root 4096 ene 7 14:49 . drwxr-xr-x 13 root root 4096 ene 6 20:14 .. drwxr-xr-x 2 root root 4096 ene 6 20:14 html drwxr-xr-x 2 webmaster www-data 4096 ene 7 14:49 vhosts
Nos posicionamos para continuar trabajando ahí.
cd /var/www/
En la carpeta /var/www/vhosts es donde empezaremos a crear los diferentes proyectos web.
activar mod rewrite en apache2
Es necesario para la Re-escritura de url’s utilizada por WordPress y la mayoría de CMS Web y conseguir “urls userfriendly“.
a2enmod rewrite
service apache2 restart
Más info: https://debian-handbook.info/browse/es-ES/stable/sect.http-web-server.html
instalaremos y securizaremos phpMyadmin: Hay que saber la clave de root para MySQL, la tenéis en el email que mando a postmaster la instalación de iredmail.
aptitude install phpmyadmin Se instalarán los siguiente paquetes NUEVOS: dbconfig-common{a} javascript-common{a} libjs-jquery{a} libjs-sphinxdoc{a} libjs-underscore{a} php-gettext{a} php-tcpdf{a} phpmyadmin 0 paquetes actualizados, 8 nuevos instalados, 0 para eliminar y 0 sin actualizar. Necesito descargar 12,6 MB de ficheros. Después de desempaquetar se usarán 46,9 MB. ¿Quiere continuar? [Y/n/?] Y
Introduciremos primero la clave de root, que genero iredmail y nos mando por email, después la del usuario phpmyadmin, recomiendo que useis otra y la anotéis, contestaremos que sí a la pregunta “dbconfig-common” y seleccionaremos Apache como servidor web.
dbconfig-common: writing config to /etc/dbconfig-common/phpmyadmin.conf Creating config file /etc/dbconfig-common/phpmyadmin.conf with new version Creating config file /etc/phpmyadmin/config-db.php with new version granting access to database phpmyadmin for phpmyadmin@localhost: success. verifying access for phpmyadmin@localhost: success. creating database phpmyadmin: success. verifying database phpmyadmin exists: success. populating database via sql... done. dbconfig-common: flushing administrative password apache2_invoke: Enable configuration phpmyadmin
Acto seguido editaremos el host virtual de configuración para cambiar la url por defecto conocida por ‘todos’ y vector de ataques:
nano /etc/apache2/conf-enabled/phpmyadmin.conf
Dejándolo algo así:
# phpMyAdmin default Apache configuration #Alias /phpmyadmin /usr/share/phpmyadmin #jblanco Alias /databases /usr/share/phpmyadmin
Hacemos un reload de la configuración de Apache:
service apache2 reload
Y probamos a entrar al panel de phpmyadmin siguiendo nuestra nueva url: https://pymestic.net/databases/
Aquí las credenciales son root y la contraseña aleatoria que eligió el instalador, revisa el email.
crear una base de datos para wordpress
Una vez instalado phpmyadmin accederemos como root: https://pymestic.net/databases
Una vez iniciada la sesión, desde la pestaña privilegios añadiremos un nuevo usuario, marcando la casilla para crear una base de datos con el mismo nombre y otorgarle todos los permisos:
descargar y descomprimir la ultima release de wordpress
https://wordpress.org/download/
Conseguid el enlace, para desde dentro del vps descargar con el comando wget.
cd /var/www/vhosts
wget https://wordpress.org/latest.zip
root@server:/var/www/vhosts# wget https://wordpress.org/latest.zip --2017-01-07 14:59:15-- https://wordpress.org/latest.zip Resolviendo wordpress.org (wordpress.org)... 66.155.40.250, 66.155.40.249 Conectando con wordpress.org (wordpress.org)[66.155.40.250]:443... conectado. Petición HTTP enviada, esperando respuesta... 200 OK Longitud: 8709277 (8,3M) [application/zip] Grabando a: “latest.zip” latest.zip 100%[=====================================>] 8,31M 3,22MB/s en 2,6s 2017-01-07 14:59:18 (3,22 MB/s) - “latest.zip” guardado [8709277/8709277] root@server:/var/www/vhosts#
Para descomprimir podemos usar unzip:
unzip latest.zip
Esto descomprime todo el CMS en la carpeta: /var/www/vhosts/wordpress
crear un virtualhost en apache para WordPress
Tenemos que crear en Apache un virtualhost cuyo DocumentRoot apunte a esa carpeta.
Para ello nos fijamos en uno de los existentes ‘default’:
cat /etc/apache2/sites-available/000-default.conf <VirtualHost *:80> #ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Editamos un nuevo fichero de configuración llamado por ejemplo blog.conf, podemos obviar las almohadillas que son ‘comentarios’:
<VirtualHost *:80> ServerName pymestic.net ServerAlias www.pymestic.net ServerAdmin postmaster@pymestic.net DocumentRoot /var/www/vhosts/wordpress <Directory /var/www/webs/pymestic.es/blog/> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
habilitar el nuevo sitio en apache
Habilitamos el sitio nuevo y recargamos la configuración de apache:
a2ensite blog.conf
service apache2 reload
Y probamos a abrir en un navegador el sitio: http://pymestic.net
instalar wordpress
Desde la url anterior carga el instalador de pocos pasos de wordpress:
Como menciona necesitará unos pocos datos de nosotros, básicamente las credenciales de la base de datos que acabamos de crear, y un prefijo para las tablas:
– Database name
– Database username
– Database password
– Database host
– Table prefix
Si no tenemos permisos para editar el fichero de configuración copiad el código y editar directamente el archivo:
El motivo de no tener permisos: estamos trabajando como root en la carpeta home del usuario webmaster.
Para resolver esta situación y poder hacer automática la instalación, en particular la escritura por www-data del fichero de configuración de WordPress wp-config.php, ejecutaremos estos dos comandos:
chown -R webmaster:www-data /var/www/vhosts/wordpress/
chmod -R 775 /var/www/vhosts/wordpress/
El primero restituye la propiedad del directorio, se la vuelve a dar al usuario webmaster y al grupo de apache2 www-data.
El segundo establece permisos rwx para usuario (webmaster) y grupo (www-data). Lectura y ejecución (php) para los demás.
Volvemos a intentarlo desde la interfaz web una vez restablecidos los permisos:
Ya lo tenemos preparado para realizar la instalación a falta de algunos datos más:
Completamos el formulario anterior. Y ya lo tenemos.
IMPORTANTE: NO utilizar ‘admin’ como nombre de usuario, y mejor si usamos la contraseña aleatoria que nos ofrece.
configuración de descarga automática
Usar el método descarga directo en WordPress es una forma alternativa a instalar un servidor FTP.
Para ello tenemos editar el fichero wp-config.php, y añadir al final este fragmento de código:
/* jblanco */ define(‘FS_METHOD’,’direct’); if(is_admin()) { add_filter('filesystem_method', create_function('$a', 'return "direct";' )); define( 'FS_CHMOD_DIR', 0751 ); }
Habilitando la descarga directa evitamos tener levantado un servidor FTP en el VPS solo para estos menesteres, ya que desde fuera no se verá (si miráis iptables el puerto 21 no está abierto al exterior), y conviene que sea así, FTP es inseguro.
instalación del idioma o idiomas preferidos
Procedemos a instalar el idioma Español, y ajustar la hora, y el formato para las url.
Desde ajustes localizad Europa / Madrid como Timezone.
Abajo del todo tenemos Site Language, pero solo está disponible English.
En Settings / Permalinks a mi me gusta Post name.
Debemos crear la carpeta languages dentro del directorio wp-content (en el caso de no existir) y subir a dicha carpeta los archivos .po y .mo del idioma correspondiente.
Para Español descargamos estos:
https://downloads.wordpress.org/translation/core/4.7/es_ES.zip
Con wget los descargamos, con unzip lo descomprimimos y con mv lo llevamos al sitio:
mkdir /var/www/vhosts/wordpress/wp-content/languages wget https://downloads.wordpress.org/translation/core/4.7/es_ES.zip unzip es_ES.zip Archive: es_ES.zip inflating: admin-es_ES.po inflating: admin-network-es_ES.po inflating: continents-cities-es_ES.po inflating: es_ES.po inflating: admin-es_ES.mo inflating: admin-network-es_ES.mo inflating: continents-cities-es_ES.mo inflating: es_ES.mo mv *.mo *.po /var/www/vhosts/wordpress/wp-content/languages
Ya podemos elegir Español como idioma de la interfaz.
Salta una actualización:
Buen momento para probar si funciona la descarga automática.
-
- probar wordpress y permisos de carpetas de subida de archivos
Conviene siempre probar a subir alguna imagen para comprobar que no hay que arreglar permisos.
-
- instalación de un firewall a wordpress: wordfence
Me gusta instalar wordfence, la versión gratuita del plugin ya nos ofrece una enorme calidad.
Instalar un firewall a WordPress
Lo localizamos en el repositorio de plugins, lo instalamos y lo activamos. A continuación lo configuramos, desde Wordfence / Options:
Las tres primeras:
– Update Wordfence automatically when a new version is released?
– Where to email alerts
– How does Wordfence get IPs: PHP’s builting
El apartado de Alertas yo recomiendo configurarlo así al principio:
Incluyo todos los escaneos menos el HIGH SENSITIVITY :
Esta es importante “Rate Limiting Rules”:
En el apartado ‘Login Security Options’ conviene añadir unos cuantos usuarios malignos, y bajar los intentos:
Y para acabar, hacia abajo del todo tenemos las ultimas opciones a tocar:
Grabamos y listo. Ya somos un poco más seguros.
Otras recomendaciones: securizar un poco Apache2 y deshabilitar wp-cron.php
En este artículo, que incluye vídeo tutorial, se nos muestra cómo securizar un poco más Apache2. Es importante no dar información por defecto, en Apache debemos ocultar información comprometida: el Sistema Operativo, Debian, la versión de Apache.
En Debian 8:
nano /etc/apache2/conf-available/security.conf
en otras distros:
nano /etc/apache2/conf.d/security
Para ello tocaremos las directivas ServerTokens estableciéndose a Prod, y ServerSignature estableciéndose a Off.
En este otro artículo se nos explica cómo desactivar el script wp-cron.php que se ejecuta cada vez que alguien visita nuestra página web hecha con WordPress. Es muy interesante aplicar este tip, ya que evitamos consumos innecesarios en el VPS , que se pueden dedicar a otros menesteres.
Opcional: Instalar un servidor de ftp interno (localhost)
aptitude install vsftpd
Y permitiremos que los usuarios locales (unix) puedan conectar.
De esta forma, y sin abrir en el firewall el puerto 21, podemos hacer ftp localhost desde los CMS como WordPress para poder actualizar sus componentes.
Ahora editamos la configuración:
nano /etc/vsftpd.conf
Y nos fijamos de que estén sin comentarios (activas) estas opciones:
-
-
- listen=YES
- local_enable=YES
- write_enable=YES
- local_umask=022
- allow_writeable_chroot=YES
- seccomp_sandbox=no
-
Y comentadas estas:
-
-
- #listen_ipv6=YES
- #ssl_enable=NO
-
Grabar y reiniciar el servicio:
service vsftpd restart
Probad a conectar desde localhost:
ftp localhost
ftp localhost ftp: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost.localdomain. 220 (vsFTPd 3.0.2) Name (localhost:root): webmaster 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp&amp;amp;amp;gt; ls 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. -rw-r--r-- 1 0 0 449616 Jan 04 21:00 es_ES.zip -rw-r--r-- 1 0 0 8709277 Dec 06 19:41 latest.zip drwxrwxr-x 5 2003 33 4096 Jan 07 16:10 wordpress 226 Directory send OK. ftp> bye 221 Goodbye.
Un extracto de la configuración que yo he dejado es esta:
cat /etc/vsftpd.conf |grep -v "^#" listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key allow_writeable_chroot=YES seccomp_sandbox=no
Certificado digital gratuito
Ahora es muy fácil obtener en https://www.startssl.com/ un certificado de clase 1. Os incluyo un vídeo con todo el proceso:
En un momento del proceso deberéis subir el certificado generado en el servidor, para generarlo estos dos comandos:
openssl req -newkey rsa:2048 -keyout pymesticnet.key -out pymesticnet.csr
Con esto generamos el certificado autofirmado en el servidor, después hacemos un cat del fichero pymesticnet.csr
cat pymesticnet.csr -----BEGIN CERTIFICATE REQUEST----- MIIC4TCCA...bla...bla...blaabc -----END CERTIFICATE REQUEST-----
Copiamos desde el primer guión hasta el último y lo pegamos en la web de startssl.com durante el proceso.
Antes de configurar el host virtual SSL en apache quitaremos la PASSPHRASE de la KEY:
openssl rsa -in pymesticnet.key -out pymesticnet.key.plain
Esta es la Key sin clave que usaremos en Apache.
Ahora editamos el host virtual SSL:
nano /etc/apache2/sites-enabled/default-ssl.conf <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerName pymestic.net ServerAlias www.pymestic.net ServerAdmin postmaster@pymestic.net DocumentRoot /var/www/vhosts/wordpress <Directory /var/www/vhosts/wordpress/> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCipherSuite ... SSLHonorCipherOrder on SSLCertificateChainFile /etc/apache2/certificados/1_root_bundle.crt SSLCertificateFile /etc/apache2/certificados/2_pymestic.net.crt SSLCertificateKeyFile /etc/apache2/certificados/pymesticnet.key.plain ... </VirtualHost> </IfModule>
Comprobamos en el host de puerto 80 que lo tenemos así:
cat /etc/apache2/sites-enabled/blog.conf <VirtualHost *:80> ServerName pymestic.net ServerAlias www.pymestic.net ServerAdmin postmaster@pymestic.net DocumentRoot /var/www/vhosts/wordpress <Directory /var/www/vhosts/wordpress/> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All </Directory> Redirect permanent / https://pymestic.net ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
El resultado se puede ver aquí: http://pymestic.net/
Ha sido un post largo, y crecerá, montar un VPS es algo que requiere cierta destreza con muchos aspectos de la informática: sistemas operativos, redes, y un largo etc de knowhow, aquí te dejo unas direcciones interesantes para comprobar tu trabajo.
Direcciones web con Utilidades DNS y más
- http://www.mxtoolbox.com
- http://www.dnsqueries.com/es
http://www.spamcannibal.org/- http://www.dnsstuff.com/
- http://www.dnsgoodies.com/
http://www.spamhelp.org/shopenrelay/- http://pingability.com/zoneinfo.jsp
- http://rbl-check.org/en/
- https://dnschecker.org/
Espero que os sea de utilidad.
Update Junio 2017:
Evitar enumeración de usuarios en WordPress: configuración del NiceName & Evitar que consigan romper una contraseña nada mejor que configurar Latch en tu WordPress.
Compartid!
También te puede interesar:
- https://sospedia.net/iptables/
- https://sospedia.net/iptables-borrar-una-regla-unban-ip/
- https://sospedia.net/tutorial-basico-de-iptables/
- https://sospedia.net/vps-ubuntu-configuracion-sobre-un-dominio-2018/
- https://sospedia.net/script-php-para-obtener-los-dominios-que-nos-han-atacado/
- https://sospedia.net/fail2ban-iptables/
hola amigo encontré este articulo y me gusto mucho.
antes quiero informarle que tengo un servidor vps en 1and1 con Ubuntu server 14.
tengo funcionando todo. excepto el email con autentificacion y el certificado digital con SSL
1.- puede usted ayudarme a configurar el email con autentificacion (lo necesito para recuperar contraseñas y notificaciones) si tiene que cobrar por su servicio dígame cuanto me cuesta y negociamos.
2.- Los comandos son compatibles con UBUNTU SERVER 14?
saludos.
Pingback: iredmail gestionar alias redirecciones y cuentas catch-all – SOSpedia
Pingback: Servidor Web Apache – SOSpedia
Pingback: Como sincronizar un disco USB – jblanco.org
Pingback: Como sincronizar un disco USB – Jose Blanco Vega
Pingback: Baneos persistentes con Fail2Ban 2018 – SOSpedia.net
Gracias por el artículo. Una cosa para advertir, en la sección de su artículo “Direcciones web con utilidades DNS y más”, las siguientes dos herramientas no están en condiciones de funcionamiento.
http://ww17.spamcannibal.org/
http://www.spamhelp.org/shopenrelay/
Debes comprobarlo.
Hay otra herramienta para la prueba SMTP y la verificación de la configuración del servidor.
https://dnschecker.org/smtp-test-tool.php
Debes comprobarlo.
Gracias David