+0 000-000-00-00

Установка и настройка прокси-сервера squid на ubuntu + apt-cacher на ubuntu

Была наращена оперативка до 8 ГБ и установлена ubuntu 14.04 LTS. Ниже описаны шаги, которые потребовались для настройки этого компьютера в качестве раздающего интернет.

1. Устанавливаем ubuntu 14.04 LTS desktop

2. Проверяем настройки сетевых интерфейсов командой ifconfig

Видим, что в локалку смотрит интерфейс eth1, а наружу - eth2

root@seven:~# ifconfig
eth1      Link encap:Ethernet 
          inet addr:172.18.4.7  Bcast:172.18.4.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6594461 errors:0 dropped:379 overruns:0 frame:0
          TX packets:5722443 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:772481303 (772.4 MB)  TX bytes:3620715145 (3.6 GB)
          Interrupt:23 Base address:0x6000

eth2      Link encap:Ethernet 
          inet addr:176.192.35.xxx  Bcast:176.192.35.xxx  Mask:255.255.255.252
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2838916 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2003563 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2761775399 (2.7 GB)  TX bytes:383081200 (383.0 MB)
          Interrupt:16 Base address:0xb800

lo        Link encap:Локальная петля (Loopback) 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:220678 errors:0 dropped:0 overruns:0 frame:0
          TX packets:220678 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:74028571 (74.0 MB)  TX bytes:74028571 (74.0 MB)

В Ubuntu 12.04, в отличие от предыдущих версий, удалось  настроить сеть при помощи Network Manager, без ручного редактирования файла /etc/network/interfaces (как настраивать сеть через этот файл написано много где, например, здесь)

После настройки сетевых интерфейсов будет доступ в интернет с машины, где будет прокси.


3. Поднимаем NAT с помощью iptables

Сброс правил в IPTABLES. Обязательный первый шаг. Просто iptables -F не помогает.

Процесс раздачи интернета через iptables простой и описан здесь. Коротко шаги:

Раздача Интернета в локальную сеть (ICS: Internet Connection Sharing)

Для организации совместного доступа в Интернет с помощью общего доступа к подключению Интернета на сервере должна быть одна сетевая карта для подключения к внутренней сети и еще одна карта или модем для подключения к Интернету.

На сервере

Для настройки общего доступа к подключению Интернета необходимо выполнить на сервере указанные ниже действия.

Исходные данные: Оба компьютера соединены по сети. На сервере установлено две сетевые карты:

  • eth0 - к ней подключен интернет;
  • eth1 - к ней подключена локальная сеть.

Настройте вторую карту (eth1) так:

  • IP: 192.168.0.1
  • Netmask: 255.255.255.0

Это можно сделать вручную или используя терминал:

sudo ifconfig eth1 192.168.0.1 netmask 255.255.255.0
sudo ifconfig eth1 up

Разрешите направление пакетов. Чтобы сделать это, отредактируйте /etc/sysctl.conf. Откройте сам файл командой:

sudo gedit /etc/sysctl.conf

А затем вставьте следующую строчку:

net.ipv4.ip_forward=1

Для того, чтобы применить это правило до перезагрузки выполните:

sysctl -w net.ipv4.ip_forward="1"

Затем добавляем правило для NAT:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Где eth0 название вашего интерфейса через который выходите в интернет. Измените его если используете другой интерфейс (напрмер ppp0) тогда команда будет выглядит иначе:

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Этот шаг не обяателен, т.к. в новых дистрибутивах уже есть dnsmasq-base, и dnsmasq будет ругаться, что 53 порт занят.
Установите и запустите пакет для раздачи пакетов по сети:

sudo apt-get install dnsmasq

Или, вы можете использовать DNS провайдера.

Чтобы NAT работал после перезагрузки сохраняем настройки iptables в файл:

iptables-save > /etc/iptables.up.rules

И добавляем в конец файла:

sudo gedit /etc/network/interfaces

Эту строчку, для автоматической подгрузки правил:

pre-up iptables-restore < /etc/iptables.up.rules

Также в этот файл добавляем правила роутинга:

up route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1
up route add -net 0.0.0.0 netmask 255.255.255.255 dev eth0

На клиентском компьютере

Установите на втором компьютере:

  • IP: 192.168.0.2
  • Netmask/Маска: 255.255.255.0
  • Gateway/Шлюз: 192.168.0.1
  • DNS: 192.168.0.1

Второй компьютер теперь должен быть подключён к интернету.

Способ ниже использовал раньше, сейчас сделал как выше написано.

Для открытия NAT под рутом даем команды:

iptables -t nat -A FORWARD -s 172.18.4.0/24 -i eth1 -o eth2 -m conntrack --ctstate NEW -j ACCEPT
iptables -t nat -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A FORWARD -s 172.18.4.0/24 -i eth1 -o eth2 -m conntrack --ctstate NEW -j ACCEPT
iptables -t nat -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT<br>iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE

Для перенаправления всего http трафика на squid задаем правила:

iptables -t nat -A FORWARD -s 172.18.4.0/24 -i eth1 -o eth2 -m conntrack --ctstate NEW -j ACCEPT
iptables -t nat -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A FORWARD -s 172.18.4.0/24 -i eth1 -o eth2 -m conntrack --ctstate NEW -j ACCEPT
iptables -t nat -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT
Проверяем, что все работает как надо и записываем правила, чтобы после перезагрузки они загружались.

iptables-save >/etc/iptables.sav

Добавляем в rc.local перед exit 0

iptables-restore
 

4. Установка squid3

Тут все хорошо документировано. Вкратце так

apt-get install squid

после установки открываем файл /etc/squid/squid.conf и приступаем к настройке

 
1
nano /etc/squid/squid.conf

