На прошлой неделе мне позвонил напуганный клиент, потому что он думал, что его сайт взломан. Когда я посмотрел его сайт, я увидел apache2
страницу по умолчанию. Той ночью мой сервер ( Ubuntu 16.04 LTS
) обновился и перезагрузился. Обычно, когда что-то идет не так, меня бы предупредили ночью. На этот раз нет, потому что система мониторинга проверяет HTTP-код состояния 200, а apache2
страница по умолчанию поставляется с кодом состояния 200.
Случилось так, что во время запуска apache2
было быстрее связываться с портами 80 и 443, чем мой реальный веб-сервер nginx. Я не устанавливал apache2 сам. Через aptitude why apache2
я обнаружил, что пакет php7.0 требует этого.
Простое удаление apache2
не будет работать, потому что, очевидно, php7.0 этого требует. Можно ли как-то создать ограничение, чтобы только nginx мог связываться с портами 80 и 443?
Другие решения также приветствуются.
This time not, because the monitoring system checks for HTTP status code 200
. Вы можете улучшить систему мониторинга, сделав так, чтобы она проверяла фактическое содержимое веб-страницы (некоторую конкретную строку в теле или заголовке), это будет более надежным.Ответы:
Вы не можете предотвратить привязку порта неправильным сервисом. В вашем случае просто удалите apache из автозапуска, и все будет хорошо.
Для 16.04 и новее:
Для более старых версий Ubuntu:
источник
systemctl disable apache2
Если вы действительно не используете
apache2
, и это требует PHP 7.0, то похоже, что выlibapache2-mod-php7.0
установили. Этот пакет бесполезен без Apache. Поскольку вы используете nginx, вы, вероятно, также установилиphp7.0-fpm
илиphp7.0-cgi
установили его, чего достаточно для удовлетворенияphp7.0
требований зависимости:Если у вас есть какой-либо из
php7.0-{fpm,cgi}
установленных, вы можете пойти дальше и удалить Apache.источник
php7.0-fpm
а неphp7.0
пакет. Об этом также говорит Ондржей Сури github.com/oerdnj/deb.sury.org/wiki/…Чтобы ответить на ваш вопрос, вы можете, вероятно, ограничить порт для конкретного приложения с помощью SElinux. Я не использовал его сам и имею лишь поверхностные знания о его возможностях, но вот указатель, который я нашел на этом сайте:
/server//a/257056/392230
В этом ответе wzzrd, кажется, показывает, как дать определенному приложению (foo) разрешение на привязку к определенному порту (803). Вам просто нужно настроить политику, чтобы только вашему приложению (nginx) были разрешены указанные вами порты (80 и 443).
Исходя из ответа wzzrd, это может быть так же просто, как добавить это в политику
и работает это
Хотя, я думаю, вам также понадобится строка в политике, которая указывает, что никакая другая программа не может привязываться к этим портам.
В конце концов, я просто догадываюсь, что это за подходящая конфигурация.
В любом случае, я не думаю, что была Ubuntu, в которой SElinux установлен и включен по умолчанию. Поскольку я считаю, что это требует применения определенных исправлений к различным утилитам и опциям ядра, может быть проще использовать Centos, в котором SElinux установлен и включен с самого начала.
Извините, я больше не помогаю. Может быть, в другой раз я скачаю изображение Centos и попробую это; это будет хороший шаг в обучении. Я обновлю этот ответ, если сделаю.
источник
Кое-что, чего я еще не видел в ответах, но все еще возможно:
Измените конфигурацию Apache для прослушивания другого порта, на всякий случай. Вы можете сделать это, открыв файл конфигурации Apache и изменив строки, которые имеют
Listen 80
другой порт.источник
У меня нет ответа на ваш точный вопрос, но, возможно, вам нужно взглянуть на ваш дистрибутив. Я хотел бы рассмотреть любой дистрибутив, который позволяет службам (apache2 здесь) при установке быть небезопасными. Подумайте о поиске дистрибутива, который этого не делает. Я не могу сказать, что когда-либо видел такое поведение на Archlinux, я уверен, что есть и другие.
источник