Generar clave publica/privada y copiarla en el servidor para acceder sin usar la contraseña

Vamos a generar una clave publico/privada para acceder a un servidor sin estar metiendo constantemente la contraseña

Paso 1.

Genero la clave publica/privada
ssh-keygen -b 4096 -t rsa

Dale a enter cada vez que te aparezca un dialogo.

Lo copio al servidor que quiero acceder en un futuro sin pedir la contraseña sustituyte 199.199.199.199 por la ip de tu servidor.
ssh-copy-id root@199.199.199.199
Nos pedira la contraseña del servidor y cuando este validado ya agregado nuestra clave en el servidor.

ddns con ovh

Instalamos el cliente linux ddclient:

Configuración del fichero /etc/ddclient.conf

/etc/ddclient.conf

protocol=dyndns2
use=web, web=checkip.dyndns.com, web-skip=’IP Address’
server=www.ovh.com
login=informaticosmurcia.es-usuariodemo
password=’password’
ssl=yes
ddns.informaticosmurcia.es

Habilitar el servicio al inicio del sistema

systemctl enable ddclient

Reiniciar el servicio

systemctl restart ddclient

podemos ver el log en /var/log/syslog

saldrá algo parecido a esto:

ddns ddclient[1832]: SUCCESS: updating ddns.informaticosmurcia.es: good: IP address set to 83.34.138.5

Eliminar sincronizacion Master – Slave MySQL 5.7

Entramos en el servidor slave y escribimos los siguientes comandos.

mysql> STOP SLAVE;
mysql> RESET SLAVE ALL;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW SLAVE STATUS\G;
Empty set (0.00 sec)

ERROR: 
No query specified

Restauraría la copia de seguridad de
/etc/mysql/mysql.conf.d/mysqld.cnf
para eliminar todos los parámetros configurados anteriormente y no dejar rastro de que alguna vez se utilizó como slave.

Error master and slave have equal MySQL server UUIDs

Haciendo mi primera prueba de creación de un servidor de MySQL
Maestro-Esclavo usando 2 maquinas virtuales.
He configurado la primera maquina virtual y clonandola para instalar el esclavo

A la hora de activar el maestro esclavo (en el servidor esclavo) me ha dado el siguiente error:

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

Nos indica que tenemos el mismo identificador UUIDs en ambos servidores, asi que toca cambiar uno de ellos. En mi caso he cambiado una letra del UUID del servidor esclavo y reiniciado el servidor.

Para cambiar el UUID hay editar el siguiente fichero:

/var/lib/mysql$ nano /var/lib/mysql/auto.cnf

server-uuid=d9dd14dc-386f-11ea-bc23-e2d5b8babacc

Cambiamos un caracter cualquiera del server-uuid.

Reiniciamos el servidor MySQL y listo.

Instalación Master – Slave en MySQL 5.7

Escenario:
– Tenemos 2 servidores. Ambos tienen instalado MySQL 5.7

-NOTA: Tanto en el servidor master como en el servidor slave sería conveniente que realizases una copia de seguridad de fichero
/etc/mysql/mysql.conf.d/mysqld.cnf
En mi caso realizo la copia de seguridad para probar el Master – Slave pero después de realizar la prueba quiero dejar los servidores independientes y si tengo el backup será muchos mas fácil eliminar las configuraciones especificas de cada uno para ser master y slave.

1-Paso: Nos vamos al servidor Master y configuramos el fichero my.cnf
Descomentando la lineas indicadas y configurandolo segun nuestro parámetros.


sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Descomentando la siguientes lineas

bind-address = 127.0.0.1 #Sustituir ip por la del servidor slave
server-id = 1 #Id que asignamos al master
log_bin      = /var/log/mysql/mysql-bin.log
binlog_do_db = ctidb
binlog_do_db = ctidb2

Nota:
binlog_do_db –> Aqui se puede seleccionar la base de datos que quieres que se sincronice con el slave. En mi caso quiero sincronizar dos base de datos «ctidb» y «ctidb2», si quisieramos mas pues añadiriamos tantas lineas como deseemos.
Si deseamos copiar cualquier tabla, podemos comentar «bindlog_do_db» y se copiarian todas las tablas.

Paso2:
Reiniciamos el servidor MySQL para aplicar los cambios.

sudo service mysql restart

