Практические примеры.Обратный звонок
Возможно, материал этой главы будет пересекаться с уже имеющимся в этой книге, но при написании главы я ставил цель объяснить все «с нуля». Практически любой читатель сможет настроить шлюз и сервер входящих звонков, не читая предыдущих глав. Конечно, этот читатель должен обладать некоторыми навыками работы в Linux.
17.1. Настройка шлюза
Сначала определим функции, которые должен выполнять шлюз:
1. Поддержка связи с провайдером.
2. Маршрутизация IP-пакетов между локальной сетью и сетью Интернет для выхода пользователей локальной сети в Интернет.
3. Обеспечение IP-сервиса.
4. Защита локальной сети от несанкционированного доступа из Интернет.
Конфигурирование шлюза в операционной системе Linux состоит из следующих этапов:
1. Настройка ядра.
2. Настройка сети.
3. Конфигурирование IpChains.
4. Настройка DNS.
5. Настройка Squid.
Для определенности будет использоваться два сетевых интерфейса — eth0, идущий к провайдеру, и eth1 — во внутренней сети. Пусть интерфейсу eth0 назначен IP-адрес 111.111.111.111, a eth1 — 192.168.1.1
17.1.1. Настройка ядра
Скорее всего, вам придется перекомпилировать ядро. При этом должны быть активизированы следующие опции:
Networking support (CONFIG_NET) [у]
TCP/IP networking (CONFIG_INET) [у]
IP forwarding/gatewaying (CONFIG_IP_FORWARD) [y]
IP multicasting (CONFIG_IP_MULTICAST) [у]
IP firewalling (CONFIG_IP_FIREWALL) [у]
IP accounting (CONFIG_IP_ACCT) [y]
Можно также поэкспериментировать с набором опций Advanced Router, если данные функции есть в вашем ядре. Более подробно о процессе компилирования ядра вы можете прочитать в следующей главе.
17.1.2. Настройка сети
После перекомпилирования ядра нужно включить IP-forwarding. Сделайте это при помощи следующей команды:
# echo "1" > /proc/net/ip_forward
Настройку сетевых карт произведите с помощью программы netconf. О том, как это сделать, было рассказано в гл. 8.
17.1.3. Конфигурирование IpChains
Теперь приступим к настройке IPChains. Создайте цепочку, через которую пойдет весь трафик от провайдера:
ipchains –N prov
ipchains –A input –i eth0 –j prov
Запретите ip-spoofing:
ipchains –A prov –s 192.168.1.1/16 –1 –j DENY
ipchains –A prov –s 127.0.0.1/8 –1 –j
DENY Запретите Telnet снаружи:
ipchains –A prov –p tcp –destination-port 23 –j REJECT
Если вы не хотите, чтобы samba «светилась» наружу, запретите порты 137-139:
ipchains –A prov –p tcp –destination-port 137 –j REJECT
ipchains –A prov –p udp –destination-port 137 –j REJECT
To же самое проделайте для портов 138 и 129.
О настройке samba вы можете прочитать в Samba-HOWTO.
Создайте цепочку для подсчета трафика:
ipchains –N trafin
ipchains –I input –i eth0 –s ! 123.123.123.0/24 –p all –j trafin
ipchains –A trafin –d 123.123.123.123
Для того, чтобы ваши правила были постоянными (при перезагрузке машины правила IpChains теряются), используйте скрипты ipchains-save и ipchains-restore. Настройте свои правила, а затем выполните команду:
# ipchains-save > /etc/ipchains.rules
Далее создайте скрипт, подобный тому, что приведен в листинге 17.1.
Листинг 17.1. Скрипт управления пакетной фильтрацией#!/bin/sh
# Скрипт управления пакетной фильтрацией.
# Если правил нет, то ничего не делать.
[-f /etc/ipchains. rules] || exit 0
case "$1" in
start)
echo –n "Включение пакетной фильтрации:"
/sbin/ipchains-restore
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "." ;;
stop)
echo –n "Отключение пакетной фильтрации:"
echo 0 >/proc/sys/net/ipv4/ip_forward
/sbin/ipchains –X
/sbin/ipchains –F
/sbin/ipchains –P input ACCEPT
/sbin/ipchains –P output ACCEPT
/sbin/ipchains –P forward ACCEPT
echo "." ;;
*)
echo "Использование: /etc/init.d/packetfilter {start|stop}"
exit 1 ;;
esac
exit 0
Этот скрипт добавьте в сценарии загрузки системы.
17.1.4. Настройка DNS
Напомню, что основной задачей сервера доменных имен (Domain Name System) является преобразование мнемонических имен машин в IP-адреса и обратно. Обычно сервер DNS устанавливается на шлюзе, который используется для выхода в Интернет.
Прежде чем приступить к настройке сервера, нужно определить, запущен ли он:
# ps –ax | grep named
Если он запущен, его нужно остановить (с помощью ndc), а если он вообще не установлен, то придется установить пакет bind. Для работы сервера должен быть активизирован сервис network.
Теперь приступим к непосредственной настройке сервера. Основная информация о параметрах сервера содержится в файле /etc/named.conf (см. листинг 17.2).
Листинг 17.2. Файл named.conflogging {
category cname {null; } ;
};
options {
directory "/var/named";
};
zone "." {
type hint;
file "named.ca";
};
zone "dhsilabs.com" {
type master;
file "dhsilabs.com";
notify no;
};
zone "0.0.127.in-addr.arpa" {
type master;
file "named. local";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "192.168.1";
notify yes;
};
Основной каталог сервера — /var/named. В нем сервер будет искать файлы dhsilabs.com.named.local, 192.168.1, named.ca (см. листинги 17.3, 17.4, 17.5). Обслуживаемая нашим сервером зона (домен) — dhsilabs.com (см. листинг 17.3). Файл named.са — корневой кэш — содержит информацию о корневых серверах DNS. Позже займемся его обновлением.
Листинг 17.3. Файл dhsilabs.com (для преобразования имен в IP-адреса)@ IN SOA den.dhsilabs.com. hostmaster.dhsilabs.com. (
93011120 ; серийный номер
10800 ; обновление каждые 3 часа
3600 ; повтор каждый час
3600000 ; хранить информацию 1000 часов
86400 ) ; TTL записи — 24 часа
IN NS delden.dhsilabs.com.
IN А 192.168.1.1
IN MX 150 den.dhsilabs.com.
den IN A 19:192.168.1.1
IN HINFO INTEL CELERON (LINUX)
IN MX 100 den
IN MX 150 evg.dhsilabs.com.
ns IN CNAME den.dhsilabs.com.
www IN CNAME den.dhsilabs.com.
ftp IN CNAME den.dhsilabs.com.
mail IN CNAME den.dhsilabs.com.
evg IN A 19:192.168.1.2
IN MX 100 den.dhsilabs.com.
localhost IN A 12'127.0.0.1
где: NS — обозначает name server;
A — IP-адрес;
MX — почтовик <приоритет>. Чем ниже значение, тем выше приоритет;
HINFO — сведения об аппаратном обеспечении (заполнять не рекомендую);
ТХТ — прочие сведения;
CNAME — каноническое имя, т.е. если вы в окне браузера введете http://www.dhsilabs.com, то обращение будет произведено к den.dhsilabs.com. Обратите внимание на точку в конце:
@ IN SOA den.dhsilabs.com. hostmaster.dhsilabs.com.
(Если точка не указана, то к имени будет добавлено имя домена (т.е. dhsilabs.com)).
Листинг 17.4. Файл named.local@ IN SOA dhsilabs.com. root.dhsilabs.com. (
199609203 ; серийный номер
28800 ; обновление каждые 8 часов
7200 ; повтор каждые 2 часа
604800 ; хранить информацию 168 часов (7 дней)
86400) ; TTL записи — 24 часа
NS dhsilabs.com.
1 PTR localhost.
Листинг 17.5. Файл 192.168.1 или файл обратного соответствия@ IN SOA den.dhsilabs.com. hostmaster.dhsilabs.com. (
93011120 ; серийный номер
10800 ; обновление каждые 3 часа
3600 ; повтор каждый час
3600000 ; хранить информацию 1000 часов
86400 ) ; TTL записи — 24 часа
@ IN NS den.dhsilabs.com
1 IN PTR den.dhsilabs.com
2.1.168.192 IN PTR evg.dhsilabs.com
Запись PTR используется для преобразования IP-адреса в имя. Если указан не весь IP:
1 IN PTR den.dhsilabs.com
то к нему будет добавлен адрес подсети 1.168.192. Обратите внимание: IP-адреса указываются в обратном порядке!
17.1.5. Настройка Squid
Установите пакет squid. Осталось настроить и запустить его. Для этого нужно отредактировать файл конфигурации /etc/squid/squid.conf. Сначала укажите адрес прокси провайдера:
cach_peer proxy.your_isp.com
Задайте объем ОЗУ, который будет использовать прокси-сервером:
cache_mem
В том случае, если вы планируете использовать этот компьютер еще и для других целей, кроме как в качестве прокси-сервера, то не рекомендуется устанавливать здесь более трети физического объема ОЗУ.
Далее укажите, где будет располагаться кэш (первое число — это количество Мб для кэша):
cache_dir /usr/local/squid 2048 16 256
Затем укажите хосты, из которых разрешен доступ к прокси-серверу:
acl allowed_hosts src 192.168.1.0/255.255.255.0
acl localhost src 127.0.0.1/255.255.255.255
После этого пропишите пользователей, которым разрешено пользоваться squid (в приведенном примере это den, admin, developer):
ident_lookup on
acl allowed_users user den admin developer
http_access allow allowed_users
http_access deny all
Тэги maxium_object_size и maxium_object устанавливают ограничения на размер передаваемых объектов.
В заключении хочу дать один хороший совет: из соображений безопасности отредактируйте свои /etc/services и /etc/inetd.conf и отключите неиспользуемые сервисы – это уменьшит вероятность взлома вашей системы. Вот, в общем-то, и все.
17.2. Настройка Dial-In сервера