PDA

Bekijk de volledige versie : Экспериментег.



Lesnix
04-10-2006, 07:58
Берём новый ASUS WL-500g Premium и настраиваем. Всё делаем по инструкции.

Меняем прошивку(шьем последнее от Олега).
Настраиваем DHCP+PPTP. Всё работает, всё замечательно.
Разрешаем icmp from WAN (галочка в Internet Firewall -> Basic Settings)
Разрешаем Web-интерфейс по порту 8080 из WAN(галочка в Internet Firewall -> Basic Settings)
Разрешаем ssh from WAN(по инструкции с этого сайта, пару правил в iptables)
Настраиваем Wireless...

Итог:
1) Интернет из домашней сети - есть !
2) SSH, Web-interface из WAN - есть !
И, кажется, всё замечательно.
Но тут выплывает одна очень интересная фича(да-да, именно фича NAT)...

Адреса транслируются в обе стороны. Входящие соединения, не имеющие сопоставлений в NAT-таблицах, успешно транслируются во внутреннюю подсеть.
Мы можем добраться до внутренней подсети из внешней !
И на этом ничего не заканчивается. Запуская роутер в такой конфигурации, мы предоставляем бесплатный Интернет всему сегменту городской сети, за что нас немедленно отключает наш провайдер. И он трижды прав.

Эксперимент
Настраиваем ASUS как я описал выше.
Ему выдается IP 10.7.14.88(MAN). Роутер коннектится по PPTP и получает IP 212.1.xxx.xx (у меня внешний).

Идём к соседу. У него на компе ип 10.7.14.89.
У соседа интернета нет, баланс отрицательный, на VPN не пускает.
Делаем у соседа:
route add -host ya.ru gw 10.7.14.88
route add -net 192.168.0.0/24(моя внутренняя сеть) gw 10.7.14.88

И проверяем:
ping 192.168.0.254 (внутренний ип роутера)
ping 192.168.0.8 (домашняя тачка)
ping ya.ru

ВСЁ пингуется !

....высказываемся.

[root@gw /tmp]$ iptables --list
Chain INPUT (policy DROP)
target prot opt source destination
DROP all -- anywhere anywhere state INVALID
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere state NEW
ACCEPT all -- anywhere anywhere state NEW
SECURITY all -- anywhere anywhere state NEW
ACCEPT udp -- anywhere anywhere udp spt:bootps dpt:bootpc
ACCEPT tcp -- anywhere gw tcp dpt:www
ACCEPT tcp -- anywhere anywhere tcp dpt:7776
ACCEPT tcp -- anywhere anywhere tcp dpt:webcam
ACCEPT icmp -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh flags:SYN,RST,ACK/SYN

Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere state INVALID
TCPMSS tcp -- anywhere anywhere tcp flags:SYN,RST,ACK/SYN TCPMSS clamp to PMTU
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
SECURITY all -- anywhere anywhere state NEW
ACCEPT all -- anywhere anywhere ctstate DNAT

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain MACS (0 references)
target prot opt source destination

Chain SECURITY (2 references)
target prot opt source destination
RETURN tcp -- anywhere anywhere tcp flags:SYN,RST,ACK/SYN limit: avg 1/sec burst 5
RETURN tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/RST limit: avg 1/sec burst 5
RETURN udp -- anywhere anywhere limit: avg 5/sec burst 5
RETURN icmp -- anywhere anywhere limit: avg 5/sec burst 5
DROP all -- anywhere anywhere

Chain logaccept (0 references)
target prot opt source destination
LOG all -- anywhere anywhere state NEW LOG level warning tcp-sequence tcp-options ip-options prefix `ACCEPT '
ACCEPT all -- anywhere anywhere

Chain logdrop (0 references)
target prot opt source destination
LOG all -- anywhere anywhere state NEW LOG level warning tcp-sequence tcp-options ip-options prefix `DROP '
DROP all -- anywhere anywhere

