Шлюз на Debian

Третий пост про Debian. Наверное, самый важный и объемный. Здесь постараюсь повторить последовательность действий по обустройству интернет-шлюза под управлением Debian 5.0.2 Lenny для нужд небольшой офисной сети.
Уже можно прочитать:
1. Зачем оно нам нужно?
2. Как установить?
В третьей части пропустим лирику и перейдем к делу =)

Примечание 1. Все нижеследующее явилось результатом нескольких дней поиска в Сети, поэтому на авторство отдельных инструкций не претендую.

После установки заходим в систему под root. Сразу же установим sudo и pppoeconf:

# apt-get install sudo pppoeconf

Установка будет произведена с того же диска, с которого инсталлировали саму систему. Соответственно CD нужно снова вставить в дисковод.

Теперь можно выйти из режима суперпользователя и всю дальнейшую настройку производить, войдя в систему под своей учетной записью, созданной при установке, используя sudo для административных команд:

# logout

Примечание 2. Выход из учетной записи root не является обязательным, но очень рекомендуется. Тем не менее, все последующие действия нужно производить с полномочиями суперпользователя, используя sudo или su. Дабы обратить на это внимание ставлю символ # в начал почти каждой команды.

Диск с системой теперь уже можно извлечь, больше он не потребуется.

Установим PPPoE подключение к Интернет, используя pppoeconf:

# pppoeconf

pppoeconf спросит имя пользователя и пароль, выданные провайдером, а также уточнит некоторые дополнительные параметры, в частности - необходимость устанавливать соединение автоматически при включении компьютера. Я как-то уже писал про настройку PPPoE в Ubuntu, никакой разницы тут нет.

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

# nano /etc/apt/sources.list

Здесь необходимо закомментировать (поставить # в начале строки) строку, указывающую на CD-диск с Debian'ом и добавить еще хотя бы один (там уже прописаны несколько) источник в конец списка:

deb http://http.us.debian.org/debian stable main contrib non-free

Примечание 3. Для редактирования конфигурационных файлов мне удобнее использовать редактор nano, поэтому везде указываю именно его. Для выхода из nano нужно нажать ctrl-x, а затем y, чтобы сохранить изменения, или n, чтобы отменить их. Можно использовать ctrl-w для поиска нужной фразы.

Обновляем списки репозиториев:

# apt-get update

Если все прошло успешно, можно обновить и саму систему:

# apt-get upgrade

Теперь необходимо отредактировать конфигурационный файл сетевых интерфейсов:

# nano /etc/network/interfaces

Примечание 4. В данном и подобных случаях будем иметь 4 сетевых интерфейса:
lo - loopback-интерфейс;
eth0 - смотрит в сторону ADSL-модема и настраивается по DHCP, имеет динамический адрес вида 192.168.0.x
eth1 - смотрит в сторону локальной сети, настраивается вручную, имеет статичный адрес вида 192.168.1.x
ppp0 - PPPoE-интерфейс, настраивается при помощи pppoeconf, имеет динамический адрес, выделяемый провайдером
Здесь и далее все настройки для данной конфигурации сети.

Сейчас нас интересует интерфейс eth1. настроим его, добавив в файл /etc/network/interfaces строки:

iface eth1 inet static
address 192.168.1.2
netmask 255.255.255.0
auto eth1

Сохраняем изменения и перезапускаем сеть:

# /etc/init.d/networking restart

Если все сделано правильно, то можно проверить доступность будущего шлюза из локальной сети, выполнив на любом другом компьютере:

ping 192.168.1.2

Примечание 5. При настройке подключения с помощью pppoeconf указали, что требуется автоподключение при загрузке системы, однако где-то на просторах Интернета мне попалась следующая рекомендация:
- создать файл с любым названием (например, autopppoe) в директории /etc/network/if-up.d/:

# nano /etc/network/if-up.d/autopppoe

- вписать в него следующее

#!/bin/sh
poff
pon dsl-provider

-установить права на доступ:

# chmod 711 /etc/network/if-up.d/autopppoe

Это, вроде как должно гарантировать автоматическое подключение PPPoE при загрузке компьютера.

На этом с настройкой сети пока закончим и перейдем к установке нужных пакетов.
Для начала поставим ssh и ddclent, чтобы получить доступ к серверу извне:

# apt-get install ssh ddclient

ddlient - клиентский модуль для использования DynDNS. Упоминал его тут. При установке потребуется указать свой логин и пароль в службе динамического DNS, а также имя зарегистрированного там хоста. Немного поправим его конфигурационный файл, "включив" его демон:

# nano /etc/default/ddclient

Найдем строку

run_daemon="false"

и заменим ее на

run_daemon="true"

Остается только перезапустить клиент:

# /etc/init.d/ddclient restart

Теперь можно подключиться к компьютеру при помощи ssh из любого места, где есть доступ в Интернет.

Примечание 6. Так как все же я далеко не "одмин", а просто "любопытный юзер", то прежде, чем править конфиги обычно делаю их копии, чего и всем советую. Для этого достаточно просто создать директорию в домашней папке

mkdir backup

и копировать в нее исходные конфигурационные файлы, например так:

# cp /etc/squid/squid.conf backup/squid.conf.bu

Просто совет =)

