One place for hosting & domains

      Proteger

      Como instalar e proteger o phpMyAdmin no Ubuntu 20.04


      Existe uma versão anterior deste tutorial, escrita por Brennan Bearnes.

      Introdução

      Embora muitos usuários precisam da funcionalidade de um sistema de gerenciamento de banco de dados como o MySQL, talvez não se sintam à vontade para interagir com o sistema unicamente a partir do prompt do MySQL.

      O phpMyAdmin foi criado para que os usuários possam interagir com o MySQL através de uma interface Web. Neste guia, discutiremos como instalar e proteger o phpMyAdmin para que você possa usá-lo com segurança para gerenciar seus bancos de dados em um sistema Ubuntu 20.04.

      Pré-requisitos

      Para completar este guia será necessário:

      Além disso, existem algumas considerações de segurança importantes ao se utilizar um software como o phpMyAdmin, uma vez que ele:

      • Comunica-se diretamente com sua instalação do MySQL.
      • Trata da autenticação usando credenciais para o MySQL.
      • Executa e retorna resultados para consultas SQL arbitrárias.

      Por isso e também por ser um aplicativo PHP amplamente utilizado – sendo alvo frequente de ataque, nunca execute o phpMyAdmin em sistemas remotos em uma conexão HTTP simples.

      Caso você não tenha um domínio existente configurado com um certificado SSL/TLS, siga este guia sobre como proteger o Apache com o Let’s Encrypt no Ubuntu 20.04. Isso irá exigir que você registre um nome de domínio, crie registros DNS para seu servidor e configure um host Virtual Apache.

      Passo 1 — Instalando o phpMyAdmin

      Você pode usar o APT para instalar o phpMyAdmin a partir dos repositórios padrão do Ubuntu.

      Usando seu non-root sudo user, atualize o índice de pacotes do seu servidor:

      Em seguida, você pode instalar o pacote phpmyadmin. Com esse pacote, a documentação oficial também recomenda que você instale algumas extensões PHP em seu servidor para habilitar certas funcionalidades e melhorar o desempenho.

      Se você seguiu o tutorial de pré-requisito da pilha LAMP, vários desses módulos foram instalados com o pacote php. No entanto, é recomendável que você também instale estes pacotes:

      • php-mbstring: um módulo para gerenciar strings não-ASCII e converter strings para diferentes codificações
      • php-zip: esta extensão possui suporte de upload de arquivos .zip para o phpMyAdmin
      • php-gd: habilita o suporte para a biblioteca gráfica do GD
      • php-json: fornece o PHP com suporte para a serialização JSON
      • php-curl: permite que o PHP interaja com diferentes tipos de servidores usando protocolos diferentes

      Execute o seguinte comando para instalar esses pacotes em seu sistema. No entanto, note que o processo de instalação exige que você faça algumas escolhas para configurar o phpMyAdmin corretamente. Analisaremos essas opções em instantes:

      • sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

      Estas são as opções que você deve escolher quando solicitado para configurar sua instalação corretamente:

      • Na seleção do servidor, escolha apache2
        Aviso: quando o prompt aparecer, o “apache2” estará destacado, mas não estará selecionado. Se você apertar a tecla SPACE para selecionar o Apache, o instalador não irá mover os arquivos necessários durante a instalação. Aperte as teclas SPACE, TAB e, então, ENTER para selecionar o Apache.
      • Selecione Yes quando indagado quanto a se usará o dbconfig-common para configurar o banco de dados
      • Será solicitado que escolha e confirme a senha do aplicativo MySQL para o phpMyAdmin

      Nota: assumindo que você instalou o MySQL seguindo o Passo 2 do tutorial de pré-requisito da pilha LAMP, você pode ter decidido habilitar o plug-in de validação de senha. Assim como este artigo, habilitar este componente acionará um erro caso você tente definir uma senha para o usuário phpmyadmin:

      erro de validação de senha do phpMyAdmin

      Para resolver isso, selecione a opção anular para interromper o processo de instalação. Em seguida, abra seu prompt do MySQL:

      Caso tenha habilitado a autenticação por senha para o usuário root do MySQL, execute este comando e, em seguida, digite sua senha quando solicitada:

      A partir do prompt, execute o seguinte comando para desabilitar o componente de validação de senha. Observe que isso não desinstalará o componente, apenas impedirá que ele seja carregado em seu servidor MySQL:

      • UNINSTALL COMPONENT "file://component_validate_password";

      Em seguida, feche o cliente do MySQL:

      Em seguida, tente instalar o pacote phpmyadmin novamente. Ele funcionará como esperado:

      • sudo apt install phpmyadmin

      Assim que o phpMyAdmin for instalado, você pode abrir o prompt do MySQL novamente com o sudo mysql ou o mysql -u root -p e, em seguida, executar o seguinte comando para habilitar novamente o componente de validação de senha:

      • INSTALL COMPONENT "file://component_validate_password";

      O processo de instalação adiciona o arquivo de configuração do Apache phpMyAdmin no diretório /etc/apache2/conf-enabled/, onde ele é lido automaticamente. A única tarefa deste tutorial que falta para terminar a configuração do Apache e do PGP para funcionarem com o phpMyAdmin, é de habilitar a extensão PHP mbstring. Isso pode ser feito digitando:

      Depois disso, reinicie o Apache para as suas alterações serem reconhecidas:

      • sudo systemctl restart apache2

      O phpMyAdmin está instalado e configurado para funcionar com o Apache. Entretanto, antes de fazer login e começar a interagir com seus bancos de dados do MySQL, será necessário garantir que seus usuários do MySQL tenham os privilégios necessários para interagir com o programa.

      Passo 2 — Ajustando a autenticação e os privilégios do usuário

      Quando você instalou o phpMyAdmin no seu servidor, ele criou automaticamente um usuário de banco de dados chamado phpmyadmin que executa certos processos subjacentes para o programa. Em vez de fazer login como esse usuário com a senha administrativa definida durante a instalação, é recomendável que você faça log in como usuário root do MySQL ou como um usuário dedicado para gerenciar os bancos de dados através da interface phpMyAdmin.

      Configurando a senha de acesso para a conta de raiz do MySQL

      Nos sistemas Ubuntu que executam o MySQL 5.7 (e as versões posteriores), por padrão, o usuário root do MySQL é configurado para autenticar usando o plug-in auth_socket e não com uma senha. Isso permite maior segurança e usabilidade em muitos casos, mas também pode complicar as coisas quando for necessário permitir que um programa externo — como o phpMyAdmin — acesse o usuário.

      Para fazer login no phpMyAdmin como seu usuário root do MySQL, será necessário mudar seu método de autenticação de auth_socket para um método que utilize senha, se ainda não tiver feito isso. Para fazer isso, abra o prompt do MySQL do seu terminal:

      Em seguida, verifique quais os métodos de autenticação cada conta de usuário do seu MySQL utilizam com o seguinte comando:

      • SELECT user,authentication_string,plugin,host FROM mysql.user;

      Output

      +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

      Neste exemplo, é possível ver que o usuário root autenticou usando o plug-in auth_socket. Para configurar a conta root para autenticar com uma senha, execute o comando ALTER USER. Certifique-se de alterar a password para uma senha forte da sua escolha:

      • ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

      Nota: a instrução anterior, ALTER USER, configura o usuário root do MySQL para autenticar-se com o plug-in caching_sha2_password. De acordo com a documentação oficial do MySQL, o caching_sha2_password é o plug-in de autenticação preferencial do MySQL, pois ele fornece uma criptografia de senha mais segura do que o mysql_native_password, que é o plug-in mais antigo (mas ainda assim bastante utilizado).

      No entanto, algumas versões do PHP não funcionam de maneira confiável com o caching_sha2_password. O PHP informou que esse problema foi corrigido na versão do PHP 7.4, mas caso você ache um erro ao tentar fazer login no phpMyAdmin, como opção, defina o root para autenticar-se com o mysql_native_password:

      • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

      Em seguida, verifique os métodos de autenticação utilizados pelos seus usuários para confirmar que o root já não é autenticado usando o plug-in auth_socket:

      • SELECT user,authentication_string,plugin,host FROM mysql.user;

      Output

      +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | caching_sha2_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

      Através dessa saída é possível ver que o usuário root passará a autenticar usando uma senha. Agora, é possível fazer login na interface phpMyAdmin como seu usuário root com a senha que você definiu para ele aqui.

      Configurando a senha de acesso para um usuário do MySQL dedicado

      Como alternativa, alguns podem achar que é melhor eles se conectarem ao phpMyAdmin com um usuário dedicado. Para fazer isso, abra a shell do MySQL novamente:

      Se você tiver a autenticação por senha habilitada para o root user, como descrito na seção anterior, você precisará executar o seguinte comando e digitar sua senha quando solicitada para poder se conectar:

      A partir daí, crie um novo usuário e dê a ele uma senha forte:

      • CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

      Nota: novamente, dependendo da versão do PHP que você instalou, aconselhamos definir seu novo usuário para autenticar-se com o mysql_native_password em vez do caching_sha2_password:

      • ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

      Então, conceda ao seu novo usuário os privilégios apropriados. Por exemplo, é possível conceder os privilégios de usuário para todas as tabelas dentro do banco de dados, além do poder de adicionar, alterar e remover os privilégios de usuário, com este comando:

      • GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

      Despois disso, saia do shell do MySQL:

      Agora, é possível acessar a interface Web, acessando o nome de domínio ou endereço IP público do seu servidor seguido por /phpmyadmin:

      https://your_domain_or_IP/phpmyadmin
      

      phpMyAdmin login screen

      Faça login na interface como usuário root ou com o novo nome de usuário e senha que você acabou de configurar.

      Quando fazer login, verá a interface de usuário que se parecerá com isso:

      phpMyAdmin user interface

      Agora que você consegue se conectar e interagir com o phpMyAdmin, tudo o que resta a se fazer é fortalecer a segurança do seu sistema para protegê-lo de ataques.

      Passo 3 — Protegendo sua instância phpMyAdmin

      Devido a sua onipresença, o phpMyAdmin é alvo conhecido de ataque. Você deverá tomar cuidado extra para evitar o acesso não autorizado. Uma maneira de fazer isso é colocar um gateway na frente do aplicativo inteiro utilizando a autenticação integrada .htaccess e as funcionalidades da autorização.

      Para fazer isso, você deve primeiro habilitar o uso da substituição do arquivo .htaccess através da edição do arquivo de configuração Apache da sua instalação do phpMyAdmin.

      Use seu editor de texto preferido para editar o arquivo phpmyadmin.conf que foi colocado no diretório de configuração do Apache. Aqui, usaremos o nano:

      • sudo nano /etc/apache2/conf-available/phpmyadmin.conf

      Adicione uma diretriz de AllowOverride All na seção <Directory /usr/share/phpmyadmin> do arquivo de configuração, desta forma:

      /etc/apache2/conf-available/phpmyadmin.conf

      <Directory /usr/share/phpmyadmin>
          Options FollowSymLinks
          DirectoryIndex index.php
          AllowOverride All
          . . .
      

      Quando tiver adicionado essa linha, salve e feche o arquivo. Se você utilizou o nano para editor o arquivo, faça isso pressionando CTRL + X, Y e, depois, ENTER.

      Para implementar as alterações feitas, reinicie o Apache:

      • sudo systemctl restart apache2

      Agora que o arquivo .htaccess foi habilitado para uso em seu aplicativo, será necessário criar um arquivo que realmente implemente alguma segurança.

      Para que isso seja bem-sucedido, o arquivo deve ser criado dentro do diretório do aplicativo. Crie o arquivo necessário e o abra no seu editor de texto com privilégios raiz, digitando:

      • sudo nano /usr/share/phpmyadmin/.htaccess

      Dentro desse arquivo, digite as seguintes informações:

      /usr/share/phpmyadmin/.htaccess

      AuthType Basic
      AuthName "Restricted Files"
      AuthUserFile /etc/phpmyadmin/.htpasswd
      Require valid-user
      

      Eis o que cada uma dessas linhas significa:

      • AuthType Basic: esta linha especifica o tipo de autenticação que você está implementando. Esse tipo irá implementar a autenticação por senha, utilizando um arquivo de senha.
      • AuthName: define a mensagem da caixa de diálogo da autenticação. Você deve manter essas definições com texto vago, no intuito de evitar que usuários não autorizados tenham acesso às informações sobre o que estiver sendo protegido.
      • AuthUserFile: define o local do arquivo de senha que será usado para autenticação. Esse arquivo deve permanecer fora dos diretórios que estão sendo atendidos. Criaremos esse arquivo em breve.
      • Require valid-user: especifica que apenas os usuários autenticados devem receber acesso a este recurso. Isto é o que realmente impede os usuários não autorizados de entrarem.

      Quando você terminar, salve e feche o arquivo.

      O local que você selecionou para seu arquivo de senha foi /etc/phpmyadmin/.htpasswd. Agora, é possível criar este arquivo e encaminhá-lo para um usuário inicial com o utilitário htpasswd:

      • sudo htpasswd -c /etc/phpmyadmin/.htpasswd username

      Será solicitado que selecione e confirme uma senha para o usuário que está criando. Depois disso, o arquivo é criado com a senha verificada que você digitou.

      Se quiser inserir um usuário adicional, será necessário fazer isso sem o sinalizador -c, desta maneira:

      • sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

      Agora, quando acessar seu subdiretório do phpMyAdmin será solicitado o nome e senha da conta adicional que você acabou de configurar:

      https://domain_name_or_IP/phpmyadmin
      

      phpMyAdmin apache password

      Após digitar a autenticação do Apache, você será levado para a página de autenticação regular do phpMyAdmin para digitar suas credenciais do MySQL. Ao adicionar um conjunto extra de credenciais não-MySQL, você está fornecendo uma camada adicional de segurança ao seu banco de dados. Isso é o que queremos, pois, o phpMyAdmin ficou vulnerável a ameaças de segurança anteriormente.

      Conclusão

      Agora, você deve ter o phpMyAdmin configurado e pronto para uso no seu servidor Ubuntu 20.04. Ao utilizar esta interface, você conseguirá criar bancos de dados, usuários, tabelas e realizar operações usuais como excluir e modificar estruturas e dados.



      Source link

      [Guía de inicio rápido] sobre cómo instalar y proteger Redis en Ubuntu 20.04


      Introducción

      Redis es un sistema de almacenamiento claves-valores en memoria conocido por su flexibilidad, su rendimiento y su amplia compatibilidad con varios idiomas. En este tutorial de inicio rápido, se muestra cómo instalar, configurar y proteger Redis en un servidor de Ubuntu 20.04.

      Requisitos previos

      Para completar esta guía, necesitará acceso a un servidor de Ubuntu 20.04 que tenga un non-root user con privilegios sudo y un firewall configurado con ufw. Puede establecerlos siguiendo nuestra Guía de configuración inicial del servidor para Ubuntu 20.04.

      Paso 1: Instalar y configurar Redis

      Comience actualizando el caché de paquetes apt local:

      A continuación, escriba lo siguiente para instalar Redis:

      • sudo apt install redis-server

      Luego, abra el archivo de configuración de Redis con el editor de texto que prefiera:

      • sudo nano /etc/redis/redis.conf

      Dentro del archivo, encuentre la directiva supervised que le permite declarar un sistema init para administrar Redis como un servicio. Debido a que se está ejecutando Ubuntu, el cual utiliza el sistema init systemd, cambie el valor no a systemd:

      /etc/redis/redis.conf

      . . .
      
      # If you run Redis from upstart or systemd, Redis can interact with your
      # supervision tree. Options:
      #   supervised no      - no supervision interaction
      #   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
      #   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
      #   supervised auto    - detect upstart or systemd method based on
      #                        UPSTART_JOB or NOTIFY_SOCKET environment variables
      # Note: these supervision methods only signal "process is ready."
      #       They do not enable continuous liveness pings back to your supervisor.
      supervised systemd
      
      . . .
      

      Guarde y cierre el archivo cuando termine. Si utilizó nano para editar el archivo, hágalo pulsando CTRL + X, Y y, luego, ENTER.

      A continuación, reinicie el servicio de Redis para reflejar los cambios realizados en el archivo de configuración:

      • sudo systemctl restart redis.service

      Para comprobar que Redis funcione de forma correcta, establezca conexión con el servidor utilizando redis-cli, el cliente de línea de comandos de Redis:

      En la siguiente línea de comandos, realice una prueba de conectividad con el comando ping:

      Output

      PONG

      Este resultado confirma que la conexión del servidor está activa. A continuación, asegúrese de poder configurar las claves ejecutando lo siguiente:

      Output

      OK

      Recupere el valor ingresando lo siguiente:

      Suponiendo que todo funciona, podrá recuperar el valor almacenado:

      Output

      "It's working!"

      Una vez que confirme que puede obtener el valor, cierre la línea de comandos de Redis para volver al shell:

      Paso 2: Configurar una contraseña de Redis

      Puede configurar una contraseña de Redis directamente en el archivo de configuración de /etc/redis/redis.conf. Abra ese archivo de nuevo con su editor preferido:

      • sudo nano /etc/redis/redis.conf

      Desplácese a la sección SECURITY y busque una directiva comentada que diga:

      /etc/redis/redis.conf

      . . .
      # requirepass foobared
      . . .
      

      Elimine el # para quitar los comentarios y cambie foobared por una contraseña segura.

      /etc/redis/redis.conf

      . . .
      requirepass your_redis_password
      . . .
      

      Guarde y cierre el archivo después de configurar la contraseña, luego reinicie Redis:

      • sudo systemctl restart redis.service

      Para probar que la contraseña funciona, abra el cliente de Redis:

      A continuación se muestra una secuencia de comandos utilizados para comprobar que la contraseña de Redis funciona. El propósito del primer comando es configurar una clave para un valor antes de la autenticación:

      No funcionará ya que no se autenticó, de forma que Redis muestra un error:

      Output

      (error) NOAUTH Authentication required.

      El siguiente comando se autentica con la contraseña especificada en el archivo de configuración de Redis:

      Redis lo reconoce:

      Output

      OK

      Después de eso, tendrá éxito al ejecutar de nuevo el comando anterior:

      Output

      OK

      get key1 consulta a Redis por el valor de la nueva clave.

      Output

      "10"

      Después de confirmar que es capaz de ejecutar comandos en el cliente de Redis tras la autenticación, puede salir de redis-cli:

      Paso 3: Renombrar comandos peligrosos

      La característica adicional de seguridad incorporada en Redis implica renombrar o desactivar algunos comandos considerados peligrosos. Algunos de los comandos considerados peligrosos: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME, y DEBUG. Desactivar o renombrar estos y otros comandos hace que sea más difícil para los usuarios no autorizados volver a configurar, destruir o eliminar de otra manera sus datos.

      Para renombrar o desactivar comandos de Redis, vuelva a abrir el archivo de configuración:

      • sudo nano /etc/redis/redis.conf

      Advertencia: Los siguientes pasos para desactivar y renombrar comandos son ejemplos. Sólo debe optar por desactivar o renombrar los comandos que le resulten pertinentes. Puede revisar la lista completa de comandos y determinar cómo pueden ser utilizados indebidamente en redis.io/commands.

      Para desactivar un comando, simplemente renómbrelo de modo que pase a ser una cadena vacía (simbolizado por un par de comillas sin caracteres entre ellos), como se muestra a continuación:

      /etc/redis/redis.conf

      . . .
      # It is also possible to completely kill a command by renaming it into
      # an empty string:
      #
      rename-command FLUSHDB ""
      rename-command FLUSHALL ""
      rename-command DEBUG ""
      . . .
      

      Para renombrar un comando, asígnele otro nombre como se muestra en los ejemplos siguientes. Los comandos renombrados deben ser difíciles de adivinar para otros, pero fáciles de recordar para usted.

      /etc/redis/redis.conf

      . . .
      # rename-command CONFIG ""
      rename-command SHUTDOWN SHUTDOWN_MENOT
      rename-command CONFIG ASC12_CONFIG
      . . .
      

      Guarde los cambios y cierre el archivo.

      Después de renombrar un comando, aplique el cambio reiniciando Redis:

      • sudo systemctl restart redis.service

      Para probar el nuevo comando, ingrese la línea de comandos de Redis:

      A continuación, autentique:

      Output

      OK

      Suponiendo que cambió el nombre del comando CONFIG a ASC12_CONFIG como se muestra en el ejemplo anterior, intente usar el comando CONFIG original. Debido a que lo renombró, no debe funcionar:

      Output

      (error) ERR unknown command `config`, with args beginning with:

      Sin embargo, se podrá llamar al comando renombrado con éxito. No distingue entre mayúsculas y minúscula:

      • asc12_config get requirepass

      Output

      1) "requirepass" 2) "your_redis_password"

      Conclusión

      En este tutorial de inicio rápido, instaló y configuró Redis, validó el funcionamiento correcto de la instalación de Redis y utilizó sus funciones de seguridad integradas para que sea menos vulnerable a los ataques de agentes malintencionados.



      Source link

      Cómo instalar y proteger Redis en Ubuntu 20.04


      Justin Ellingwood escribió una versión anterior de este tutorial.

      Introducción

      Redis es un sistema de almacenamiento claves-valores en memoria conocido por su flexibilidad, su rendimiento y su soporte amplio en varios idiomas. En este tutorial, se muestra cómo instalar, configurar y proteger Redis en un servidor de Ubuntu 20.04.

      Requisitos previos

      Para completar esta guía, necesitará acceso a un servidor de Ubuntu 20.04 que tenga un non-root user con privilegios sudo y un firewall configurado con ufw. Puede establecerlos siguiendo nuestra Guía de configuración inicial del servidor para Ubuntu 20.04.

      Paso 1: Instalación y configuración de Redis

      Utilizaremos el administrador de paquetes APT para instalar Redis desde los repositorios oficiales de Ubuntu. Al momento de la publicación de este artículo, la versión disponible en los repositorios predeterminados es 5.0.7.

      Comience actualizando el caché de paquetes apt local:

      A continuación, escriba lo siguiente para instalar Redis:

      • sudo apt install redis-server

      Esto descargará e instalará Redis y sus dependencias. Después de esto, hay un cambio de configuración importante que se debe realizar en el archivo de configuración de Redis, generado automáticamente durante la instalación.

      Abra este archivo con su editor de texto preferido:

      • sudo nano /etc/redis/redis.conf

      Encuentre la directiva supervised dentro del archivo. Esta directiva le permite declarar un sistema init para administrar Redis como un servicio, lo que le proporcionará mayor control sobre su funcionamiento. Por defecto, el valor de la directiva supervised es no. Debido a que se trata de Ubuntu, el cual utiliza el sistema init de systemd, cambie el valor a systemd:

      /etc/redis/redis.conf

      . . .
      
      # If you run Redis from upstart or systemd, Redis can interact with your
      # supervision tree. Options:
      #   supervised no      - no supervision interaction
      #   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
      #   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
      #   supervised auto    - detect upstart or systemd method based on
      #                        UPSTART_JOB or NOTIFY_SOCKET environment variables
      # Note: these supervision methods only signal "process is ready."
      #       They do not enable continuous liveness pings back to your supervisor.
      supervised systemd
      
      . . .
      

      En este momento, es el único cambio que debe aplicar al archivo de configuración de Redis. Por ello, cuando termine guárdelo y ciérrelo. Si utilizó nano para editar el archivo, hágalo pulsando CTRL + X, Y y, luego, ENTER.

      A continuación, reinicie el servicio de Redis para reflejar los cambios realizados en el archivo de configuración:

      • sudo systemctl restart redis.service

      Con esto, Redis quedará instalado y configurado, funcionará en su equipo. Sin embargo, antes de comenzar a utilizarlo, es conveniente verificar primero si funciona correctamente.

      Paso 2: Pruebas en Redis

      Como en el caso de cualquier software recién instalado, antes de realizar cualquier otro cambio en la configuración de este es recomendable asegurarse de que funcione según lo previsto. En este paso, abordaremos varias maneras de verificar que Redis funcione correctamente.

      Comience verificando que el servicio de Redis esté en ejecución:

      • sudo systemctl status redis

      Si se ejecuta sin errores, este comando generará un resultado similar al siguiente:

      Output

      ● redis-server.service - Advanced key-value store Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-04-30 23:26:54 UTC; 4s ago Docs: http://redis.io/documentation, man:redis-server(1) Process: 36552 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS) Main PID: 36561 (redis-server) Tasks: 4 (limit: 2345) Memory: 1.8M CGroup: /system.slice/redis-server.service └─36561 /usr/bin/redis-server 127.0.0.1:6379 . . .

      Aquí puede observar que Redis está en ejecución y habilitado, lo cual significa que está configurado para iniciarse cada vez que el servidor lo haga.

      Nota: Esta configuración es recomendable para muchos casos de uso comunes de Redis. Sin embargo, si prefiere iniciar Redis manualmente cada vez que su servidor lo haga, puede fijar este ajuste con el siguiente comando:

      • sudo systemctl disable redis

      Para comprobar que Redis funcione de forma correcta, establezca conexión con el servidor utilizando redis-cli, el cliente de línea de comandos de Redis:

      En la siguiente línea de comandos, realice una prueba de conectividad con el comando ping:

      Output

      PONG

      Este resultado confirma que la conexión del servidor está todavía activa. A continuación, asegúrese de poder configurar las claves ejecutando lo siguiente:

      Output

      OK

      Recupere el valor ingresando lo siguiente:

      Suponiendo que todo funciona, podrá recuperar el valor almacenado:

      Output

      "It's working!"

      Una vez que confirme que puede obtener el valor, cierre la línea de comandos de Redis para volver al shell:

      Como prueba final, comprobaremos si Redis es capaz de persistir datos aún después de su detención o reinicio. Para hacer esto, primero reinicie la instancia de Redis:

      • sudo systemctl restart redis

      Luego, vuelva a conectarse con el cliente de línea de comandos:

      Y confirme que su valor de prueba está aún disponible

      El acceso al valor de su clave debe seguir siendo posible:

      Output

      "It's working!"

      Cuando haya terminado, diríjase nuevamente al intérprete de comandos:

      De esta forma, su instalación de Redis estará completamente funcional y lista para usarse. Sin embargo, algunos de sus ajustes de configuración predeterminados son inseguros y dan a individuos malintencionados la oportunidad de atacar y obtener acceso a su servidor y a sus datos. Según lo establecido en el sitio web oficial de Redis, en los pasos restantes de este tutorial se abarcan los métodos para mitigar estas vulnerabilidades. Aunque estos pasos son opcionales y Redis seguirá funcionando si decide no seguirlos, se recomienda encarecidamente completarlos para fortalecer la seguridad de su sistema.

      Paso 3: Vinculación a localhost

      De forma predeterminada, solo se puede acceder a Redis desde localhost. Sin embargo, si instaló y configuró Redis siguiendo un tutorial diferente, es posible que haya actualizado el archivo de configuración para permitir conexiones desde cualquier parte. Esto no es tan seguro como vincularse a localhost.

      Para solucionar esto, abra el archivo de configuración de Redis para editar:

      • sudo nano /etc/redis/redis.conf

      Ubique esta línea y compruebe que está descomentada (si existe un # elimínelo):

      /etc/redis/redis.conf

      bind 127.0.0.1 ::1
      

      Al finalizar, guarde y cierre el archivo (presione CTRL + X, Y y, luego, ENTER).

      Luego, para asegurar que systemd lea sus cambios reinicie el servicio:

      • sudo systemctl restart redis

      Para verificar que este cambio surta efecto, ejecute el siguiente comando netstat:

      • sudo netstat -lnp | grep redis

      Output

      tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 14222/redis-server tcp6 0 0 ::1:6379 :::* LISTEN 14222/redis-server

      Nota: Es posible que el comando netstat no esté disponible en su sistema de forma predeterminada. De ser así, puede instalarlo (al igual que otras herramientas de conexión útiles) con el siguiente comando:

      • sudo apt install net-tools

      El resultado muestra que el programa de redis-server está sujeto a localhost (127.0.0.1), lo cual refleja el cambio que realizó al archivo de configuración. Si observa otra dirección IP en esa columna (por ejemplo, 0.0.0.0), debe volver a verificar que descomentó la línea correcta y reiniciar el servicio de Redis.

      Ahora que su instalación de Redis sólo está escuchando localhost, será más complicado para los agentes malintencionados realizar solicitudes o acceder a su servidor. Sin embargo, Redis aún no se ha configurado para solicitar que los usuarios se autentiquen antes de realizar cambios en su configuración o en los datos que almacena. Para solucionarlo, Redis le permite solicitar a los usuarios que se autentiquen con una contraseña antes de realizar cambios a través del cliente Redis (redis-cli).

      Paso 4 – Configurar un contraseña de Redis

      La configuración de una contraseña de Redis habilita una de sus dos funciones integradas de seguridad: el comando auth, que requiere la autenticación de clientes para acceder a la base de datos. La contraseña se configura directamente en el archivo de configuración de Redis, /etc/redis/redis.conf, por lo tanto abra ese archivo con el editor de su preferencia:

      • sudo nano /etc/redis/redis.conf

      Desplácese a la sección SECURITY y busque una directiva comentada que diga:

      /etc/redis/redis.conf

      . . .
      # requirepass foobared
      . . .
      

      Quite los comentarios de esta eliminando el # y cambie foobared por una contraseña segura.

      Nota: a la directiva de requirepass dentro del archivo redis.conf se antepone existe una advertencia comentada:

      /etc/redis/redis.conf

      . . .
      # Warning: since Redis is pretty fast an outside user can try up to
      # 150k passwords per second against a good box. This means that you should
      # use a very strong password otherwise it will be very easy to break.
      #
      . . .
      

      Por lo tanto, es importante que defina para su contraseña un valor muy seguro y largo. En lugar de inventar una contraseña, puede usar el comando openssl para generar una de forma aleatoria, como en el siguiente ejemplo. Como se muestra, al enlazar el resultado del primero al segundo comando openssl, eliminará cualquier salto de línea generado por el primero:

      • openssl rand 60 | openssl base64 -A

      Su resultado debe parecerse a esto:

      Output

      RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

      Una vez que se copie y se pegue el resultado de este comando como nuevo valor para requirepass, debe aparecer lo siguiente:

      /etc/redis/redis.conf

      requirepass RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

      Guarde y cierre el archivo después de configurar la contraseña, luego reinicie Redis:

      • sudo systemctl restart redis.service

      Para probar que la contraseña funciona, abra el cliente de Redis:

      A continuación se muestra una secuencia de comandos utilizados para comprobar que la contraseña de Redis funciona. El propósito del primer comando es configurar una clave para un valor antes de la autenticación:

      No funcionará ya que no se autenticó, de forma que Redis muestra un error:

      Output

      (error) NOAUTH Authentication required.

      El siguiente comando se autentica con la contraseña especificada en el archivo de configuración de Redis:

      Redis lo reconoce:

      Output

      OK

      Después de eso, tendrá éxito al ejecutar de nuevo el comando anterior:

      Output

      OK

      get key1 consulta a Redis por el valor de la nueva clave.

      Output

      "10"

      Después de confirmar que puede ejecutar comandos en el cliente de Redis tras la autenticación, puede salir de redis-cli:

      A continuación, veremos cómo renombrar comandos de Redis los cuales, si se ingresan por error o por un agente malintencionado, podrían causar graves daños a su máquina.

      Paso 5 – Renombrar comandos peligrosos

      La característica adicional de seguridad incorporada en Redis implica renombrar o desactivar algunos comandos considerados peligrosos.

      Cuando los ejecutan usuarios no autorizados, estos comandos pueden utilizarse para volver a configurar, destruir o borrar sus datos. Al igual que la contraseña de autenticación, el cambio de nombres o la inhabilitación de comandos se configura en la misma sección SECURITY del archivo /etc/redis/redis.conf.

      Algunos de los comandos considerados peligrosos: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME, y DEBUG. No es una lista completa, pero renombrar o desactivar todos los comandos de esa lista es un buen comienzo para mejorar la seguridad de su servidor Redis.

      Según sus necesidades específicas o las de su sitio, debe renombrar o desactivar un comando. Si sabe que nunca usará un comando que pueda someterse a manipulación, puede desactivarlo. Por otra parte, podría convenir renombrarlo.

      Para renombrar o desactivar comandos de Redis, vuelva a abrir el archivo de configuración:

      • sudo nano /etc/redis/redis.conf

      Advertencia: Los siguientes pasos para desactivar y renombrar comandos son ejemplos. Sólo debe optar por desactivar o renombrar los comandos que le resulten pertinentes. Puede revisar la lista completa de comandos y determinar cómo pueden ser utilizados indebidamente en redis.io/commands.

      Para desactivar un comando, simplemente renómbrelo de modo que pase a ser una cadena vacía (simbolizado por un par de comillas sin caracteres entre ellos), como se muestra a continuación:

      /etc/redis/redis.conf

      . . .
      # It is also possible to completely kill a command by renaming it into
      # an empty string:
      #
      rename-command FLUSHDB ""
      rename-command FLUSHALL ""
      rename-command DEBUG ""
      . . .
      

      Para renombrar un comando, asígnele otro nombre como se muestra en los ejemplos siguientes. Los comandos renombrados deben ser difíciles de adivinar para otros, pero fáciles de recordar para usted.

      /etc/redis/redis.conf

      . . .
      # rename-command CONFIG ""
      rename-command SHUTDOWN SHUTDOWN_MENOT
      rename-command CONFIG ASC12_CONFIG
      . . .
      

      Guarde los cambios y cierre el archivo.

      Después de renombrar un comando, aplique el cambio reiniciando Redis:

      • sudo systemctl restart redis.service

      Para probar el nuevo comando, ingrese la línea de comandos de Redis:

      Luego, realice la autenticación:

      Output

      OK

      Como en el ejemplo anterior, supongamos que cambió el nombre del comando CONFIG por ASC12_CONFIG. Primero, intente utilizar el comando CONFIG original. Debido a que lo renombró, no debe funcionar:

      Output

      (error) ERR unknown command `config`, with args beginning with:

      Sin embargo, se podrá llamar al comando renombrado con éxito. No distingue entre mayúsculas y minúscula:

      • asc12_config get requirepass

      Output

      1) "requirepass" 2) "your_redis_password"

      Por último, podrá cerrar redis-cli:

      Considere que si ya utiliza la línea de comandos de Redis y reinicia Redis, deberá volver a realizar la autenticación. De lo contrario, si escribe un comando aparecerá este error:

      Output

      NOAUTH Authentication required.

      Con respecto a la práctica de renombrar comandos, al final de la sección SECURITY en /etc/redis/redis.conf se encuentra la siguiente declaración de advertencia:

      /etc/redis/redis.conf

      . . .
      # Please note that changing the name of commands that are logged into the
      # AOF file or transmitted to replicas may cause problems.
      . . .
      

      Nota: Para el proyecto Redis se prefieren los términos “maestro” y “esclavo”, mientras que para DigitalOcean generalmente se privilegian las opciones “primario” y “secundario”. Para evitar confusiones, optamos por utilizar la terminología empleada en la documentación de Redis.

      Esto significa que si el comando renombrado no se encuentra en el archivo AOF, o se encuentra y el archivo AOF no se transmitió a esclavos, no debería haber inconvenientes.

      Tenga eso en cuenta cuando intente renombrar comandos. El mejor momento para renombrar un comando es cuando no utiliza la persistencia de AOF, o inmediatamente después de la instalación; es decir, antes de que su aplicación que utiliza Redis se implemente.

      Cuando utilice AOF y realice una instalación de maestro y esclavo, tenga en cuenta esta respuesta de la página de solución a problemas del proyecto GitHub. La siguiente es una respuesta a la pregunta del autor:

      Los comandos se registran en AOF y se replican en el esclavo de la misma manera en que se envían, de modo que si intenta reproducir AOF en una instancia que no tenga el mismo renombramiento, puede hallar inconsistencias debido a que el comando no puede ejecutarse (igual para los esclavos).

      Así, la mejor forma de gestionar renombramientos en esos casos es asegurarse de que los comandos renombrados se apliquen a todas las instancias en instalaciones de maestros y esclavos.

      Conclusión

      A través de este tutorial, instaló y configuró Redis, validó la el funcionamiento correcto de su instalación de Redis y utilizó sus características de seguridad integradas para hacerlo menos vulnerable a ataques de individuos malintencionados.

      Tenga en cuenta que una vez que alguien ingrese en su servidor, será muy fácil eludir las características de seguridad específicas de Redis que hemos establecido. Por lo tanto, la característica de seguridad más importante en su servidor Redis es su firewall (que pudo configurar si cumplió con los requisitos previos del tutorial de configuración inicial para servidores), que supone un enorme obstáculo para los individuos malintencionados.



      Source link