Да, тоже решил что туда смотреть нужно, но опять проблема...
Эксперимент ставлю над портом SSH (22).
Делаю так:
#создаю маршрут через нужный GW в таблице 200.
ip route add default via xx.xx.xx.xx table 200
#добавляю правило маркирования исходящих пакетов с роутера с 22 порта.
iptables -t mangle -A PREROUTING -p tcp -s 10.76.0.1 --sport 22 -j MARK --set-mark 1
#добавляю правило для выбора таблицы маршрутов для маркированных пакетов.
ip rule add fwmark 1 table 200
ip route flush cache
Не работает.
Делаю все то-же самое для другого внутреннего IP, работает.
Пробовал играть с IP роутера, и 127.0.0.1 и имя роутера пробовал, не хочет. В чем может быть косяк?
WAN - статический IP.
+ PPTP
noauth refuse-eap
user 'xxxx'
password 'xxxx'
plugin pptp.so
pptp_server xxx.server.ru
nomppe-stateful +mppe-128 mtu 1400
maxfail 0
persist
ipcp-accept-remote ipcp-accept-local noipdefault
ktune
default-asyncmap nopcomp noaccomp
novj nobsdcomp nodeflate
lcp-echo-interval 10
lcp-echo-failure 6
unit 0
PS: весь трафик из локалки должен уходить в ppp0.
Last edited by Spartach; 20-08-2010 at 18:44.
похоже, что нужна поддержка CONNMARK в ядре и iptables, ядро, в свою очередь, нужно 2.6, может кто поправит меня?
Методом чтения доки на iptables нашел решение :-)
Напишу, мало-ли кому пригодится...
#Создаю таблицу маршрутизайии, где xxx.xxx.xxx.xxx - необходимый gw.
ip route add default via xxx.xxx.xxx.xxx table 200
#Правило маркировки пакетов, красить любой пакет уходящий с роутера с адресом отправителя yyy.yyy.yyy.yyy (принадлежит интерфейсу с которого нужно отвечать, т.е. на который пришел запрос).
iptables -t mangle -A OUTPUT -s yyy.yyy.yyy.yyy -j MARK --set-mark 1
#Применять таблицу маршрутизации для крашеных пакетов.
ip rule add fwmark 1 table 200
ip route flush cache
Можно сделать для определенных портов, но в своем случае решил весь трафик пустить.
Тему можно закрывать.
Господа имеется роутер с asus wl500w с прошиковой от олега 1.9.2.7-10.
Подскажите пожалуйста как сделать так чтобы правила созданные в коммандной строке через iptable (а не через web интерфейс) сохранялись после перезагрузки роутера.
Поместить их в файл /usr/local/sbin/post-firewall.
Last edited by Lupo_Alberto; 14-10-2010 at 15:44.
Всем привет,
Имеем прошивку от энтузиастов. Необходимо компьютерам в локальной сети разрешить отправку почты только через один smtp сервер. Подключения к остальным зарезать.
Возможно ли это как-то красиво вписать в существующие правила.
Подозреваю, что раз транзитный трафик разруливать все надо в цепочке FORWARD. Вывод iptables -nvL FORWARD в дефолте:
Пока мои изысканию привели к таким правиламCode:Chain FORWARD (policy ACCEPT 76044 packets, 4682K bytes) pkts bytes target prot opt in out source destination 6423 2499K ACCEPT all -- br0 br0 0.0.0.0/0 0.0.0.0/0 0 0 logdrop all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID 0 0 ACCEPT udp -- * * 0.0.0.0/0 224.0.0.0/4 48033 2616K TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU 2811K 2306M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 logdrop all -- !br0 ppp0 0.0.0.0/0 0.0.0.0/0 0 0 logdrop all -- !br0 vlan1 0.0.0.0/0 0.0.0.0/0 580 33272 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate DNAT 0 0 logdrop all -- * br0 0.0.0.0/0 0.0.0.0/0
В таком варианте не работает.Code:LAN=br0 iptables -I FORWARD -p TCP -i $LAN -d 0/0 --dport 25 -j DROP iptables -I FORWARD -p TCP -i $LAN -d $SMTP2 --dport 25 -j ACCEPT iptables -I FORWARD -p TCP -i $LAN -d $SMTP1 --dport 25 -j ACCEPT
Может кто-то сталкивался и подскажет как реализовать или направит в нужное русло
Заранее спасибо
2 levgen:
По приведенному коду smtp-серверов два - $SMTP1 и $SMTP2.Имеем прошивку от энтузиастов. Необходимо компьютерам в локальной сети разрешить отправку почты только через один smtp сервер. Подключения к остальным зарезать.
Правила в цепочках выполняются последовательно, поэтому правило номер раз тут:
не дает выполниться правилам 2 и 3. Перенеси его в конец и должно заработатьCode:LAN=br0 iptables -I FORWARD -p TCP -i $LAN -d 0/0 --dport 25 -j DROP iptables -I FORWARD -p TCP -i $LAN -d $SMTP2 --dport 25 -j ACCEPT iptables -I FORWARD -p TCP -i $LAN -d $SMTP1 --dport 25 -j ACCEPT
Порядок самих правил менял. и в начало -I и в конец -A цепочки пробовал. результат нулевой
Оно либо режется на этом правиле:
либо все пропускается.Code:iptables -I FORWARD -p TCP -i br0 -d 0/0 --dport 25 -j DROP
видимо не сильно эти правила вписываются в default policy
Если это правило:
стоит первым, то оно режет всё остальное по 25-му порту, т.к. destination у него - ВСЕ.Code:iptables -I FORWARD -p TCP -i br0 -d 0/0 --dport 25 -j DROP
Покажи вывод команды iptables -nvxL FORWARD после применения твоих правил.
PS кстати, кроме 25-го порта есть еще 465 (SMTP поверх SSL) и 587 (e-mail message submission (SMTP))
Подскажите как в iptables сделать логирование по срабатыванию определенного правила, например доступ по порту 22? Как само правило прописать я думаю соображу, вопрос больше по параметрам лога (я так понял он может быть разной степени подробности) и самое главное я не могу понять куда будет сохранятся лог?
Вот тут почитай. А пишется вроде в log/kernel/info и в log/messages
Asus RT-N16+3 антенны D-link 7db+160 gb Samsung 2.5: TomatoUSB Toastman Mod, rtorrent + nTorrent (SSH), nod 32 update server
Сейчас маркирую пакеты с помощью цепочки правил в Iptables, но так как компьютеров в сети много, то и правил много... Можно ли сократить это как-нибудь до одного правила?
Например так
Пример того, что сейчас происходит:Code:iptables -t mangle -A labels_in -j MARK --set-mark @srcip
Code:*mangle :PREROUTING ACCEPT [61197570:39908422354] :INPUT ACCEPT [1574141:975304771] :FORWARD ACCEPT [59262832:38892196704] :OUTPUT ACCEPT [759365:97242599] :POSTROUTING ACCEPT [60017173:38989130939] :labels_in - [0:0] :labels_out - [0:0] -A PREROUTING -s 192.168.1.0/24 -j labels_out -A POSTROUTING -d 192.168.1.0/24 -j labels_in -A labels_in -d 192.168.1.4/32 -j MARK --set-mark 0x68 -A labels_in -d 192.168.1.5/32 -j MARK --set-mark 0x69 -A labels_in -d 192.168.1.6/32 -j MARK --set-mark 0x6a -A labels_in -d 192.168.1.7/32 -j MARK --set-mark 0x6b -A labels_in -d 192.168.1.8/32 -j MARK --set-mark 0x6c -A labels_in -d 192.168.1.9/32 -j MARK --set-mark 0x6d -A labels_in -d 192.168.1.10/32 -j MARK --set-mark 0x6e -A labels_in -d 192.168.1.11/32 -j MARK --set-mark 0x6f -A labels_in -d 192.168.1.12/32 -j MARK --set-mark 0x70 -A labels_in -d 192.168.1.13/32 -j MARK --set-mark 0x71 -A labels_in -d 192.168.1.14/32 -j MARK --set-mark 0x72 -A labels_in -d 192.168.1.15/32 -j MARK --set-mark 0x73 -A labels_in -d 192.168.1.16/32 -j MARK --set-mark 0x74 -A labels_in -d 192.168.1.17/32 -j MARK --set-mark 0x75 -A labels_in -d 192.168.1.18/32 -j MARK --set-mark 0x76 -A labels_in -d 192.168.1.19/32 -j MARK --set-mark 0x77 -A labels_in -d 192.168.1.20/32 -j MARK --set-mark 0x78 -A labels_in -d 192.168.1.21/32 -j MARK --set-mark 0x79 -A labels_in -d 192.168.1.22/32 -j MARK --set-mark 0x7a -A labels_in -d 192.168.1.23/32 -j MARK --set-mark 0x7b -A labels_in -d 192.168.1.24/32 -j MARK --set-mark 0x7c -A labels_in -d 192.168.1.25/32 -j MARK --set-mark 0x7d -A labels_in -j RETURN -A labels_out -s 192.168.1.4/32 -j MARK --set-mark 0xcc -A labels_out -s 192.168.1.5/32 -j MARK --set-mark 0xcd -A labels_out -s 192.168.1.6/32 -j MARK --set-mark 0xce -A labels_out -s 192.168.1.7/32 -j MARK --set-mark 0xcf -A labels_out -s 192.168.1.8/32 -j MARK --set-mark 0xd0 -A labels_out -s 192.168.1.9/32 -j MARK --set-mark 0xd1 -A labels_out -s 192.168.1.10/32 -j MARK --set-mark 0xd2 -A labels_out -s 192.168.1.11/32 -j MARK --set-mark 0xd3 -A labels_out -s 192.168.1.12/32 -j MARK --set-mark 0xd4 -A labels_out -s 192.168.1.13/32 -j MARK --set-mark 0xd5 -A labels_out -s 192.168.1.14/32 -j MARK --set-mark 0xd6 -A labels_out -s 192.168.1.15/32 -j MARK --set-mark 0xd7 -A labels_out -s 192.168.1.16/32 -j MARK --set-mark 0xd8 -A labels_out -s 192.168.1.17/32 -j MARK --set-mark 0xd9 -A labels_out -s 192.168.1.18/32 -j MARK --set-mark 0xda -A labels_out -s 192.168.1.19/32 -j MARK --set-mark 0xdb -A labels_out -s 192.168.1.20/32 -j MARK --set-mark 0xdc -A labels_out -s 192.168.1.21/32 -j MARK --set-mark 0xdd -A labels_out -s 192.168.1.22/32 -j MARK --set-mark 0xde -A labels_out -s 192.168.1.23/32 -j MARK --set-mark 0xdf -A labels_out -s 192.168.1.24/32 -j MARK --set-mark 0xe0 -A labels_out -s 192.168.1.25/32 -j MARK --set-mark 0xe1 -A labels_out -j RETURN COMMIT
Last edited by featZima; 11-02-2011 at 00:44.
А можно ли как-нибудь добавить фильтр flow в iptables ?
Code:>$ tc filter add dev ppp1 ip parent 1: prio 1 flow hash keys nfct-src devisor 1024 Unknown filter "flow", hence option "hash" is unparsable