LINUX.ORG.RU
ФорумAdmin

NFT перенаправить с 80 на 8080 только тех кто содержится в сете или списке

 , ,


0

2

Привет, я осваиваю синтаксис nft. Столкнулся с задачей которую не могу решить уже несколько дней.

У меня есть тестовый сервер с debian 11 на борту. Там установлен NGINX и php. В конфиге NGINX создано 2 сайта:

  • Первый работает на порту 80
  • Второй работает на порту 8080

Предпологается что второй сайт будет ловушкой для ботов и брутфорсеров.

ЗАДАЧА: создать список(или сет) в котором будут ip адреса в формате CIDR. (Возможно и просто обычные ip адреса без маски - вроде бы так тоже можно)
Далее всех кто СОДЕРЖИТСЯ в этом списке отправлять на порт 8080 - на сайт ловушку.
А всех кто НЕ СОДЕРЖИТСЯ в этом списке - спокойно пропускать на 80 порт (если возможно указать пример как их редиректить сразу на 443 порт).\

Вроде бы простая задача но чёт не выходит. Пока что получилось только всех редиректить таким образом (но так не подходит конечно):
nft add table nat
nft add chain nat prerouting { type nat hook prerouting priority dstnat ; }
nft add rule nat prerouting tcp dport 80 redirect to 8080

ps: Я знаю что можно делать перенаправление в самом NGINX но хотелось бы решить вопрос именно с nft.

ps2: на всякий случай прилагаю скрипт, который использую для всех моих правил nft https://pastebin.com/iXNmnMex



Последнее исправление: censured (всего исправлений: 5)
Ответ на: комментарий от vvn_black

где же там пример для редиректа описанный в топике?

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

Там установлен NGINX и php. В конфиге NGINX создано 2 сайта

Предпологается что второй сайт будет ловушкой для ботов и брутфорсеров

вообще ничего не ищу для NGINX

как скажешь, нощянеке!..

aol ★★★★★
()

я просто мимо проходил… ссылку как в nft делаются сеты - скинули. для генерации правила можно взять iptables-translate раз nft только в процессе освоения. делов - 5 минут.

ps: в правиле не хватает ip saddr

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

Это всё очень круто, конечно, только никак не помогает решить проблему. В офф. документации ничего и близко не увидел, что бы помогало решить описанную задачу.

Совет с iptables-translate это вообще нечто. Мне потом когда выпилят из дебиана iptables специально для этой задачи нужно будет его ставить только для того чтобы использовать iptables-translate?

Если нечего написать по существу так может лучше действительно просто мимо пройти?

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

Признаюсь сразу, в мануал смотрел не сразу - а начал с чатагпт, и скотина мне дезинфу по кд давал.

Я следовал по одному гайду c youtube

Создавал что то типо такого

nft add set ip filter blackhole { type ipv4_addr\; flags interval\;}
nft add element ip filter blackhole { 192.168.3.4 }
nft add element ip filter blackhole { 192.168.1.4, 192.168.1.5 }
nft add element ip filter blackhole { 172.16.1.0/24, 172.16.4.0/22 }

Вроде бы всё ок - круто работает 👍 но задача в том чтобы не блэкхолить трафф, а именно редиректить.

При этом валидных пользователей, а именно тех которые не в списках - пропускать на 80. Так же отдельно правило редиректа с 80 порта на 443.

Предпологается что есть вариант грузить именованные сэты с фаила, а соответственно и генерить такой фаил, и вот туда писать. Потому что планирую загонять туда подсетками целыми всяких норм поцанов.

Ну либо в sh сделать скрипт чтобы он в нужном формате этот сэт грузил.

Вопрос с сэтами скорее второстепенный. Я видел что на офф сайте есть пару слов про сеты. Но там нет конкретного варианта примера редиректа из сабжа.

Решение на уровне NGINX считаю неуместным оверхэдом!

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

У него был мануал про гео блокинг. Правила как применить сет для редиректа там тоже нет)

https://www.youtube.com/watch?v=MHPtWNb422A

Планирую постоянно в добавлять сэт новые ip адреса и подсети,

Хотелось бы, конечно, чтобы просто записал в фаил новые CIDR и чтобы nft сам как то подхватывал их. На крайний случай просто скрипт сделаю.

censured
() автор топика
Последнее исправление: censured (всего исправлений: 1)
Ответ на: комментарий от censured

В твоём правиле для редиректа есть только сравнение портов.

Нужно добавить проверку адреса источника на наличие его в наборе.

В ссылке все есть! И как создать набор и как в него добавлять элементы и как проверять в нем наличие адреса. Тебе осталось применить свой мозг и подправить правило редиректа.

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

Я вот например отстал от жизни, для меня вообще хз как это будет работать без той же таблице нат к примеру…

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

Благодарю, увидел затуп. Вот так сработало

сначала создаём необходимое

nft add table nat
nft add chain nat prerouting { type nat hook prerouting priority dstnat \; }
nft add set ip nat blackhole { type ipv4_addr\; flags interval\;}

далее заносим в сет ip адреса и CIDR

nft add element ip nat blackhole { 192.168.3.4 }
nft add element ip nat blackhole { 192.168.1.4, 192.168.1.5 }
nft add element ip nat blackhole { 172.16.1.0/24, 172.16.4.0/22 }

тех кто в сете blackhole перенаправляем с 80 порта на порт 8080 всех остальных пропускаем на 80 порт

nft add rule nat prerouting ip saddr @blackhole tcp dport 80 redirect to :8080
nft add rule nat prerouting ip saddr != @blackhole tcp dport 80 accept
censured
() автор топика
18 сентября 2025 г.
Ответ на: комментарий от censured

Спасибо, было полезно.

Тоже перехожу со скрипом на nftables, сам не знаю зачем, таблетка как работала, так и работает))

Только я не понимаю, зачем последнее правило:

nft add rule nat prerouting ip saddr != @blackhole tcp dport 80 accept

Валидные юзеры ведь через INPUT идут, напрямую, а редиректятся только IP из чёрного списка…

sucosoft
()
Последнее исправление: sucosoft (всего исправлений: 1)
Ответ на: комментарий от censured

...в мануал смотрел не сразу - а начал с чатагпт...

О да, благодаря таким деятелям я никогда не останусь без работы.

anon8
()
Последнее исправление: anon8 (всего исправлений: 1)
Ответ на: комментарий от sucosoft

Всегда во всяких списках правил разных файрволов, хоть ipchains, хоть ntf встречались правила, не имеютщие особого смысла.

Допустим, иногда в ″nft add chain″ пишут ″policy accept″, хотя это по-умолчанию.

ТС написал accept для пакетов на 80 порт (в цепочке prerouting), но это ничего не меняет. При этом 99%, что его сервер управляется по ssh, то есть существуют ″dport 22″ пакеты. Но, исходно он так составил ТЗ:

А всех кто НЕ СОДЕРЖИТСЯ в этом списке - спокойно пропускать на 80 порт

И для каждого пункта ТЗ написал по правилу. А может не он, а чат-гопота написала. Получилось, что пакеты ″dport 80″ будут по явному accept, а ″dport 22″ по policy accept.

P.S. Судя по профилю, ТС давно не появлялся, не ожидайте ответа он него :)

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

Удивительно, заморачиваться за запятую и при этом не обращать внимание на дату.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.