NSS реализован на основе подгружаемых модулей — динамических библиотек, соответствующих API glibc, таких как libnss_dns.so, libnss_files.so, libnss_myhostname.so и других. Они функционируют как плагины и подгружаются библиотекой glibc во время выполнения, отвечая за конкретные методы разрешения IP-адресов. Порядок и набор источников, используемых для разрешения имен, задается в конфигурационном файле /etc/nsswitch.conf.
Пример содержания nsswitch.conf:
# /etc/nsswitch.conf
passwd: files systemd
group: files systemd
shadow: files
gshadow: files
hosts: files dns myhostname
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nisНапример, строка в модулях с содержанием ``
hosts: files dns`` говорит, что сначала ищется соответствие в локальном файле /etc/hosts, и если модуль files возвращает результат, то последующие модули, такие как dns (делающий DNS-запрос) не будут вызваны.Соответственно, если в nsswitch.conf строка hosts не включает упоминание модуля dns, то конфигурационный файл resolv.conf, содержащий настройки обращения к DNS-источникам, проигнорируется, и DNS-запрос не будет сформирован.
Модуль myhostname является частью systemd и используется для разрешения локального имени хоста. Он не всегда присутствует в минималистичных системах, таких как Alpine Linux.
В следующем посте расскажу о библиотеках экосистемы Linux, ожидайте, сегодня продолжение
#DNS #Linux |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Сетевик Джонни // Network Admin
В следующем посте расскажу о библиотеках экосистемы Linux, ожидайте, сегодня продолжение
Нижеперечисленные библиотеки экосистемы Linux являются ключевыми и предоставляют приложениям определенный набор функций, включая разрешение доменных имен.
1. Glibc — наиболее распространённая реализация стандартной библиотеки языка C, реализует высокоуровневые функции, такие как getaddrinfo(). Она взаимодействует с NSS (Name Service Switch) для определения источников разрешения имён (например, /etc/hosts, DNS) и использует библиотеку libresolv для выполнения DNS-запросов.
- Glibc может использовать системные вызовы, такие как sendto и recvfrom для отправки и получения DNS-запросов по UDP или TCP. Широко распространена в большинстве дистрибутивов Linux (Ubuntu, Debian, Fedora и др.)
2. Musl — альтернативная стандартная библиотека C, разработанная с упором на минимализм, производительность и совместимость со стандартами POSIX. Она используется в легковесных дистрибутивах, таких как Alpine Linux.
- Musl реализует разрешение доменных имён напрямую, без использования NSS, самостоятельно читает /etc/hosts и /etc/resolv.conf и отправляет DNS-запросы, не используя внешние библиотеки вроде libresolv. Однако musl имеет ограничения в поддержке некоторых параметров resolv.conf, таких как rotate или сложные search.
3. Libresolv.so — является частью glibc, реализующая низкоуровневую работу с DNS, выполняя такие запросы, как res_query() и res_send(), но может использоваться независимо в некоторых приложениях вроде nslookup (что позволяет выполнять DNS-запросы напрямую, минуя стандартные механизмы разрешения имен).
- Libresolv используется glibc для выполнения DNS-запросов, когда NSS указывает, что нужно обратиться к DNS. Она читает /etc/resolv.conf, формирует DNS-пакеты и отправляет их на указанные серверы по UDP или TCP.
Стоит отметить, что некоторые приложения, например, написанные на Go, могут полностью обходить glibc/musl и использовать собственные DNS-резолверы.
#DNS #Linux |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Файл /etc/resolv.conf содержит основные настройки клиента DNS, а именно: список серверов, параметры, search-домены. Например:
nameserver 192.168.1.1
search dev.local
options timeout:2 attempts:3— Glibc и libresolv парсят его вручную при необходимости.
Важные моменты и ограничения:
- опции вроде rotate, ndots, timeout и attempts влияют на поведение запроса;
- опция rotate используется для циклического выбора серверов из списка nameserver, но она не поддерживается в musl;
- search используется для автодополнения, например, если имя db01 не является FQDN, к нему будут по очереди подставляться домены из директивы search.
Важно отметить, что файл resolv.conf может быть динамически изменён DHCP-клиентом, NetworkManager или утилитой resolvconf, что может вызывать путаницу при решении проблем с DNS. Об этом мы поговорим в одной из следующих частей.
Касательно
res_query(), это функция из libresolv, вызываемая внутренне в процессе разрешения имени. Она формирует DNS-пакет вручную и отправляет его на указанные в resolv.conf DNS-серверы. Её используют утилиты вроде nslookup, а также некоторые программы, которые обходят getaddrinfo().Функция отправляет DNS-запросы с помощью
res_send() по UDP, а при необходимости, например, при получении ответов, превышающих 512 байт, переключается на TCP.1.
res_query() считается устаревшей функцией, использовать ее не рекомендуется. Для более удобной и безопасной работы с DNS лучше отдать предпочтение getaddrinfo() или таким библиотекам, как c-ares или libdns.2.
c-ares — легковесная библиотека для асинхронных DNS-запросов, часто используется в высоконагруженных приложениях (например, curl и Node.js)3.
libunbound (из проекта Unbound) — более мощная библиотека с поддержкой DNSSEC и гибкой настройкой запросов.В следующем посте расскажу о порядке реализации запросов и приоритетов, ожидайте, сегодня продолжение
#DNS #Linux |
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
YouFast VPN™ | Надежный ВПН
🛡 Самый быстрый и безопасный VPN-сервис прямо в Телеграме.
Не храним логи и не воруем ваши данные.
Нажмите «СТАРТ» ⬇️
Не храним логи и не воруем ваши данные.
Нажмите «СТАРТ» ⬇️
🔥9👍3
Вот типичный порядок разрешения имени в Linux при использовании glibc и NSS:
1. Приложение вызывает getaddrinfo();
2. getaddrinfo() обращается к системе NSS и следует заданному в nsswitch.conf порядку;
3. Если первым указан модуль files, имя ищется в файле /etc/hosts;
4. Если включён модуль dns, NSS вызывает libnss_dns.so, которая обращается к функциям из libresolv;
5. libresolv формирует DNS-запрос через res_query() и отправляет его с помощью res_send() на указанные в resolv.conf адреса DNS-серверов, затем получает и возвращает IP-адрес.
#DNS #Linux |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
Сетевик Джонни // Network Admin
Важно: если имя найдено на одном из шагов, например, в hosts, последующие источники не используются.
В минималистичных системах, таких как Alpine Linux с musl, порядок может отличаться, так как musl не использует NSS и реализует DNS-запросы напрямую, читая /etc/hosts и resolv.conf самостоятельно.
Некоторые приложения и языки (например, Go, Java, Node.js) могут использовать собственные DNS-резолверы, полностью игнорируя системные настройки.
Для примера проанализируем работу утилиты curl.
Команда:
strace -f -e trace=network curl -s download.astralinux.ru > /dev/null
Вывод strace:
socket(AF_INET6, SOCK_DGRAM, IPPROTO_IP) = 3
socketpair(AF_UNIX, SOCK_STREAM, 0, [3, 4]) = 0
socketpair(AF_UNIX, SOCK_STREAM, 0, [5, 6]) = 0
strace: Process 283163 attached
[pid 283163] socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 7
[pid 283163] connect(7, {sa_family=AF_UNIX, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (Нет такого файла или каталога)
[pid 283163] socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 7
[pid 283163] connect(7, {sa_family=AF_UNIX, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (Нет такого файла или каталога)
[pid 283163] socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 7
[pid 283163] connect(7, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("172.24.31.107")}, 16) = 0
[pid 283163] sendmmsg(7, [{msg_hdr={msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\250\207\1\0\0\1\0\0\0\0\0\0\10download\nastralinux"..., iov_len=40}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=40}, {msg_hdr={msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\240\215\1\0\0\1\0\0\0\0\0\0\10download\nastralinux"..., iov_len=40}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=40}], 2, MSG_NOSIGNAL) = 2
[pid 283163] recvfrom(7, "\250\207\201\200\0\1\0\1\0\0\0\0\10download\nastralinux"..., 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("172.24.31.107")}, [28->16]) = 56
[pid 283163] recvfrom(7, "\240\215\201\200\0\1\0\0\0\1\0\0\10download\nastralinux"..., 65536, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("172.24.31.107")}, [28->16]) = 114
[pid 283163] sendto(6, "\1", 1, MSG_NOSIGNAL, NULL, 0) = 1
[pid 283163] +++ exited with 0 +++
socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = 5
setsockopt(5, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(5, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
setsockopt(5, SOL_TCP, TCP_KEEPIDLE, [60], 4) = 0
setsockopt(5, SOL_TCP, TCP_KEEPINTVL, [60], 4) = 0
connect(5, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("130.193.50.59")}, 16) = -1 EINPROGRESS (Операция выполняется в данный момент)
getsockopt(5, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
getpeername(5, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("130.193.50.59")}, [128->16]) = 0
getsockname(5, {sa_family=AF_INET, sin_port=htons(48488), sin_addr=inet_addr("172.24.31.241")}, [128->16]) = 0
sendto(5, "GET / HTTP/1.1\r\nHost: download.a"..., 86, MSG_NOSIGNAL, NULL, 0) = 86
recvfrom(5, "HTTP/1.1 200 OK\r\nServer: nginx/1"..., 102400, 0, NULL, NULL) = 1617
1. Попытка использовать NSCD (Name Service Cache Daemon)
connect(..., "/var/run/nscd/socket", ...) = -1 ENOENT- Это означает, что glibc сначала пытается использовать кеш имён из NSCD, если он запущен. В системе его нет, и запрос идёт дальше.
2. Вызов
socket() и connect() к DNS-серверуsocket(AF_INET, SOCK_DGRAM|..., IPPROTO_IP) = 7
connect(7, ..., sin_addr=inet_addr("172.24.31.107")...)- Здесь создаётся UDP-сокет для обращения к DNS-серверу, указанному в /etc/resolv.conf.
3. Вызов
sendmmsg() — отправка DNS-запросовsendmmsg(7, [ { "download.astralinux.ru" }, { "download.astralinux.ru" } ], ...)
Здесь отправляются запросы на резолв имени. 4. Ответ от DNS
recvfrom(...) = 56
recvfrom(...) = 114Теперь IP-адрес известен.
56 - это размер DNS-ответа в байтах, содержащего А-запись (IPv4-адрес)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6⚡1
Сетевик Джонни // Network Admin
114 - размер дополнительных данных, например CNAME, или авторитетные серверы в случае рекурсивного запроса.
5. TCP-соединение по IP
‼️ Таким образом, когда мы вызываем curl, мы не видим DNS-запросов напрямую — их делает библиотека glibc внутри вызова
Важно отметить, что поведение
#DNS #Linux |😏 @iscode | YouFast VPN — сильнейший из всех
5. TCP-соединение по IP
connect(5, ..., sin_addr=inet_addr("130.193.50.59"))
Здесь уже сам curl устанавливает TCP-соединение по IP-адресу, который ему вернула getaddrinfo().getaddrinfo(). Но strace позволяет увидеть косвенные признаки:Среди вызовов будет попытка подключиться к nscd, вызов connect() к DNS-серверу, отправка UDP-пакета через sendmmsg(), а затем — стандартное TCP-соединение по IP:
connect(7, {AF_INET, 172.24.31.107:53}) = 0
sendmmsg(7, [{ "download.astralinux.ru" }]) = 2
recvfrom(7, ...) = ...
connect(5, {130.193.50.59:80}) = 0Важно отметить, что поведение
getaddrinfo() может зависеть от реализации libc. Например, в glibc результаты могут кэшироваться, что влияет на производительность и актуальность данных.#DNS #Linux |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Сетевик Джонни // Network Admin
Как работает DNS в Linux. Часть 1: порядок реализации запросов и приоритеты
DNS-запрос в Linux — это не обязательно запрос к DNS-серверу. Цепочка обращений может включать hosts, NSS, glibc и другие источники.
NSS и nsswitch.conf определяют порядок и источники разрешения имён.
glibc использует NSS и может кэшировать результаты; musl реализует DNS-резолвинг напрямую с ограниченной поддержкой опций resolv.conf.
Resolv.conf управляет настройками резолвера, но может быть изменен динамически.Getaddrinfo() — основной интерфейс для разрешения имен, обрабатывает как DNS, так и другие источники.В разных языках программирования (Go, Java, Python с dns.resolver, Node.js) могут использоваться собственные механизмы DNS-запросов.
#DNS #Linux |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25⚡2
Сетевик Джонни // Network Admin
Как работает DNS в Linux. Часть 1: краткое резюме и ключевые моменты
В первых частях мы разобрали, как в Linux работает процесс разрешения имен — от вызова
getaddrinfo() до получения IP-адреса. Однако если бы каждый вызов требовал нового DNS-запроса, это было бы неэффективно и сильно нагружало как систему, так и сеть. Поэтому используется кэширование.Кэширование DNS может быть везде — в glibc, в systemd-resolved, в браузерах и даже в приложениях на Go. Кэш помогает увеличить скорость работы, но создает дополнительные сложности при отладке. Например: вы меняете DNS-запись, но сервер продолжает ходить по старому IP-адресу. Или, Dig показывает правильный адрес, а curl всё равно подключается к устаревшему.
1. Что такое DNS-кэш и зачем он нужен:
DNS-кэш — это не единое хранилище, а многоуровневая система механизмов кэширования на разных уровнях системы. Каждый DNS-запрос — это долгий сетевой вызов, поэтому многие компоненты стараются сохранять результаты локально.
TTL (Time To Live) — время жизни записи в кэше. Оно указывается в DNS-ответе и определяет, как долго можно использовать сохранённый IP-адрес. Задается обычно в секундах. После истечения TTL необходимо обновить данные.
- повысить скорость обработки повторных DNS запросов - снизить нагрузку на серверную и сетевую инфраструктуру - обеспечить отказоустойчивость при временной потере соединения - уменьшить задержки в работе приложений
— Но у кэширования есть и обратная сторона: устаревшие данные могут стать причиной недоступности сервисов при изменении инфраструктуры.
#DNS #Linux |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Оказался(ась) на этом канале впервые и потерялся? — можешь звать меня Джонни, я буду твоим проводником.
Этот Telegram-канал — солянка для сетевых инженеров и сисадминов. Здесь мы не ищем тайны, а чиним сети, настраиваем серверы и пишем скрипты, чтобы работалось лучше. Мы соберём пазл из BGP, OSPF, Ansible и Kubernetes, чтобы ты видел картину целиком, а не только красные дашборды.
1. OSPF — протокол динамической маршрутизации
2. NDP — протокол управления сетевыми узлами IPv6
3. BGP — протокол маршрутизации
4. RIP — протокол маршрутизации
5. FTP — протокол передачи файлов
6. SONET — стандарт передачи данных по оптоволоконным сетям
7. RDP — протокол удаленного рабочего стола
8. RPC — протокол удаленного вызова процедур
9. SMB — протокол общего доступа к файлам
10. SIP — протокол инициации сеанса
11. QUIC — протокол универсальной управляемой передачи
12. NTP — протокол сетевой синхронизации времени
13. LLDP — протокол обнаружения топологии сети
14. SNMP — инструмент для управления сетями
15. DNS — система преобразования доменных имен
1. Примеры атак XSS и способов их ослабления
2. Что такое триада КЦД: шпаргалка для начинающих специалистов в сфере кибербезопасности
3. Микросервисная архитектура на примере Python и gRPC
4. Компьютерные сети от А до Я: стек протоколов TCP/IP
5. Основы методологии DevOps
6. «Я тебя по IP вычислю»: как хакеры рассекречивают звенья цепи Tor
7. TCPDump — инструмент для анализа сетевого трафика
8. Wireshark — Анализ сетевого трафика
9. VMWare: создание виртуальных машин
10. Утилиты на PowerShell для системных администраторов
11. Как я искал нормальный RDP-клиент и нашел целых три
12. DNSSEC — набор расширений для обеспечения безопасности DNS
13. Будни техпода. Ошибки при подключении по RDP
14. Будни техпода. Как разместить Telegram-бота на виртуальном сервере
15. Будни техпода. Подготовка сервера с Linux для работы по RDP
16. Будни техпода. Разворачиваем сайт из конструктора на VDS за 130 рублей
17. Будни техпода. Как перенести данные с одного виртуального хостинга на другой
18. Как я сделал самый быстрый в мире файловый сервер
19. HDD, SSD или NVMe: что выбрать для виртуального сервера
20. Nmap — инструмент для сканирования хостов
21. Две скрытые кайфовые фичи Windows Admin Center: как найти, настроить и использовать
22. Устройство TCP: Реализация SYN-flood атаки
23. Tcpdump на разных уровнях: анализ и перехват трафика
24. Тачку на прокачку: тюнинг Wireshark
25. Настройка Git сервера с нуля
26. 10 типичных ошибок при использовании k8s
27. Внутреннее устройство Kubernetes-кластера простым языком
28. Сказ о том, как два сервера изменили судьбу сетевой команды
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9
1. Насколько утечки 🔼 бустят эффективность фишинга
2. Удаляем файлы с Linux правильно
3. 10 полезных команд в Linux для сетей LAN и WI-FI
4. NAT в сетях
5. Пишем более читаемый текст в терминале Linux
6. Реверс сокс-прокси
7. Утечка DNS
8. Шпаргалка по OpenSSL
9. Основы DNS: работа DNS-request'a
10. Основы DNS: иерархия
11. Записи DNS и их типы
12. 12 заблуждений сетевого администратора
13. Настройка Git сервера с нуля
14. Десятка лучших консольных команд
15. DNS-хостинг для начинающих, многообразие ресурсных записей (ч.1)
16. DNS-хостинг для начинающих, многообразие ресурсных записей (ч.2)
17. DNS-хостинг для начинающих, многообразие ресурсных записей (ч.3)
18. DNS-хостинг для начинающих, многообразие ресурсных записей (ч.4)
19. 10 опасных команд Linux, которые вы никогда не должны запускать
20. Функционал SSH: проброс портов
21. Откуда этот конфиг? [Debian/Ubuntu]
22. Функционал SSH: ключ сервера SSH
23. Функционал SSH: вложенные туннели
24. Функционал SSH: динамический проброс портов
25. Функционал SSH: управление ключами SSH
26. HTTP: Uniform Resource Locator — или просто URL
27. Протокол HTTP: принцип работы и методы
28. Протокол HTTP: коды состояния ответов и ошибки
29. Распространенные ошибки веб-сервера Nginx (1 ч.)
30. Консольная утилита для визуализации результата любых shell команд
31. Как провести стресс-тестирование вашей системы Linux
32. Распространенные ошибки веб-сервера Nginx (2 часть)
33. Функционал SSH: проброс X-сервера
34. Функционал SSH: проброс stdin/out
35. Функционал SSH: туннелирование
36. Руководство по настройке и использованию rsync
37. Тонкая настройка SSH для безопасности серверов
38. Функционал SSH: алиасы в SSH
39. А ваша система мониторинга орёт, когда меняется маршрутизация? (ч.1)
40. А ваша система мониторинга орёт, когда меняется маршрутизация? (ч.2)
41. А ваша система мониторинга орёт, когда меняется маршрутизация? (ч.3)
42. По следам одного взлома: когда 'a' не равно 'а' (ч.1)
43. По следам одного взлома: когда 'a' не равно 'а' (ч.2)
44. По следам одного взлома: когда 'a' не равно 'а' (ч.3)
45. Проблема ботов и идея защиты, или о том как я использую zip-бомбы для защиты своего сервера
46. Проблема ботов и идея защиты, или о том как я использую zip-бомбы для защиты своего сервера(ч.2)
47. Дыра в щите Cloudflare: как атака на Jabber.ru вскрыла проблему, о которой молчат c 2023 (ч.1)
48. Технический ликбез: CAA, RFC 8657 и как это должно нас спасать
49. Слон в посудной лавке: при чём тут Cloudflare?
50. Как работает DNS в Linux. Часть 1: от getaddrinfo до resolv.conf
51. Как работает DNS в Linux. Часть 1: NSS
52. Как работает DNS в Linux. Часть 1: Библиотеки
53. Как работает DNS в Linux. Часть 1: обработка resolv.conf и что делает res_query()
54. Как работает DNS в Linux. Часть 1: порядок реализации запросов и приоритеты
55. Как работает DNS в Linux. Часть 1: порядок реализации запросов и приоритеты (ч.2)
56. Как работает DNS в Linux. Часть 1: краткое резюме и ключевые моменты
57. Как работает DNS в Linux. Часть 2: все уровни DNS-кэширования
1. Подборка обучающих материалов по компьютерных сетях
2. Cisco Systems — подборка обучающих материалов
3. Сетевое администрирование: подборка бесплатных курсов
4. Большая подборка вопросов с собеседований: Системного администратора Linux/Devops
5. Репозиторий 101 Linux Commands eBook
1. Мониторинг и Kubernetes
2. Автомасштабирование и управление ресурсами в Kubernetes
3. Деление IP сети на подсети при помощи маски легко и быстро
4. portknocking на mikrotik
5. Mikrotik на VPS
6. Установка и настройка Sysmon
7. Изменение Windows 10 из Proffesional в Enterprise 2021 LTSC
8. Расследование одного взлома: SSH туннель
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥6
Сетевик Джонни // Network Admin
Как работает DNS в Linux. Часть 2: все уровни DNS-кэширования
Ядро
Ядро Linux может опосредованно “кэшировать” DNS-трафик через подсистему
netfilter/conntrack, если используется stateful-фильтрация. Несмотря на то, что UDP — протокол без установления соединения, ядро отслеживает состояние пакетов, относящихся к одному блоку запрос-ответ (например, запрос от [src_ip:src_port] к [8.8.8.8:53] и ожидаемый ответ от [8.8.8.8:53] к [src_ip:src_port]) и временно хранит информацию — по умолчанию около 30 секунд. Это необходимо для NAT и правил вроде iptables -m conntrack --ctstate ESTABLISHED,RELATED.Проверить текущие записи можно командой:
conntrack -L -p udp --dport 53
В списке отобразятся активные DNS-сессии, которые считаются допустимыми до истечения таймаута. Повторные DNS-запросы к тем же адресам в пределах срока жизни этих записей могут быть обработаны в рамках существующей записи состояния. Это не полноценное кэширование DNS-ответов, но conntrack может влиять на поведение сетевого уровня, особенно при диагностике проблем с NAT или firewall.
Для удаления записей из таблицы отслеживания соединений можно воспользоваться командой:
conntrack -D -p udp --dport 53Системный уровень
1.
systemd-resolvedСовременные дистрибутивы с systemd часто используют
systemd-resolved в качестве основного DNS-клиента, который:- имеет собственный кэш DNS-запросов, включая положительные и (опционально) отрицательные ответы;
- поддерживает split DNS (разные DNS-серверы для разных доменов), конфигурируется через systemd-networkd или NetworkManager;
- поддерживает DNS-over-TLS (DoT), включая fallback-серверы и DNSSEC;
- предоставляет API по D-Bus (org.freedesktop.resolve1), позволяет получать статус, менять настройки и управлять кэшем через resolvectl.
2. nscd (Name Service Cache Daemon)
Если запущен nscd, он кэширует результаты NSS-вызовов, включая DNS. Его настройки находятся в /etc/nscd.conf
enable-cache hosts yes
positive-time-to-live hosts 600
negative-time-to-live hosts 203. Популярные локальные кэширующие резолверы
dnsmasq — популярный выбор для локального кэширования(настройка кэша):
cache-size=1000 (cache-size управляет размером кэша. По умолчанию он небольшой (150), и для заметного эффекта его увеличивают до 1000–5000)
neg-ttl=60unbound — более мощный DNS-рекурсор.
Управление кэшем гибкое:
Размер кэша задаётся параметром msg-cache-size (отвечает за ответы) и rrset-cache-size (за записи ресурсов):
msg-cache-size: 50m
rrset-cache-size: 100mTTL кэшированных ответов можно ограничить директивами cache-min-ttl и cache-max-ttl
cache-min-ttl: 30 # минимальный TTL для любых ответов
cache-max-ttl: 86400 # максимальный TTL (24 часа)bind - распространенный DNS-сервер с поддержкой рекурсивного разрешения и кэширования. Управление кэшем и его мониторинг осуществляется через команду rndc (Remote Name Daemon Control).
В конфигурационном файле named.conf можно задавать TTL для кэша и контролировать поведение:
options {
max-cache-ttl 86400; // максимальное время жизни кэша (в секундах)
max-ncache-ttl 3600; // максимальное время жизни негативных ответов (NXDOMAIN)
};#DNS #Linux |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11
Forwarded from STEIN: ИБ, OSINT
Представьте: ваш VPN становится невидимкой для РКН, маскируясь под обычный трафик от народного мессенджера Max. Никаких блокировок, никаких подозрений.
— В этой статье вы узнаете, как настроить такой «стелс» за 10 минут через удобный 3x-UI интерфейс с учётом последних потуг от регулятора (лазейка есть, и способ в разы дешевле чем Double VPN + gRPC + SelfSNI + бубны + домены с закосом под трафик от сайта и прочая х)
⤷ teletype.in/@secur_researcher/vpn_tutorial
#VPN #xHTTP #VLESS |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👎10
This media is not supported in your browser
VIEW IN TELEGRAM
Сетевые протоколы работают на разных уровнях модели OSI, это важно знать.
1. 𝗧𝗖𝗣/𝗜𝗣 — базовый метод передачи информации между устройствами в Интернете. В то время как IP отвечает за адресацию и маршрутизацию пакетов данных, TCP заботится о сборке данных в пакеты, а также о надежной доставке.
2. 𝗛𝗧𝗧𝗣 — играет решающую роль при доступе к веб-сайтам. Он отвечает за получение и доставку веб-контента с серверов конечным пользователям.
3. 𝗛𝗧𝗧𝗣𝗦 — усовершенствованная версия HTTP, HTTPS объединяет протоколы безопасности (а именно TLS) для шифрования данных, обеспечивая безопасный и конфиденциальный обмен между браузерами и веб-сайтами.
4. 𝗙𝗧𝗣 — Как следует из названия, FTP используется для передачи файлов (загрузки и скачивания) между компьютерами в сети.
5. 𝗨𝗗𝗣 — более оптимизированный аналог TCP, UDP передает данные без накладных расходов на установление соединения, что приводит к более быстрой передаче, но без гарантии, что данные будут доставлены или будут в порядке.
6. 𝗦𝗠𝗧𝗣 — движущая сила обмена электронной почтой, которая управляет форматированием, маршрутизацией и доставкой писем между почтовыми серверами.
7. 𝗦𝗦𝗛 — криптографический сетевой протокол, который обеспечивает безопасную передачу данных по незащищенной сети.
- Он обеспечивает безопасный канал, гарантируя, что хакеры не смогут интерпретировать информацию путем подслушивания
#Protocol #cheatsheet |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10⚡1
glibc
Хотя официально считается, что glibc не реализует полноценный DNS-кэш (в отличие от демонов вроде systemd-resolved, dnsmasq или nscd), в её реализации резолвера есть несколько механизмов, которые действуют как очень простое и ограниченное кэширование или оптимизация запросов.
— Во-первых, используется NSS (Name Service Switch), который может быть сконфигурирован для работы с nscd, systemd-resolved или другими кэширующими компонентами. Например, с помощью следующей директивы в файле nsswitch.conf:
hosts: files resolved myhostnameГде вместо resolved также может быть и nscd. Хотя nscd — отдельный демон, он поставляется вместе с glibc в большинстве дистрибутивов и тесно интегрирован с ней.
Когда nscd запущен и настроен (часто включен по умолчанию для passwd, group, hosts), библиотеки glibc (getaddrinfo, gethostbyname) будут обращаться к нему первыми. Nscd кэширует ответы до истечения их TTL. Кэширование в этом случае происходит вне самой библиотеки glibc, но glibc использует этот кэш прозрачно для приложения.
— Модули NSS (особенно files) кэшируют данные из статических файлов. Например, nss-files (работающий в том числе с /etc/hosts) по сути "кэширует" содержимое этих файлов в памяти процесса после их первого чтения (до перезагрузки процесса или вызова, инвалидирующего кэш NSS). Это не DNS-кэширование в чистом виде, но влияет на процесс разрешения имен, в котором участвует DNS.
Java
Java поддерживает встроенный DNS-кэш с гибкими настройками времени жизни записей.
Особенности работы
Без использования Security Manager (начиная с Java 11 - это поведение по умолчанию):
- положительные ответы кэшируются на 30 секунд (максимум, даже если DNS-сервер указал больший TTL);
- отрицательные ответы (NXDOMAIN) — 10 секунд.
С использованием Security Manager:
- положительные ответы кэшируются бесконечно (риск устаревших записей);
- отрицательные ответы не кэшируются.
Управление
Настройки указываются в свойствах JVM. TTL в секундах для успешных запросов:
networkaddress.cache.ttl=60
TTL для неудачных запросов (NXDOMAIN):
networkaddress.cache.negative.ttl=10
Варианты значений:
0 — отключить кэширование;
-1 — кэшировать бессрочно (только для положительных ответов).
Способы настройки
1. Аргументы JVM:
java -Dnetworkaddress.cache.ttl=60 -jar app.jar
2. В коде (глобально для JVM):
Security.setProperty("networkaddress.cache.ttl", "60");
Go
Go использует две модели резолвинга:
- через cgo — вызывает системный getaddrinfo() (включая NSS). Работает через системные настройки (/etc/nsswitch.conf, /etc/resolv.conf);
- Pure Go resolver — реализует собственный DNS клиент, минуя системные библиотеки.
Выбор резолвера:
GODEBUG=netdns=go # встроенный резолвер с кэшем
GODEBUG=netdns=cgo # через системный getaddrinfo()При использовании Pure Go резолвера Go реализует in-memory DNS-кэш внутри процесса. Этот кэш хранит успешные (A, AAAA, CNAME) и отрицательные (NXDOMAIN) ответы, соблюдая их TTL. Кэш имеет фиксированный размер (реализует эвристику LRU), хранится в памяти процесса и разделяется между горутинами внутри этого процесса, но не разделяется между разными процессами или экземплярами приложений.
Python
По умолчанию модуль socket и большинство стандартных библиотек (включая requests, urllib3) используют системный вызов getaddrinfo() и не имеют встроенного кэша DNS.
•
requests → использует urllib3, который делегирует разрешение DNS системной библиотеке (socket.getaddrinfo()), без кэширования.Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
•
•
Таким образом, поведение зависит от конкретной библиотеки. Стандартный socket и большинство оберток над ним, включая requests, кэширование не реализуют и полагаются на системный резолвер.
✋ В следующей части расскажу про контейнеры и оркестрацию, ставьте 👍
#DNS #Linux |😏 @iscode
aiohttp по умолчанию работает через getaddrinfo(), но может быть настроен на использование aiodns (асинхронный DNS через libcares), где возможно встроенное кэширование.•
dnspython — отдельный DNS-клиент, выполняющий DNS-запросы напрямую. С версии 2.0 поддерживает явное включение кэша:import dns.resolver
resolver = dns.resolver.Resolver()
resolver.cache = dns.resolver.Cache()Таким образом, поведение зависит от конкретной библиотеки. Стандартный socket и большинство оберток над ним, включая requests, кэширование не реализуют и полагаются на системный резолвер.
#DNS #Linux |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16⚡2
This media is not supported in your browser
VIEW IN TELEGRAM
Пример использования съемной опорной планки
👍11🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
По просьбе одного из подписчиков, а точнее Alexander S выложить YT авторов по нашему направлению, что-ж, тема отличная, не знаю почему раньше этим не занялся, так как в любой связанной с айтишкой профессии, в системном администрировании специалисту требуется постоянное обучение, без которого нельзя развить необходимые навыки и наработать опыт.
1. Andrey Sozykin — на канале доступны видеолекции, подготовленные автором на основе этих курсов. Информация подается в краткой форме без затрудняющих восприятие деталей. Автор подробно разбирает следующие темы: компьютерные сети, защищенные сетевые протоколы, SQL, Python и нейросети.
2. Вера Дроздова — роликов немного, но они оформлены в виде лекций и хорошо продуманы.
3. tutoriaLinux — автор профессиональный системный администратор, веб-разработчик, безопасник и архитектор датацентров с более чем десятилетним опытом. Обсуждаются следующие темы: получение первой работы, команды Linux, SRE, GIT, сети, VPN, оболочки и масса прочего. Также здесь можно найти интересные интервью.[EN]
4. ExtremeCode — и замыкающий автор в нашем списке это ExtremeCode, первые три автора это скучная техническая часть, а этот автор поможет скрасить вечера или послеобеденные будни в офисе)
админ вернулся с попойки, лайк посту поставьте братва и посты чаще начнут выходить
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍5
Речь пойдёт о целевых атаках, не буду говорить о массовых фишинговых письмах, на подобии наследства с Африки, ибо не эффективно, лидов нет. А вот когда у тебя на руках персональные данные сотрудников и правильно воспользовавшись можно превратить обычный спам в целевую атаку:
· корпоративный адрес сотрудника, который заказывает еду в офис, его имя и фамилию;
· когда происходит заказ — например, до обеда в пятницу;
· что заказывают — пиццу, бургеры, вок и т. д.;
· телефон того, кто встречает курьера;
· сколько было заказов, какая регулярность
После чего желательно в пятницу утром высылается письмо на адрес жерты:
Добрый день, Афанасий Валерьянович!
Спасибо, что являетесь клиентом нашей пиццерии. Мы благодарны вам и дарим купон на скидку 20%. Работает только сегодня, автоматически применится при заказе по ссылке: <фишинговая ссылка>
С уважением, пиццерия Мама Вонс.
Эффективность фишинга с применением персональных данных повышается в разы, в 51% случаев сотрудники открывают, и 40% из этого числа взаимодействует с сервисом, так что, будьте аккуратней и информируйте сотрудников.
#Phishing #Dataleaks |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7