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
_______________________________________________