Paso3:
Nos conectamos a la base de datos y le damos privilegios al usuario que utilizamos para que el esclavo se conecte al master.

mysql -u root -p

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Paso 4:
Bloqueamos la base de datos para que nadie pueda realizar ningun cambio.

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.01 sec)

Escrimibmos el comando para ver el estado en el que se ha quedado el master. Nos tendremos que apuntar el numero de «position» Que es la posicion en la que empezará el master a replicar.

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

En otro terminal deberás realizar la copia de seguridad de todas tus bases de datos con mysqldump.
Una vez que tengas realizada la copia de seguridad puedes desbloquear la tabla con el siguiente comando.

UNLOCK TABLES;

Paso5:
Configuramos la base de datos MySQL del slave.
Para ello crearemos la base de datos y restauraremos la copia de seguridad de las bases de datos del master.
ejemplo:

CREATE DATABASE newdatabase;
EXIT;
mysql -u root -p newdatabase < /path/to/newdatabase.sql
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Configuramos el fichero de mysql configurando:
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
#binlog_do_db = newdatabase

Reiniciamos el servidor slave para aplicar los cambios.

sudo service mysql restart

El siguiente paso es habilitar la replicación desde el shell de MySQL.

Abra el shell MySQL una vez más y escriba los siguientes detalles, reemplazando los valores para que coincidan con su información:
CHANGE MASTER TO MASTER_HOST='192.168.5.81',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=  154;

Activamos el slave

mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

Comprobamos el estado de la replicacion.

mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.5.81
                  Master_User: slave_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: No
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 154
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1593
                Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 200120 09:44:58
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

ERROR: 
No query specified

En mi caso tengo un error. Tengo el mismo UUID tanto en el máster como en esclavo.(debido a que he utilizado un clon del master para hacer el esclavo) En otro post pongo como solucionarlo.

Una vez solucionado aparecera algo como esto.

mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.5.81
                  Master_User: slave_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql-relay-bin.000003
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 527
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: e8e96aff-38ff-11ea-ac47-e2f299251813
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

ERROR: 
No query specified

Instalacion MySQL 5.7 con acceso remoto

Servidor utilizado: Ubuntu Server 18.04

1- Actualizamos el ubuntu

sudo apt-get update
sudo apt-upgrade

2- Instalación de MySQL 5.7

sudo apt install mysql-server

Al ejecutar el comando nos saldrá todos los paquetes que se van a instalar.
Pulsamos «Y» y le damos al intro.

root@mysql-master:~# sudo apt install mysql-server
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libaio1 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.1-6 libfcgi-perl libgdbm-compat4 libhtml-parser-perl libhtml-tagset-perl
  libhtml-template-perl libhttp-date-perl libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libperl5.26 libtimedate-perl liburi-perl mysql-client-5.7
  mysql-client-core-5.7 mysql-common mysql-server-5.7 mysql-server-core-5.7 perl perl-modules-5.26
Suggested packages:
  libdata-dump-perl libipc-sharedcache-perl libwww-perl mailx tinyca perl-doc libterm-readline-gnu-perl | libterm-readline-perl-perl make
The following NEW packages will be installed:
  libaio1 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.1-6 libfcgi-perl libgdbm-compat4 libhtml-parser-perl libhtml-tagset-perl
  libhtml-template-perl libhttp-date-perl libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libperl5.26 libtimedate-perl liburi-perl mysql-client-5.7
  mysql-client-core-5.7 mysql-common mysql-server mysql-server-5.7 mysql-server-core-5.7 perl perl-modules-5.26
0 upgraded, 25 newly installed, 0 to remove and 1 not upgraded.
Need to get 26.2 MB of archives.
After this operation, 198 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y

3- Ejecutamos la instalación segura de MySQL.
Durante el proceso nos preguntará:
– Utilizar el «VALIDATE PASSWORD PLUGIN» que comprueba si la contraseña que hemos puesto al usuario es robusta. En mi caso no lo voy a activar.
– Nos preguntara la contraseña que deseamos para el usuario root. Lo tendremos que introducir 2 veces.
– Nos preguntara si deseamos eliminar el usuario anonymous. Es aconsejable eliminarlo. En mi caso marcaré «Y» para eliminarlo.
– Nos preguntará si deseamos desabilitar el acceso root remotamente. En mi caso lo quiero dejar habilitado porque luego desde mi equipo (otra maquina) quiero acceder a través de MySQL Workbench para administrarlo de una forma mas comoda. Yo marcaré «N»
– Nos preguntará si deseamos eliminar la base de pruebas llamada «test». Yo la eliminaré marcando «Y»
– Por último nos preguntará si deseamos aplicar todos los privilegios que hemos configurado a las tablas inmediatamente. ¡Por supuesto!

