Ты думаешь, твой сервер на Nginx неуязвим? Что стандартный apt install nginx и дефолтный конфиг — это «нормальная защита»? Смешно. Прямо сейчас тысячи ботов сканируют порты, ищут кривые настройки, тупые уязвимости и глупые ошибки админов, которые думают, что «и так сойдёт».
Nginx — это не просто прокси или веб-сервер. Это твой первый рубеж обороны. И если ты накосячил в базовых вещах — тебя уже взломали. Просто ещё не сказали.
В этой статье — минимум теории, максимум жёстких практических правил, которые не дадут тебе проснуться однажды с битым сайтом, украденными данными или майнером в жопе.
Референс взят частично из https://www.cisecurity.org/benchmark/nginx, частично из шизотипичного DevOps;
Момент номер раз:
1) Тут можно было бы расписать по robots.txt и sitemap.xml (Но ты же наврядли это всё делаешь?)
Гайд можно подсмотреть, разрешить индексацию определенным роботам, отключить индексацию по маске и т.д и т.п;
2) Лично я пользуюсь правилом, дружище у тебя не сходятся location | http method или тебя нет в разрешенном списке (Иди на 3 буквы):
ACL, довольно примитивная штукенция, обычно описываю в location:
На 3 буквы без локейшена посылаю вот так:
При проксировании методов до бэкенда, дружище, проверь на сколько он дырявый и какие методы http ему действительно нужны и лишнего не давай плз:
Проверка метода:
Захотел отправить DELETE? Жидко обосрался под себя;
Также пожалуйста не забывай, все лгут, разробан может оставить включенный swagger, эндпоинт actuator`а (актуально для спринг), эндпоинт с метриками - это всё может сыграть с тобой злую шутку;
Лучше передай разработчикам, чтобы хотябы basic auth повесили со своей стороны, либо на разные порты открывали бизнес функционал, а на другие метрики;
Помни отдавай 403 на всё что ты не понимаешь))
3) Добрые дяди решают проксанировать твой сайт, как ты думаешь на что они будут смотреть?
На заголовки, по хорошему потуши пожалуйста их, в nginx.conf
А нахера, чтобы не стать легкой мишенью брат, представь выкатывается 0day на nginx для определенной версией;
Какой нибудь скрипт-малютка кидает curl -v site.com/ и видет в ответе версию nginx, нехорошо ;)
Бэкенд также лучше обезличить;
Кстати многие ебать какие умники в локейшен добавляют проксирование с кредами;
Представь ты обращаешься curl /api/v1, а к твоему заголовку докидывается базовая учётка в base64 энкоде - это днище чел (Если очень хочется нарули на lua пару портяночек, но я люблю работать с тем что идёт из коробки, без лишнего)
4) Помнишь тех дядей из 3го пункта, эти дяди также могут проверить насколько дыряво сконфигурирован твой веб-сервер;
Есть такая директива server_name, и многие чудики публикуют внутренние и внедние ресурсы на default обработчике;
Допустим у тебя есть открытый ресурс, выставленный в dmz - site.com, а на этом же nginx ты держишь админку admin.local;
Эта вся херня называет пробивом виртуального хоста, и если ты не озаботишься его настройкой, ИБшники тебя просто могут отпиздить ;)
Запомни оставить приманку, server_name default заверни левый сертификат на 80/443, чтобы хацкер кучевряжился с заведомой приманочкой, а нужные ресурсы разрули отдельно;
Также обращай внимение на интерфейс на котором ты будешь случать входящий трафик nginx; (0.0.0.0) привет;
В общем если товарищь Админ пропустит данную статья, я еще напишу парочку моментов про проксирование php, которая я не так давно исправлял;
Всем хорошего дня!
Остались вопросы или интересные предложения пожалуйста напиши комментарий! ;)
Nginx — это не просто прокси или веб-сервер. Это твой первый рубеж обороны. И если ты накосячил в базовых вещах — тебя уже взломали. Просто ещё не сказали.
В этой статье — минимум теории, максимум жёстких практических правил, которые не дадут тебе проснуться однажды с битым сайтом, украденными данными или майнером в жопе.
Референс взят частично из https://www.cisecurity.org/benchmark/nginx, частично из шизотипичного DevOps;
Момент номер раз:
1) Тут можно было бы расписать по robots.txt и sitemap.xml (Но ты же наврядли это всё делаешь?)
Гайд можно подсмотреть, разрешить индексацию определенным роботам, отключить индексацию по маске и т.д и т.п;
2) Лично я пользуюсь правилом, дружище у тебя не сходятся location | http method или тебя нет в разрешенном списке (Иди на 3 буквы):
ACL, довольно примитивная штукенция, обычно описываю в location:
Не удалось прогрузить медиа
На 3 буквы без локейшена посылаю вот так:
Не удалось прогрузить медиа
При проксировании методов до бэкенда, дружище, проверь на сколько он дырявый и какие методы http ему действительно нужны и лишнего не давай плз:
Проверка метода:
Не удалось прогрузить медиа
Захотел отправить DELETE? Жидко обосрался под себя;
Также пожалуйста не забывай, все лгут, разробан может оставить включенный swagger, эндпоинт actuator`а (актуально для спринг), эндпоинт с метриками - это всё может сыграть с тобой злую шутку;
Лучше передай разработчикам, чтобы хотябы basic auth повесили со своей стороны, либо на разные порты открывали бизнес функционал, а на другие метрики;
Помни отдавай 403 на всё что ты не понимаешь))
3) Добрые дяди решают проксанировать твой сайт, как ты думаешь на что они будут смотреть?
На заголовки, по хорошему потуши пожалуйста их, в nginx.conf
Не удалось прогрузить медиа
А нахера, чтобы не стать легкой мишенью брат, представь выкатывается 0day на nginx для определенной версией;
Какой нибудь скрипт-малютка кидает curl -v site.com/ и видет в ответе версию nginx, нехорошо ;)
Бэкенд также лучше обезличить;
Кстати многие ебать какие умники в локейшен добавляют проксирование с кредами;
Представь ты обращаешься curl /api/v1, а к твоему заголовку докидывается базовая учётка в base64 энкоде - это днище чел (Если очень хочется нарули на lua пару портяночек, но я люблю работать с тем что идёт из коробки, без лишнего)
4) Помнишь тех дядей из 3го пункта, эти дяди также могут проверить насколько дыряво сконфигурирован твой веб-сервер;
Есть такая директива server_name, и многие чудики публикуют внутренние и внедние ресурсы на default обработчике;
Допустим у тебя есть открытый ресурс, выставленный в dmz - site.com, а на этом же nginx ты держишь админку admin.local;
Эта вся херня называет пробивом виртуального хоста, и если ты не озаботишься его настройкой, ИБшники тебя просто могут отпиздить ;)
Запомни оставить приманку, server_name default заверни левый сертификат на 80/443, чтобы хацкер кучевряжился с заведомой приманочкой, а нужные ресурсы разрули отдельно;
Также обращай внимение на интерфейс на котором ты будешь случать входящий трафик nginx; (0.0.0.0) привет;
В общем если товарищь Админ пропустит данную статья, я еще напишу парочку моментов про проксирование php, которая я не так давно исправлял;
Всем хорошего дня!
Остались вопросы или интересные предложения пожалуйста напиши комментарий! ;)
👍67
🤔8
😢9
💯13
LIMB