[root@gw /tmp]$ cat nat_rules
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:VSERVER - [0:0]
-A PREROUTING -d 212.1.xxx.xx -j VSERVER
-A PREROUTING -d 10.7.14.88 -j VSERVER
-A VSERVER -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.0.254:80
-A POSTROUTING -o ppp0 ! -s 212.1.xx.xx -j MASQUERADE
-A POSTROUTING -o vlan1 ! -s 10.7.14.88 -j MASQUERADE
-A POSTROUTING -o br0 -s 192.168.0.0/24 -d 192.168.0.0/24 -j MASQUERADE
COMMIT

gaaronk
04-10-2006, 09:13
Да. Именно. NAT это трансляция. и не более. для защиты нужно использовать firewall

поэтому у меня в файрволле в момент поднятия соединения добавляется правило

в цепочку INPUT после state INVALID что то вроде

0 0 DROP all -- ppp0 * 0.0.0.0/0 !83.237.4.187

_примерно_ вот так

iptables -I INPUT 2 -i $interface ! -d $ip -j DROP

(все соединения я поднимаю не средствами прошивки, а своими скриптами)

то есть дропаем все входящие если они адресованы не нашему ip

а так же модифицирую FORWARD в post-firewall

iptables -P FORWARD DROP
iptables -A FORWARD -i br0 -s 192.168.0.0/24 -j ACCEPT

то есть разрешаю форвардить пакеты только с адресами моей внутренней сети и с внутреннего интерфеса, а все остальное - по умолчанию дропается

Alexvaler
04-10-2006, 14:33
в фак этот момент непременно!!! желательно со стандартным решением.

Oleg
04-10-2006, 14:53
Исправлять надо. Только что-то у меня пока в голове не рисуется, что сделать. Цепочку FORWARD надо изменять. Что-то типа

iptables -A FORWARD ! -i br0 -j DROP

Надо проверять, нет ли каких последствий от такой команды.

Lesnix
04-10-2006, 15:58
Решение gaaronk, в принципе, подходит...
Только при этом становится невозможно добраться до роутера из WAN по порту HTTP(8080)...
Вообще странно, что dropbear ssh слушает на всех IP, а доступ по http организован только пробрасыванием порта 8080 на внутренний ип... это судя по VSERVER...
я прав ?

gaaronk
04-10-2006, 16:13
Решение gaaronk, в принципе, подходит...
Только при этом становится невозможно добраться до роутера из WAN по порту HTTP(8080)...
Вообще странно, что dropbear ssh слушает на всех IP, а доступ по http организован только пробрасыванием порта 8080 на внутренний ип... это судя по VSERVER...
я прав ?

а почему??

запрос приходит на внешний ip пропускается файрволлом, а потом обрабатывается портфорвардингом

imho так

gaaronk
04-10-2006, 16:17
Исправлять надо. Только что-то у меня пока в голове не рисуется, что сделать. Цепочку FORWARD надо изменять. Что-то типа

iptables -A FORWARD ! -i br0 -j DROP

Надо проверять, нет ли каких последствий от такой команды.

быть не должно. ответы на запросы обработаются ранее правилом с RELATED,ESTABLISHED или DNAT (для портфорвардинга)

у меня еще более жесткое условие

iptables -A FORWARD -i br0 -s 192.168.0.0/24 -j ACCEPT

а остальное дропается. и год почти полет нормальный

вот кусок post-firewall

lanaddr=`nvram get lan_ipaddr`
lanmask=`nvram get lan_netmask`
lan_net=`ipcalc -s -n $lanaddr $lanmask | awk '{print(substr($1,9))}'`/$lanmask

iptables -P FORWARD DROP
iptables -A FORWARD -i br0 -s $lan_net -j ACCEPT

Diablo-AD
04-10-2006, 16:36
Разрешаем icmp from WAN (галочка в Internet Firewall -> Basic Settings)
OFF: а где такая галочка там?

Lesnix
05-10-2006, 19:15
Diablo-AD, смотри приложенный скриншот с галочкой :D

gaaronk, я себе post-firewall практически аналогичный сделал.

#!/bin/sh

inet_ip=`nvram get wan_ipaddr_t`
man_ip=`nvram get wanx_ipaddr`

lan_ip=`nvram get lan_ipaddr`
lan_mask=`nvram get lan_netmask`
lan_net=`ipcalc -s -n $lan_ip $lan_mask | awk '{print(substr($1,9))}'`/$lan_mask

# set default policy
iptables -P INPUT DROP
iptables -P FORWARD DROP

# Remove last default rule
iptables -D INPUT -j DROP

# allow internal routing
iptables -A FORWARD -i br0 -j ACCEPT

# Allow access to ssh server from WAN
iptables -A INPUT -p tcp -i vlan1 --syn --dport 22 -j ACCEPT

# deny all packets with dst-ip !our_ip
iptables -I INPUT 2 -i ppp0 ! -d $inet_ip -j DROP
iptables -I INPUT 2 -i vlan1 ! -d $man_ip -j DROP

...и вот с этими правилами мне НЕ виден порт роутер:8080 ни из MAN, ни из инета.
web-access from wan включен. порт 8080.

gaaronk
05-10-2006, 22:11
gaaronk, я себе post-firewall практически аналогичный сделал.


#!/bin/sh

lan_ip=`nvram get lan_ipaddr`
lan_mask=`nvram get lan_netmask`
lan_net=`ipcalc -s -n $lan_ip $lan_mask | awk '{print(substr($1,9))}'`/$lan_mask



зачем вычислять lan_net если все равно не используется?

а веб? даже не знаю. лично для меня нет смысла выставлять его наружу, я это сразу отключил. да и потом что мешает включить логгирование в цепочках input и forward и посмотреть где чего дропается?

Lesnix
06-10-2006, 05:44
На самом деле $lan_net используется в # allow internal routing, там добавлен параметр -s и указана подсеть. Просто выложена немного старая версия))

Включить логгирование и посмотреть что где дропается мешает только одно обстоятельство - посредственное знание мною iptables, ибо делал что-либо, в основном, во фре. Впрочем, спасибо, попробую отследить.
:)

gaaronk
06-10-2006, 13:48
в самом конце post-firewall

# logging

iptables -A INPUT -j logdrop
iptables -A FORWARD -j logdrop

vsu
07-10-2006, 18:48
Мда, ну и дырень... Причём, судя по всему, фирменная.

Кстати, даже включение WAN to LAN Filter не исправляет ситуацию в полном объёме - в случае PPTP добавляются правила с "-i ppp0 -o br0", при этом пакеты с vlan1 всё равно будут пролезать напрямую. Разве что модифицировать эти фильтры, чтобы вместо "-s wan_if" использовалось "! -s lan_if".

Как минимум при включении NAT можно смело резать в конце FORWARD всё, что пришло не с br0. Стоит ли это делать при выключенном NAT - не знаю; получится как бы принудительное включение WAN to LAN Filter.

Lesnix
08-10-2006, 08:38
На самом деле потестить асус на эту тему я решил после прочтения какой-то статейки на опеннете... Типа "заблуждения начинающих админов"... В общем, трансляция входящих соединений, не имеющих сопоставлений, - это особенность NAT, и, при неправильной(по многим FAQ) настройке natd на FreeBSD будет наблюдаться то же самое...
...а еще вот этот моментик был описан в каком-то обзоре ASUSa... Я почитал и не поверил :)

Oleg
09-10-2006, 20:28
В общем итог такой:
дырка NAT (которая есть и в родной прошивке), закрывается двумя правилами:
-A FORWARD -o $WAN_IF ! -i $LAN_IF -j DROP
-A FORWARD -o $MAN_IF ! -i $LAN_IF -j DROP

Фильтр WAN->LAN теперь ещё фильтрует и MAN, т.е. проверяется весь трафик идущий в br0. Т.е. просто не забывайте включать WAN to LAN filter и выбрать DROP.

У кого какие мысли? ;-)

MAV
10-10-2006, 15:17
может встроить это в очередную версию прошивки?

Lesnix
10-10-2006, 22:14
В общем итог такой:
дырка NAT (которая есть и в родной прошивке), закрывается двумя правилами:
-A FORWARD -o $WAN_IF ! -i $LAN_IF -j DROP
-A FORWARD -o $MAN_IF ! -i $LAN_IF -j DROP

