Имеется сервер под opensus-42.1 с NAT.
Периодически с utm забирается список должников который забрасывается в ipset.
Далее происходит блокировка по адресу источника.
Хотелось бы сделать так, чтобы должники перенаправлялись в личный кабинет.
Имеем:
172.16.0.0/16 - сетка с клиентами
blocked_clients - ipset с должниками
local - ipset с локальными ресурсами (в которые должники могут заходить. личный кабинет на сайте с адресом входящим в этот ipset)
192.168.168.61 - сайт с личным кабинетом, точнее с сайтом-заглушкой перенаправляющей в личный кабинет. От так же прописан в ipset local.iptables:
*filter
:INPUT ACCEPT [71:5310]
:FORWARD ACCEPT [614286:651750448]
:OUTPUT ACCEPT [170:14689]
# форвардим на все локальные ресурсы
-A FORWARD -m set --match-set local dst -j ACCEPT
# запрещаем форвардинг на все порты и все протоколы для должников
-A FORWARD -m set --match-set blocked_clients src -j REJECT --reject-with icmp-port-unreachable
COMMIT*nat
:PREROUTING ACCEPT [12326:1076071]
:INPUT ACCEPT [16:1506]
:OUTPUT ACCEPT [1:71]
:POSTROUTING ACCEPT [6352:482493]
# разрешаем все локальные адреса
-A PREROUTING -m set --match-set local dst -j ACCEPT
# делаем dnat на сайт-заглушку для должников
-A PREROUTING -p tcp -m set --match-set blocked_clients src -m tcp --dport 80 -j DNAT --to-destination 192.168.168.61:80
-A PREROUTING -p tcp -m set --match-set blocked_clients src -m tcp --dport 443 -j DNAT --to-destination 192.168.168.61:80
# делаем snat
-A POSTROUTING -s 172.16.0.0/20 -o eth4 -j SNAT --to-source 109.x.x.1
-A POSTROUTING -s 172.16.16.0/20 -o eth4 -j SNAT --to-source 109.x.x.2
...
-A POSTROUTING -s 172.16.192.0/18 -o eth4 -j SNAT --to-source 109.x.x.43
COMMIT
В результате получается, что на локальные ресурсы должник ходит. При попытке выйти на любой другой сайт правило с DNAT отрабатывается (проверил протоколированием), но потом все останавливается на правиле
-A FORWARD -m set --match-set blocked_clients src -j REJECT --reject-with icmp-port-unreachable
Да как же так то? Ведь перед ним стоит:
-A FORWARD -m set --match-set local dst -j ACCEPT
а целевой адрес уже должен быть подменен на адрес самого сервера в правиле DNAT!
Ну а если убрать правило "запрещаем форвардинг на все порты и все протоколы для должников", то должник спокойно проходит куда угодно. Ну т.е. получается, что подмены целевого адреса все таки не происходит. Что я не так сделал?
>Что я не так сделал?Это неправильно и работать /не должно/:
-A PREROUTING -p tcp -m set --match-set blocked_clients src -m tcp --dport 443 -j DNAT --to-destination 192.168.168.61:80
> Это неправильно и работать /не должно/:
> -A PREROUTING -p tcp -m set --match-set blocked_clients src -m tcp --dport
> 443 -j DNAT --to-destination 192.168.168.61:80я не сомневаюсь в этом :)
просто где-то увидел и захотелось посмотреть.
понятно что в таком виде браузер покажет фигу.
> а целевой адрес уже должен быть подменен на адрес самого сервера в
> правиле DNAT!Всё не так, как ты думаешь. Исправь это.
SNAT - "до" (и в PREROUTING (**)), DNAT - "после" (и в POSTROUTING).
> Ну а если убрать правило "запрещаем форвардинг на все порты и все
> протоколы для должников", то должник спокойно проходит куда угодно. Ну т.е.
> получается, что подмены целевого адреса все таки не происходит. Что я
> не так сделал?(**) - Хотя и в POSTROUTING тоже будет работать. Это "сложно!.//"Но лучше договориться и заплатить."(ц)
Смысл вот в чём: когда "поднимаешься" над "все правила в *tables исполняются в таком-то порядке", осматриваешься вокруг и углубляещься в делати, то... **обнаруживается**, что "всё сложнее" -- iptables переплетены с роутингом, conntrack-ом, иногда с arp или ещё чем "в сетевом стэке" (bridge, например, mss, tcp-флаги, итд, итд)...
-----
https://duckduckgo.com/?q=%D0%BF%D1%80...
http://www.opennet.me/docs/RUS/iptables/#TRAVERSINGGENERAL
http://www.opennet.me/docs/RUS/iptables/misc/iptables-tutori...
http://www.opennet.me/base/net/linux_packet_filter.txt.html...
[U](!) www.opennet.ru/openforum/vsluhforumID1/78852.html#1 [/U]
где-то (даже в новостях?? или на гитхабе?) была ещё более радужная картинка. Не нашёл--
---https://duckduckgo.com/?q=captive+portal+linux+iptables&t=ff...
#>> -A PREROUTING -p tcp -m set --match-set blocked_clients src -m tcp --dport 80 -j DNAT --to-destination 192.168.168.61:80
>> а целевой адрес уже должен быть подменен на адрес самого сервера в
>> правиле DNAT!
> Всё не так, как ты думаешь. Исправь это.
>DNAT - "после" (и в POSTROUTING).Впрочем, я тоже пойду чего-нибудь %) исправлю.
Ох уж этот iptables... Спасибо за направление.
>[оверквотинг удален]
> Периодически с utm забирается список должников который забрасывается в ipset.
> Далее происходит блокировка по адресу источника.
> Хотелось бы сделать так, чтобы должники перенаправлялись в личный кабинет.
> Имеем:
> 172.16.0.0/16 - сетка с клиентами
> blocked_clients - ipset с должниками
> local - ipset с локальными ресурсами (в которые должники могут заходить. личный
> кабинет на сайте с адресом входящим в этот ipset)
> 192.168.168.61 - сайт с личным кабинетом, точнее с сайтом-заглушкой перенаправляющей в
> личный кабинет. От так же прописан в ipset local.так а сам личный кабинет в ipset local есть?
> iptables:
>
> *filter
> :INPUT ACCEPT [71:5310]
> :FORWARD ACCEPT [614286:651750448]
> :OUTPUT ACCEPT [170:14689]
> # форвардим на все локальные ресурсы
> -A FORWARD -m set --match-set local dst -j ACCEPT
> # запрещаем форвардинг на все порты и все протоколы для должников-A FORWARD -p tcp --dport 80 -m set --match-set blocked_clients src -j LOG --log-prefix "IPT FILTER FWD REJECT: " --log-level 7
> -A FORWARD -m set --match-set blocked_clients src -j REJECT --reject-with icmp-port-unreachable
> COMMIT
> *nat
> :PREROUTING ACCEPT [12326:1076071]
> :INPUT ACCEPT [16:1506]
> :OUTPUT ACCEPT [1:71]
> :POSTROUTING ACCEPT [6352:482493]
> # разрешаем все локальные адреса
> -A PREROUTING -m set --match-set local dst -j ACCEPT
> # делаем dnat на сайт-заглушку для должников-A PREROUTING -p tcp -m set --match-set blocked_clients src -m tcp --dport 80 -j LOG --log-prefix "IPT NAT PREROUTING: " --log-level 7
>[оверквотинг удален]
> Да как же так то? Ведь перед ним стоит:
>
> -A FORWARD -m set --match-set local dst -j ACCEPT
>
> а целевой адрес уже должен быть подменен на адрес самого сервера в
> правиле DNAT!
> Ну а если убрать правило "запрещаем форвардинг на все порты и все
> протоколы для должников", то должник спокойно проходит куда угодно. Ну т.е.
> получается, что подмены целевого адреса все таки не происходит. Что я
> не так сделал?и смотрим что там в заголовках