Na semana passada, recebi uma ligação de um cliente assustado porque ele pensava que seu site estava hackeado. Quando procurei no site dele, vi a apache2
página padrão. Naquela noite, meu servidor ( Ubuntu 16.04 LTS
) havia atualizado e reiniciado. Normalmente, quando algo dá errado, eu seria alertado durante a noite. Desta vez não, porque o sistema de monitoramento verifica o código de status HTTP 200 e a apache2
página padrão vem com o código de status 200.
O que aconteceu é que, durante a inicialização, apache2
foi mais rápido ligar as portas 80 e 443 do que o meu servidor web nginx real. Eu não instalei o apache2 sozinho. Através aptitude why apache2
eu descobri o pacote php7.0 exige.
Simplesmente remover apache2
não funcionará porque aparentemente o php7.0 exige. De alguma forma, é possível criar uma restrição para que apenas o nginx possa se conectar às portas 80 e 443?
Outras soluções também são bem-vindas.
This time not, because the monitoring system checks for HTTP status code 200
. Você pode melhorar o sistema de monitoramento, verificando o conteúdo real da página da web (alguma sequência específica no corpo ou no cabeçalho); isso será mais confiável.Respostas:
Você não pode impedir que uma porta seja vinculada pelo serviço errado. No seu caso, basta remover o apache do início automático e você deve ser bom.
Para 16.04 e mais recentes:
Para versões mais antigas do Ubuntu:
fonte
systemctl disable apache2
Se você realmente não está usando
apache2
, e é o PHP 7.0 que está exigindo, parece que vocêlibapache2-mod-php7.0
instalou. Esse pacote é inútil sem o Apache. Como você está usando o nginx, provavelmente também possuiphp7.0-fpm
ouphp7.0-cgi
instalou, o que é suficiente para atenderphp7.0
aos requisitos de dependência:Se você tiver um dos
php7.0-{fpm,cgi}
instalados, poderá prosseguir e desinstalar o Apache.fonte
php7.0-fpm
e não ophp7.0
pacote. Isso também é recomendado por Ondřej Surý github.com/oerdnj/deb.sury.org/wiki/…Para responder sua pergunta, você provavelmente pode restringir uma porta a um aplicativo específico usando o SElinux. Eu não o usei e tenho apenas um conhecimento superficial de suas capacidades, mas aqui está um ponteiro que encontrei neste site:
/server//a/257056/392230
Nessa resposta, o wzzrd parece mostrar como conceder a um aplicativo específico (foo) permissão para ligar a uma porta específica (803). Você só precisa ter a configuração da política para que somente seu aplicativo (nginx) tenha permissão para as portas que você especificar (80 e 443).
Baseando-me na resposta do wzzrd, pode ser tão simples quanto adicionar isso à política
e executando isso
No entanto, imagino que você também precisará de uma linha na política que especifique que nenhum outro programa possa se vincular a essas portas.
No final, estou apenas adivinhando qual é a configuração apropriada.
De qualquer forma, não acho que tenha havido um Ubuntu que tenha o SElinux instalado e ativado por padrão. Como acredito que exija a aplicação de certos patches em vários utilitários e uma opção de kernel, pode ser mais fácil usar o Centos, que possui o SElinux instalado e ativado desde o início.
Desculpe, não sou de mais ajuda. Talvez em outra ocasião, baixe uma imagem do Centos e tente isso; será um bom passo para o aprendizado. Atualizarei esta resposta se o fizer.
fonte
Algo que ainda não vi nas respostas, mas ainda é uma possibilidade:
Mude a configuração do Apache para ouvir outra porta, apenas por precaução. Você pode fazer isso abrindo o arquivo de configuração do Apache e alterando as linhas que têm
Listen 80
para outra porta.fonte
Não tenho uma resposta para sua pergunta exata, mas talvez você precise analisar sua distribuição. Eu consideraria qualquer distro que permite que os serviços (apache2 aqui) na instalação sejam inseguros. Considere procurar uma distro que não faça isso. Não posso dizer que já vi esse comportamento no Archlinux, tenho certeza que existem outros.
fonte