Установим DHCP-сервер, который также позволит переадресовывать DNS-запросы с компьютеров локальной сети:

# apt-get install dnsmasq

В принципе, сразу после установки все запросы уже должны начать переадресовываться. И, если нам не требуется DHCP, на этом вроде бы можно и закончить. Но, как показала практика еще при работе с Ubuntu Server, dnsmasq не будет ничего нормально делать, пока в диапазоне для DHCP не будет указан хотя бы один адрес. Поэтому все же включим DHCP-сервер, прописав нужный диапазон в файл

# nano /etc/dnsmasq.conf

Конфигурационный файл dnsmasq очень прост, поэтому пример конфигурации не привожу. Сохраняем изменения и перезапускаем DHCP-сервер:

# /etc/init.d/dnsmasq restart

Установим прокси-сервер squid:

# apt-get install squid

Так как будем "строить" именно шлюз, а не просто прокси-сервер, то добавим squid'у прозрачности. Для этого отредактируем его конфигурационный файл:

# nano /etc/squid/squid.conf

Находим строку

http_port 3128

и добавим к ней опцию transparent, которая и означает прозрачный прокси:

http_port 3128 transparent

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

cache_mem 64 Mb - объем оперативной памяти, который будет использоваться прокси-сервером

cache_dir /usr/local/squid 1024 16 256 - путь к кэшу, его размер, число каталогов первого и второго уровня соответственно

maximum_object_size 4096 KB - максимальный размер кэшируемого объекта

Управление авторизацей пользователей и слежение за трафиком доверим SAMS'у - Squid Account Management System. О его установке чуть ниже. А пока отредактируем то, что считаем нужным, не обращая внимания на параметры доступа пользователей, сохраним изменения в конфиге и перезапустим squid:

# /etc/init.d/squid restart

Примечание 7. Можно применять новую конфигурацию squid без его перезапуска:

# squid -k reconfigure

Теперь перейдем к настройке фаервола iptables. Создадим файл, содержащий в себе правила iptables:

# nano /etc/fw.config

В него впишем:

#!/bin/sh
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -i eth1 -d ! 192.168.1.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.1.2:3128

Установим права доступа:

# chmod 711 /etc/fw.config

Создадим еще один файл, описывающий процесс сброса правил:

# nano /etc/fwstop.config

В нем пропишем:

#!/bin/sh
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -t nat -F PREROUTING
iptables -t nat -F POSTROUTING

Установим права:

# chmod 711 /etc/fwstop.config

Теперь добавим в файл /etc/network/interfaces сразу после описания интерфейса ppp0 строки:

pre-up /etc/fw.config

post-down /etc/fwstop.config

Таким образом, правила iptables будут вступать в силу сразу после "поднятия" интерфейса ppp0 и сбрасываться после его "падения". Теперь можно перезагрузиться

