Linux-сервер своими руками — страница 73 из 119

Практические примеры.Обратный звонок

Возможно, материал этой главы будет пересекаться с уже имеющимся в этой книге, но при написании главы я ставил цель объяснить все «с нуля». Практически любой читатель сможет настроить шлюз и сервер входящих звонков, не читая предыдущих глав. Конечно, этот читатель должен обладать некоторыми навыками работы в 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.conf

logging {

 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 сервера