LINUX.ORG.RU
ФорумAdmin

Squid+iptables на локальной машине


0

2

Подскажите куда копать.
Есть терминальный сервер(CentOS 6) с интернетом и есть пользователи этого сервера, которым которым нужно открыть доступ только к 2м IP.
Настроил Squid, работает нормально, если ручками прописать в настройки Firefox.
Пользователей у меня немало, вручную прописывать лениво. Решил завернуть весь http траф на squid.

iptables -t nat -A OUTPUT -p tcp -m multiport --dports 80,8000,8088,3128 -j DNAT --to-destination 127.0.0.1:3128

Теперь на запрещенных сайтах, как положено, отображается страница с Access Denied, а на «разрешенных» «The requested URL could not be retrieved»
Access log пуст.

squid.conf:
http_port 127.0.0.1:3128 transparent

acl localnet src 10.x.0.0/16 127.0.0.1
acl allowed_ip dst 10.x.0.0/16 10.x.x.0/24 

acl SSL_ports port 443		# https
acl SSL_ports port 563		# snews
acl SSL_ports port 873		# rsync
acl Safe_ports port 80		# http
acl Safe_ports port 21		# ftp
acl Safe_ports port 443		# https
acl Safe_ports port 70		# gopher
acl Safe_ports port 210		# wais
acl Safe_ports port 1025-65535	# unregistered ports
acl Safe_ports port 280		# http-mgmt
acl Safe_ports port 488		# gss-http
acl Safe_ports port 591		# filemaker
acl Safe_ports port 777		# multiling http
acl Safe_ports port 631		# cups
acl Safe_ports port 873		# rsync
acl Safe_ports port 901		# SWAT
acl Safe_ports port 22		# ssh
acl purge method PURGE
acl CONNECT method CONNECT

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet allowed_ip
http_access deny all

access_log /var/log/squid/access.log squid

refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern -i (/cgi-bin/|\?) 0	0%	0
refresh_pattern (Release|Packages(.gz)*)$	0	20%	2880
refresh_pattern .		0	20%	4320

acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
#upgrade_http0.9 deny shoutcast

acl apache rep_header Server ^Apache
#broken_vary_encoding allow apache

hosts_file /etc/hosts
cache deny allowed_ip


Если нужно разрешить доступ именно только к двум IP, то достаточно будет только iptables, разрешить продвижение пакетов (forward) в случае если адрес назначения один из тех двух.

-m multiport --dports 80,8000,8088,3128

Зачем так?

kostik87 ★★★★★ ()
Ответ на: комментарий от kostik87

Команду эту прогуглил. Поэтому так. Начальство сказало «нам надо прокси!». Вот, делаю. Сейчас надо корректно пустить web-траф на squid.

xoma ()
Ответ на: комментарий от kostik87

Не помогло. Блочится по-прежнему всё. Траф идёт куда надо, но access log пустой. И Squid работает не так, как указано в конфиге (опять же, если прокси вручную в браузере указать, работает нормально)

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:3128

xoma ()

что за стремное правило iptables?

iptables -t nat -A PREROUTING -s 10.1.2.0/24 ! -d 10.1.2.0/24 -i eth2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
smserg ()

1. Прозрачный прокси будет работать только для 80 порта. Откуда он узнает, что к запрашиваемому ресурсу обращались по 8080? Порта в запросе нет

2. Как оно будет работать, если ты трафик от локальных приложений(OUTPUT) заворачиваешь на squid, включая сам squid? Тебе скорее всго нужен -t nat -A POSTROUTING -s <LAN>/<mask>

selivan ★★★ ()
Последнее исправление: selivan (всего исправлений: 1)
Ответ на: комментарий от thexf

Нет, шлюз находится по адресу 10.х.х.1 К шлюзу доступа нет (не я ставил, поддерживает его сторонняя организация). Selivan, спасибо за пояснения. Где-то вычитал, что PREROUTING работать не будет, если машина локальная и обращается к шлюзу. Поэтому юзал OUTPUT: если верить тому, что нашёл в гугле, у многих так работает...

xoma ()
Ответ на: комментарий от xoma
iptables -t nat -A POSTROUTING -o eth0 -s 10.x.0.0/16 ! -d 0.0.0.0/0 -p tcp --dport 80 -j SNAT --to-source 127.0.0.1:3128
iptables -t nat -A PREROUTING -s 10.x.x.0/24 ! -d 10.x.x.0/16 -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

Попробовал это. Не уходит трафик сквиду.

xoma ()
Ответ на: комментарий от xoma

Прочитал man iptables, вроде всё правильно делаю:

iptables -t nat -A OUTPUT -p TCP --dport 80 -j REDIRECT --to-ports 3129

Теперь сквид. Access log:

1395736885.236      0 10.x.x.55 TCP_DENIED/504 1818 GET http://10.x.x.16/favicon.ico - NONE/- text/html
1395736885.236      1 10.x.x.55 TCP_MISS/504 1924 GET http://10.x.x.16/favicon.ico - DIRECT/10.x.x.16 text/html
1395736885.237      3 10.x.x.55 TCP_MISS/504 2030 GET http://10.x.x.16/favicon.ico - DIRECT/10.x.x.16 text/html
1395736890.227      0 10.x.x.55 TCP_DENIED/504 1864 GET http://10.x.x.16/Web/CommonEhr.mvc/Index/Dispensary - NONE/- text/html
1395736890.228      2 10.x.x.55 TCP_MISS/504 1970 GET http://10.x.x.16/Web/CommonEhr.mvc/Index/Dispensary - DIRECT/10.x.x.16 text/html
1395736890.229      3 10.x.x.55 TCP_MISS/504 2076 GET http://10.x.x.16/Web/CommonEhr.mvc/Index/Dispensary - DIRECT/10.x.x.16 text/html

xoma ()
Ответ на: комментарий от xoma

Чтобы использовать прозрачный прокси, надо на шлюзе редиректить исходящий траффик на 80 порт на сквид. Если доступа к настройкам шлюза нет, не прокатит. Можно сделать шлюзом сквид, а уже на нём указать реальный шлюз и пускать трафик от остальных машин через NAT.

selivan ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.