LINUX.ORG.RU
ФорумAdmin

Давайте не спеша поищем аналоги командам iptables в nftables

 ,


0

2

Привет. У меня есть несколько команд iptables. Сейчас iptables объявляют legacy, и поэтому я ищу аналоги этим командам в nftables. Если вы тоже, то не стесняйтесь, задавайте вопрос в комментах. Всеобщим мозговым штурмом найдём решения!

Первой командой в моей записной книжке идёт эта:

sudo iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -i ppp0 -j DROP

Мне её на ЛОРе советовали когда-то давно, я не помню кто именно. ppp0 это не модем, как вы могли подумать, а оптоволоконное соединение. Первая строчка разрешает принимать ответы на запросы с нашего компа. Вторая команда запрещает все остальные соединения.

Мне нужно было также открыть один порт, и я спросил у того человека, куда вставлять команду. Он сказал, что вставлять перед последней командой. Она запрещает всё, что не было разрешено ранее. А если вставить после неё, то не сработает.

Собственно, вот команда для открытия порта:

sudo iptables -A INPUT -i ppp0 -p tcp --dport 2000 -j ACCEPT
sudo iptables -A INPUT -i ppp0 -p udp --dport 2001 -j ACCEPT

Ещё я раздаю интернет из ppp0 в eth1. Вот команда, которой я раздаю интернет:

sysctl net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Чтобы защитить интерфейс eth1, я выполнил это:

iptables -A FORWARD -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i ppp0 -j DROP

Как вы видите, эта команда идентична первой, только для FORWARD (переадресуемого трафика).

И наконец, самое сложное. Я не понимаю, как работает эта команда. В общем, она «пробрасывает» порт 2000, который я ранее открыл, на другой комп, который подключен к eth1:

iptables -A PREROUTING -t nat -i ppp0 -p tcp --dport 2000 -j DNAT --to [IP ноутбука]:2000
iptables -A INPUT -p tcp -m state --state NEW --dport 2000 -i ppp0 -j ACCEPT

Собственно, это всё, что было в моей записной книжечке. Буду рад, если кто-нибудь знает аналоги этим командам на nftables, и напишет их в комменты :-)

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

это не так. исходя из описанного выше, ты ннп логики iptables и что к чему. откуда такое рвение к nftables?))

Anoxemian ★★★★★
()

Зачем тебе аналоги, если старые правила продолжат работать? Собственно, много где миграция уже состоялась, и её мало кто заметил.

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

Собственно, много где миграция уже состоялась, и её мало кто заметил.

Это, кстати, вообще правда? Даже в арче

$ iptables --version
iptables v1.8.2 (legacy)
intelfx ★★★★★
()

Во-первых, ты можешь собрать iptables ≥1.8.0 так, что он на самом деле будет прозрачно транслировать правила в nftables и ты этого (в идеале) даже не заметишь.

Во-вторых, держи:

flush ruleset

table inet filter {
	chain iface_common {
		# trusted interfaces
		iifname { lo, tun0, ve-arch } accept
	}

	chain ct_common {
		# early drop of invalid connections
		ct state invalid drop

		# allow established/related connections
		ct state { established, related } accept

		# allow dnat-ed connections
		ct status dnat accept
	}
	chain srv_common {
		# allow icmp
		ip protocol icmp limit rate 1000/second accept
		ip6 nexthdr icmpv6 limit rate 1000/second accept
	}
	chain input {
		type filter hook input priority 0; policy drop;

		jump iface_common
		jump ct_common
		jump srv_common

		tcp dport ssh accept
		udp dport openvpn accept
		udp dport 60000-61000 accept
		tcp dport 8388 accept

		tcp dport 12345 accept
		udp dport 12345 accept
	}
	chain forward {
		type filter hook forward priority 0; policy drop;

		jump iface_common
		jump ct_common
		jump srv_common

		# e:d to able
		ip6 daddr [2a01:7e01:e002:8500::1000] tcp dport 5100 accept
	}
	chain output {
		type filter hook output priority 0; policy accept;
	}
}
table ip nat {
	chain dstnat {
		type nat hook prerouting priority 0; policy accept;

		# e:d to able
		tcp dport 5100 dnat to 10.139.24.2
	}

	chain srcnat {
		type nat hook postrouting priority 100; policy accept;

		oifname enp0s3 masquerade
	}
}

Дальше разберёшься сам.

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

Это, кстати, вообще правда?

Вроде как последние iptables уже только врапер. Хотя могу ошибаться, специально не смотрел, только, кажется, слышал.

AS ★★★★★
()

Чтобы защитить интерфейс eth1, я выполнил это:

Зачем, если у тебя NAT и приватные IP на eth1?

AS ★★★★★
()

В общем, она «пробрасывает» порт 2000, который я ранее открыл, на другой комп, который подключен к eth1

Вот это правило:

iptables -A INPUT -p tcp -m state --state NEW --dport 2000 -i ppp0 -j ACCEPT

совсем не нужно, оно к пробросу не имеет отношения.

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

Зачем, если у тебя NAT и приватные IP на eth1?

А если кто-то со стороны ppp0 пропишет роутинг на его приватную сеть? Понятно что шансов не много, но все-таки шанс отличен от нуля. Так что у него все верно.

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

А если кто-то со стороны ppp0 пропишет роутинг на его приватную сеть?

Взломает NAS оператра? Ну может быть конечно...

но все-таки шанс отличен от нуля.

Хорошо, уговорил. :-)

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

a ipset там есть? скажем, на сервере есть дофига длинных ipset'ов, с подсетями. их можно в nftables интегрировать без особого гемора?

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

Не вникал. Описания говорят, что iptables теперь использует nftables API.

$ realpath /usr/sbin/iptables
/usr/sbin/xtables-nft-multi
$ dpkg -S $(realpath /usr/sbin/iptables)
iptables: /usr/sbin/xtables-nft-multi
$ dpkg -l iptables
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================================
ii  iptables       1.8.2-3      amd64        administration tools for packet filtering and NAT
$ man -f xtables-nft-multi 
xtables-nft-multi (8) - iptables using nftables kernel api
$ 

Правда, я уже ловил глюк из-за того, что Docker предпочитает использовать бинарник iptables-legacy, если такой есть.

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

Когда я последний раз смотрел, они только планировали запилить замену.

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

Да, но он не все умел транслировать, когда я смотрел.

xdimquax ★★★★
()
Ответ на: комментарий от i-rinat

там написано «разработка в процессе» и нет прямой трансляции. как-то это не то. может, уже доделали?

я не только гуглить, но и читать умею.

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

я не только гуглить, но и читать умею.

там написано «разработка в процессе»

Это где это такое написано?

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

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

тебе выше ещё один товарищ написал то же самое. или ты только ко мне придраться захотел?

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 2)
Ответ на: комментарий от intelfx

Ты вот звиняй, но и правда у тебя портянка. И это не потому-что я привык. А потому-что я эти конфиги видел всего пару раз за пару десятков лет, ну вот понадобились, и они еще до прочтения мана были вполне очевидны. Ну а новое чудолестничное конструирование вы простите какое-то Г и понятно почему, погромисты стремяться натянуть синтаксис своих недоязычков на все, им же так удобней :)

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

Расписываешься в своей неспособности привести ссылку на страницу, на которой написано «разработка в процессе»?

i-rinat ★★★★★
()
Ответ на: комментарий от Iron_Bug

Аналог ipset по функциональности там был с самого начала, но утилит для конвертирования имеющегося легаси нет. Если интересно, то вот.

Deleted
()
Ответ на: комментарий от i-rinat

если бы ты нормально спросил - я бы привела ссылки. но так как ты гуру гугла - шуруй сам в гугл и ищи.

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

я эту страницу тоже видела. слава гуглу! кто-то вот нишмог.

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

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

я эту страницу тоже видела. слава гуглу! кто-то вот нишмог.

там написано «разработка в процессе»

я не только гуглить, но и читать умею.

Не умеешь.

i-rinat ★★★★★
()
Ответ на: комментарий от Iron_Bug

Там есть не просто ipset, там есть словари!

Если нужно сделать, например, DNAT большого количества IP-адресов в большое количество других IP-адресов, то в nftables это делается одним правилом, а в iptables это эффективно нельзя сделать даже с ipset.

ValdikSS ★★★★★
()
sudo iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -i ppp0 -j DROP

А это не сломает входящий ICMP?

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

Оно просто не нужно и все. Правило проброса у вас уже есть.

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

Справедливости ради для меня преимущество nftables перед iptables видится только в одном - нет разделения для IPv4 и IPv6-траффика в фильтрах. И вроде как ebtables он тоже замещает, что вообще гуд.

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

нет разделения для IPv4 и IPv6-траффика в фильтрах

Есть.

Просто сделали псевдо-address-type inet, который приводит к созданию фильтров в обеих таблицах.

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

Я именно это и имел ввиду - есть возможность НЕ дублировать правила, что в случае iptables и ip6tables ДИКО раздражало.

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

Ога, а в debian гибрид

#iptables --version
iptables v1.8.2 (nf_tables)

Скорее всего nftables так версию возвращает для парсеров.

anonymous
()

sudo iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

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

Нда. Может вместо мозгового штурма ЛОРа стоит почитать, ман, гугл?

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

sudo iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

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

Нда. Может вместо мозгового штурма ЛОРа стоит почитать, ман, гугл?

Имхо вполне парсится такая формулировка. А что вам так сильно не понравилось?

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

Это у тебя дебиан?

Да, Debian testing.

Вот это поворот, дебиан прогрессивнее арча.

Нет-нет, что ты! В Debian только окаменелости.

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

В Debian только окаменелости

Ну по большей части так и есть %)

Но я сейчас даже не про версии (бессмысленно меряться версиями с тестингом, тем более когда 1.8.2 сабжа уже несколько месяцев как существует), а про подход.

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

а про подход

Если у сопровождающего есть желание, в sid новые версии попадают достаточно быстро. Затем через 10 или 5 дней пакет мигрирует в testing. Правда, при заморозке перед выпуском stable в testing обновления не прилетают. И даже sid успокаивается.

Глянь на версии пакетов в repology. Большей частью они там не сильно отличаются от rolling-дистрибутивов.

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

Опять же, не о версиях речь. А о том, что у вас уже прыгнули на nftables-бэкенд, хотя это потенциально очень ломающее изменение, к которому даже в арче отнеслись более консервативно.

(Или ты это сам собрал, чтобы троллить ЛОРовцев?)

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

Не знаю, что на это сказать. Все изменения потенциально очень ломающие. Не вижу, почему nftables чем-то отличаются.

А может дело просто в том, что пользуясь Arch ты автоматически считаешь, что то, как делают в Arch — это и есть правильно?

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

Не знаю, что на это сказать. Все изменения потенциально очень ломающие. Не вижу, почему nftables чем-то отличаются.

Далеко не все.

Приведу аналогию: это почти настолько же странно, как если бы Debian перешёл на systemd по умолчанию раньше Fedora.

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

А может дело просто в том, что пользуясь Arch ты автоматически считаешь, что то, как делают в Arch — это и есть правильно?

Ты перепутал причину со следствием. Я априорно считаю, что прогресс ценой breakage — это правильно, и поэтому я пользуюсь Arch, т. к. его политика обычно совпадает с моими взглядами на мир.

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

если бы Debian перешёл на systemd по умолчанию раньше Fedora

Если бы редхат очень захотел, так бы и было. Проблема в том, ненужнод уже оттестировали на арчешкольниках.

прогресс ценой breakage — это правильно

«Весь мир до основания мы разрушим, а затем ...»? Так себе политика. Корни почти всех современных проблем следует искать именно в такой политике.

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