Pull to refresh

SQUID для ленивых. Облегчаем себе жизнь

System administration
Добрый день, уважаемые Хабрапользователи, в связи со сложившейся тенденцией к изучению всем известного прокси сервера SQUID, я бы хотел предложить вариант некой типовой настройки небольшой связки, которая будет полезная для начинающих системных администраторов небольших контор, ну или просто для тех, кому лень разбираться. Данная статья ни в коем случае не претендует на глобальный мануал на все случаи жизни — как я уже и сказал это всего лишь обобщенный частный случай.

Ну, давайте обсудим с чего мы начинаем, у нас есть сервер в моем случае это свежеустановленная Ubuntu Server с выбранными параметрами LAMP и SSH (специально с целью написания статьи):

root@testgateway:~# uname -a
Linux testgateway 2.6.32-33-generic-pae #70-Ubuntu SMP Thu Jul 7 22:51:12 UTC 2011 i686 GNU/Linux

root@testgateway:~# lsb_release -a
Distributor ID:	Ubuntu
Description:	Ubuntu 10.04.3 LTS
Release:	10.04
Codename:	lucid

root@testgateway:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda6             5.5G  723M  4.6G  14% /
none                  190M  172K  189M   1% /dev
none                  194M     0  194M   0% /dev/shm
none                  194M   44K  194M   1% /var/run
none                  194M     0  194M   0% /var/lock
none                  194M     0  194M   0% /lib/init/rw
/dev/sda7             7.3G  189M  6.7G   3% /var
/dev/sda1              92M   21M   66M  25% /boot

Вот с такими вот параметрами, заведомо я подготовил 2 сетевых интерфейса, не удивляйтесь что у обоих интерфейсы из локальных диапазонов, просто машинка установлена внутри xen.

root@testgateway:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:16:36:73:84:48  
          inet addr:192.168.0.237  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::216:36ff:fe73:8448/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1361 errors:0 dropped:0 overruns:0 frame:0
          TX packets:720 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:111090 (111.0 KB)  TX bytes:107285 (107.2 KB)
          Interrupt:32 Base address:0xa000 

eth1      Link encap:Ethernet  HWaddr 00:16:36:64:1c:bd  
          inet addr:192.168.122.51  Bcast:192.168.122.255  Mask:255.255.255.0
          inet6 addr: fe80::216:36ff:fe64:1cbd/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:68 errors:0 dropped:0 overruns:0 frame:0
          TX packets:82 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8170 (8.1 KB)  TX bytes:10923 (10.9 KB)
          Interrupt:36 Base address:0xe100 

lo        Link encap:Local 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:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Здесь интернет будет идти от eth1, локальная сеть, т.е. я буду находится со стороны eth0.
Естественно рекомендуется, провести:
root@testgateway:~# apt-get update
root@testgateway:~# apt-get upgrade

Следующим шагом мы должны поставить дополнительные пакеты для нашего прокси сервера, как наверное Вы догадались мы будем использовать связку SQUID+SAMS, но настраивать будем типичный случай, авторизация по IP, и для облегчения себе жизни заворот всех пользователей на порт прокси сервера. Эту связку потом можно будет с легкостью настроить на авторизацию по логин/паролю, и даже связать с AD.
Необходимыми пакетами для нашего случая мы установим так:

root@testgateway:~# apt-get install libpcre3 libpcre3-dev libmysqlclient15-dev php5-ldap php-fpdf squid squidguard gcc make php5-gd

Если вдруг будет мало доустановим еще. Следующим шагом будет скачивание и установка самого SAMS, скачиваем стабильную версию 1.0.5, есть еще SAMS 2.0, но как-то попробовал, еще слишком много багов было.
root@testgateway:~# wget http://sams.perm.ru/download/sams-1.0.5.tar.bz2

Далее, распаковываем и устанавливаем его:
root@testgateway:~# bunzip2 sams-1.0.5.tar.bz2 && tar -xpf sams-1.0.5.tar && rm sams-1.0.5.tar
root@testgateway:~# cd sams-1.0.5/
root@testgateway:~# ./configure – -with-httpd-locations=/var/www
root@testgateway:~# make
root@testgateway:~# make install

После этого в принципе не должно получится ошибок, и можно смело продолжать, если есть какие-то ошибки, значит следует вчитаться, и доустановить то чего не хватает.
Далее копируем скрипт запуска sams, к нам на сервер

root@testgateway:~/sams-1.0.5# cp ./etc/sams.debian /etc/init.d/samsd
root@testgateway:~/sams-1.0.5# update-rc.d samsd defaults
 Adding system startup for /etc/init.d/samsd ...
   /etc/rc0.d/K20samsd -> ../init.d/samsd
   /etc/rc1.d/K20samsd -> ../init.d/samsd
   /etc/rc6.d/K20samsd -> ../init.d/samsd
   /etc/rc2.d/S20samsd -> ../init.d/samsd
   /etc/rc3.d/S20samsd -> ../init.d/samsd
   /etc/rc4.d/S20samsd -> ../init.d/samsd
   /etc/rc5.d/S20samsd -> ../init.d/samsd

Далее чуть-чуть настроим MySQL. Нужно загрузить таблицы, и организовать доступ к ним:

root@testgateway:~/sams-1.0.5# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 5.1.41-3ubuntu12.10 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> GRANT ALL ON squidctrl.* TO sams@localhost IDENTIFIED BY "maxim";
Query OK, 0 rows affected (0.02 sec)

