среда, 23 сентября 2009 г.

Простой Proxy-сервер на базе Ubuntu Linux 9.04 и Squid 3.0

Задача:

Сделать прокси сервер на базе 32-разрядной Ubuntu Linux 9.04 Desktop с авторизацией по логину и паролю, используя squid 3.0, с настройкой фаервола для защиты из вне.

Необходимый инвентарь:

1) Операционная система Ubuntu Linux 9.04 (http://www.ubuntu.com/getubuntu/download)

2) Пакет squid3_3.0.STABLE8-3+lenny2_i386.deb (http://packages.debian.org/lenny/i386/squid3/download)

3) Пакет squid3-common_3.0.STABLE8-3+lenny2_all.deb (http://packages.debian.org/lenny/all/squid3-common/download)

4) Пакет mini-httpd_1.19-8_i386.deb (http://packages.debian.org/lenny/i386/mini-httpd/download)

Необходимые команды:

1) Перезапуск squid: /etc/init.d/squid restart

2) Получение прав администратора (root) в Ubuntu 9.04: sudo -s -H

3) Запуск текстового редактора Gedit с открытием файла: gedit <имя файла>

4) Добавление нового пользователя и его пароля для авторизации на прокси сервере squid: htpasswd <имя файла, где хранятся логины и пароли> <имя нового пользователя>
<пароль нового пользователя>
<повтор пароля нового пользователя>

5) Изменение пароля пользователя для авторизации на прокси сервере squid:
htpasswd <имя файла, где хранятся логины и пароли> <имя пользователя> <новый пароль пользователя>

6) Удаление пользователя для авторизации на прокси сервере squid: удаление строки пользователя из файла, где хранятся логины и пароли, с помощью любого текстового редактора (например, gedit)

7)

8) Выполнение shell-скрипта: sh <имя файла-скрипта>

9) Вывод сведений о сетевых интерфейсах : ifconfig

10) Создание папки: mkdir <имя папки>

Использованные ссылки:

1) Получение пакетов .deb: http://packages.debian.org

2) Статья Забудкина Л. М. "Настройка Squid для начинающих (squid proxy acl)": http://www.opennet.ru/base/net/squid_inst.txt.html

3) Статья "Squid Web Proxy Cache": http://unixdocs.rags.ru/squid.html

4) Тема "Squid+авторизация пользователей" на форуме linuxforum.ru: http://linuxforum.ru/index.php?showtopic=58134

5) Руководство по iptables (Iptables Tutorial 1.1.19): http://www.opennet.ru/docs/RUS/iptables/

6) Статья "Squid установлен ?": http://www.asmodeus.com.ua/library/soft/squid/squid3.htm

Пути к ключевым файлам:

1) Полный путь к конфигурационному файлу Squid 3.0: /etc/squid3/squid.conf

2) Полный путь к модулю авторизации Squid 3.0: /usr/lib/squid3/ncsa_auth

3) Полный путь к файлу, содержащему команды, которые должны выполняться при запуске Ubuntu: /etc/rc.local

4) Полный путь к файлу-скрипту, выполняющемуся при загрузке Ubuntu: /etc/rc.local

5) Полный путь к файлу настройки сетевых интерфейсов: /etc/network/interfaces 

Часть 1. Установка Ubuntu Linux 9.04 Desktop

1) Вставляем диск Ubuntu Linux 9.04 Desktop в дисковод оптических дисков (CD-ROM) и в BIOS ставим его в качестве первого устройства загрузки.

2) На этапе выбора диска/раздела для установки Ubuntu выбираем вариант ручной разметки диска. Первым разделом создаем swap-раздел (раздел подкачки) размером в два раза большим размера ОЗУ, вторым - раздел EXT3 с точкой монтирования "/", третьим - раздел EXT3 с точкой монтирования "home".

Часть 2. Установка Squid 3.0 и настройка авторизации

1) Скачиваем пакеты: 1) squid3_3.0.STABLE8-3+lenny2_i386.deb ; 2) squid3-common_3.0.STABLE8-3+lenny2_all.deb ; 3) mini-httpd_1.19-8_i386.deb. Устанавливаем сначала второй пакет, затем - первый, затем - третий.

2) Открываем терминал (Applications\Accessories\Terminal) Ubuntu. Получаем права администратора - вводим: sudo -s -H
Далее вводим пароль текущего пользователя.

3) Редактируем конфигурационный файл Squid 3.0 - вводим: gedit /etc/squid3/squid.conf
Переходим в начало файла и пишем там следующий текст:
http_port 3128
auth_param basic program /usr/lib/squid3/ncsa_auth /usr/local/squid/passwd
acl users proxy_auth REQUIRED
http_access allow users
http_access deny all

где:
3128 - порт Squid, на который будут идти пакеты
/usr/local/squid/passwd - путь к файлу, хранящему логины и пароли для авторизации на Squid

Сохраняем файл и закрываем текстовый редактор.

4) Создаем папку /usr/local/squid/ - в терминале пишем: mkdir /usr/local/squid/
Создаем файл, в котором будут храниться логины и пароли, и сразу первую учетную запись пользователя интернета - в терминале пишем: htpasswd -с /usr/local/squid/passwd vasya
Далее вводим пароль для пользователя vasya и подтверждаем его.
При необходимости добавляем еще одного пользователя: htpasswd /usr/local/squid/passwd dima
Далее вводим пароль для пользователя dima и подтверждаем его. И так далее.

5) Перезапускаем squid - в терминале пишем: /etc/init.d/squid restart
Если после нескольких секунд ожидания появляются две строки [OK], все получилось.

Часть 2. Настройка встроенного фаервола IPtables

1) Открываем терминал (Applications\Accessories\Terminal) Ubuntu. Получаем права администратора - вводим: sudo -s -H
Далее вводим пароль текущего пользователя.

2) Запускаем текстовый редактор - в терминале пишем: gedit /usr/local/squid/ipt_rules 
В открывшемся окне редактора пишем shell-скрипт для настройки IPtables:

#!/bin/sh
# Переменные:
# Сетевой интерфейс, смотрящий с сеть провайдера (Интернет)
inet_iface=ppp0
# Сетевой интерфейс, смотрящий в локальную сеть
local_iface=eth0
# Локальная сеть
local_network=192.168.0.0/24
# IP-адрес сервера в локальной сети
local_ip=192.168.0.200
# Порт Squid
squid_port=3128
# Порт сервера, на который будут идти запросы из локальной сети
local_port=80

iptables=/sbin/iptables

# ----------Установка политик по умолчанию-------------

# Очищаем все цепочки и устанавливаем политику по умолчанию в соответствии с принципом "Все, что не разрешено - запрещено"
$iptables -F INPUT
$iptables -F FORWARD
$iptables -F OUTPUT
$iptables -t nat -F

$iptables -P INPUT DROP
$iptables -P FORWARD DROP
$iptables -P OUTPUT DROP

#У пакетов, идущих к серверу из локальной сети на порт прокси сервера, меняем порт назначения на порт squid

$iptables -t nat -I PREROUTING -i $local_iface -s $local_network -d $local_ip -p tcp --dport $local_port -j DNAT --to-destination $local_ip:$squid_port

# Разрешаем входящие пакеты из локальной сети на порт squid

$iptables -A INPUT -i $local_iface -s $local_network -p tcp --dport $squid_port -j ACCEPT

# Разрешаем исходящие пакеты в Интернет

$iptables -A OUTPUT -o $inet_iface -j ACCEPT

# Скидываем все пакеты, пришедшие с интерфейса, смотрящего в Интернет с адресов локальных сетей классов A,B,C,D,E и адресов, не использующихся в Интернете

$iptables -A INPUT -i $inet_iface -s 172.16.0.0/12 -j DROP
$iptables -A INPUT -i $inet_iface -s 192.168.0.0/16 -j DROP
$iptables -A INPUT -i $inet_iface -s 10.0.0.0/8 -j DROP
$iptables -A INPUT -i $inet_iface -s 224.0.0.0/3 -j DROP
$iptables -A INPUT -i $inet_iface -s 127.0.0.0/8 -j DROP
$iptables -A INPUT -i $inet_iface -s 0.0.0.0/8 -j DROP

# Разрешаем входящие пакеты из Интернета, относящиеся к уже установленным соединениям,
$iptables -A INPUT -i $inet_iface -m state --state ESTABLISHED -j ACCEPT

# У пакетов, идущих от сервера в локальную сеть с порта squid, меняем порт на порт сервера

$iptables -t nat -I POSTROUTING -o $local_iface -d $local_network -p tcp --sport $squid_port -j SNAT --to-source $local_ip:$local_port

# Разрешаем исходящие пакеты в локальную сеть с порта сервера

$iptables -A OUTPUT -o $local_iface -d $local_network -p tcp --sport $squid_port -j ACCEPT

3) Сохраняем файл и закрываем окно текстового редактора.

4) Делаем так, чтобы наш скрипт настройки iptables выполнялся при старте системы - в терминале пишем: gedit /etc/rc.local
в открывшемся файле после первой строки "#!/bin/sh -e" пишем:
sh /usr/local/squid/ipt_rulesДолжно получиться так:#!/bin/sh -e
sh /usr/local/squid/ipt_rules
...
5) Сохраняем файл и закрываем окно текстового редактора.

Примечание.

Если встроенный в Ubuntu 9.04 менеджер сети (network manager) все время мешает нам, сбивая конфигурацию сетевых интерфейсов, его можно удалить и настроить сеть вручную.
Для удаления network manager в терминале, получив права root, пишем: aptitude purge network-manager
Для настройки сетевых интерфейсов вручную в терминале пишем: gedit /etc/network/interfaces
В открывшемся файле находим строку, похожую на "auto eth0" (eth0 - имя сетевого интерфейса, смотрящего в локальную сеть. У Вас оно может быть другое.) , и после нее на следующей строке пишем:
iface eth0 inet static
address 192.168.0.200
netmask 255.255.255.0

где:
192.168.0.200 - IP-адрес прокси сервера в локальной сети
После редактирования сохраняем файл и закрываем редактор gedit.