Iptables & прозрачное проксирование

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
Maximus_V
Сообщения: 432
ОС: Gentoo, FreeBSD

Iptables & прозрачное проксирование

Сообщение Maximus_V »

TuLiss писал(а):
02.02.2006 18:47
настройка протстого шлюза =)
...
eth0 - интернет
...
Если ip динамический то:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
...
Если делаете прозрачный прокси то:
при условии, что у вас установлен и настроин прокси сервер, например squid

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A PREROUTING -p tcp --dport 21 -j REDIRECT --to-ports 3128

Пытаюсь настроить прозрачное проксирование:

Код: Выделить всё

# iptables -t nat -F
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# iptables -t nat -A PREROUTING -i eth1 -d ! 192.168.0.8 -p tcp --dport 80 -j REDIRECT --to-port 3128
# iptables -t nat -A PREROUTING -i eth1 -d ! 192.168.0.8 -p tcp --dport 21 -j REDIRECT --to-port 3128
При этом eth1 - сетевая карточка компа, раздающего инет, ppp0 - интернет-интерфейс, 192.168.0.8 - адрес данного компьютера в локальной сети.
Почему-то squid не получает полностью запроса:

Код:

ERROR The requested URL could not be retrieved While trying to process the request: GET / HTTP/1.1 User-Agent: Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.9 (like Gecko) Accept: text/html, image/jpeg, image/png, text/*, image/*, */* Accept-Encoding: x-gzip, x-deflate, gzip, deflate Accept-Charset: utf-8, utf-8;q=0.5, *;q=0.5 Accept-Language: ru, en Host: ya.ru Connection: Keep-Alive The following error was encountered: Invalid Request Some aspect of the HTTP Request is invalid. Possible problems: Missing or unknown request method Missing URL Missing HTTP Identifier (HTTP/1.0) Request is too large Content-Length missing for POST or PUT requests Illegal character in hostname; underscores are not allowed Your cache administrator is ***. Generated Sun, 21 Sep 2008 13:32:55 GMT by WL-Linux (squid/2.7.STABLE3)
Если же в браузере прописать вручную прокси, то проксирование работает нормально. В логах сквида следующие строки:

Код: Выделить всё

1222004461.727     30 192.168.0.1 TCP_DENIED/400 1897 GET error:invalid-request - NONE/- text/html
1222004572.247      2 192.168.0.1 TCP_DENIED/403 1514 GET http://www.tns-counter.ru/V13a****yandex_ru/ru/CP1251/tmsec=yandex_ya/0 - NONE/- text/html
1222004572.869    228 192.168.0.1 TCP_MISS/302 257 GET http://clck.yandex.ru/redir/dtype=stred/pid=17/cid=1729/*http://export.yandex.ru/morda/mail.xml?host=yandex.ru - DIRECT/213.180.204.14 -
1222004573.298    426 192.168.0.1 TCP_MISS/200 518 GET http://export.yandex.ru/morda/mail.xml?host=yandex.ru - DIRECT/87.250.251.69 text/javascript
Первая строчка относится к попытке открытия яндекса без указания прокси в браузере, последующие - запрос с прописанным вручную прокси.
Как же сделать, чтобы iptables автоматически переводило веб-траффик на прокси-сервер? Заранее спасибо.
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Iptables & прозрачное проксирование

Сообщение KiWi »

Аха, правила iptables, логи, аха, а конфиг squid'а показать слабо?
Спасибо сказали:
leksstav
Сообщения: 331

Re: Iptables & прозрачное проксирование

Сообщение leksstav »

Maximus_V писал(а):
21.09.2008 17:35
TuLiss писал(а):
02.02.2006 18:47
настройка протстого шлюза =)
...
eth0 - интернет
...
Если ip динамический то:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
...
Если делаете прозрачный прокси то:
при условии, что у вас установлен и настроин прокси сервер, например squid

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A PREROUTING -p tcp --dport 21 -j REDIRECT --to-ports 3128

Пытаюсь настроить прозрачное проксирование:

Код: Выделить всё

# iptables -t nat -F
# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# iptables -t nat -A PREROUTING -i eth1 -d ! 192.168.0.8 -p tcp --dport 80 -j REDIRECT --to-port 3128
# iptables -t nat -A PREROUTING -i eth1 -d ! 192.168.0.8 -p tcp --dport 21 -j REDIRECT --to-port 3128
При этом eth1 - сетевая карточка компа, раздающего инет, ppp0 - интернет-интерфейс, 192.168.0.8 - адрес данного компьютера в локальной сети.
Почему-то squid не получает полностью запроса:

Код:

ERROR The requested URL could not be retrieved While trying to process the request: GET / HTTP/1.1 User-Agent: Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.9 (like Gecko) Accept: text/html, image/jpeg, image/png, text/*, image/*, */* Accept-Encoding: x-gzip, x-deflate, gzip, deflate Accept-Charset: utf-8, utf-8;q=0.5, *;q=0.5 Accept-Language: ru, en Host: ya.ru Connection: Keep-Alive The following error was encountered: Invalid Request Some aspect of the HTTP Request is invalid. Possible problems: Missing or unknown request method Missing URL Missing HTTP Identifier (HTTP/1.0) Request is too large Content-Length missing for POST or PUT requests Illegal character in hostname; underscores are not allowed Your cache administrator is ***. Generated Sun, 21 Sep 2008 13:32:55 GMT by WL-Linux (squid/2.7.STABLE3)
Если же в браузере прописать вручную прокси, то проксирование работает нормально. В логах сквида следующие строки:

Код: Выделить всё

1222004461.727     30 192.168.0.1 TCP_DENIED/400 1897 GET error:invalid-request - NONE/- text/html
1222004572.247      2 192.168.0.1 TCP_DENIED/403 1514 GET http://www.tns-counter.ru/V13a****yandex_ru/ru/CP1251/tmsec=yandex_ya/0 - NONE/- text/html
1222004572.869    228 192.168.0.1 TCP_MISS/302 257 GET http://clck.yandex.ru/redir/dtype=stred/pid=17/cid=1729/*http://export.yandex.ru/morda/mail.xml?host=yandex.ru - DIRECT/213.180.204.14 -
1222004573.298    426 192.168.0.1 TCP_MISS/200 518 GET http://export.yandex.ru/morda/mail.xml?host=yandex.ru - DIRECT/87.250.251.69 text/javascript
Первая строчка относится к попытке открытия яндекса без указания прокси в браузере, последующие - запрос с прописанным вручную прокси.
Как же сделать, чтобы iptables автоматически переводило веб-траффик на прокси-сервер? Заранее спасибо.



Всего две строки и у вас прозрачный прокси

iptables -t nat -A PREROUTING -p tcp -s $LAN_IP_RANGE -d ! (тут пишем ip своего шлюза) --dport 80 -j REDIRECT --to-ports 3128 #
в конфиге squid находим строчку http_port 3128 и через пробел пишем transparent

Соответственно в правилах iptables должны быть такие вот строки:

iptables -A INPUT -p tcp -s $LAN_IP_RANGE --dport 3128 -j ACCEPT # squid
iptables -A INPUT -p tcp -s $LAN_IP_RANGE --dport 80 -j ACCEPT # http

Всё радуемся прозрачным прокси !!!!!
Спасибо сказали:
Аватара пользователя
Maximus_V
Сообщения: 432
ОС: Gentoo, FreeBSD

Re: Iptables & прозрачное проксирование

Сообщение Maximus_V »

leksstav писал(а):
22.09.2008 00:12
Всего две строки и у вас прозрачный прокси

iptables -t nat -A PREROUTING -p tcp -s $LAN_IP_RANGE -d ! (тут пишем ip своего шлюза) --dport 80 -j REDIRECT --to-ports 3128 #
в конфиге squid находим строчку http_port 3128 и через пробел пишем transparent


Спасибо, все заработало и пользователи локалки возрадовались! :)
Спасибо сказали: