Quais são as 'pegadinhas' que um desenvolvedor de software precisa procurar se tiver que configurar um servidor pronto para produção?

4

Como desenvolvedor de software, estou muito acostumado a instalar minha pilha típica (java, mysql e tomcat / apache) na minha máquina de desenvolvimento. Mas montar e proteger uma máquina de produção não é algo que eu me sentiria confiante em fazer. Existe um guia A-Z para imbecis para configurar e proteger um servidor de produção? O processo é muito diferente dependendo da plataforma (Windows ou Linux)? Existem algumas regras gerais que podem ser aplicadas em diferentes plataformas (e pilhas de aplicativos)?

    
por Dan MacBean 13.09.2011 / 10:22

5 respostas

3

Is there a A-Z guide for dummies for setting up and securing a production server?

Não. Há muitas combinações possíveis de software, código, plataforma, hardware etc. para que isso seja possível. Se você desmembrar sua pilha, no entanto, você encontrará boas informações para cada nível (por exemplo, fortalecendo seu sistema operacional, as práticas recomendadas de segurança de aplicativos da Web, etc.).

Is the process very different depending on platform (Windows or Linux)?

O processo de endurecimento é o mesmo, mas os detalhes da implementação não são.

Are there some general rules that can be applied across different platforms (and application stacks)?

Sim. Você deve criar um perfil de configuração do seu aplicativo: documentar as dependências do seu aplicativo (quaisquer serviços que precisem estar em execução; quaisquer portas / protocolos de rede que precisem estar abertos (dentro e fora); quaisquer bibliotecas / componentes de terceiros) para estabelecer uma linha de base de requisitos para o seu aplicativo funcionar. Sistematicamente remova / desabilite quaisquer serviços, aplicativos e portas que você não precise; executar serviços e aplicativos com menos privilégios necessários. Teste cada passo do caminho; você irá quebrar alguma coisa.

Invista em um firewall adequado e ative a filtragem de saída (se a sua caixa for de propriedade, não permita que ela estabeleça conexões TCP diretas); use um proxy whitelisted para permitir somente HTTP de saída para as atualizações necessárias (windowsupdate.com et al, repositórios Linux). Configuração de alertas e criação de log adequada: alerta sobre tentativas de login com falha, início / parada de serviços, instalação, escalonamento de privilégios, etc. O gerenciamento de patches é importante; projetar uma janela de manutenção que faça sentido e cumpra-a. Não deixe que as atualizações se acumulem por muito tempo.

Se este for um aplicativo da Web, examine seus pontos de entrada, seus mapeamentos HTTP-URI-URI e coloque seus parâmetros POST ou GET na lista de permissões, elimine seus formulários (não confie em entradas), escape do SQL (ou use uma biblioteca de terceiros que faz isso para você), registre todas as suas consultas SQL, e assim por diante.

    
por 13.09.2011 / 12:08
1

use um firewall como o iptables e coloque algum tempo planejando quais conexões com a máquina devem ser possíveis e necessárias. limitar o tráfego de entrada e de saída.

    
por 13.09.2011 / 11:25
1

Existem muitas regras gerais aplicáveis a todos os tipos de servidores, como:

  1. Remova o software não utilizado e encerre as portas / serviços não utilizados. Eles estão desperdiçando recursos e são uma possível vulnerabilidade.

  2. Aplique patches e atualizações continuamente, especialmente ao encontrar algum bug ou falha.

  3. Altere todas as senhas padrão e / ou desative a (s) conta (s) guest / default sempre que possível.

  4. Use senhas strongs.

  5. Use SSL para proteger suas transações sempre que aplicável e apropriado.

Além disso, cada serviço específico pode ter algumas dicas para protegê-lo.

    
por 13.09.2011 / 11:03
0

Além de Resposta de Khaled :

  • Altere os nomes das contas padrão, incluindo:

    • sa nome da conta no SQL Server ou MySQL
    • administrator nome da conta no Windows
    • qualquer nome de conta de administrador padrão em qualquer outro produto acessado remotamente (Plesk, Wordpress, etc.)
  • No caso do SQL Server ou de qualquer outro servidor de banco de dados, desative as conexões remotas, a menos que necessário, e se elas forem necessárias, considere bloquear as portas usadas pelo servidor e listar os IPs permitidos.

por 13.09.2011 / 11:44
0

Uma dica especial para o tomcat: vincule suas portas ao localhost e use um servidor da web adequado (por exemplo, apache httpd) como frontend. Muitas das mais recentes deficiências de tomcat só poderiam ser exploradas se você tivesse acesso ao aplicativo gerenciador.

Por isso, se a sua aplicação estiver em funcionamento, é uma boa ideia livrar-se da aplicação do gestor. Desativar a implantação automática.

Faça uso total de diferentes funções - o servidor web httpd não precisa de nenhum acesso no nível do sistema operacional para os arquivos que o tomcat fornece e vice-versa. Então, se alguém explorar uma falha no httpd e chegar à linha de comando, certifique-se de que ele não possa escrever nada importante.

Veja a ISO 27001 - há também um fórum sobre troca de pilha especializado em segurança .

    
por 13.09.2011 / 22:04