LINUX.ORG.RU
ФорумAdmin

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

 , ,


0

1

Привет, я осваиваю синтаксис 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)
Ответ на: комментарий от 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 ★★★★★
()
Ответ на: комментарий от 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
() автор топика