Várias coisas podem ser feitas. Vou explicar minhas idéias e como elas poderiam ser implementadas no Apache2.
1. Use uma conexão HTTPS para proteger seus dados de sniffing
-
Primeiro, ative o módulo SSL se ele não estiver ativado:
sudo a2enmod ssl
. -
Abra a porta 443 (HTTPS) no firewall . Você deve usar sua porta personalizada aqui.
-
Siga este manual e habilite um certificado gratuito em Let's Encrypt.
-
Verifique esta resposta e desative as cifras fracas.
-
Então você pode forçar todos os usuários a usar o HTTPS .
2. Mude o URI do PhpMyAdmin
Para alterar o URI, dentro da configuração padrão, você deve editar /etc/phpmyadmin/apache.conf
e alterar a primeira parte ( /phpmyadmin
) desta diretiva:
Alias /phpmyadmin /usr/share/phpmyadmin
Reinicie o Apache e você poderá acessar o PhpMyAdmin através do novo URI.
3. Execute o PhpMyAdmin na porta diferente
Aqui está um manual passo-a-passo: Como executar o PhpMyAdmin em uma porta diferente . Não esqueça de abrir esta porta no Firewall.
4. Acesse o PhpMyAdmin apenas localmente através do túnel SSH
Execute o PhpMyAdmin na porta diferente. Vamos supor que seja a porta 99
. Feche esta porta no Firewall. Em seguida, estabeleça a conexão SSH por um comando similar a:
ssh -fTN -R 99:localhost:99 <user>@<domain>or<ip>
- Este comando criará o túnel
ssh , em que o controle remoto-R
port99
é encaminhado para a porta local99
nolocalhost
(127.0.0.1
). - As opções
-fTN
enviarão a conexão para o plano de fundo.
Em seguida, o PhpMyAdmin deve estar acessível através do navegador da sua máquina local no URL http://localhost:99/
. Mais ideias podem ser encontradas aqui:
- Acessar vários servidores remotos atrás do NAT
- O IPTables só permite acesso ao host local
- Permitir o acesso ao servidor Ubuntu somente de IP's específicos
5. Proteja o caminho do URI do PhpMyAdmin através da autenticação por senha
Mais detalhes podem ser encontrados neste manual do Apache: Autenticação e Autorização . O pacote apache2-utils
deve ser instalado. Em suma, os passos são:
-
Crie uma pasta fora de
/var/www
, onde o arquivo de senha será mantido. Em seguida, gere o arquivo de senha. Vamos supor que o nome dessa nova pasta seja/var/www-auth
:$ sudo mkdir /var/www-auth $ cd /var/www-auth $ sudo htpasswd -c .htpasswd.phpmyadmin <user> New Password: ********* Re-Type New Password: ********* Adding Password For User <user>
-
.htpasswd.phpmyadmin
é o nome do arquivo no qual a senha será armazenada. -
user
é o nome de login que será usado. -
*********
é a senha:) -
-c
significa criar novo arquivo. Se esta opção for omitida, o comandohtpasswd
tentará adicionar o novologin name
a um.htpasswd.file
existente.
-
-
Modifique o tipo de autenticação PhpMyAdmin, através da edição
/etc/phpmyadmin/apache.conf
desta maneira (ou crie.htaccess
file):<Directory /usr/share/phpmyadmin> ..... <IfModule mod_authz_core.c> <IfModule mod_authn_file.c> AuthType Basic AuthName "The name of the authentication form - type some user and password hints" AuthUserFile /var/www-auth/.htpasswd.phpmyadmin </IfModule> Require valid-user </IfModule> ..... </Directory>
-
Ative os módulos e reinicie o Apache2 para aplicar a nova configuração:
sudo a2enmod authz_core authz_user authn_file sudo systemctl restart apache2.service
-
Agora, para acessar o URI do PhpMyAdmin, você deve fornecer o nome de login
user
e seupassword
.
6. Proteja o caminho do URI do PhpMyAdmin através da autenticação de dois fatores (2FA):
-
Siga as etapas 1 e 3 em esta manual para gerar o arquivo
.google_authenticator
, localizado no diretório$HOME
. Na etapa 4 é descrito como gerar códigos de autenticação. -
Crie um novo diretório em
/var/www-auth
. Vamos supor que o nome dessa nova pasta sejagoogle_authenticator
:sudo mkdir -p /var/www-auth/google_authenticator
-
Copie o arquivo
$HOME/.google_authenticator
nesse diretório e altere suas permissões (ele deve ser legível parawww-data
):sudo cp $HOME/.google_authenticator /var/www-auth/google_authenticator/user sudo chown www-data:www-data /var/www-auth/google_authenticator/user
Por favor, note que o nome do arquivo determina o nome de login! O nome do arquivo será usado como nome de usuário durante o login no seu site seguro.
-
Modifique o novo arquivo adicionando a diretiva
" PASSWORD=qwerty
, em queqwerty
é a nova senha de login.E3CY3TNSNBXXXXXX " RESETTING_TIME_SKEW ... " RATE_LIMIT 3 30 ... " WINDOW_SIZE 17 " DISALLOW_REUSE 48885555 ... " TOTP_AUTH " PASSWORD=qwerty 4567...
-
Instale
mod_authn_google
para o Apache2. Infelizmente eu este módulo não está disponível no repositório do Ubuntu, mas podemos obtê-lo de este repositório .Os passos são: (1) vá para o seuDownloads
, (2) faça o download do pacotedba-apa24-mod_authn_google-r22... .rpm
, (3) extraiamod_authn_google.so
, (4) coloque o arquivo em/usr/lib/apache2/modules/
, (5) conceda permissões apropriadas, (6) Crie o arquivo de carregamento do módulo:cd $HOME/Downloads wget http://download.opensuse.org/repositories/home:/csbuild:/DBA/RedHat_RHEL-7/x86_64/dba-apa24-mod_authn_google-r22-1.1.x86_64.rpm rpm2cpio dba-apa24-mod_authn_google-r22-1.1.x86_64.rpm | cpio -iv --to-stdout ./DBA/apache24/WWW/2.4.x/modules/mod_authn_google-r22.so > mod_authn_google.so sudo mv mod_authn_google.so /usr/lib/apache2/modules/ sudo chown root:root /usr/lib/apache2/modules/mod_authn_google.so sudo chmod g-w /usr/lib/apache2/modules/mod_authn_google.so echo "LoadModule authn_google_module /usr/lib/apache2/modules/mod_authn_google.so" | sudo tee /etc/apache2/mods-available/authn_google.load sudo a2enmod authn_google
-
Modifique o tipo de autenticação PhpMyAdmin, através da edição
/etc/phpmyadmin/apache.conf
desta maneira (ou crie.htaccess
file):<Directory /usr/share/phpmyadmin> ..... <IfModule mod_authz_core.c> <IfModule mod_authn_google.c> AuthType Basic AuthName "The name of the authentication form - type some user and password hints" AuthBasicProvider "google_authenticator" GoogleAuthUserPath /var/www-auth/google_authenticator GoogleAuthCookieLife 3600 GoogleAuthEntryWindow 2 </IfModule> Require valid-user </IfModule> ..... </Directory>
-
Ative os módulos e reinicie o Apache2 para aplicar a nova configuração:
sudo a2enmod authz_core authz_user authn_google sudo systemctl restart apache2.service
-
Agora, para acessar o URI do PhpMyAdmin, você deve fornecer o nome de login
user
, seupassword
e 6 dígitostoken code
:
7. Use o ModSecurity para o Apache
Com o ModSecurity, você pode adicionar restrições mais flexíveis ao URI do PhpMyAdmin. Em esta resposta , na seção "ModSecurity Rules & gt; SAS & gt; Iptables ", descrevi resumidamente como podemos criar regras personalizadas para o ModSecurity.