Фильтр WAN->LAN теперь ещё фильтрует и MAN, т.е. проверяется весь трафик идущий в br0. Т.е. просто не забывайте включать WAN to LAN filter и выбрать DROP.

У кого какие мысли? ;-)Не-а... не работает.
Ставлю в post-firewall...
WAN_IF="ppp0"
MAN_IF="vlan1"
LAN_IF="br0"
...Если ползти в инет через роутер - то не пролезает. А во внутреннюю сетку все равно пускает.
на соседней тачке пишу:
route add -net 192.168.0.0/24 gw 10.7.14.88(man_ip)
и успешно пингую домашнюю сетку свою

Думаю, стоит оставить решение
iptables -A FORWARD -i br0 -j ACCEPT

Oleg
11-10-2006, 09:12
Всё правильно, у Вас ведь нет новой прошивки, в которой это сделано. :)

Lesnix
11-10-2006, 09:37
А где ета новая прошивка ? :)

Oleg
11-10-2006, 10:50
Пока я её не выложил, просто обозначил, как это будет... Наверное скоро появится -7f, это ведь на все устройства требуется...

Lesnix
11-10-2006, 12:09
Будем ждать :)

vsu
11-10-2006, 20:09
Пока я её не выложил, просто обозначил, как это будет... Наверное скоро появится -7f, это ведь на все устройства требуется...
А что именно будет? Тех двух правил:
-A FORWARD -o $WAN_IF ! -i $LAN_IF -j DROP
-A FORWARD -o $MAN_IF ! -i $LAN_IF -j DROP явно недостаточно, поскольку они не закрывают выход из MAN в LAN.

Получается, что нужно добавлять что то типа:

-A FORWARD -o $LAN_IF ! -i $LAN_IF -j DROP

Но эти три правила в сумме, если нет других интерфейсов, кроме LAN, MAN и WAN, сводятся к одному:

-A FORWARD ! -i $LAN_IF -j DROP

Т.е., запрещается устанавливать новые соединения со всех интерфейсов, кроме $LAN_IF.

asdf123
12-10-2006, 16:27
А если в веб-интерфейсе выключен доступ из Wan, то дырка всё равно есть?

как прописывать правила которые вы перечисляете??

Oleg
12-10-2006, 16:40
А что именно будет? Тех двух правил: явно недостаточно, поскольку они не закрывают выход из MAN в LAN.

Получается, что нужно добавлять что то типа:

-A FORWARD -o $LAN_IF ! -i $LAN_IF -j DROP

Но эти три правила в сумме, если нет других интерфейсов, кроме LAN, MAN и WAN, сводятся к одному:

-A FORWARD ! -i $LAN_IF -j DROP

Т.е., запрещается устанавливать новые соединения со всех интерфейсов, кроме $LAN_IF.

Всё проще. Будет правило
-A FORWARD -o br0 -j DROP

в конце WAN->LAN фильтра. Весь допустимый трафик к этому моменту будет отправлен в ACCEPT.

Оно и сейчас есть, но там есть "лишние" проверки, из-за которых он из MAN в LAN не работает.

У меня сейчас вся цепочка такая:


-A FORWARD -i br0 -o br0 -j ACCEPT
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1453: -j TCPMSS --set-mss 1452
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -o ppp0 ! -i br0 -j DROP
-A FORWARD -o vlan1 ! -i br0 -j DROP
-A FORWARD ! -i br0 -m state --state NEW -j SECURITY
-A FORWARD -m conntrack --ctstate DNAT -j ACCEPT
-A FORWARD -o br0 -j DROP

Oleg
12-10-2006, 19:45
Вот желающие могут попробовать:
http://oleg.wl500g.info/gp/WL500gp-1.9.2.7-7f-pre8.trx

_Обязательно_ нужно разрешить фаервол из WAN в LAN и сказать, что нужно делать DROP.

VadimVB
14-10-2006, 03:48
Вот желающие могут попробовать:
http://oleg.wl500g.info/gp/WL500gp-1.9.2.7-7f-pre8.trx