# shutdown -r now

или перезапустить сеть:

# /etc/init.d/networking restart

Если все было сделано правильно, то настройки фаервола должны вступить в силу после того, как будет установлено PPPoE-соединение с Интернет. При этом весь http-трафик, идущий через порты 80 и 8080 должен проходить через кэширующий прокси squid, а все остальное - идти "напрямую". В зависимости от конфигурации доступа пользователей в squid.conf на компьютерах локальной сети можно уже проверять возможность выхода в Интернет. Для этого в качестве шлюза по умолчанию и одного из DNS-серверов должен быть указан ip-адрес компьютера с Debian. Прокси-сервер указывать не надо.

Примечание 8. Вообще, моя дружба с iptables никак не сложится, поэтому данную конфигурацию фаервола ни в коем случае не следует считать наиболее оптимальной. Однако, могу уверенно сказать, что она работает и в данный момент меня устраивает. Внизу постараюсь привести ссылку на более "продвинутый" конфиг.

Примечание 9. В самом простейшем случае для настройки шлюза достаточно установить всего два пакета:

# apt-get install ipmasq dnsmasq

После чего надо немного поправить конфиг dnsmasq, как было сказано выше. После перезапуска шлюз должен начать раздавать интернет в локальную сеть. Проверено под Ubuntu Server 8.10.

Теперь установим SAMS, чтобы было удобнее добавлять пользователей в squid и следить за их перемещениями по интернету. Перед его установкой потребуется поставить довольно много нужных пакетов:

aptitude install apache2 apache2-mpm-prefork

aptitude install php5 libapache2-mod-php5 php5-cli php5-common php5-mysql php5-gd

aptitude install mysql-server-5.0 mysql-client-5.0 libmysqlclient15off

aptitude install libpcre3

При установке mysql-server потребуется указать пароль пользователя root. Остальное должно пройти "автоматом".
Когда все требуемые пакеты будут установлены, можно загрузить SAMS:

wget -c "http://nixdev.net/release/sams/debian/lenny/sams_1.0.3-2_i386.deb"

Установим его:

# dpkg -i sams_1.0.3-2_i386.deb

Скачаем и установим web-интерфейс для SAMS и документацию:

wget -c "http://nixdev.net/release/sams/debian/lenny/sams-web_1.0.4-2_all.deb"

wget -c "http://nixdev.net/release/sams/debian/lenny/sams-doc_1.0.3-2_all.deb"

# dpkg -i sams-web_1.0.4-2_all.deb sams-doc_1.0.3-2_all.deb

Примечание 10. Описание установки SAMS полностью повторяет оригинальную инструкцию, доступную на официальном сайте (ссылки ниже). Однако, вместо рекомендуемой там версии sams-web_1.0.3-2 используется sams-web_1.0.4-2, так в 3-й версии наблюдаются проблемы и конфликты при установке. В 4-й таких проблем замечено не было.

Создаем пользователя SAMS всвежеустановленной БД mysql:

mysql -u root -p
GRANT ALL ON squidctrl.* TO sams@localhost IDENTIFIED BY "password";
GRANT ALL ON squidlog.* TO sams@localhost IDENTIFIED BY "password";

Конечно, "password" меняем на свой пароль.
Далее редактируем /etc/sams.conf:

# nano /etc/sams.conf

Отыскиваем там строку, содержащую MYSQLPASSWORD и вписываем свой пароль, указанный выше:

MYSQLPASSWORD=password

Создаем базы SAMS в mysql:

cd /usr/share/sams/mysql

mysql -u root -p < sams_db.sql
mysql -u root -p < squid_db.sql

Редактируем конфигурационный файл php:

# nano /etc/php5/apache2/php.ini

В нем необходимо указать:

safe_mode = On
safe_mode_exec_dir = "/usr/share/sams/bin"
disable_functions = "chdir,dl,ini_get_all,popen,proc_open,passthru,pcntl_exec"

Редактируем /etc/init.d/sams:

# nano /etc/init.d/sams

