Кэширующий анонимный прозрачный прокси сервер Squid

    Squid — это мощный пакет, реализующий проксирование проходящих через него запросов, имеет огромный набор возможностей. В локальной сети чаще всего его используют как прозрачный кэширующий прокси. Настроим по порядку 3 основные возможности squid.

1. Для начал устанавливаем squid (для Debian 6)

apt-get install squid3
apt-get install squid3

2. Файл с настройка squid.conf лежит в /etc/squid3/. Содержит он около 5,5 тысяч строк. Но не все так страшно, основная масса этого файла — это подробные комментарии к настройкам. Как удобнее внести изменения в файл выбирать Вам. Можно избавиться от всего лишнего в файле таким способом

# переходим в папку squid
cd /etc/squid3
# делаем резервную копию файла с настройками
cp squid.conf squid.conf_backup
# получаем из squid.conf_backup чистый файл с настройками без комментариев в squid.conf
cat squid.conf_backup | egrep -v '^#|^$' > squid.conf
# переходим в папку squid
cd /etc/squid3
# делаем резервную копию файла с настройками
cp squid.conf squid.conf_backup
# получаем из squid.conf_backup чистый файл с настройками без комментариев в squid.conf
cat squid.conf_backup | egrep -v '^#|^$' > squid.conf

и получить «голый» файл с настройка, следующего содеражания

acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl SSL_ports port 443
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 CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
coredump_dir /var/spool/squid3
refresh_pattern ^ftp:        1440    20%    10080
refresh_pattern ^gopher:    1440    0%    1440
refresh_pattern -i (/cgi-bin/|\?) 0    0%    0
refresh_pattern .        0    20%    4320
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl SSL_ports port 443
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 CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
coredump_dir /var/spool/squid3
refresh_pattern ^ftp:        1440    20%    10080
refresh_pattern ^gopher:    1440    0%    1440
refresh_pattern -i (/cgi-bin/|\?) 0    0%    0
refresh_pattern .        0    20%    4320

Останется внести лишь необходимые изменения в  строках. Второй вариант — это редактировать весь файл без его чистки. Что тоже довольно просто если уметь пользоваться поиском в редакторе vi. В этом случае у Вас в помощь останутся много полезных комментариев к настройкам.

Для поиска текста в редакторе vi нажимаем клавишу «/». Если Вы находитесь в режиме редактирования, нужно выйти из него для передачи команд редактору нажатием на «Esc». Получаем такую последовательность действий: «/» > «вводим поисковое слово» > «Enter».

Теперь редактируем файл, делаем основные настройки. Если нужных строк нет, то добавляем их или раскоментируем.

vi /etc/squid3/squid.conf
vi /etc/squid3/squid.conf
# Разрешаем доступ к прокси только из нашел сети
acl localnet src 172.16.0.0/24
http_access allow localnet
http_access allow localhost
# По умолчанию порт работы прокси 3128
# Так как у нас прокси будет прозрачным - указываем это
# а так же адрес интерфейса с портом на котором будет работать прокси
# на этот же порт будут перенаправляться запросы в iptables
http_port 172.16.0.1:3128 transparent
# Разрешаем доступ к прокси только из нашел сети
acl localnet src 172.16.0.0/24
http_access allow localnet
http_access allow localhost
# По умолчанию порт работы прокси 3128
# Так как у нас прокси будет прозрачным - указываем это
# а так же адрес интерфейса с портом на котором будет работать прокси
# на этот же порт будут перенаправляться запросы в iptables
http_port 172.16.0.1:3128 transparent

3. Обеспечиваем кэширование запросов

# Установка директории кэша и его настройка
# ufs - способ кэширования файлов на диске
# /var/spool/squid3 - папка кэша
# 5000 - размер кэша в мегабайтах
# 16 - количество папок 1 уровня в кэше
# 256 - количество папок 2 уровня в кэше
cache_dir ufs /var/spool/squid3 5000 16 256
# ограничим минимальный размер кэшируемого файла, чтобы облегчить работу жесткому диску
# либо можно потерять весь смысл кэша, если он будет медленно работать
minimum_object_size 2 KB
# ограничиваем и максимальный размер
maximum_object_size 61440 KB
# Установка директории кэша и его настройка
# ufs - способ кэширования файлов на диске
# /var/spool/squid3 - папка кэша
# 5000 - размер кэша в мегабайтах
# 16 - количество папок 1 уровня в кэше
# 256 - количество папок 2 уровня в кэше
cache_dir ufs /var/spool/squid3 5000 16 256
# ограничим минимальный размер кэшируемого файла, чтобы облегчить работу жесткому диску
# либо можно потерять весь смысл кэша, если он будет медленно работать
minimum_object_size 2 KB
# ограничиваем и максимальный размер
maximum_object_size 61440 KB

4. Squid, сконфигурированный по умолчанию, добавляет к http-запросу несколько своих заголовков. При этом, в первых двух заголовках передается клиентский ip (или даже несколько ip, в случае цепочки прокси). Если нам это ни к чему, ну например, не хотим светить внутренние ip своей локалки, то сделать squid анонимным очень просто

via off
forwarded_for delete
via off
forwarded_for delete

После завершения всех настроек, стоит проверить анонимность запросов на страничке http://checker.samair.ru Если все сделано правильно, то результатом будет надпись «Resume: You are using high-anonymous (elite) proxy».

На этом внесение изменений в файл закончены. В конечном итоге squid.conf должен выглядеть так

acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
 
acl localnet src 172.16.0.0/24  # RFC1918 possible internal network
 
acl SSL_ports port 443
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 CONNECT method CONNECT
 
http_access allow manager localhost
http_access deny manager
 
http_access deny !Safe_ports
 
http_access deny CONNECT !SSL_ports
 
http_access allow localnet
http_access allow localhost
 
http_access deny all
 
http_port 172.16.0.1:3128 transparent
 
hierarchy_stoplist cgi-bin ?
 
cache_dir ufs /var/spool/squid3 5000 16 256
minimum_object_size 2 KB
maximum_object_size 61440 KB
 
coredump_dir /var/spool/squid3
 
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320
 
via off
forwarded_for delete
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

acl localnet src 172.16.0.0/24  # RFC1918 possible internal network

acl SSL_ports port 443
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 CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow localnet
http_access allow localhost

http_access deny all

http_port 172.16.0.1:3128 transparent

hierarchy_stoplist cgi-bin ?

cache_dir ufs /var/spool/squid3 5000 16 256
minimum_object_size 2 KB
maximum_object_size 61440 KB

coredump_dir /var/spool/squid3

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

via off
forwarded_for delete

Для применения настроек останавливаем squid

service squid3 stop
service squid3 stop

Подготавливаем директорию кэша squid

squid3 -z
squid3 -z

Запускаем прокси

service squid3 start
service squid3 start

Если Вы не делали изменения настроек связанных с кэшем прокси, то можно выполнить одну единственную команду. Настройки будут приняты автоматически без перезапуска squid.

squid3 -k reconfigure
squid3 -k reconfigure

5. Остается лишь настроить прозрачность прокси. Это обеспечивает незаметную для пользователей локальной сети работу через прокси, т.е. нет необходимости настраивать пользователям программы для работы с прокси. Прозрачность обеспечивается простым перенаправлением http запросов с 80 порта на порт прокси сервера посредством фаервола iptables и включением режима прозрачного прокси в самом squid. Изменения в настройках squid мы сделали выше. Добавляем к правилам iptables еще одну строку:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Обязательно в параметре указывайте нужный интерфейс на котором будет работать прокси: -i eth0. Это избавит Вас от проблем с доступом к web серверу из интернета при наличии более одного активного интерфейса, если таковой будет в будущем на этом сервере. А так же ради безопасности прокси.

Ну и на всякий случай squid.conf в разных вариантах:

Исходный файл без изменений

Исходный файл чищеный от комментариев

Настроенный файл squid.conf

Настроенный файл squid.conf без комментариев

VN:F [1.9.22_1171]
Рейтинг: 9.7/10 (3 голоса(ов))
Кэширующий анонимный прозрачный прокси сервер Squid, 9.7 out of 10 based on 3 ratings

  1. Здравствуйте!
    У меня задача создать прозрачный прокси сервер Squid с оганичение скорости для качающих большие файлы.
    Подскажите в чём у меня ошибка конфига? https://yadi.sk/d/5Au0xP8oe8XHm
    Сильно не пинайте, я начинающий линуксовод, а скорость порезать надо срочно. Т.к. устал всем говорить, что не стоит качать музыку, фильмы и т.д. потому что вы вешаете весь интернет.

  2. Хорошая статья.
    Теперь только один вопрос: никто не в курсе, как завернуть трафик с микротика на сквид? А то уже больше месяца мучаюсь(

    • Привет! Если ещё актуально:
      в таблице «нат» (ip->firewall->nat), необходимо прописать правило перенаправления всего трафика на ip:порт прокси-сервера, в «action». Все правила не буду писать, я думаю, разберёшся, там несложно;-)!..

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *