Forwarded from CTO On Live
Гюльчатай закрой личико или базовая защита веб-морды 🙈
#Безопасность
На днях я писал, что плотно заняться безопасностью можно и нужно на втором этапе жизни проекта, когда уже пошел поток клиентов, но есть вещи, которые можно сделать сразу на этапе запуска.
Прежде всего начнем с тюнинга Nginx (у вас же он, правда?)
Про самое очевидное: сразу забудьте про то, что такое сайт без SSL, купите хоть самый дешевый или сделайте бесплатный через let's encrypt
Все запросы, что прилетают на http сразу отправляйте редиректом на https. Как вариант запись эта может выглядеть так:
return 301 https://$host$request_uri;
А чтобы браузер в последствии всегда автоматически переходил на https добавьте заголовок HSTS
add_header Strict-Transport-Security 'max-age=31536000';
Помимо этого заголовка неплохо было бы включить и встроенные механизмы защиты браузера
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "sameorigin";
Старайтесь использовать актуальные настройки ssl_protocols и ssl_ciphers (их, как и вообще весь ssl конфиг можно сгенерить на мозиле)
Проверить уровень настройки SSL можно на ssllabs и там же посмотреть рекомендации по улучшению
Я тебя не знаю, уходи!
Закройте обращения по ip или любому непонятному адресу к вашему приложению. Для этого просто последним в sites-enabled у вас должен быть конфиг default_server
server {
listen 80 default_server;
return 444;
}
Ответ 444, сразу же скидывает соединение не возвращая никакого тела, что позволит помимо мусорного трафика, также снизить и нагрузку. (Для https подключения можно сделать похожий конфиг)
С базовыми вещами по nginx разобрались, теперь возьмем уровень чуть повыше.
Любые запросы к своему API пропускайте через модуль лимитов nginx и отдавайте код 429. После чего обязательно настройте мониторинг на отлов ответов с этим кодом. Это даст вам возможность оперативно поймать потенциальный брутфорс или кривые интеграции, когда сторонний разработчик запустил while (true) и ушел пить кофе.
Иногда нам может потребоваться включить для тех или иных обращений CORS, чтобы на других доменах нашего или интеграционного проекта разработчики могли сделать ajax запросы без прокидывания через свой backend. В этом случае я часто вижу на разных проектах ребята не долго думая делают:
Access-Control-Allow-Origin: *
Так как данный заголовок поддерживает, либо доступ с любого домена, либо только с одного, без перечислений. Решается проблема, либо через map в nginx с установкой нужной переменной (сравниваем желаемый хост с http_origin) и последующей передачей через add_header того же домена в заголовке Access-Control-Allow-Origin либо проще это контролировать через конфиги приложения, как по мне.
Перебейте заголовок Server, который по дефолту отдает Nginx. Сделать это можно либо через server_tokens off; (который при этом все равно будет показывать, что используется nginx, но без версии), либо через бекенд часть приложения, заменив его на то, что вашей душе угодно.
Помимо этого проверьте что вообще за заголовки отдаются вашим приложением (всякие Powered-By и прочие, тоже надо погасить. Чем меньше злоумышленнику на входе будет информации, тем лучше)
Горшочек с медом
Техника honeypot не новая, но почему-то многие ей пренебрегают. Заключается она в том, чтобы добавить стандартные для всех сканеров или ручных тестеров роуты при попадании на которые вы получите тем или иным способом оповещение и включите более детальную аналитику по запросам злоумышленника.
Допустим вы можете оставить "открытым" cgi-bin или pma (phpmyadmin) или любой другой дефолтный url, да хоть .git (главное чтобы реального git'а там не было:)) и как только получаете туда обращение, значит кто-то проверяет пути, которые обычный человек точно не будет смотреть, а это повод задуматься.
На этом, пожалуй, пока что всё. Конечно подход должен быть более комплексным, как с точки зрения защиты доступов к серверам (vpn, ssh-ключи, iptables и т.д.), анализ трафика и прочее, но это уже другая история
#Безопасность
На днях я писал, что плотно заняться безопасностью можно и нужно на втором этапе жизни проекта, когда уже пошел поток клиентов, но есть вещи, которые можно сделать сразу на этапе запуска.
Прежде всего начнем с тюнинга Nginx (у вас же он, правда?)
Про самое очевидное: сразу забудьте про то, что такое сайт без SSL, купите хоть самый дешевый или сделайте бесплатный через let's encrypt
Все запросы, что прилетают на http сразу отправляйте редиректом на https. Как вариант запись эта может выглядеть так:
return 301 https://$host$request_uri;
А чтобы браузер в последствии всегда автоматически переходил на https добавьте заголовок HSTS
add_header Strict-Transport-Security 'max-age=31536000';
Помимо этого заголовка неплохо было бы включить и встроенные механизмы защиты браузера
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "sameorigin";
Старайтесь использовать актуальные настройки ssl_protocols и ssl_ciphers (их, как и вообще весь ssl конфиг можно сгенерить на мозиле)
Проверить уровень настройки SSL можно на ssllabs и там же посмотреть рекомендации по улучшению
Я тебя не знаю, уходи!
Закройте обращения по ip или любому непонятному адресу к вашему приложению. Для этого просто последним в sites-enabled у вас должен быть конфиг default_server
server {
listen 80 default_server;
return 444;
}
Ответ 444, сразу же скидывает соединение не возвращая никакого тела, что позволит помимо мусорного трафика, также снизить и нагрузку. (Для https подключения можно сделать похожий конфиг)
С базовыми вещами по nginx разобрались, теперь возьмем уровень чуть повыше.
Любые запросы к своему API пропускайте через модуль лимитов nginx и отдавайте код 429. После чего обязательно настройте мониторинг на отлов ответов с этим кодом. Это даст вам возможность оперативно поймать потенциальный брутфорс или кривые интеграции, когда сторонний разработчик запустил while (true) и ушел пить кофе.
Иногда нам может потребоваться включить для тех или иных обращений CORS, чтобы на других доменах нашего или интеграционного проекта разработчики могли сделать ajax запросы без прокидывания через свой backend. В этом случае я часто вижу на разных проектах ребята не долго думая делают:
Access-Control-Allow-Origin: *
Так как данный заголовок поддерживает, либо доступ с любого домена, либо только с одного, без перечислений. Решается проблема, либо через map в nginx с установкой нужной переменной (сравниваем желаемый хост с http_origin) и последующей передачей через add_header того же домена в заголовке Access-Control-Allow-Origin либо проще это контролировать через конфиги приложения, как по мне.
Перебейте заголовок Server, который по дефолту отдает Nginx. Сделать это можно либо через server_tokens off; (который при этом все равно будет показывать, что используется nginx, но без версии), либо через бекенд часть приложения, заменив его на то, что вашей душе угодно.
Помимо этого проверьте что вообще за заголовки отдаются вашим приложением (всякие Powered-By и прочие, тоже надо погасить. Чем меньше злоумышленнику на входе будет информации, тем лучше)
Горшочек с медом
Техника honeypot не новая, но почему-то многие ей пренебрегают. Заключается она в том, чтобы добавить стандартные для всех сканеров или ручных тестеров роуты при попадании на которые вы получите тем или иным способом оповещение и включите более детальную аналитику по запросам злоумышленника.
Допустим вы можете оставить "открытым" cgi-bin или pma (phpmyadmin) или любой другой дефолтный url, да хоть .git (главное чтобы реального git'а там не было:)) и как только получаете туда обращение, значит кто-то проверяет пути, которые обычный человек точно не будет смотреть, а это повод задуматься.
На этом, пожалуй, пока что всё. Конечно подход должен быть более комплексным, как с точки зрения защиты доступов к серверам (vpn, ssh-ключи, iptables и т.д.), анализ трафика и прочее, но это уже другая история
letsencrypt.org
Что такое Let's Encrypt
Let's Encrypt – это бесплатный, автоматизированный и открытый центр сертификации, созданный некоммерческой Internet Security Research Group (ISRG). Подробную информацию о нашей некоммерческой работе в этом году можно найти в нашем Годовом отчете за 2025 год.
Forwarded from DevOps News
Пересказ исследования о том, почему использовать файловую систему как backend для распределенного хранилища - не очень хорошая идея (на примере ceph).
В целом после SOSP'19 колличество интересных статей значительно увеличилось.
https://blog.acolyer.org/2019/11/06/ceph-evolution/
#research #ceph #performance
В целом после SOSP'19 колличество интересных статей значительно увеличилось.
https://blog.acolyer.org/2019/11/06/ceph-evolution/
#research #ceph #performance
Forwarded from Dok
Forwarded from DevOps&SRE Library
HAProxy Exposes a Prometheus Metrics Endpoint
В HAProxy добавили нативную поддержку отдачи метрик в формате Prometheus'а.
https://www.haproxy.com/blog/haproxy-exposes-a-prometheus-metrics-endpoint
В HAProxy добавили нативную поддержку отдачи метрик в формате Prometheus'а.
https://www.haproxy.com/blog/haproxy-exposes-a-prometheus-metrics-endpoint
Forwarded from DevOps&SRE Library
PromQL tutorial for beginners
Базовый гайд по языку запросов в Prometheus - PromQL.
https://medium.com/@valyala/promql-tutorial-for-beginners-9ab455142085
Базовый гайд по языку запросов в Prometheus - PromQL.
https://medium.com/@valyala/promql-tutorial-for-beginners-9ab455142085
Forwarded from DevOps&SRE Library
Forwarded from feedmetoo
#Redis #RedisLabs
Redis Labs опубликовали аж два интересных поста. Первый о 7 Redis Worst Practices: https://redislabs.com/blog/7-redis-worst-practices/. Ничего сверхъестественного: открытые наружу, массовые сканы, numbered databases, отсутствие кеша соединений, неразмазывание горячих ключей и использование redis как primary database. Короче, норм статья для тех, кто не успел обжечься на проде - подходит и к мемкешу тоже. Второй пост - о Probabilistic Data Structures, https://redislabs.com/blog/streaming-analytics-with-probabilistic-data-structures/. Этот пост про такие возможности как HyperLogLog, Bloom filters, TopK и count-min sketch. Эта статья даёт хорошее начальное понимание, какие возможности по работе с различными дополнительными структурами данных предоставляет Redis.
Enjoy!
Redis Labs опубликовали аж два интересных поста. Первый о 7 Redis Worst Practices: https://redislabs.com/blog/7-redis-worst-practices/. Ничего сверхъестественного: открытые наружу, массовые сканы, numbered databases, отсутствие кеша соединений, неразмазывание горячих ключей и использование redis как primary database. Короче, норм статья для тех, кто не успел обжечься на проде - подходит и к мемкешу тоже. Второй пост - о Probabilistic Data Structures, https://redislabs.com/blog/streaming-analytics-with-probabilistic-data-structures/. Этот пост про такие возможности как HyperLogLog, Bloom filters, TopK и count-min sketch. Эта статья даёт хорошее начальное понимание, какие возможности по работе с различными дополнительными структурами данных предоставляет Redis.
Enjoy!
Redis
7 Redis Worst Practices - Redis
Knowing what NOT to do is sometimes as valuable as knowing what to do.
Forwarded from feedmetoo
#Одноклассники #Elastic #Graylog
Если ещё не видели статью Одноклассников про кластер под хранилище логов (Кластер Elasticsearch на 200 ТБ+) - посмотрите. Статья длинная, но очень подробная, про архитектуру ES+Graylog, с кучей историй про донастройку Javа в контейнерах и описаний сценариев развала кластера (не могу удержаться: "дата-ноды спамили мастера до того, что он уходил в full GC ... роль мастера переезжала на какую-то следующую ноду, с ней происходило абсолютно то же самое, и в итоге кластер разваливался полностью"). https://habr.com/ru/company/odnoklassniki/blog/494260/
Если ещё не видели статью Одноклассников про кластер под хранилище логов (Кластер Elasticsearch на 200 ТБ+) - посмотрите. Статья длинная, но очень подробная, про архитектуру ES+Graylog, с кучей историй про донастройку Javа в контейнерах и описаний сценариев развала кластера (не могу удержаться: "дата-ноды спамили мастера до того, что он уходил в full GC ... роль мастера переезжала на какую-то следующую ноду, с ней происходило абсолютно то же самое, и в итоге кластер разваливался полностью"). https://habr.com/ru/company/odnoklassniki/blog/494260/
Хабр
Кластер Elasticsearch на 200 ТБ+
С Elasticsearch сталкиваются многие. Но что происходит, когда хочешь с его помощью хранить логи «в особо крупном объёме»? Да ещё и безболезненно переживать отказ любого из нескольких дата-центров?...
image-spec/annotations.md at master · opencontainers/image-spec · GitHub
https://github.com/opencontainers/image-spec/blob/master/annotations.md
https://github.com/opencontainers/image-spec/blob/master/annotations.md
GitHub
image-spec/annotations.md at main · opencontainers/image-spec
OCI Image Format. Contribute to opencontainers/image-spec development by creating an account on GitHub.
Forwarded from CatOps
Описание LDAP Authentication Plugin в Percona Server for MySQL 8.0.19
В статье также есть сравнение производительности разных средств аутентификации
#databases #mysql #percona #security
В статье также есть сравнение производительности разных средств аутентификации
#databases #mysql #percona #security
Percona Database Performance Blog
Introducing the LDAP Authentication Plugin in Percona Server for MySQL 8.0.19 - Percona Database Performance Blog
Percona Server for MySQL 8.0.19 includes the experimental simple LDAP authentication plugin, which allows for direct authentication using an LDAP server.
Forwarded from CatOps
Falcon - бесплатный десктоп клиент для баз данных с открытым кодом.
Поддерживает RedShift, MySQL, PostgreSQL, IBM DB2, Impala, MS SQL, Oracle (с дополнительными приседаниями), SQLite.
Написан на Electron
#toolz
Поддерживает RedShift, MySQL, PostgreSQL, IBM DB2, Impala, MS SQL, Oracle (с дополнительными приседаниями), SQLite.
Написан на Electron
#toolz
GitHub
GitHub - plotly/falcon: Free, open-source SQL client for Windows and Mac 🦅
Free, open-source SQL client for Windows and Mac 🦅 - plotly/falcon
Forwarded from Технологический Болт Генона
Container Security.pdf
6.5 MB
Liz Rice. Container Security: Fundamental Technology Concepts that Protect Containerized Applications. April 2020.
Forwarded from DevOps Deflope News
Вчера вышел релиз Pulumi 2.0 — решения для построения Infrastructure as Code с использованием «настоящих» языков программирования 🙃.
Анонс: http://amp.gs/Kwmf
Из интересного:
* больше языков и все теперь поддерживаются на одном уровне: Node.js (JavaScript, TypeScript), Python, .NET (C#, F#, etc) и Go
* новые CI/CD интеграции
* больше поддерживаемых ресурсов
* новый policy as code фреймворк — CrossGuard
* реализация моков для тестирования
#pulumi #iac
Анонс: http://amp.gs/Kwmf
Из интересного:
* больше языков и все теперь поддерживаются на одном уровне: Node.js (JavaScript, TypeScript), Python, .NET (C#, F#, etc) и Go
* новые CI/CD интеграции
* больше поддерживаемых ресурсов
* новый policy as code фреймворк — CrossGuard
* реализация моков для тестирования
#pulumi #iac
Forwarded from DevOps Deflope News
Как и многие другие конференции, GrafanaCon в этом году пройдет онлайн. Из необычного, она будет идти 3 недели с 13 по 29 мая по несколько докладов в день 🙀🔥🎉
Расписание и регистрация: https://grafana.com/about/events/grafanacon/2020/
#grafanacon #news
Расписание и регистрация: https://grafana.com/about/events/grafanacon/2020/
#grafanacon #news
Grafana Labs
GrafanaCONline 2020
Since you can’t come to GrafanaCon, GrafanaCONline is coming to you.
Forwarded from Security Wine (бывший - DevSecOps Wine) (Denis Yakimov)
DevSecOps Reference Architecture.pdf
4.2 MB
DevSecOps Reference Architecture.
Безумно крутой подгон от Sonatype. Схематичное описание Secure CI/CD с указанием гейтов от идеи до AppStore.
#bestpractice
Безумно крутой подгон от Sonatype. Схематичное описание Secure CI/CD с указанием гейтов от идеи до AppStore.
#bestpractice
Forwarded from Мониторим ИТ
Псс, бесплатные обучающие вебинары от Elastic нужны? Для всех тех, кто понимает, что решение вроде бы может быть где-то полезно, но пока не поняли где. По ссылке 11 обучающих вебинаров по разным прикладным задачам, для которых может использоваться Elastic (речь обо всём их софте, который они в последнее время начали очень активно штамповать).
www.elastic.co
Quickly Get Started with Elastic
The Elastic Platform is the only platform that enables you to search, observe, protect and secure your environment, end-to-end in real time....
Forwarded from Мониторим ИТ
Чё там в линуксе за 60 секунд
Статья в техблоге Нетфликс о командах, которые дадут наиболее полное представление о состоянии линукс-сервера. Говорят, что выполняют их для диагностики непосредственно на сервере в результате получения алерта и утверждают, что весь список можно осмысленно пройти за 60 секунд. Попробуете?
Полный список 60-секундных команд:
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
👍 — успел за 60 секунд
👎 — не успел за 60 секунд
👀 — метрики в моём мониторинге мне и так всё скажут, заходить на сервер для диагностики смысла не вижу
Статья в техблоге Нетфликс о командах, которые дадут наиболее полное представление о состоянии линукс-сервера. Говорят, что выполняют их для диагностики непосредственно на сервере в результате получения алерта и утверждают, что весь список можно осмысленно пройти за 60 секунд. Попробуете?
Полный список 60-секундных команд:
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
👍 — успел за 60 секунд
👎 — не успел за 60 секунд
👀 — метрики в моём мониторинге мне и так всё скажут, заходить на сервер для диагностики смысла не вижу
Medium
Linux Performance Analysis in 60,000 Milliseconds
You log in to a Linux server with a performance issue: what do you check in the first minute?
Forwarded from Мониторим ИТ
9 платных, условно-бесплатных и бесплатных программ для трекинга кода приложений. Публиковал эту статью почти 2 года назад, а список по-прежнему актуален.
Хабр
9 платных, условно-бесплатных и бесплатных программ для трекинга кода приложений
Трекинг кода must-have в среде разработки. Но вот насколько нужен этот же инструмент в продуктиве? Тот, кто лишь кропотливо собирает логи скажет «ну его нафиг, мой ELK меня не подводит» и будет...
Forwarded from Мониторим ИТ
Кир Шатров в своём блоге рассказывает о подходе к повышению информативности трейса запросов в MySQL с помощью добавления метаданных к запросу.
Было: SELECT * FROM users WHERE id=?
Станет: SELECT * FROM users WHERE id=? /* controller:users,action:show,method:find_user,api_client_id:42 */
Было: SELECT * FROM users WHERE id=?
Станет: SELECT * FROM users WHERE id=? /* controller:users,action:show,method:find_user,api_client_id:42 */
Kir Shatrov
Scaling MySQL stack, ep. 3: Observability
I’ve spent a good part of last year collaborating with different people at work on the theme of scaling our MySQL stack to the next level. For background, like many other companies founded in the mid-2000s (Facebook, YouTube, GitHub, Basecamp), Shopify is…