LINUX.ORG.RU
ФорумAdmin

Кто может одним взглядом обнаружить ошибку в iptables?

 , ,


0

1

В общем есть сервер с докером внутри. Недавно узнал что докер игнорирует правила в цепочке INPUT в iptables, а я закрывал все порты кроме RU,UA,KZ. Узнал когда боты обнаружили dns сервер и начали поступать миллионы запросов с разных уголков мира с разных хостеров по всему миру. Решил починить и загуглив нашел решение.

Сделал как указывал автор и чудо, порты закрылись для мира кроме 3 стран, но были исключения. Модуль geoip брал отсюда.

И вот собственно проблема. DNS сервер с блоком рекламы использую на андроиде (DoT), в настройках сети => частный днс сервер. Теперь когда днс указан в настройках, подключение к vpn, который тоже в докер на том же сервере не будет(vpn не отвечает). Мозги кипят, мои полномочия тут все. В чатах по линуксах, докерах в тг не знают в чем проблема. Поэтому пришел сюда с этим вопросом, если и тут потерплю фиаско, придется идти на реддит или стаковерфлоу :D

Правила iptables прилагаю в самом конце, это юзер правила, все остальное докер создает автоматически.

# Generated by iptables-save v1.8.7 on Fri Sep  9 11:16:43 2022
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:FILTERS - [0:0]
:DOCKER-USER - [0:0]

-F INPUT
-F DOCKER-USER
-F FILTERS

-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp --dport 22 -m geoip --src-cc RU -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

-A INPUT -j FILTERS

-A DOCKER-USER -i eth0 -j FILTERS

# Docker rule
-A FILTERS -p udp -m multiport --dports 53,443,500,4500 -m geoip --src-cc RU,UA,KZ,MD -j ACCEPT
-A FILTERS -p tcp -m multiport --dports 53,80,443,853 -m geoip --src-cc RU,UA,KZ,MD -j ACCEPT

COMMIT
# Completed on Fri Sep  9 11:16:43 2022

Перемещено hobbit из general



Последнее исправление: spectr16 (всего исправлений: 1)

DNS сервер с блоком рекламы использую на андроиде (DoT), в настройках сети => частный днс сервер. Теперь когда днс указан в настройках, подключения к vpn, который тоже в докер на том же сервере не будет. Мозги кипят, мои полномочия тут все. В чатах по линуксах, докерах в тг не знают в чет проблема. Поэтому пришел сюда с этим вопросом, если и тут потерплю фиаско, придется идти на реддит или стаковерфлоу :D

Не ходи, ты на русском-то сформулировать ниче не можешь. Что, нафиг, такое «не будет»? При чем тут вообще DNS?

в чет проблема

DNS сервер с блоком рекламы используешь ты. Не делай так, режь рекламу на правильном уровне.

Правила iptables прилагаю

Прописку ещё покажи.

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)

Недавно узнал что докер игнорирует правила в цепочке INPUT в iptables

Ну так фильтруй до докера, на хосте. ddos нужно фильровать в raw/prerouting

https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg

Теперь когда днс указан в настройках, подключения к vpn, который тоже в докер на том же сервере не будет. Мозги кипят

У тех кто пытается осмыслить твою проблему.

У тебя есть клиент на андройде которы подключается через vpn и днс сервер который в докере ему не дает?

vel ★★★★★
()

Ваши правила разрешают только запросы на перечисленные порты с любой стороны, с ограничением по geoip. Т.е. docker-контейнеры могут принимать данные только на порты 53,443,500,4500 udp, и передавать тоже только на них. Но так как исходящие порты не удовлетворяют условию geoip, они не доходят.

Необходимо либо добавить разрешающее правило вида conntrack established,related ACCEPT на исходящий трафик, либо каким-то другим методом его разрешить.

ValdikSS ★★★★★
()
Ответ на: комментарий от vel

я не писал что днс сервер ему не дает подключаться. ПРИ использовании днс, подключения к впн серверу не происходит, не отвечает впн сервер. я хз как это еще словами объяснить.