mysql> GRANT ALL ON squidlog.* TO sams@localhost IDENTIFIED BY "maxim";
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
mysql> exit

root@testgateway:~/sams-1.0.5# cd ./mysql
root@testgateway:~/sams-1.0.5/mysql# mysql -u root -p < sams_db.sql 
root@testgateway:~/sams-1.0.5/mysql# mysql -u root -p < squid_db.sql 

Далее чуть-чуть правим файл, /etc/sams.conf:
MYSQLPASSWORD=maxim

Надеюсь все догадались, что это пароль который мы вставляли в команды Mysql.
Наконец, дошла очередь и до настройки самого SQUIDа, но не думайте, что это будет очень сложно, приготовьтесь, что всю грязную работу в будущем за вас будет делать SAMS.
Открываем файл настройки, и изменим там несколько строк:
# Squid normally listens to port 3128
http_port 192.168.0.237:3128 transparent

maximum_object_size_in_memory 50 MB

cache_dir ufs /var/spool/squid 3000 32 512
Параметры кэша подбираются индивидуально под каждый случай.

maximum_object_size 50 MB

url_rewrite_program /usr/local/bin/samsredir

Теперь настраиваем обработку лога access.log
Открываем crontab, лучше это делать с помощью crontab -e, и добавляем туда следующую строчку:
*/1 * * * * /usr/local/bin/sams

Далее создадим директории для кэша сквида:
root@testgateway:~/sams-1.0.5/mysql# squid -z
2011/10/13 12:40:12| Creating Swap Directories

и стартуем squid.
root@testgateway:~/sams-1.0.5/mysql# /etc/init.d/squid start

Проверяем:
root@testgateway:~/sams-1.0.5/mysql# ps aux | grep proxy
proxy    19158  0.2  1.2   7696  4876 ?        Ss   12:40   0:00 /usr/sbin/squid -N -D
proxy    19159  0.0  0.4   5080  1636 ?        Ss   12:40   0:00 (samsredir)
proxy    19160  0.0  0.4   5080  1640 ?        Ss   12:40   0:00 (samsredir)
proxy    19161  0.0  0.4   5080  1636 ?        Ss   12:40   0:00 (samsredir)
proxy    19162  0.0  0.4   5080  1636 ?        Ss   12:40   0:00 (samsredir)
proxy    19163  0.0  0.4   5080  1640 ?        Ss   12:40   0:00 (samsredir)
proxy    19164  0.0  0.0   1616   316 ?        Ss   12:40   0:00 (unlinkd)

Если картина идентична, то значит все запустилось хорошо.
Далее идем настраивать наш SAMS, это уже делается через веб-интерфейс, вбиваем в браузере адрес нашего прокси, у нас он был 192.168.0.237/sams, и видим страницу приглашения ввод и пользователя и пароля.
Но прежде чем мы это сделаем мы должны исправить небольшой баг этой системы, а именно в связи с выходом PHP5.3, немного некорректно отображаются страницы настройки, вернее совсем не отображаются. Но это операция не сложная, просто правим два файла:
/usr/local/share/sams/src/configtray.php
/usr/local/share/sams/src/webconfigtray.php
переименовываем GetHostName в GetHostNameSams и все заработало.
Дальше я буду на примере маленьких скриншотов показывать, что и где нужно править, чтобы все работало, как нам надо. Приглашение, по умолчанию логин: Admin, пароль: qwerty

image

Следующий шаг, настройка веб-интерфейса, выставляем следующие параметры:

image

Окно администрирование SAMS не влезло в ширину экрана, поэтому опишу текстом, авторизацию устанавливаем IP, файл перенаправления запроса 192.168.0.237/sams/icon/classic/blank.gif, путь к каталогу, где лежат файлы запрета запроса 192.168.0.237/sams/messages, редиректор встроенный SAMS, и последнее сохранять данные о трафике в базе за последние 12 месяцев.
Далее переходим к настройке шаблонов, удаляем все, чтобы нам ничего не мешало и создаем новый.

image

Далее добавляем пользователя и связываем его c нашим шаблоном

image

Далее запускаем демон samsd: /etc/init.d/samsd start. И реконфигурируем SQUID.
После этого, если пользователю прописать прокси в браузере все начинает отлично работать, но так как нам это не удобно будет делать на всех пользователях, так что применим классическую админскую хитрость, заворот HTTP трафика на порт прокси сервера.

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

Вот так вот у нас получился прокси, с удобным веб-интерфейсом, возможно кто-то меня обвинит в плагиате, мол уже 100 раз это все было, но сразу хочется отметить, что как я и сказал в самом начале статьи, этот вариант настройки прокси для ленивых, т.к. практически все вкусности SQUID, такие как ограничения по трафику, создание списков доступа, разрешенных доменов, запрет на скачивание, можно получить из веб-настройки. А также мы легко получаем систему просмотра статистики, которой может воспользоваться любой пользователь Вашей организации, зайдя на страничку под своим логином. Конечно остается сложность с учетом трафика торрентов, почты и другого не 80 порта, и на это тоже есть свое решение, которое очень хорошо впишется в общую картину.
Если буду формироваться вопросы, милости прошу, обсудим, все остальные тонкости настройки
Tags:squidsamstrafficubuntu server
Hubs: System administration
Total votes 39: ↑32 and ↓7+25
Views155K

Popular right now

Top of the last 24 hours