_Обязательно_ нужно разрешить фаервол из WAN в LAN и сказать, что нужно делать DROP.

А для 500gx ?

Oleg
15-10-2006, 17:44
http://oleg.wl500g.info/gp/WL500gx-1.9.2.7-7f-pre8.trx

Duke
15-10-2006, 21:20
Off: а тут уже с патчем-ускорялкой USB? (или я криво англоязычный топик читал :confused: )

http://oleg.wl500g.info/gp/WL500gx-1.9.2.7-7f-pre8.trx

Oleg
16-10-2006, 09:18
Да, именно так.

Duke
16-10-2006, 19:47
ОФФ: Ну эээээ... Пос равнению с 7е явно что-то поменялось - у меня влешка стала зачемто в пертицию ммонтироваца хотя раньше с теми хж ескриптами она в опт монтировалась из скрипта- теперь болт =(

andlev
16-10-2006, 20:04
ОФФ: Ну эээээ... Пос равнению с 7е явно что-то поменялось - у меня влешка стала зачемто в пертицию ммонтироваца хотя раньше с теми хж ескриптами она в опт монтировалась из скрипта- теперь болт =(
Попробуй перегрузить, у меня тоже не стабильно монтирует еще с pre4, может два раза один раздел смонтировать в разные точки, а может наоборот, комбинации совершенно не предсказуемы, но раза с третьего обычно загружается как надо, благо перегружать его приходится редко. Кстати, сегодня добавили хак для WL500gP в openwrt wr, надо наверное спрыгивать.

Oleg
16-10-2006, 20:08
ОФФ: Ну эээээ... Пос равнению с 7е явно что-то поменялось - у меня влешка стала зачемто в пертицию ммонтироваца хотя раньше с теми хж ескриптами она в опт монтировалась из скрипта- теперь болт =(

Ничё не понял. ;-) В чём проблема, конкретней?

Duke
16-10-2006, 20:18
На 7е у меня в пост-буте было вот так



#!/bin/sh
dropbear
optserial=SN000PQI009
discdev="$(scsi add $optserial)/part1"
[ -b $discdev ] && mount $discdev /opt
scsi remove $optserial 0 0 1
scsi remove $optserial 0 0 2
scsi remove $optserial 0 0 3
hdd start ro


Монтируется девайс сс флеш-ридера в /opt, ненуджные слоты выубаются, темже макаром стартует харддиск в /tmp/harddisk, при етом Фтп-сервер врублен в в результате после загрузки имеем
/dev/scsi/host0/bus0/target0/lun0/part1 on /tmp/harddisk (ro)
/dev/scsi/host1/bus0/target0/lun0/part1 on /opt

Сейчас залил пре8 - автомаунт сработал ДО post-boot, в результате
/dev/scsi/host0/bus0/target0/lun0/part1 on /tmp/harddisk
/dev/scsi/host1/bus0/target0/lun0/part1 on /tmp/harddisk/part1

P.S. USB чутка ускорилось , теперь 1.5-1.6мб стабильно на чтение дает
P.P.S. не понял какое теперь правило в post-firewll прописывать или это для параноиков а вс еч то работало так и будет дальше работать?

Duke
16-10-2006, 20:35
Разобрался! Шайтан... было в моем скрипте scsi


[ -n "$hostid" ] &&
echo "scsi $1-single-device $hostid $busid $targetid $lunid" > /proc/scsi/scsi

стало


[ -n "$hostid" ] &&
(echo "scsi $1-single-device $hostid $busid $targetid $lunid" > /proc/scsi/scsi)


Чудесаблин.. Как раньше работало - непонятно =)

MAV
20-10-2006, 04:41
ну так будут отклики по тестированию уязвимости?
я прошил этой прошивкой но проверить дыру нет возможности
Lesnix есть какие результаты?

Lesnix
20-10-2006, 11:21
Ну, в общем, с новой прошивкой и политикой DROP в WAN->LAN filter "стало лучше", но "не до конца".
Внутренняя подсеть(скажем, 192.168.1.0/24) из MAN уже недоступна, Интернет тоже не раздается на MAN-интерфейс...

Однако, внутренний интерфейс роутера(192.168.1.1) все-таки по-прежнему доступен, что не есть гуд.
Я, например, по-прежнему юзаю правила, запрещающие пакеты на IP, не принадлежащие роутеру, с man и wan интерфейсов...

imdex
20-10-2006, 12:03
А как проверить доступность внутреннего if роутера? Добавление маршрута к нему не сработало, не пингуется из внешней сети. Что я делаю не так? =) На pre7 работало замечательно.

