PDA

Bekijk de volledige versie : VServer: что-то странное в forward chain...



lazyman
13-04-2008, 21:05
Привет,

Вопрос из серии "То ли лыжи не едут, то ли..." :)
Пытаюсь настроить проброс порта на свой десктоп. На странице настроек включил Enable virtual server, прописал проброс на свою машину. Apply, Finish, рестарт, не работает...
Полез разбираться, и нашел нечто для меня непонятное в forward chain. Вот выдержки из iptables-save, целиком nat PREROUTING, VSERVER и filter FORWARD цепочки:


-A PREROUTING -d 93.81.82.173 -j VSERVER
-A PREROUTING -d 10.139.22.97 -j VSERVER

-A VSERVER -p tcp -m tcp --dport 2000 -j DNAT --to-destination 192.168.1.10:2000
-A VSERVER -p udp -m udp --dport 2000 -j DNAT --to-destination 192.168.1.10:2000

-A FORWARD -i br0 -o br0 -j ACCEPT
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -d 224.0.0.0/240.0.0.0 -p udp -j ACCEPT
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ! br0 -o ppp0 -j DROP
-A FORWARD -i ! br0 -o vlan1 -j DROP
-A FORWARD -i ! br0 -m state --state NEW -j SECURITY
-A FORWARD -m conntrack --ctstate DNAT -j DROP
-A FORWARD -o br0 -j DROP


Насколько я помню iptables, предпоследняя строка в forward как раз вырубает все, что проходит через DNAT... Руками в forward не лазил, чесслово, оно такое из Web-интерфейса родилось.

Это у меня глюк, у интерфейса или я чего не доделал? Прошивка 1.9.2.7-9.

ABATAPA
14-04-2008, 05:51
Насколько я помню iptables, предпоследняя строка в forward как раз вырубает все, что проходит через DNAT... Руками в forward не лазил, чесслово, оно такое из Web-интерфейса родилось.

Это у меня глюк, у интерфейса или я чего не доделал? Прошивка 1.9.2.7-9.

А что там не так?
Правила выполняются до первого соответствия.
Все нужные пакеты в строках выше пропускаются.
В этой строке юлокируются все остальные - т.е. не нужные.

lazyman
14-04-2008, 09:43
А что там не так?
Правила выполняются до первого соответствия.
Все нужные пакеты в строках выше пропускаются.
В этой строке юлокируются все остальные - т.е. не нужные.

Вот как раз всем новым соединениям через DNAT и будет первой соответствовать `-A FORWARD -m conntrack --ctstate DNAT -j DROP'. Если присмотритесь, в forward всего три ACCEPT'а: для intranet траффика (форвард внутри br0), мультикаста и стандартный related, established. Ни одному из них новое входящее соединение через DNAT не соответствует.
"Ненужных" DNAT по идее вообще быть не может: откуда они возьмутся, если их явно не прописывать в nat:PREROUTING (то бишь, в virtual server)?

Логичнее было бы как раз обратное: все инициируемые DNAT соединения считать легитимными, а какие входящие перенаправлять на DNAT - определять в VSERVER. Остальные порежутся в INPUT.

Понятно, что проблема решается просто: достаточно либо в post-firewall заменить drop на accept, либо в web-интерфейсе добавить разрешаеющие правила в wan to lan filter. Вопрос в том, как будет правильно :) Мне казалось, что по документации и описаниям в этом форуме для работы DNAT достаточно прописать virtual server. Если я ошибаюсь, поправьте, pls.

P.S. UPnP отключен.

ABATAPA
14-04-2008, 10:33
Вот как раз всем новым соединениям через DNAT и будет первой соответствовать `-A FORWARD -m conntrack --ctstate DNAT -j DROP'. Если присмотритесь, в forward всего три ACCEPT'а: для intranet траффика (форвард внутри br0), мультикаста и стандартный related, established. Ни одному из них новое входящее соединение через DNAT не соответствует.
"Ненужных" DNAT по идее вообще быть не может: откуда они возьмутся, если их явно не прописывать в nat:PREROUTING (то бишь, в virtual server)?


Почему вы решили, что
-A FORWARD -o br0 -j DROP
относится к NAT?

Вообще, это цепочка FORWARD.
Здесь будут "зарезаться", к примеру, пакеты из "внешних" сетей, в dst явно имеющие "внутренний" адрес, т.е. в общем подлежащие маршрутизации.

Словом, все правильно.
Это правило будет "резать" ненужные пересылаемые пакеты

lazyman
14-04-2008, 11:01
Почему вы решили, что
-A FORWARD -o br0 -j DROP
относится к NAT?

Вообще, это цепочка FORWARD.
Здесь будут "зарезаться", к примеру, пакеты из "внешних" сетей, в dst явно имеющие "внутренний" адрес, т.е. в общем подлежащие маршрутизации.

Словом, все правильно.
Это правило будет "резать" ненужные пересылаемые пакеты

АВАТАРА, да не о том правиле речь. DNAT режется на предпоследнем правиле, а не последнем.
-A FORWARD -m conntrack --ctstate DNAT -j DROP я его в предыдущем сообщении даже еще раз написал :) Представьте себе входящее DNAT соединение (со статусом new) и попробуйте пройти по цепочке FORWARD.

ABATAPA
14-04-2008, 15:04
АВАТАРА, да не о том правиле речь. DNAT режется на предпоследнем правиле, а не последнем.
-A FORWARD -m conntrack --ctstate DNAT -j DROP я его в предыдущем сообщении даже еще раз написал :) Представьте себе входящее DNAT соединение (со статусом new) и попробуйте пройти по цепочке FORWARD.

Оно уйдет в SECURITY и там обработается:

-A FORWARD -i ! br0 -m state --state NEW -j SECURITY

lazyman
14-04-2008, 20:52
Оно уйдет в SECURITY и там обработается:

-A FORWARD -i ! br0 -m state --state NEW -j SECURITY

Ох... SECURITY chain в местном файрволле отвечает только и исключительно за отсечение DOS атак. Она ничего не умеет "обрабатывать" в смысле разрешать. Может либо вернуть управление в точку вызова, если соединение разрешено (и сканирование правил продолжится со следующего за вызовом SECURITY), либо дропнуть соединение.
АВАТАРА, ну ей богу, если беретесь отвечать, так хоть посмотрите сначала, как асусовский файрволл построен...

ABATAPA
15-04-2008, 18:29
ть посмотрите сначала, как асусовский файрволл построен...

А то я не смотрел...
Может, Вам самому внимательнее смотреть, что меняете, вместо того, чтобы других учить?
У Вас в Internet Firewall->WAN to LAN Filter->Port Forwarding default policy
стоит DROP? И "Enable WAN to LAN Filter" включен?
Ну, так чего же Вы хотите?
Верните на ACCEPT, если DROP не нравится.