Меняем значение параметра SAMS_ENABLE с FALSE на TRUE.
На этом настройку SAMS можно считать завершенной. web-интерфейс для управления пользовательскими записями будет доступен по адресу http://server/sams, где server - имя или ip-адрес шлюза на Debian'е. По умолчанию: пользователь - admin, пароль - qwerty.

Теперь добавим к шлюзу возможность проверки http-трафика антивирусом "на лету", используя связку squid+havp+clamav. squid уже установлен, осталось установить havp - HTTP Anti Virus Proxy, и ClamAV - собственно антивирус. HAVP будем устанавливать в качестве Parent proxy для Squid, что позвоил обеспечить цепочку

Интернет -> HAVP/ClamAV -> squid -> User

Приступим:

# apt-get install havp clamav

Снова редактируем конфиг squid'а:

# nano /etc/squid/squid.conf

Ищем/правим/добавляем и приводим к следующему виду строки:

cache_peer 127.0.0.1 parent 8080 0 no-query no-digest no-netdb-exchange default

cache_peer_access 127.0.0.1 allow all

acl Scan_HTTP proto HTTP

never_direct allow Scan_HTTP

После перезапуска/переконфигурирования squid'а все должно работать. Линк для теста антивируса будет ниже.

На этом не останавливаемся и переходим к установке "баннерорезалки" - adzapper, которая должна избавить пользователей нашей сети от навязчивой рекламы в интернете:

# apt-get install adzapper

После установки редактируем его конфиг /etc/adzapper.conf:

# nano /etc/adzapper.conf

Меняем значение параметра

ZAP_MODE="CLEAR"

Теперь вместо рекламы на сайтах будет отображаться белый фон. По умолчанию - заставка adzapper'a. Возможен еще вариант с использованием собственного логотипа (см. линки ниже).
Снова правим конфигурационный файл squid'а:

# nano /etc/squid/squid.conf

Нужно добавить в него одну строку:

url_rewrite_program /usr/bin/adzapper.wrapper

Перезапускаем/реконфигурируем squid и смотрим на результат.

Последнее, что требуется сделать, - это добавить пару строк-заданий в планировщик cron:

# nano /etc/crontab

Допишем в конце файла:

30 0 * * * root /usr/share/doc/adzapper/examples/update-zapper

0 * * * * /usr/bin/freshclam -quiet

Таким образом, черные списки adzapper и вирусные базы ClamAV будут автоматически обновляться.

Ссылки по теме, источники:
Настройка роутера на базе Debian (+пример настройки фаервола)
Установка и настройка SAMS в Debian Lenny
Установка и настройка adzapper
Установка и настройка HAVP+ClamAV+Squid
Проверка антивируса, тестовый зараженный файл (Будьте осторожны!)

Вроде все. Надеюсь, ничего не забыл/не перепутал. Как обычно на профессионализм не претендую, Debian вижу впервые. Просто хотелось сохранить небольшой "мануал" для себя. Не думаю, что он поможет тем, кто с Linux'ом давно дружит, а вот "любопытным юзерам" может и пригодится.
В итоге мы должны получить шлюз с прозрачным кэширующим прокси-сервером, проверкой трафика "на лету" антивирусом и "баннерорезалкой", а также с удобным управлением через web-интерфейс. При этом на клиентских машинах никакой особой настройки не требуется, главное указать шлюз по умолчанию и DNS, а также не забыть добавить пользователя через SAMS. В случае использования DHCP-сервера клиенты вообще получают все настройки автоматически.

P.S. По мере выявления проблем/добавления новых возможностей/etc, надеюсь, буду обновлять пост.

 

Еще по теме:

Комментарии

Изображение пользователя manofring.

а этот кусок кода на java

а этот кусок кода на java script он к чему ?

Изображение пользователя admin.

Исправил

Исправил

Изображение пользователя Marat.

Адрес местожительства автора

Адрес местожительства автора указан в источнике.

style="display:inline-block;width:728px;height:15px"
data-ad-client="ca-pub-4493870272388852"
data-ad-slot="6622567932">