Так как мы будем настраивать прозрачный прокси (на клиентских машинах нам не нужно будет указывать в настройках прокси сервер), в строке http_port 3128, допишем transparent

http_port 3128 transparent

раскоментируем строку, указывающую путь к кэшу и настроим как показано ниже

cache_dir ufs /var/spool/squid 4096 32 256

указываем настройки сети в которой будет работать прокси, для этого раскоментируем строку в которой указана ваша подсеть

acl localnet src 172.18.4.0/24 # RFC1918 possible internal network 

разрешаем доступ к прокси из внутренней сети

http_access allow localnet

указываем лимит использования памяти

memory_pools on
memory_pools_limit 50 MB

50 мб. вполне достаточно

в случае возникновения ошибок, чтобы видеть их на русском языке, указываете следующее

error_directory /usr/share/squid/errors/Russian-koi8-r

сохраняем файл, закрываем, перестраиваем кэш

/usr/sbin/squid -z

перезапускаем squid

service squid3 restart

Готово! Чтобы проверить, нужно указать в настройках браузера клиентского компьютера, прокси 172.18.4.7 и порт 3128. Если все работает нормально, движемся далее…

Squid3 (Очистка кеша)

/etc/init.d/squid3 stop
rm -r /var/spool/squid3/*
/usr/sbin/squid3 -z
/etc/init.d/squid3 start

 Нашел еще один совет по очистке кеша командой

service squid3 stop<br>find  /var/spool/squid3 -type f -exec rm {} \;<br>service squid3 start

Про squid и ssl

Проверка версии и конфигурации squid

$ /usr/sbin/squid3 -v
С фильтром вывода примерно так

 
1
squid3 -v | grep ssl

По умолчанию в ubuntu squid3 собран без поддержки ssl

http://www.opennet.ru/openforum/vsluhforumID12/5890.html
http://thelinuxforce.org/article/13
Сборка Squid3 с поддержкой ssl в Ubuntu server
и еще http://thejimmahknows.com/squid-3-1-caching-proxy-with-ssl/

А вот здесь можно брать готовую сборку сквид3 с ssl через спец. репозиторий, что не приводит к необходимости пересобирать сквид после каждого обновления.

http://www.mydlp.com/now-squid3-ssl-packages-in-mydlp-repository/

 

Анализируем логи при помощи lightsquid

Как установить lightsquid описано много где в интернете.

Здесь напишу "узелки на память"

Так как апач у меня установлен на сервере, а свид на прокси, то нужно давать права доступа на чтение логов для скрипта lightparser.pl

По умолчанию squid создает логи с правами 640. Пока не разобрался, как сделать правильно доступ к логам с сервера, тупо сделал записи в crontab

30 11 * * * root chmod 0644 /var/log/squid3/access.log
31 11 * * * root chmod 0644 /var/log/squid3/access.log.1

Это, конечно, неправильно, но как включить сервер в группу прокси пока не разобрался.

Ссылка по теме

Установка apt-cacher-ng

apt-get install apt-cacher-ng

В /etc/apt-cacher-ng/acng.conf интересны следующие строчки:

  • ExTreshold: 4 - устаревание кеша, в днях. Если файл ни разу не запрашивался дольше указанного времени, он будет удален. Я увеличил до 30 дней
  • PassThroughPattern: .*:443 - нужно указать это, чтобы не было проблем с HTTPS репозиториями (об этом ниже).

В остальном стандартный конфиг делает следующее:

  • запускает веб-сервер для всего мира на 0.0.0.0:3142
  • хостит страничку и информацией о сервисе и статистикой на http://myserver.ru:3142
  • хранит кеши в /var/cache/apt-cacher-ng

Также нужно отредактировать файл /etc/apt-cacher-ng/backends_ubuntu, удалив из него лишние зеркала и поставив главное зеркало в начало, иначе рискуете однажды получить 403 ошибку при установке одного из пакетов (об этом чуть ниже). У меня файл такой:

http://mirror.yandex.ru/ubuntu/
http://archive.ubuntu.com/ubuntu/

Подробности ремапинга можно почитать в документации. В 2 словах: когда клиент запрашивает пакет, apt-cacher-ng скачивает его не с репозитория, который прописан на клиенте, а с первого зеркала, указанного в файле ремапинга. Второй репозиторий по факту никогда не выбирается.

После этого можно перезапустить сервис:

service apt-cacher-ng restart

Проверяем, что он поднялся, должен открыться урл http://myserver.ru:3142.

Настройка клиентов

Для проверки доступности Apt-cacher-ng в локальной сети осуществляем подключение к нему в браузере со стороны клиента по URL

  http://<имя сервера>:3142/                     - страница с указаниями по настройке клиентов
  http://<имя сервера>:3142/acng-report.html     - страница со отчетом о работе демона
     где <имя сервера> - имя или IP рабочей станции на которой работает apt-cacher-ng

Для подключения клиентов к хранилищам через прокси-сервер Apt-cacher-ng

  • изменяем настройки доступа клиентов к хранилищам пакетов
  вариант №1 с изменением файла /etc/apt/sources.list
  добавляем в файл /etc/apt/sources.list строки вида
  deb http://<имя сервера>:3142/ftp.debian.org/debian stable main contrib non-free
  вариант №2 без изменения файла /etc/apt/sources.list
  создаем например файл /etc/apt/apt.conf.d/01proxy со строкой
  Acquire::http { Proxy "http://<имя сервера>:3142"; };
  • обновляем индексы базы пакетов

Остальное подробно тут и тут
Чтобы удалить - см. команды тут

Какие файлы скопировать со старой установки

Для ускорения настройки желательно перед переустановкой (или при замене компьютера) скопировать следующие файлы

    Опубликовано

    Menu