sudo mysql_secure_installation
root@mysql-master:~# sudo mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: 
Please set the password for root here.

New password: 
Re-enter new password: 
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
 ... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : 
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y

4- Configurar el acceso remoto desde otra maquina.
Editamos el fichero de configuración de MySQL. comentando la linea de bind-address para permitir acceder remotamente desde cualquier maquina y skip-external-locking para que pueda escuchar las peticiones TCP hacia nuestro servidor.
quedando asi:
#skip-external-locking
#bind-address = 127.0.0.1

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

5- Reiniciamos el servidor MySQL para que se aplique este cambio

sudo service mysql restart

6- Establecemos los permisos
– Nos conectamos a la base de datos y ejecutamos las siguientes consultas.
– ‘root’@’%’ –> % Indica desde cualquier direccion ip
– Cambia «password» por tu contraseña

mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;

FIN!
Ya podemos acceder desde otro equipo mediante root.
Una vez configurado todo el equipo seria conveniente habilitar el bind-address poniendo las ip de los equipos externos que necesitan acceder a la MySQL y evitar un problema de dejar expuesto a todo el mundo el puerto de MySQL

Instalar TeamSpeak 3 server en Ubuntu 18

Paso 1:
Entra a tu maquina mediante SSH como root

Paso 2:
Actualiza el servidor.

apt-get update
apt-get upgrade
apt-get dist-upgrade

Paso 3:
Creamos un usuario para Teamspeak 3 server.

adduser --disabled-login teamspeak

Rellena el formulario para crear el usuario teamspeka. Puedes presionar Enter en todos las preguntas.

Paso 4:

cd /home/teamspeak/;su teamspeak

Paso 55:
Descargaremos la última version del teamspeak de su página oficial mediante el comando wget. Descomprimimos y aceptamos la licencia.

wget https://files.teamspeak-services.com/releases/server/3.10.2/teamspeak3-server_linux_amd64-3.10.2.tar.bz2
tar xvfj teamspeak3-server_linux_amd64-3.10.2.tar.bz2
cd teamspeak3-server_linux_amd64
cp * -R /home/teamspeak
cd ..
rm -r teamspeak3-server_linux_amd64
rm teamspeak3-server_linux_amd64-3.10.2.tar.bz2
touch .ts3server_license_accepted

Paso 6:
Ahora nosotros arrancamos el TeamSpeak 3 Server.

./ts3server_startscript.sh start

En el primer arranque nos dará el token para ser administradores. Guardalo.

Paso 6.1:
Press Enter. This will return to the command prompt.

Paso 7:
Ahora paramos el servidor teamspeak y volvemos al usuario root.

./ts3server_startscript.sh stop
exit

Paso 8:
Ahora vamos a crear un script para cuando arranque el servidor arranque automaticamente el servidor TeamSpeak.

Ejecuta este comando (Debe abrirte un editor de textos)

nano /lib/systemd/system/ts3server.service

Paso 8.1.
Copia y pega esto:

[Unit]
Description=Teamspeak Service
Wants=network.target

[Service]
WorkingDirectory=/home/teamspeak
User=teamspeak
ExecStart=/home/teamspeak/ts3server_minimal_runscript.sh
ExecStop=/home/teamspeak/ts3server_startscript.sh stop
ExecReload=/home/teamspeak/ts3server_startscript.sh restart
Restart=always
RestartSec=15

[Install]
WantedBy=multi-user.target

Paso 8.2:
Guardar y salir del fichero.

Pulsa CTRL + X , luego pulsa en Y

Paso 9:
Ahora nosotros activamos el servicio de teamspeak.

systemctl enable ts3server.service

Paso 9.1:
Reiniciamos el servidor

reboot

Paso 10:
Nos volvemos a conectar al servidor mediante SSH y comprobamos si el servidor de TeamSpeak esta activo:

systemctl status ts3server

Paso 10.1:
En la salida deberia reponderte en alguna linea algo como esto:

Active: active (running)

Paso 10.2:
Para volver al prompt, presiona la tecla Q.

Instalar servidor vpn (openVPN) + creacion subdominio en ubuntu

Para instalar OpenVPN server con Interfaz web para administrar usuarios basta con ejecutar los siguientes comandos:

wget https://raw.githubusercontent.com/theonemule/simple-openvpn-server/master/openvpn.sh
chmod +x openvpn.sh
./openvpn.sh --adminpassword=TestVPN25

Una vez instalado simplemente tenemos que entrar mediante ip mediante https

Estos comandos lo he sacado de la página https://clouding.io/kb/instalar-openvpn-en-ubuntu/ . Te aconsejo visitarla ya que solo he puesto lo básico para instalar el VPN.

Una vez instalado el servidor OpenVPN he querido poder entrar al panel de control a través del subdominio vpn.informaticosmurcia.es para poder acceder de una forma sencilla y fácil de recordar.

Bueno antes de nada saber que el script de arriba instala el servidor web lighttpd para poder realizar la administración del servidor VPN. Yo de forma particular utilizo en mi servidor de pruebas el servidor web nginx.

Primero voy a mover los ficheros que el script de OpenVPN me ha generado en /var/www/ a una carpeta diferente para poder luego redirigir el trafico de la url vpn.informaticosmurcia.es a esa carpeta:

  • Creo un directorio dentro de /var/www/ llamado vpn.informaticosmurcia.es
  • Muevo los ficheros creados por el script de instalacion del OpenVPN
    • mv /var/www/download.sh /var/www/vpn.informaticosmurcia.es/download.sh
    • mv /var/www/index.sh /var/www/vpn.informaticosmurcia.es/index.sh
    • Editamos el fichero /lighttpd.conf y cambiamos el puerto por defecto y el directorio raiz por defecto
      server.document-root        = "/var/www/vpn.informaticosmurcia.es"
      server.port                 = 6969

      Una vez cambiado reiniciamos el servicio lighttpd.

       service lighttpd restart
    • Creamos el fichero de configuracion del subdominio en nginx.
      nano /etc/nginx/sites-available/vpn.informaticosmurcia.es

      Realizamos la configuración del fichero:

      server {
        listen          80;
        server_name     vpn.informaticosmurcia.es;
       
        location / {
              proxy_set_header X-Forwarded-Host $host;
              proxy_set_header X-Forwarded-Server $host;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_pass https://127.0.0.1:6969/;
        }
      
       
      }
      
      

      Lo que hace Nginx es que todo lo que provenga de la url vpn.informaticosmurcia.es lo vamos a rediriguir de forma tasparente a nuestro servidor lighttpd que esta en el puerto 6969 en nuestro servidor.

    • Habilitamos en el servidor nginx el dominio.
      sudo ln -s /etc/nginx/sites-available/vpn.informaticosmurcia.es /etc/nginx/sites-enabled/vpn.informaticosmurcia.es

      Y reiniciamos el servidor nginx

      sudo service nginx restart

      Una vez hecho ya podemos acceder de forma comoda a nuestro servidor OpenVPN a través de vpn.informaticosmurcia.es

  • —- Dejo el fichero de configuración por si os da algun error:
  • :/etc/openvpn$ cat server.conf
    port 1194
    proto udp
    dev tun
    sndbuf 0
    rcvbuf 0
    ca ca.crt
    cert server.crt
    key server.key
    dh dh.pem
    tls-auth ta.key 0
    topology subnet
    server 10.8.0.0 255.255.255.0
    ifconfig-pool-persist ipp.txt
    push "redirect-gateway def1 bypass-dhcp"
    push "dhcp-option DNS 8.8.8.8"
    push "dhcp-option DNS 8.8.4.4"
    keepalive 10 120
    cipher AES-256-CBC
    
    user nobody
    group nogroup
    persist-key
    persist-tun
    status openvpn-status.log
    verb 3
    crl-verify crl.pem

Edito: Me ha ocurrido que instalando el servidor VPN en una maquina virtual para hacer pruebas el cliente no podia navegar. La solución es la siguiente.

iptables -I FORWARD -i tun0 -o eth0 -s 10.7.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -I POSTROUTING -o eth0 -s 10.7.0.0/24 -j MASQUERADE


tun0 es la interfaz que lan del servidor vpn
eth0 es la interfaz donde se va a redirigir el trafico hacia internet.