Убунта - все, що робиться iptables, може бути переглянуто 'nft list ruleset' - чим я й скористувався врешті: взяв за базу ці правила й розширив їх тим, чого немає в iptables :)


On 9/16/24 10:49, Volodymyr O. Pidgornyi wrote:
Вітаю.

Я не знаю, який саме дистрибутив крутиш ти (маю підозру, що якусь убунту, але можу і помилятись), але в RHEL-сумісних
ситуація наступна:

These  tools are deprecated in Red Hat Enterprise Linux. They are maintenance only and will not receive new features. New
setups should use nft(8).  Existing setups should migrate to nft(8) when possible.  See  ⟨https://red.ht/nft_your_tables⟩
for details. There is also iptables-translate(8)/ip6tables-translate(8) to help with the migration.

Тобто вони не врапери поверх nftables, а саме ті старі добрі iptables/ip6tables/ebtables, що і раніше. А от врапером поверх
і тих, і інших є firewalld (хай би йому грець).

15.09.24 23:39, Volodymyr Litovka:
Ну й вдогонку - iptables вже давно frontend до nftables

Мене дивує, що не працює те, що, згідно документації, має працювати...


On 9/15/24 20:44, Vladimir A. Podgorny wrote:
Вітаю.

А як щодо налаштування двох radacct серверів на джерелі? Мінус необхідність дублювати пакети і правити заголовки по дорозі.

нд, 15 вер. 2024, 21:13 користувач Volodymyr Litovka <doka@funlab.cc> пише:

Я цей сніпет, звісно, пробував - гуглити вмію :)

Проблема не стільки в тому, щоб зробити дублікат, а в наступному кроці - на destination host висить тулза, яка слухає на своїй IP-адресі. Тому коли я роблю дубль - він доходить до віддаленого хоста, але з оригінальними src/dst ip/port.

Я хотів викрутитись одним хостом, але, здається, шось йде не так, тому розвернув схему з двома хостами (edge ---[radacct]---> aaa) й налаштував aaa повертати radacct назад на edge.

Те, про що я кажу вище, на edge виглядає так -

(1) Це відповідь AAA на оригінальний Rad Acct пакет: IP aaa.1716 > edge.47385: UDP, length 20
(2) А це - тупо копія оригінального RadAcct пакету: IP edge.47385 > aaa.1716: UDP, length 153 - вона не змінена й софтінка яка слухає на цю копію, її не бачить, бо network stack її дропає

ну тут я вже завтра повожусь - я колись вже робив таку фігню (саме на nftables, до речі) - переписування заголовків вхідного пакету, щоб він проходив до аппки.

On 9/15/24 19:39, Volodymyr Pidgornyi wrote:

Привіт.

IMHO злізь з мертвої кобили, котрій лишилося жити добре, якщо 1-2 релізи дистрибутивів - вже давно час переїхати на nftables.

iptables

В термінах nftables те, що ти хочеш, буде виглядати якось так:

table netdev t_dup {
    chain c_ingress {
        type filter hook ingress device "lo" priority filter; policy accept;
        iif lo udp dport 1716 meta mark != 1 meta mark set 1 dup to ens32 udp dport set 1716
    }
}

to, dport, dstaddr etc в другому правилі - підстав свої.
15.09.24 19:26, Volodymyr Litovka via UANOG:
Re

кароч, стало ясніше й все одно шось не так. По-перше, -j TEE, яке відправляє на localhost, обробляєься в chain OUTPUT, тому в попередній лист можна не вникати, там все неправильно й я переписав правила:

*filter
# log
-A OUTPUT -p udp --dport 1716 -j LOG --log-prefix "FILTER-OUT "
COMMIT

*nat
# log
-A OUTPUT -p udp --dport 1716 -j LOG --log-prefix "NAT-OUT "
# зробити DNAT для того хоста, куди мені треба здублювати трафік
-A OUTPUT -m mark --mark 0x53 -j DNAT --to-destination x.x.x.x
COMMIT

*mangle
# здублювати те, що мене цікавить (udp/1716, вихідний порт ens32)
-A OUTPUT -o ens32 -p udp --dport 1716 -j TEE --gateway 127.0.0.1
# промаркувати здубльоване (localhost) для подальшого DNAT
-A OUTPUT -o lo -p udp --dport 1716 -j MARK --set-mark 0x53
# log
-I OUTPUT -p udp --dport 1716 -j LOG --log-prefix "MANGLE-OUT-pre "
-A OUTPUT -p udp --dport 1716 -j LOG --log-prefix "MANGLE-OUT-post "
COMMIT

й тут починається знову цікаве (спойлер - у мене враження, що пакети для localhost обробляються по якомусь іншому ланцюжку) :

два пакети - один оригінальний, один - дублікат:

* MANGLE-OUT-pre IN= OUT=ens32 SRC=172.16.40.30 DST=172.16.40.32 LEN=181 TOS=0x00 PREC=0x00 TTL=64 ID=17851 DF PROTO=UDP SPT=49242 DPT=1716 LEN=161
* MANGLE-OUT-pre IN= OUT=lo SRC=172.16.40.30 DST=172.16.40.32 LEN=181 TOS=0x00 PREC=0x00 TTL=64 ID=17851 DF PROTO=UDP SPT=49242 DPT=1716 LEN=161