spectr16
() автор топика
Ответ на: комментарий от spectr16

Нет, в цепочку filter. Через таблицы INPUT и OUTPUT проходит только входящий трафик на локальную машину и исходящий с локальной машины, а контейнеры Docker — отдельные машины.

ValdikSS ★★★★★
()
Ответ на: комментарий от spectr16

Ну так и разбирайся, что у тебя за «DNS» такой, ошибки с андроида приводи, резолвинг до и после показывай. При чем тут iptables и докер с сервера, который в проблеме и не участвует?

t184256 ★★★★★
()
Ответ на: комментарий от spectr16

Проблема описана так, что хрен поймёшь, что ты имел ввиду.

Если не указывать в настройках vpn-соединения адрес dns-сервера, то vpn подключатеся?

Какой vpn используется?

vel ★★★★★
()
Ответ на: комментарий от vel

днс сервер (который в докер) не указывается в настройках wireguard подключения, там единички и восьмерки. Проблему я уже описал выше. Указываешь днс в настройках андроиде, конекта к впн нет, не указываешь, впн работает. такие дела.

spectr16
() автор топика
Ответ на: комментарий от t184256

если бы ты прочитал пост, мб бы и понял. что после настроек iptables такое случилось. но ты видимо читал между строк и высрал сюда свои непонятки, токсичишь тут. пройди мимо чел, если тебе лень читать и думать.

spectr16
() автор топика
Ответ на: комментарий от spectr16

на андройде есть утиль типа dig. Можно проверить доступность твоего dns-сервер.

Твой dns-сервер доступен только с адресов некоторых стран.

Посмотри адрес с которого ты подключаешься к инету через андроид. Возможно его нет в списках разрешенных стран.

А ты прошел весь квест с конвертацией баз maxmind https://habr.com/ru/company/selectel/blog/511392/ ?

vel ★★★★★
()
Ответ на: комментарий от vel

я собираю модуль к ядру из исходников, квест прошел)

cd /usr/share/xt_geoip/
/usr/local/libexec/xtables-addons/xt_geoip_dl
/usr/local/libexec/xtables-addons/xt_geoip_build

Глянул списки, домашний ip и ip сервера есть в RU зоне.

Скачал dns checker, установил на смартфон, удалил частный днс из настроек, подключился к впн, проверил свои днс и приложение говорит network error: Socket time out.

Слушай, если есть вариант связаться в дискорде или тг, я только за )

spectr16
() автор топика
Ответ на: комментарий от spectr16

Слушай, если есть вариант связаться в дискорде

нет.

Я бы запустил «tcpdump -ni any icmp» в контейнере и запустил ping с андройда на адрес dns-сервера (при включенном vpn) и посмотрел бы с какого адреса они приходят. Есть подозрение, что андройд через vpn приходит совсем с других адресов.

vel ★★★★★
()
Ответ на: комментарий от vel

запустил внутри контейнера с днс tcpdump -ni any icmp, пинговал с андроида с подключенным впн и без впн, пинги проходят, но внутри контейнера тишина.

0 packets captured
0 packets received by filter
0 packets dropped by kernel
spectr16
() автор топика
Ответ на: комментарий от loginpassword

т.е по вашему я настолько глуп? днс-ом уже пользуются люди, а вы про порты в контейнер пишете ))

вот отрывок из docker run..

-p 53:53/tcp -p 53:53/udp\
-p 80:80/tcp -p 443:443/tcp -p 443:443/udp \
-p 853:853/tcp \
spectr16
() автор топика
Ответ на: комментарий от spectr16

Что-то вечером тупничёк напал.

в контейнер попадает только то, что проброшено с хоста, а icmp точно не пробрасывается.

На хосте запустить tcpdump -ni any 'icmp and icmp[icmptype] == icmp-echo' и попробовать понять откуда обращается андроид.

vel ★★★★★
()
Ответ на: комментарий от vel

Пинги приходят с внутреннего ip докера )

