Повысьте уровень своего веб-сайта, повысив показатель безопасности
Все знают, что очень важно иметь хороший показатель безопасности на нескольких веб-сайтах. В этом руководстве я объясню, как я использовал traefik для его получения.
Важно:Я переместил веб-сайт на скриншотах с https://www.f1nalboss.de на https://ftp.f1nalboss.de после того, как написал эту статью.
предварительное условие
Если вы хотите применить содержимое из этого руководства, вам необходимо иметь среду Docker в режиме Docker Swarm. Если вы хотите узнать, как настроить его для себя, попробуйте следовать этому руководству, которое я написал.
Кроме того, вам необходимо установить traefik в качестве балансировщика нагрузки, поскольку он используется для добавления заголовков безопасности к запросам вашего веб-сайта. Я написал еще одно руководство, в котором показано, как интегрировать traefik в вашу среду Docker Swarm.
Если у вас не было Docker Swarm и вы не хотите его настраивать, вы можете попробовать установить traefik в качестве балансировщика нагрузки на одном компьютере. В этом руководстве я объясню, как это делается. . Но имейте в виду, что для сред, отличных от Docker Swarm, вам необходимо настроить файлы docker-compose. Если у вас есть вопросы по этому поводу, задавайте их в комментариях, и я отвечу на них, если это возможно.
Как я добавил заголовки безопасности
Существует очень важный веб-сайт, опубликованный Mozilla: Обсерватория Mozilla.
Mozilla Observatory помогла более чем 240 000 веб-сайтов, обучая разработчиков, системных администраторов и специалистов по безопасности тому, как безопасно настраивать свои сайты.
Я проверил свой сайт и получил следующий результат:
После быстрого изучения документации traefik я нашел следующие важные заголовки, которые я хочу реализовать в своей среде:
Чтобы добавить эти заголовки в мою установку traefik, я добавил новое промежуточное ПО в мой traefik docker-compose.yml:
После добавления этого промежуточного программного обеспечения я обновил свой сервис traefik, который работает в Docker Swarm (см. Эта статья)
Это дополнение позволило использовать промежуточное ПО в каждом сервисе, развернутом в моем рое и управляемом traefik. Для этого мне пришлось добавить следующую строку в раздел labels в файле docker-compose.yml:
После перезапуска службы simpleweb я провел еще один тест и получил оценку B из-за этой ошибки:
Я исследовал и нашел правильный заголовок traefik для CSP. Кроме того, я создал очень строгую директиву CSP и добавил ее в значение заголовка:
Я разрешаю доступ исключительно к https://i.postimg.cc для img-src, потому что единственное изображение, которое я использую на https://ftp.f1nalboss.de, размещено там.
Поскольку этот заголовок очень строгий, я не создавал для него глобальное промежуточное ПО. Я обновил службу, в которой хочу использовать эту директиву CSP, добавив эту строку в службу simpleweb и настроив промежуточное ПО:
Я перезапустил службу и провел еще одну проверку, чтобы, наконец, получить пятерку!
Как я укрепляю свой сайт
Поскольку я также хочу защитить свой сервер, я проверил на hardenize.com и получил неудовлетворительные результаты для TLS и HSTS.
Из-за того, что заголовки traefik уже были настроены заранее для HSTS, единственное, что осталось сделать, это отправить свое доменное имя в hstspreload, чтобы решить проблему с HSTS.
ЭТА ЧАСТЬ ОЧЕНЬ ВАЖНА: Если вы хотите отправить свой веб-сайт на hstspreload.org, подумайте об этом очень тщательно. Могут быть проблемы, если вы не можете выполнить все: читайте здесь для информации
Решение проблемы TLS было более сложным. Мне пришлось настроить конфигурацию traefik так, чтобы минимальная версия TLS была 1.2, а НЕ 1.0, как по умолчанию. Чтобы установить минимальную версию TLS, я добавил файловый провайдер в свою установку traefik в разделе команд моего traefik docker-compose.yml:
Затем я создал новый файл конфигурации (названный tls.toml), который содержит запись [tls-options] и должен использоваться для установки минимальной версии TLS 1.2. Кроме того, я добавил отличные наборы шифров (прочитайте это, чтобы узнать о наборах шифров).
Эта конфигурация гарантирует, что traefik будет использовать как минимум TLS 1.2 с предоставленными наборами шифров. Я выбрал эти шесть наборов шифров, потому что хочу иметь три для TLS 1.2 и три для TLS 1.3, которые объявлены безопасными!
Я сохранил файл в папке ./configuration/ и обновил раздел громкости в файле traefik docker-compose.yml:
После этого я перезапустил экземпляр traefik.
Последним шагом была активация минимальной версии TLS в сервисе simpleweb путем добавления новой метки:
После перезапуска службы simpleweb я повторил тест на Hardenize и Mozilla и получил желаемые результаты:
- https://www.hardenize.com/report/f1nalboss.de/1628027450
- https://observatory.mozilla.org/analyze/ftp.f1nalboss.de
Также в ssl-labs есть познавательный тест, который проверяет сертификаты. С новой конфигурацией я также получил A+
Заключительные примечания
Чтобы упростить все, вы можете использовать этот docker-compose.yml и запустить его в любом Docker Swarm как сервис www-stack:
Я надеюсь, что вы найдете это руководство полезным и теперь сможете защитить свой веб-сайт и повысить доверие, добавив заголовки безопасности и оптимизировав использование SSL.
Я хотел бы услышать ваши идеи и мысли. Если вы уже запустили установку traefik и используете другие заголовки/промежуточное ПО или у вас есть другие наборы шифров, пожалуйста, прокомментируйте здесь и объясните. Кроме того, если у вас есть какие-либо вопросы, пожалуйста, запишите их ниже. По возможности стараюсь на них отвечать.
✍️ Автор
Пол Кнулст
Муж, отец двоих детей, гик, постоянно учится, любит технологии и инженер-программист