Ну й вдогонку - 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