після правил модіфікації - один промаркований, другий ні (as expected)

* MANGLE-OUT-post IN= OUT=lo SRC=172.16.40.30 DST=172.16.40.32 LEN=181 TOS=0x00 PREC=0x00 TTL=64 ID=17851 DF PROTO=UDP SPT=49242 DPT=1716 LEN=161 MARK=0x53
* MANGLE-OUT-post IN= OUT=ens32 SRC=172.16.40.30 DST=172.16.40.32 LEN=181 TOS=0x00 PREC=0x00 TTL=64 ID=17851 DF PROTO=UDP SPT=49242 DPT=1716 LEN=161

в NAT попадає тільки ОДИН (немаркований, out=ens32), відповідно DNAT для mark=0x53 не відбувається:

* NAT-OUT IN= OUT=ens32 SRC=172.16.40.30 DST=172.16.40.32 LEN=181 TOS=0x00 PREC=0x00 TTL=64 ID=17851 DF PROTO=UDP SPT=49242 DPT=1716 LEN=161

тому в filter out - два пакети (оригінальний через ens32) та дублікат, з яким неясно шо робити:

* FILTER-OUT IN= OUT=lo SRC=172.16.40.30 DST=172.16.40.32 LEN=181 TOS=0x00 PREC=0x00 TTL=64 ID=17851 DF PROTO=UDP SPT=49242 DPT=1716 LEN=161 MARK=0x53
* FILTER-OUT IN= OUT=ens32 SRC=172.16.40.30 DST=172.16.40.32 LEN=181 TOS=0x00 PREC=0x00 TTL=64 ID=17851 DF PROTO=UDP SPT=49242 DPT=1716 LEN=161

В общем, якщо у когось є ідеї, як _скопіювати_ локально сгенерований трафік в інший дестинейшен - буду дуже вдячним.

Дякуюю

On 9/15/24 16:04, Volodymyr Litovka wrote:
привіт,

у мене є VPN server (strongswan) та Radius (на віддаленому хості). Мені треба _здублювати_ Radius Accounting на інший хост.

Награвся iptables по саме не хочу й не навчив його цьому трюку. Судячи з доступної документації (напр https://westoahu.hawaii.edu/cyber/forensics-weekly-executive-summmaries/weekly-executive-summary-for-week-november-24-2017/ ) пакет має пройти через mangle prerouting та nat prerouting за будь-яких умов.

Роблю наступне (див нижче конф iptables) - маркую пакет та розставляю LOG всюди, де він може з'явитись, так от - він попадає в логи в MANGLE-PREROUTING й в MANGLE-INPUT, а от в NAT PREROUTING - ні:

2024-09-15T20:58:28.872788+07:00 vft-dev-edge kernel: MANGLE-PRE IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=172.16.40.30 DST=172.16.40.32 LEN=211 TOS=0x00 PREC=0x00 TTL=64 ID=38173 DF PROTO=UDP SPT=56012 DPT=1716 LEN=191 MARK=0x52
2024-09-15T20:58:28.872869+07:00 vft-dev-edge kernel: MANGLE-INP IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=172.16.40.30 DST=172.16.40.32 LEN=211 TOS=0x00 PREC=0x00 TTL=64 ID=38173 DF PROTO=UDP SPT=56012 DPT=1716 LEN=191 MARK=0x52

причому що я ЩЕ не розумію - судячи з наведеної вище діаграми, там має бути decision "For this host?", так ось в лозі вище 172.16.40.30 - це локальна адреса, а 172.16.40.32 - це remote host, відповідно пакет мав би відмітитись в MANGLE-FORWARD, а не в MANGLE-INPUT.

Шо я роблю не так? Дякую.

*mangle
# промаркувати Radius-accounting пакет
-A OUTPUT -p udp --dport 1716 -j MARK --set-mark 0x52
# здублювати його на localhost
-A OUTPUT -p udp --dport 1716 -j TEE --gateway 127.0.0.1

# перевірити де чувак з'явиться
-A PREROUTING -i lo -p udp --dport 1716 -j LOG --log-prefix "MANGLE-PRE "
-A INPUT -i lo -p udp --dport 1716 -j LOG --log-prefix "MANGLE-INP "
-A FORWARD -p udp --dport 1716 -j LOG --log-prefix "MANGLE-FWD "
COMMIT

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p udp --dport 1716 -j LOG --log-prefix "NAT-PRE "

# це NAT для власне VPN'а, він на internet-facing інтерфейсі, залишаю для повноти картини
-A POSTROUTING -o ens33 -j MASQUERADE
COMMIT


-- 
Volodymyr Litovka
  "Vision without Execution is Hallucination." -- Thomas Edison

_______________________________________________
UANOG mailing list -- uanog@uanog.one
To unsubscribe send an email to uanog-leave@uanog.one

_______________________________________________
UANOG mailing list -- uanog@uanog.one
To unsubscribe send an email to uanog-leave@uanog.one

-- 
Volodymyr Litovka
  "Vision without Execution is Hallucination." -- Thomas Edison

-- 
Volodymyr Litovka
  "Vision without Execution is Hallucination." -- Thomas Edison


-- 
Volodymyr Litovka
  "Vision without Execution is Hallucination." -- Thomas Edison