Советы по безопасности и оптимизации веб-сервера Apache

StackOverflow https://stackoverflow.com/questions/171237

Вопрос

Я собираюсь заняться управлением и запуском моего первого веб-сервера Apache, подключенного к Интернету, и мне интересно, есть ли среди вас системные администраторы и разработчики, которые хотели бы поделиться некоторыми своими знаниями относительно безопасности и советов по оптимизации для работы веб-сервера Apache.

Возможно, вы поделитесь своим списком пяти (или десяти) основных действий, которые вы делаете сразу после установки веб-сервера Apache (на Linux).

Любая помощь очень ценится.

Это было полезно?

Решение

Базовый

  1. Убедитесь, что установлена ​​последняя стабильная версия..Использование старой или нестабильной версии Apache может подвергнуть вашу систему уязвимостям безопасности или непроверенным решениям.
  2. Убедитесь, что фактически обрабатываются только запланированные запросы..Вы должны рассмотреть ВОЗ должен получить доступ к веб-ресурсам, предоставляемым Apache, и как.
  3. Избегайте запуска Apache с правами root.Это обязательно.
  4. Управляйте своими журналами.Бревна имеют тенденцию становиться все больше и больше;рассмотрите возможность настройки logrotate или периодической очистки журнала.
  5. Мониторинг работоспособности Apache с помощью системы мониторинга.Мне нравится сочетать munin и monit, их легко настраивать и поддерживать.Нагиос и другие заслуживают внимания.
  6. Если Apache обслуживает веб-приложения (т.PHP, Perl, Rails) убедитесь, что запросы обрабатываются правильным модулем в правильном порядке.
  7. Напишите красивое сообщение 404 и 500..Рано или поздно ваши посетители поймают ошибку.
  8. Остановите и перезапустите Apache, поэтому вы можете быть уверены, что и процедура отключения, и процедура запуска работают безупречно.
  9. Использовать mod_security

Безопасность

  1. Защитите Apache от DOS.
  2. Загружайте только те модули, которые действительно необходимы.
  3. Следите за своим журналом, чтобы выяснить, не происходит ли что-то странное.

Производительность

  1. Если вы компилируете Apache из исходного кода, обязательно используйте MPM (модули многопроцессорной обработки).
  2. Загружайте только те модули, которые действительно необходимы.
  3. Проверьте настройку MaxClients, чтобы ваш сервер не создавал так много дочерних элементов, которые начинали менять местами.
  4. Используйте модуль mod_deflate, он предоставляет выходной фильтр DEFLATE, который позволяет сжимать выходные данные вашего сервера перед отправкой клиенту по сети.

Другие советы

  • Убедитесь, что процесс Apache запущен не от имени пользователя root.
  • Обязательно используйте последнюю стабильную версию
  • Если коробка напрямую подключена к Интернету, убедитесь, что вы думали обо всех других услугах, таких как SSH.
  • Внимательно проверьте правила локального брандмауэра и ужесточите их.(см. iptables)
  • Не включайте опции, которые вы не понимаете или не планируете использовать.
  • Рассмотрите возможность подписки на список рассылки по безопасности Apache, чтобы сразу узнавать о любых критических исправлениях.
<Ол>
  • Chroot веб-сервер
  • Отключите любой модуль, который вам не нужен
  • Вместо этого вам нужен mod_security
  • Настройте средство проверки целостности файлов для своего рута
  • Защитите все остальное на том же сервере и отключите все, что не используется
  • Запустите тесты на своем сервере с помощью таких инструментов, как nmap или Metasploit
  • Я буду интерпретировать «после установки Apache на коробку» как «Подготовку новой установки сервера к использованию в рабочей среде», потому что, конечно, все это будет выполняться на сервере разработки и передаваться в SCM или встроено в автоматическую установку.

    Все, что вы делаете для оптимизации, должно быть сделано на основе реальных измерений.Настройте тестовую среду с реальным приложением, которое вы собираетесь запустить, как можно более реалистично.Некоторые моменты, которые следует учитывать:

    • Не устанавливайте MaxClients слишком высоко.Вы можете использовать много оперативной памяти, особенно на серверах prefork со встроенным в них большим приложением (например,mod_perl, PHP и т. д.).Использование слишком большого объема памяти контрпродуктивно.Клиентам лучше дождаться успешного обслуживания, чем получить ошибку.
    • Внимательно подумайте, включены ли у вас Keepalives.Они могут как ускоряться, так и замедляться в зависимости от вашей среды.Если вы решите включить их, вам следует подумать о времени ожидания активности в зависимости от фактического варианта использования.
    • Выполните тестирование производительности с включенным HTTPS, если вы используете HTTPS в рабочей среде.
    • Установите заголовки «Last-modified» и «Expires» соответствующим образом для объектов, которые изменяются нечасто (чтобы максимизировать кэширование на стороне клиента).Протестируйте кэширование на стороне клиента в различных браузерах.
    • Убедитесь, что ваше приложение использует HTTPS правильно, а не таким образом, который заставляет браузеры генерировать предупреждения безопасности (это еще одна веская причина, по которой вам необходимо использовать HTTPS во время тестирования).

    Если вы используете стандартную среду LAMP (Linux, Apache, MySQL, PHP / PEARL / PYTHON): установите MySQL на другую машину, чем Apache. Будет немного медленнее с несколькими параллельными процессами (из-за задержки в сети), но будет намного быстрее со многими параллельными процессами.

    Убедитесь, что вы настроили его для обнаружения атак DOS (отказ в обслуживании).

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top