Speedy Gonzalez
20-10-2006, 15:04
C новой прошивкой нормально перестал работать поиск DC++

В логе куча таких вот строчек с разными SRC и SPT на мой 192.168.1.55:12223

Oct 20 17:37:43 kernel: DROP IN=vlan1 OUT=br0 SRC=172.23.0.108 DST=192.168.1.55 LEN=213 TOS=0x00 PREC=0x00 TTL=124 ID=63034 PROTO=UDP SPT=4818 DPT=12223 LEN=193

Подскажите пожалуйста, что где прописать чтобы не дропало

Oleg
20-10-2006, 18:35
C новой прошивкой нормально перестал работать поиск DC++

В логе куча таких вот строчек с разными SRC и SPT на мой 192.168.1.55:12223

Oct 20 17:37:43 kernel: DROP IN=vlan1 OUT=br0 SRC=172.23.0.108 DST=192.168.1.55 LEN=213 TOS=0x00 PREC=0x00 TTL=124 ID=63034 PROTO=UDP SPT=4818 DPT=12223 LEN=193

Подскажите пожалуйста, что где прописать чтобы не дропало
Ну если скажите там accept, то получите начальный вариант, т.е. без защиты, с дыркой.
Нужно разобраться с фаерволом. Если SPT меняется, то откуда может DPT где-то задаётся?

Speedy Gonzalez
20-10-2006, 20:43
Oleg
DPT фиксированный.
может быть можно как-нибуть открыть только для этого порта?

Oleg
21-10-2006, 08:30
Ну да, сделайте виртуальный сервер для протокола Udp.

Lesnix
21-10-2006, 09:20
Ну, в общем, с новой прошивкой и политикой DROP в WAN->LAN filter "стало лучше", но "не до конца".
Внутренняя подсеть(скажем, 192.168.1.0/24) из MAN уже недоступна, Интернет тоже не раздается на MAN-интерфейс...

Однако, внутренний интерфейс роутера(192.168.1.1) все-таки по-прежнему доступен, что не есть гуд.
Я, например, по-прежнему юзаю правила, запрещающие пакеты на IP, не принадлежащие роутеру, с man и wan интерфейсов... Извиняюсь, поспешил с выводами. :)

Нет в версии pre8 уязвимости.

vsu
21-10-2006, 10:16
Поставил WL500gx-1.9.2.7-7f-pre8.trx - пока вроде нормально.

Раз уж взялись копать настройки iptables - сейчас в начале INPUT такая картина:

0 0 logdrop all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID
9677 3347370 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

Может быть, поменять эти правила местами, чтобы нормальный трафик обрабатывался хоть чуть быстрее? (Хотя это вряд ли удастся заметить на фоне pptp в userspace...)

Speedy Gonzalez
21-10-2006, 11:44
Ну да, сделайте виртуальный сервер для протокола Udp.
В том-то и дело что не помогает. Порты для DC++ прописаны в Virtual Server. Но всё равно DROP.

Oleg
21-10-2006, 13:31
Сделайте
cat /tmp/nat_rules
cat /tmp/filter_rules

