Procedimentos gerais de firewall / segurança para servidores da Web e bancos de dados

2

Meu servidor da Web e o servidor de banco de dados são separados. Tudo o que fiz para proteger o servidor da Web foi usado ufw e negado de todos, exceto as portas 22, 80 e 443. O que mais precisa ser feito lá?

No meu servidor de banco de dados, eu só permito das portas 22 e da porta que o banco de dados (mysql) escuta. Isso me fez pensar. Normalmente eu só permito todo o tráfego. No caso de um banco de dados, eu geralmente faço "usuários" estritos e digo coisas no que diz respeito ao software "apenas deixar o usuário @ internal_ip_address acessar o banco de dados". Mas isso deve ser uma coisa de firewall? Ou ambos? Parece que, se o firewall permitir apenas o tráfego para a porta 22 e a 3306 do endereço IP interno do meu servidor da web, isso deve ser bom o suficiente? Você faz as duas coisas apenas por "boas práticas"?

Quais outras regras gerais de firewall eu devo definir para isso?

    
por Matthew 14.05.2011 / 02:43

2 respostas

2

Isso é muito melhor do que muitas pessoas!

Algumas coisas para focar, neste momento:

  1. Segurança do aplicativo. Injeção de SQL, cross-site scripting, diretório transversal, etc. Depende do que você está executando, e se não for o seu código, não é algo que você pode ser muito proativo, mas provavelmente é sua maior área de superfície.
  2. Esse ouvinte do MySQL: ele realmente precisa estar aberto para a internet? Desde que você tenha seus usuários restritos a endereços específicos, você pode permitir apenas aqueles? O que você tem é bom se você não tem usuários autorizados a efetuar login a partir de % , mas bloquear o ouvinte seria melhor; alguns ataques só precisam enviar um pacote para um soquete de escuta sem autenticar. Você pode fazer o gerenciamento que precisa fazer através do seu acesso SSH? Trazendo-me para:
  3. SSH. Use autenticação de chave pública, se possível. Caso contrário, use o modo limit em ufw em vez de um allow direto para ajudar nas tentativas de força bruta. Alterar o endereço do ouvinte para uma porta alta é uma prática padrão para alguns, mas o valor real da segurança dessa obscuridade é insignificante.
por 14.05.2011 / 03:03
1

Resposta curta:

Sim. Utilizar todos os métodos de proteção disponíveis é bom, e a frase "Defesa em Profundidade" descreve ter várias camadas de proteção que se sobrepõem.

Menos resposta curta:

No caso geral, há três coisas que você precisa ter em mente ao criar regras de firewall:

  1. público
  2. Portas de destino
  3. Protocolo

O que queremos dizer com isso é que, para um servidor MySQL, não é suficiente apenas limitar as conexões de entrada para 3306 / tcp, mas devemos também limitá-lo dos clientes MySQL. Idealmente, essa lista de clientes seria tão pequena quanto possível para cada porta, no entanto, na realidade, às vezes, pode ser maior. Então pense em cada uma dessas portas, SSH e web, e determine quem na verdade precisa acessá-las.

Se o seu aplicativo incluir seu próprio mecanismo para limitar o escopo, use-o também, consulte Resposta curta acima. Isso incluiria as restrições de acesso ao MySQL do formulário user@internal_ip_address mencionado em sua pergunta, bem como a configuração de arquivos de htaccess (ou similares) em seu servidor da web. Claro, reserve um tempo para avaliar os benefícios de segurança de usar essas etapas extras em relação à sobrecarga de gerenciamento para implementá-las e mantê-las.

    
por 14.05.2011 / 04:08