15:17:42.947182 veth2941d7c P   IP 172.17.0.2 > SERVER_IP: ICMP echo request, id 14, seq 1, length 64
15:17:42.947182 docker0 In  IP 172.17.0.2 > SERVER_IP: ICMP echo request, id 14, seq 1, length 64
15:17:43.997333 veth2941d7c P   IP 172.17.0.2 > SERVER_IP: ICMP echo request, id 14, seq 2, length 64
15:17:43.997333 docker0 In  IP 172.17.0.2 > SERVER_IP: ICMP echo request, id 14, seq 2, length 64
15:17:45.014892 veth2941d7c P   IP 172.17.0.2 > SERVER_IP: ICMP echo request, id 14, seq 3, length 64
15:17:45.014892 docker0 In  IP 172.17.0.2 > SERVER_IP: ICMP echo request, id 14, seq 3, length 64
15:17:46.011570 veth2941d7c P   IP 172.17.0.2 > SERVER_IP: ICMP echo request, id 14, seq 4, length 64
spectr16
() автор топика

это не правила а сплошное недоразумение. Кто это выдумал?

-A INPUT -p tcp -m tcp –tcp-flags SYN,ACK SYN,ACK -m state –state NEW -j DROP -A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP

это вообще что? зачем ты флаги прикутил к стейту. какое такое новое соединение будет открывать пакет с ACK SYN? вторая строка чтобы что?

-m state

-m conntrack

INPUT DROP

после такого в твоих цепочках недолжно быть -j DROP, оно и так по дефолту дропает все что не разрешено. писать такую хрень явный признак обезьяней копипасты.

-A FILTERS -p tcp -m multiport –dports 53,80,443,853 -m geoip –src-cc RU,UA,KZ,MD -j ACCEPT

ты же все подропал выше чего ты теперь разрешить пытаешся?

Недавно узнал что докер игнорирует правила в цепочке INPUT в iptables

докер имеет разные модели работы с сетью. настраивается в самом докере.

начали поступать миллионы запросов

звиздишь, если бы в такой конфиг залетел лям запросов, все бы мгновенно сложилось, а пров отправил бы это недоразумение в блекхол.

antech
()
Ответ на: комментарий от vel

ddos нужно фильровать в raw/prerouting

ддос нужно фильтровать в bgp на маршрутере, а iptables куда бы ты там не воткнул не поможет вообще никак. В его случае это не ддос, а обычные сканеры, которые ищут пригодные недоднс для amp атак. Кому нафиг нужен его докер с андроидом? ддосить его чтобы что?

antech
()
Ответ на: комментарий от antech

ддос нужно фильтровать в bgp на маршрутере

:)

Можешь дать ссылку на хостера, который предоставляет такую услугу?

когда боты обнаружили dns сервер и начали поступать миллионы запросов с разных уголков мира с разных хостеров по всему миру

У ТС либо открытый рекурсивый резолвер, которые нашли боты, либо кто-то организовал на него ddos.

udp-шный ddos канала - это imho дешево и сердито. Гигабитный канал кладётся легко.

vel ★★★★★
()
Ответ на: комментарий от vel

не ддос, просто большое количество запросов на днс, который запросы апстримит на другие крупные днс. Кэша нет, пришлось включать. Сейчас заблокировал в веб морде днс доступы с помощью CIDR, взял на ipdeny.com. Красота. А правила Iptables в силу того что не осилил, очистил, INPUT открыл, пусть светит всему миру, пока что. такие дела :)

spectr16
() автор топика
Ответ на: комментарий от spectr16

у нс сервера есть опция позволяющая при слишком частых запросах от хоста вносить задержку в ответ этому хосту, если хост не унимается то вообще прекращать отвечать. Вполне себе живут мои нсы с открытым в мир доступом, некоторое время даже как рекурсивные работали, впоследствии убрал рекурсию с внешки оставил только авторитетный нс в мир. Боты может недельку тыкались, потом им видимо надоело. Мусорный трафик прилетает в крайне незначительных количествах. Боты как правило наседают если есть какие то дыры, если дыр нет и ловить нечего, то отваливают и своим собратьям сообщают что тут делать нечего.

antech
()