Speedy Gonzalez
21-10-2006, 13:57
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:VSERVER - [0:0]
-A PREROUTING -d 85.x.x.x -j VSERVER
-A PREROUTING -d 172.x.x.x -j VSERVER
-A VSERVER -p tcp -m tcp --dport 4662 -j DNAT --to-destination 192.168.1.55:4662
-A VSERVER -p udp -m udp --dport 4672 -j DNAT --to-destination 192.168.1.55:4672
-A VSERVER -p tcp -m tcp --dport 11223 -j DNAT --to-destination 192.168.1.55:11223
-A VSERVER -p udp -m udp --dport 12223 -j DNAT --to-destination 192.168.1.55:12223
-A VSERVER -p tcp -m tcp --dport 14104 -j DNAT --to-destination 192.168.1.76:14104
-A VSERVER -p udp -m udp --dport 18872 -j DNAT --to-destination 192.168.1.76:18872
-A VSERVER -p tcp -m tcp --dport 33312 -j DNAT --to-destination 192.168.1.55:33312
-A POSTROUTING -o ppp0 ! -s 85.x.x.x -j MASQUERADE
-A POSTROUTING -o vlan1 ! -s 172.x.x.x -j MASQUERADE
-A POSTROUTING -o br0 -s 192.168.1.0/24 -d 192.168.1.0/24 -j MASQUERADE
COMMIT


*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:MACS - [0:0]
:SECURITY - [0:0]
:logaccept - [0:0]
:logdrop - [0:0]
-A SECURITY -p tcp --syn -m limit --limit 1/s -j RETURN
-A SECURITY -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j RETURN
-A SECURITY -p udp -m limit --limit 5/s -j RETURN
-A SECURITY -p icmp -m limit --limit 5/s -j RETURN
-A SECURITY -j logdrop
-A INPUT -m state --state INVALID -j logdrop
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i lo -m state --state NEW -j ACCEPT
-A INPUT -i br0 -m state --state NEW -j ACCEPT
-A INPUT -i ppp0 -m state --state NEW -j SECURITY
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 515 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9100 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3838 -j ACCEPT
-A INPUT -j logdrop
-A FORWARD -i br0 -o br0 -j ACCEPT
-A FORWARD -m state --state INVALID -j logdrop
-A FORWARD -p tcp --syn -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -o ppp0 ! -i br0 -j logdrop
-A FORWARD -o vlan1 ! -i br0 -j logdrop
-A FORWARD ! -i br0 -m state --state NEW -j SECURITY
-A FORWARD -m conntrack --ctstate DNAT -j ACCEPT
-A FORWARD -o br0 -j logdrop
-A logaccept -m state --state NEW -j LOG --log-prefix "ACCEPT " --log-tcp-sequence --log-tcp-options --log-ip-options
-A logaccept -j ACCEPT
-A logdrop -m state --state NEW -j LOG --log-prefix "DROP " --log-tcp-sequence --log-tcp-options --log-ip-options
-A logdrop -j DROP
COMMIT

Некоторые пояснения:
85.x.x.x - мой реальный IP адрес
172.x.x.x - внутрисетевой адрес в моей домашней сети
Все DC++ хабы находятся в локалке.
DC++ клиент в активном режиме (спокойно подключаюсь и к активным и к пассивным пользователям и от них всё отлично качается)
А вот стоит только использовать поиск (для теста ввожу что-нибудь распространненое, напр. "avi"), то выдаёт всего 10-20 найденных файлов (логику я так и не понял) и кучу дропов в логе, о которых я писал выше.
Включаю в опциях "поиск в пассивном режиме" - всё ок - пару тысяч найденых файлов, как и должно быть.
С предыдущей прошивкой всё было ок.

vsu
21-10-2006, 15:23
Включаю в опциях "поиск в пассивном режиме" - всё ок - пару тысяч найденых файлов, как и должно быть.
Возможно, в данном случае мешает ограничение на интенсивность установления новых соединений. Правила в цепочке SECURITY устанавливают ограничения: не более 1 входящего соединения TCP и не более 5 входящих соединений UDP в секунду ("соединением" по udp считается обмен между парой портов с обеих сторон - первый пакет получает статус NEW и попадает в цепочку SECURITY, последующие пакеты с теми же адресами и номерами портов уже не попадают в SECURITY, пока такое "соединение" не удалится из таблицы conntrack по таймауту).

Можно проверить, что происходит, если посмотреть вывод команды iptables -L -nv; эта команда выведет счётчики пакетов и байтов для каждого правила, и можно будет понять, откуда именно пакеты сваливаются в logdrop. Если дело в правилах из SECURITY, можно их модифицировать в post-firewall.

