PDA

Просмотр полной версии : Iptables & Squid - не перенаправляется трафик


axl_kane
13.04.2010, 11:53
Есть прокси-сервер на Debian, по идее весь исходящий http-трафик на порт 80 должен перенаправляться на порт сквида 3128 силами iptables. Но этого не получается - инет на клиентских машинах не пашет до тех пор, пока в браузере прямо не напишешь адрес и порт прокси. Локальная сеть 10.0.0.0/24 на eth1, внешняя на eth0. Конфиг iptables привожу ниже. Чего не хватает?

*nat
:PREROUTING ACCEPT [223:25545]
:POSTROUTING ACCEPT [6:812]
:OUTPUT ACCEPT [6:812]
-A PREROUTING -s 10.0.0.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 192.168.10.1
COMMIT
*filter
:INPUT DROP [198:23292]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4:576]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 10.0.0.0/24 -i eth1 -j ACCEPT
COMMIT

Revent
13.04.2010, 12:38
/etc/sysctl.conf параметр net.ipv4.ip_forward = 1(если нету вписать ручками) перезагрузиться ну или sysctl -w и все должно заработать

DoubleSpace
13.04.2010, 12:51
А в squid изменения настройки вы делали?
http_port 192.168.1.1:3128 transparent

axl_kane
13.04.2010, 13:25
sysctl.conf отредактирован

http_port 3128 transparent - без указания ip сервера, по идее и так работать должен

Revent
13.04.2010, 14:07
lsmod | grep ip покажи

и вот эти правила в iptables для форвардинга нужны
-A FORWARD -s 10.0.0.0/24 -i eth1 -j ACCEPT
-A FORWARD -d 10.0.0.0/24 -i eth1 -j ACCEPT
-A FORWARD -o eth1 -j DROP
-A FORWARD -o eth0 -j DROP

axl_kane
13.04.2010, 14:11
ipt_REDIRECT 1760 1
iptable_nat 4680 1
nf_nat 15576 2 ipt_REDIRECT,iptable_nat
nf_conntrack_ipv4 12268 4 iptable_nat,nf_nat
nf_conntrack 55540 4 xt_state,iptable_nat,nf_nat,nf_conntrack_ipv4
iptable_filter 2624 1
ip_tables 10160 2 iptable_nat,iptable_filter
x_tables 13284 5 xt_state,ipt_REDIRECT,xt_tcpudp,iptable_nat,ip_tab les
ipv6 235396 10

Revent
13.04.2010, 14:18
тут все норм форвардинг добавь по идее должно хватить

Ну и соответственно не забываем шлюз на клиентах вписывать

axl_kane
13.04.2010, 15:48
не пашет, даже после добавления FORWARD

*filter
:INPUT DROP [1:28]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [371:40236]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 10.0.0.0/24 -i eth1 -j ACCEPT
-A FORWARD -s 10.0.0.0/24 -i eth1 -j ACCEPT
-A FORWARD -d 10.0.0.0/24 -i eth1 -j ACCEPT
-A FORWARD -o eth1 -j DROP
-A FORWARD -o eth0 -j DROP
COMMIT

*nat
:PREROUTING ACCEPT [22:2822]
:POSTROUTING ACCEPT [5:335]
:OUTPUT ACCEPT [5:335]
-A PREROUTING -s 10.0.0.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 192.168.10.1
COMMIT

Revent
14.04.2010, 06:41
попробуй эту строчку
-A PREROUTING -s 10.0.0.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
заменить на
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

ну и политику INPUT в ACCEPT, проще потом закрыть входящие соединения

ivan_i_
14.04.2010, 07:40
Я бы оставил одного клиента и на определённые строчки поставил бы -j LOG плюс tcpdump - сразу станет что куда и почему идёт. Бывает поподаются логические ошибки, которые сразу и не заметишь.

axl_kane
14.04.2010, 11:33
попробуй эту строчку
-A PREROUTING -s 10.0.0.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
заменить на
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

ну и политику INPUT в ACCEPT, проще потом закрыть входящие соединения

не помогло, попутно нашел глюк, из-за которого падает сеть - после попытки перегрузить сеть командой /etc/init.d/networking restart в ifstate пропадают все сетевые интерфейсы кроме lo, и машина выпадает из сети, пока не перезагрузишь ее.

ivan_i_
14.04.2010, 13:15
А если так
-A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

Т.е. я к тому что зачем нам совпадения -m если мы уже выбрали протокол tcp

axl_kane
14.04.2010, 14:24
все равно нет

ivan_i_
14.04.2010, 16:02
С другого форума, если это не поможет то точно -j LOG и tcpdump...

Свершилось! Не прошло и года, как говорится...
В общем, коротко:

в squid.conf:
http_port 3128 transparent

apt-get install dnsmasq

Код:

iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.0.1:3128

eth0 - карта с IP внутренней сети, а 192.168.0.1 - внутренний адрес шлюза.
После "
Код:

-i eth0

" можно ещё прибавить "
Код:

-d ! 192.168.0.0/24

", чтобы переправлять на порт 3128 запросы клиентов, адресованные именно ЗА пределы сети 192.168.0.0/24.

Так что, проблема была, в основном, в праАвиле iptables. Вот что значит бездумно копировать примеры всяких "советчиков"...

Итого
iptables -t nat -A PREROUTING -i eth0 -d ! 192.168.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.0.1:3128

axl_kane
15.04.2010, 09:41
да, есть контакт, заработало

ivan_i_
15.04.2010, 09:57
axl_kane, Скинь полный конфиг iptables - может кому пригодится в будущем.

zabit
18.04.2010, 22:32
/etc/sysctl.conf параметр net.ipv4.ip_forward = 1(если нету вписать ручками) перезагрузиться ну или sysctl -w и все должно заработать

дополню... перегружать не обязательно
можно sysctl -p сделать и заработает

axl_kane
28.04.2010, 15:05
*filter
:INPUT ACCEPT [1:28]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [371:40236]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s 10.0.0.0/24 -i eth1 -j ACCEPT
-A FORWARD -s 10.0.0.0/24 -i eth1 -j ACCEPT
-A FORWARD -d 10.0.0.0/24 -i eth1 -j ACCEPT
-A FORWARD -o eth1 -j DROP
-A FORWARD -o eth0 -j DROP
COMMIT

*nat
:PREROUTING ACCEPT [22:2822]
:POSTROUTING ACCEPT [5:335]
:OUTPUT ACCEPT [5:335]
-A PREROUTING -i eth1 -d ! 10.0.0.0/24 -p tcp -m multiport --dport 80,8080 -j D$
-A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 192.168.0.1
COMMIT