Information
- Rating
- 6-th
- Registered
- Activity
Specialization
Системный администратор, Администратор серверов
Средний
Rust
Администрирование Windows
Администрирование Linux
VMware
pfSense
Разработка программного обеспечения
Написание музыки
Звукорежиссура
на боевом проде я бы сейчас придерживал коней и сидел на классическом iptables-nft по принципу работает - не трожь.
нативный бэкенд в 29-й ветке не просто так висит под флагом experimental. сам то Docker свои таблицы в nftables нарисует без проблем, но вокруг него на сервере обычно живет куча смежного софта, который годами затачивался под старую архитектуру. тот же Fail2ban, какие-нибудь агенты мониторинга, VPN-клиенты или самописные хуки - многие из них до сих пор по захардкоженной привычке пытаются грепать вывод iptables или пихать свои блоклисты прямиком в DOCKER-USER. Переключишь бэкенд - и половина этой обвязки тихо отвалится.
думаю, реально массовый переезд начнётся, когда мейнтейнеры Moby снимут плашку experimental и сделают nftables дефолтом при чистой установке. скорее всего, где-нибудь к Docker 30+ и следующим LTS-релизам Ubuntu/Debian. но начинать переписывать свои ансибл-роли на отдельных тестовых стендах под отдельные таблицы с приоритетом -10 имеет смысл уже сейчас, чтобы потом в мыле не мигрировать за одну ночь, когда легаси окончательно дропнут.
За респект спасибо!
если задача просто выпустить контейнеры в интернет за пакетами — таки да, широкая маска на 172.16.0.0/12 вопрос закроет (кстати, @RTFM13 дело говорит про широкий жест: если в этом правиле не указать внешний интерфейс типа -o eth0, то под маскарадинг попадет и локальный траф между контейнерами, они начнут видеть друг друга с IP-адресом бриджа, а не с реальными внутренними адресами).
но главная боль с “iptables”: false начинается чуть дальше :
– схлопывается изоляция сетей. В норме Docker через цепочки DOCKER-FORWARD (раньше DOCKER-ISOLATION-STAGE-*) запрещает контейнерам из разных компоуз-стеков ходить друг к другу напрямую. Вырубаем управление iptables — и ядро с включённым ip_forward=1 начинает радостно роутить пакеты между вообще всеми бриджами br-xxxx на хосте. Получается одна большая коммуналка.
– теряются реальные IP клиентов на входе. раз демон больше не пишет правила DNAT в PREROUTING, весь проброс портов (ports:) ложится исключительно на плечи юзерспейсного docker-proxy. он просто принимает коннект на хосте и открывает новый сокет внутрь контейнера от своего имени. В итоге в логах условного Nginx или бэкенда внутри контейнера у всех посетителей вместо реальных IP будет светиться адрес шлюза 172.18.0.1. А если в конфиге ещё и “userland-proxy”: false стоит, то проброс портов умрёт вообще полностью, пока руками каждый DNAT не пропишешь.
– пул сетей не вечный. docker нарезает сети из 172.17.0.0/16…172.31.0.0/16, но когда на сервере заканчивается этот пул (например, активно плодятся тестовые окружения), он молча перескакивает в 192.168.0.0/16. И в один прекрасный день новый стек внезапно остаётся без интернета. Так что для статичного сервера с парой контейнеров костыль рабочий, сам так когда-то делал. Но как только начинается динамика с компоузами — проще один раз прибить гвоздями DOCKER-USER, чем эмулировать работу демона руками.
-
о, значит уже не зря эту простыню катал)) с почином! лучше самому случайно найти через nmap, чем узнать об этом из логов майнера.
ufw deny против докерных портов вообще классика боли - сидишь такой, пишешь правила, рестартишь фаервол, а докеру в PREROUTING на твои телодвижения абсолютно фиолетово. может стоит глянуть теперь логи контейнера на всякий , мало ли кто уже успел в гости заглянуть ))
проброс docker.sock внутрь контейнера который торчит в веб (всякие traefik, portainer или агенты мониторинга) - это вообще отдельная песня, по сути готовый рут на хост если сам контейнер продырявят. хотя бы через docker-socket-proxy его резать надо на чтение, но всем лень как обычно.
подман хорош, да. если бы на него старые компоуз-файлы со всякими кривыми сетями всегда переезжали без напильника, давно б уже все там сидели.
стопроцентов, на этом обычно и горят. один раз настроили, забыли, потом джун для дебага вмержил ports и привет.
мы у себя от такой амнезии прикрутили тупейший костыль - раз в сутки по крону с соседней дешевой впс-ки гоняется мелкий скрипт с nmap по нашему списку белых IP и сверяет дифф с эталоном. если вылез новый порт - сразу летит матюк в телегу. пишется за полчаса на коленке, а спится сильно спокойнее.
тут главное отключать его реально на уровне ядра через sysctl (disable_ipv6=1) или в параметрах загрузчика, а не полумерами в конфигах демонов. иначе получается та самая засада, когда админ думает что v6 выключен, а сокет в ядре бодро слушает :: в обход правил.
кстати да, забавный парадокс докера - network_mode: host принято ругать за отсутствие изоляции, но конкретно с фаерволом он наоборот чинит картину. раз своего неймспейса и бриджа нет, DNAT не нужен, трафик прилетает прямо в локальный сокет и как миленький идет через стандартный INPUT прямиком на правила UFW.
главное чтоб там два контейнера за один порт не подрались на хосте, а для одиночного тяжелого сервиса вообще рабочий варик.
Да было ж в первом варианте решения, как раз кусок компоуза с комментом “никаких ports наружу” и отдельной internal-сеткой. просто когда лонгрид на 25 минут, глаз уже замыливается к середине, понимаю)
а вот сам expose в современном компоузе по факту превратился в декорацию чисто для документации. сеть он никак не открывает и не закрывает, контейнеры в одном бридже и без него видят вообще все порты друг друга. главное именно ports руками не трогать без нужды.
Понял, за такой подробный расклад прям отдельное спасибо. Получается, с create_policy = all на чтение мы выживаем, а вот на запись по факту ловим обратный эффект типа RAID-0 — отвал любого плеча вешает PUT целиком до ручного вмешательства.
Но вообще схема все равно рабочая, если рядом прикрутить простенький вотчдог, который будет пинговать апстримы и при отвале сам sed’ом дописывать :nc в конфиг с рестартом сервиса (или через rclone rc на лету дергать, если он такое умеет). А вот с воскрешением удаленных файлов после 204 при мертвом облаке — это конечно жесткая засада, классическая боль без tombstone-меток.
С докером и торчащим портом базы классическая подстава, сам так накалывался. Народ настраивает ufw, думает что всё закрыто, а докер тупо свои правила в iptables поверх рисует и выставляет порт на 0.0.0.0, если в компоузе явно 127.0.0.1 не прописать.
А по поводу проверок через nvidia-smi — это они не просто так карточки ищут. Сейчас жирные ботнеты сразу чекают, можно ли на тачке майнер под алгоритмы для GPU завести, ну или вообще сдать скомпрометированный сервак с картой в аренду на черном рынке под обучение сеток. На голом CPU им уже копейки капают, не так интересно.
С переездом их за клаудфлару мы как раз в конце прошлого года прикурили. Какой-то крендель еще лет пять назад прописал курл на example.com в хелсчеках тестового контура, и все забыли. А тут CF начал периодически капчу или 403 кидать на наши раннеры, пайплайны рандомно краснеют, полдня искали кто сеть сломал. Выпилили к едренефене, подняли локальную заглушку на nginx и забыли.
ну кто бы сомневался. сетки в принципе в многопоточку и управление памятью не умеют от слова совсем, тем более когда речь про RCU в ядре. оно конечно круто, что клод накидал прототип для пощупать гипотезу и срезать каунтеры, но по факту имеем классику: код ускорился в 23 раза просто потому что перестал быть потокобезопасным))
а дебажить потом эти плавающие рейс-кондишены на проде — удовольствие сильно ниже среднего. хорошо хоть в мейнлайн без ревью от условного Шутемова такое не пускают
вот за утилиты для деблоата тв реально обидно. китайские боксы и смарт-тв сейчас с завода идут с таким количеством неотключаемого рекламного мусора и телеметрии, что без напильника и adb там вообще ловить нечего.
при этом сам по себе разбор списка пакетов в прошивке — вообще ни разу не пиратство, железка-то уже куплена. но фильтрам нейронки видимо проще рубить с плеча по любым ключевым словам типа “decompile” или “firmware mod”, чем разбираться в контексте
а, ну если даже галка не спасает, значит у них перехват ниже сидит, на уровне их ndis-драйвера (сетевого экрана). он тупо буферизует весь tcp-поток в ядре до отправки в сетевуху, и твой setsockopt с ttl=1 до реального интерфейса просто не долетает в нужном виде. тут походу только всю “веб-защиту” целиком вырубать или процесс питона в исключения антивируса закидывать
Так касперский же по дефолту свой локальный прокси вешает и лезет в защищенные соединения (подменяет серт чтобы трафик сканить).
получается твоя тулза режет пакеты и крутит ttl на локалхосте, а каспер их тут же у себя перехватывает, заботливо склеивает обратно в нормальный стрим, проверяет и в сеть наружу выплевывает уже чистый целый ClientHello от своего имени. лечится только отключением проверки защищенных соединений в настройках ав, по-другому тут никак не обойти
нет ничего более вечного, чем временный костыль на пару недель. у нас так бухи год руками перебивали выгрузки из одной базы в другую через эксельки, потому что два отдела не могли договориться кто именно должен апишку допилить. самое смешное, что когда мы им наконец-то прикрутили нормальную синхронизацию, они еще месяц по привычке перепроверяли всё глазами на бумажке — типа мало ли че там ваш робот насчитает
С cloud-init прям жиза. Тоже так один раз переезжали из облака в свой контур — машина колом встала без сети, а когда у тебя еще и Астра со своим мандатным доступом, вообще седеть начинаешь. За паранойю после Сасово респект, конечно. Без того дампа за два дня до аварии вы бы там надолго прикурили.
Прежде чем тратить дополнительное время на фичу, спросите себя, увеличит ли она продажи или хотя бы улучшит опыт игрока.
золотые слова, но изнутри процесса вообще не работают, к сожалению. когда сам сидишь по уши в коде 4 года, у тебя глаз замыливается напрочь — кажется что вот без этого кастомного шейдера или переписанного рендера вообще релизить стыдно, засмеют. тут реально нужен внешний человек с палкой, который придет, отберет клавиатуру и скажет «хорож! работает и — не трожь, катим в прод как есть»
Про откушенный Августом день у февраля — красивая байка, но походу фейк. Ее в 13 веке придумал монах Сакробоско, чтобы хоть как-то логически объяснить эту кривую сетку месяцев. На деле уже у Цезаря сразу после реформы февраль был 28 дней, а секстиль (будущий август) — 31. Римляне просто дико суеверные были, четные числа считались несчастливыми, вот февралю как месяцу мертвых и очищения и оставили четное 28. Короче, классическое легаси на суевериях