Oleg
21-10-2006, 17:15
Возможно, в данном случае мешает ограничение на интенсивность установления новых соединений. Правила в цепочке SECURITY устанавливают ограничения: не более 1 входящего соединения TCP и не более 5 входящих соединений UDP в секунду ("соединением" по udp считается обмен между парой портов с обеих сторон - первый пакет получает статус NEW и попадает в цепочку SECURITY, последующие пакеты с теми же адресами и номерами портов уже не попадают в SECURITY, пока такое "соединение" не удалится из таблицы conntrack по таймауту).

Можно проверить, что происходит, если посмотреть вывод команды iptables -L -nv; эта команда выведет счётчики пакетов и байтов для каждого правила, и можно будет понять, откуда именно пакеты сваливаются в logdrop. Если дело в правилах из SECURITY, можно их модифицировать в post-firewall.
Да, вполне может быть. Попробуйте сказать iptables -F SECURITY

Speedy Gonzalez
21-10-2006, 18:55
Да, уважаемые гуру, всё так и есть. Спасибо за подсказку (а то я пока тяжеловато ориентируюсь в некоторых настройках)
в post-firewall вписал строку
iptables -I SECURITY -p udp --dport 12223 -j RETURN
Работает. Т.е. этот UDP порт не лимитируется, а на другие по-прежнему не более 5 соединений в сек.
Правильно я сделал? Или есть более грамотное решение? Может в INPUT лучше что-нибудь прописать?

Oleg
21-10-2006, 19:09
Правильно.

FilimoniC
24-10-2006, 20:59
Вопрос: можно ли закрыться средствами web-интерфейса?
Можно ли небольшую чайниковую инструкцию для пользователей локальных сетей?
Извините за наглость..как процесс? движется? (в плане новой прошивки)

Lesnix
24-10-2006, 22:12
Извините за наглость..как процесс? движется? (в плане новой прошивки)
Качаешь прошивку pre8
Ставишь wan to lan filter, drop. и по большей части все окей.

Plimouthrock
20-11-2006, 20:28
А если у меня:


[admin@my sbin]$ iptables -L -t filter
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere state INVALID
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere state NEW
ACCEPT all -- anywhere anywhere state NEW
SECURITY all -- anywhere anywhere state NEW
ACCEPT udp -- anywhere anywhere udp spt:bootps dpt:bootpc
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp
DROP all -- anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere state INVALID
TCPMSS tcp -- anywhere anywhere tcp flags:SYN,RST,ACK/SYN TCPMSS clamp to PMTU
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
DROP all -- anywhere anywhere
DROP all -- anywhere anywhere
SECURITY all -- anywhere anywhere state NEW
ACCEPT all -- anywhere anywhere ctstate DNAT
DROP all -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain MACS (0 references)
target prot opt source destination

Chain SECURITY (2 references)
target prot opt source destination
RETURN tcp -- anywhere anywhere tcp flags:SYN,RST,ACK/SYN limit: avg 1/sec burst 5
RETURN tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/RST limit: avg 1/sec burst 5
RETURN udp -- anywhere anywhere limit: avg 5/sec burst 5
RETURN icmp -- anywhere anywhere limit: avg 5/sec burst 5
DROP all -- anywhere anywhere

Chain logaccept (0 references)
target prot opt source destination
LOG all -- anywhere anywhere state NEW LOG level warning tcp-sequence tcp-options ip-opti
ons prefix `ACCEPT '
ACCEPT all -- anywhere anywhere

Chain logdrop (0 references)
target prot opt source destination
LOG all -- anywhere anywhere state NEW LOG level warning tcp-sequence tcp-options ip-opti
ons prefix `DROP '
DROP all -- anywhere anywhere

Это правильно или все-таки что-то не так? Меня несколько напрягают anywhere везде...

Oleg
20-11-2006, 20:45
добавьте ключики -vn - увидите много интересного. :)

Plimouthrock
20-11-2006, 20:55
Вау... :eek: