Servidor LAMP seguro para uso em produção

10

Qual é o procedimento para proteger um Linux, Apache, MySQL, PHP Server (ou mesmo Perl) para uso em produção?

Além de definir a senha do MySQL e a senha root do Linux, quais outras etapas (talvez não tão óbvias) devem ser tomadas?

Além disso, que passos posso dar, se eu fosse ser paranóico, isso normalmente não seria necessário?

Isso é para uso básico de um único site, mas deve ser seguro.

    
por WalterJ89 08.03.2010 / 15:47

3 respostas

13

Estas recomendações estão fora do meu limite e não pretendem ser abrangentes.

Confira o Bastille, é uma série de scripts que implementa as melhores práticas no Linux.

Não envie dados de autenticação em protocolos de texto simples. Por exemplo, desative o FTP. Se você enviar dados de autenticação via Apache, use SSL.

Desative e remova qualquer software desnecessário, incluindo a interface gráfica.

Audite quaisquer arquivos com o conjunto de bits SUID e remova-os. (Isso limitará severamente as habilidades não-raiz. Entenda as implicações para cada mudança individual.)

Audite os diretórios graváveis públicos e remova o bit gravável. (Deixe / tmp sozinho).

Evite executar qualquer daemon como root.

Pesquise todos os softwares multiusuários que ouvem soquetes detalhadamente sobre as práticas recomendadas de segurança.

Evitar adicionar usuários ao sistema é uma das melhores abordagens. Sistemas multiusuário exigem maior atenção aos detalhes.

Aplicar padrões de senha. Por exemplo: mínimo de 10 caracteres, caracteres não alfanuméricos, usando letras e números. Isso é para tornar o brute forçando mais difícil em caso de comprometimento do arquivo de senha. Reforce isso através do sistema.

Bloqueie os usuários após 5 tentativas de autenticação malsucedidas com um mínimo de 10 minutos de bloqueio. Mantenha um histórico de senhas para que os usuários não possam usar as 5 senhas anteriores.

Se você tiver um ambiente maior, usar a segregação de rede com várias sub-redes para isolar o risco é um requisito absoluto. Se um ambiente menor, a execução de um firewall no sistema local para limitar a exposição é recomendado. Por exemplo, apenas permitindo o SSH ao seu IP. Os tcpwrappers também podem ser usados para uma camada extra. (/etc/hosts.allow, /etc/hosts.deny)

E, claro, manter todos os softwares atualizados. Especialmente daemons voltados ao público.

com o SSH:

  • Desativar o protocolo SSH 1
  • Permitir somente a autenticação raiz without-password (somente par de chaves)

Com o Apache:

  • Desative todos os módulos que não são necessários
  • Desativar diretórios .htaccess e públicos
  • Desative o FollowSymlink e quaisquer opções desnecessárias
  • Não instale o PHP se você não precisar dele.

Com o MySQL:

  • Desativar usuários padrão.
  • Não use hosts curinga.
  • Assegure-se de configurar um host exclusivo para cada usuário.
  • Não escute no tcp, a menos que seja necessário. (Inevitavelmente inevitável).
  • Limite os privilégios de usuário do aplicativo o máximo possível. (SELECT, INSERT, UPDATE, DELETE ideal para escrever e SELECT para leitura)

Eu recomendaria pesquisar especificamente o ajuste do php.ini para segurança. É um software mais arriscado por padrão.

Bastille

    
por 08.03.2010 / 16:00
2

Aqui está um bom artigo que você pode usar como base para sua configuração e mudar de acordo com a sua distribuição:

    
por 08.03.2010 / 16:00
0
A Agência de Segurança da Informação de Defesa tem um conjunto de listas de verificação de segurança que são bons lugares para começar. Melhor ainda é entender a lógica de cada entrada, mas essa não é uma resposta rápida. Eu recomendaria que você consultasse o STIG s do Enclave, da rede, do Unix e da Web.

    
por 08.03.2010 / 16:59