kaf@terem.perm.su
В данном документе мы рассмотрим вариант подключения локальной сети через один серийный интерфейс к одному IP-провайдеру - наиболее часто встречающийся вариант подключения к сети Internet.
Данное руководство справедливо для версий ядра 1.2.8 - 1.2.13 Новые эксперементальные ядра 1.3.... позволяют Вам обеспечить дополнительные возможности (Mobile-IP, IP-masquarading и т п) но в настоящее время являются эксперементальными.
Рассматриваемый тип дистрибутива - Slackware v 3.0.0. Для других типов дистрибуции (RED HAT, CALDERA и т п) необходимо сделать корректировку на другой способ инициализации системы (выход в мультирежим - каталог /etc/rc.d/...), набора команд команд поддержки TCP/IP и т п.
Мост между локальной сетью и Internet выполняет следующие функции:
Как правило во всех дистрибутивах ОС Linux ядро собрано так, что оно не работает как router (маршрутизатор пакетов) между разными сетями, не поддерживает механизм защиты (firewall) маршрутизируемых пакетов и подсчета статистики. Кроме того выбранное вами первоначальное ядро может не содержать необходимых драйверов для поддержки сетевых плат и содержит набор драйверов не нужных Вам для работы.
Поэтому Вам необходимо будет собрать новое ядро, включив в него необходимые функции и драйвера для работы в качестве gateway.
Для сборки ядра Вам необходимо установить в систему исходные тексты ядра (дискеты K в Slackware v 3.0.0, или дискеты D в предыдущих версиях Slackware).
После установки перейдите в каталог /usr/src/linux и запустите команду
make config
Установите необходимые параметры в секциях
General Setup
,
IDE Drivers
.
Ответьте
y
на вопрос
Networking support (CONFIG_NET)
.
В секции
Loadable module support
ответьте
y
,
если вы собираетесь динамически подключать драйверы
(в том случае, когда конфигурация машины может измениться,
или вы собираетесь использовать это ядро сразу на нескольких машинах),
или
n
, если вы заранее знаете набор драйверов
которые Вы собираетесь использовать в системе.
В секции Networking options Ответьте утвердительно на следующие вопросы:
TCP/IP networking (CONFIG_INET) [y]
IP forwarding/gatewaying (CONFIG_IP_FORWARD) [y]
IP multicasting (CONFIG_IP_MULTICAST) [y]
IP firewalling (CONFIG_IP_FIREWALL) [y]
IP accounting (CONFIG_IP_ACCT) [y]
Ответы на остальные вопросы этой секции можете
оставить прежними.
В секции
Network device support
ответьте
y
на вопрос
Network device support? (CONFIG_NETDEVICES)
.
Если вы установили режим динамически загружаемых драйверов (св. выше)
, то на остальные вопросы данной секции вы можете отвечать
n
. В этом случае вы должны произвести динамическую
загрузку драйвера при выходе системы в мультирежим
с помощью команды
insmod
в файле
/etc/rc.d/rc.inet1.
Исключение составляют несколько драйверов сетевых плат (например
драйвер платы NE2000). Чтобы проверить, является ли
драйвер динамически загружаемым, перейдите в директорий
/usr/src/linux/drivers/net, найдите исходный файл
требуемого драйвера и поищите строку
#ifdef MODULE
Если данная строка в файле есть, то драйвер данного устройства
можно загружать динамически.
Если вы не установили режима динамически загружаемых драйверов или Ваш драйвер сетевой платы не является динамически загружаемым, то Вам необходимо включить его (их) во время генерации системы.
Минимально необходимый набор драйверов:
Do you want to be offered ALPHA test drivers (CONFIG_NET_ALPHA)
Other ISA cards (CONFIG_NET_ISA).
После ответа на все вопросы запустите команды:
make dep
make clean
make zImage
Если Вы установили режим динамически загружаемых драйверов, то запустите команды сборки и установки этих драйверов:
make modules
make modules_install
Динамически загружаемые драйвера поместятся в каталог
/lib/modules/<номер_ядра>.
После сборки ядра перепишите его в корневой катагог под любым удобным для Вас именем (например: linuxroute) :
mv arch/i386/boot/zImage /linuxroute
включите это ядро в состав загружаемых ядер (файл /etc/lilo.conf)
и вызовите команду lilo
(см. документацию на команду lilo).
После этого перезагрузите машину и попробуйте загрузить новое ядро. Если все прошло успешно - переходите к настройке программного обеспечения.
Для каждого сетевого устройства (серийная линия с модемом, Ethernet плата) Вы должны подключить драйвер (на этапе сборки ядра или динамически) и установить интерфейс.
Динамическое подключение драйверов и устнановка интерфейса для устройств, как правило производится в файле /etc/rc/rc.inet1.
Для динамического подключения драйвера необходимо в файл rc.inet1. добавить команду(ы):
/sbin/insmod /lib/modules/<номер_ядра>/net/<имя_об'ектого_файла_драйвера>
Интерфейсом с точки зрения ОС является устройство через которое система получает и передает IP-пакеты. Каждое устройство (не вся машина) имеет свой IP-адрес. Интерфейс для устройства устанавливается командой ifconfig.
В файле rc.inet1 Вы должны установить следующие интерфейсы:
Настройка локального интерфейса автоматически включается в файл rc.inet1 после установки TCP/IP. Локальный интерфейс устанавливается командой:
/sbin/ifconfig lo 127.0.0.1
Этот интерфейс используется для связи программ IP-клиентов с IP-серверами
той же машины.
Например, чтобы проверить правильность установки TCP/IP, наберите команду:
ping 127.0.0.1
Чтобы проверить правильность работы IP-серверов используйте для IP-клиентов адрес локального интерфейса: 127.0.0.1. Например, для проверки работы ftp-сервера, наберите команду
ftp 127.0.0.1
Для связи с локальной сетью как правило используют одну или несколько плат Ethernet. Драйвер платы должен быть подключен в ядро, либо на этапе сборки ядра (см. выше), либо командой подключения динамически загружаемых драйверов:
insmod <имя_об'ектного_модуля_драйвера>
Ядро именует драйверы Ethernet как eth0, eth1 и т. д.
Для конфигурации интерфейса Вам надо знать :
IPADDR="194.220.22.1" # REPLACE with YOUR IP address!
NETMASK="255.255.255.0" # REPLACE with YOUR netmask!
BROADCAST="194.220.22.255" # REPLACE with YOUR broadcast address, if you
# have one. If not, leave blank and edit below.
/sbin/ifconfig eth0 ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK}
Для работы по серийному порту Вы можете использовать как SLIP (Serial Line Interface Protocol) с его модификацией CSLIP (Compressed Serial Line Interface Protocol), так и PPP (Point To Point) протокол.
PPP-протокол (программа pppd) является более сложным - он позволяет проверять достоверность входа для коммутируемых линий, поддерживает не только IP-протокол но и другие.
SLIP/CSLIP - протокол является более простым и удобным в настройке и часто используется для выделенных линий.
В данной работе мы рассмотрим настройку SLIP/CSLIP протокола для работы по выделенной линии через модемы.
Наиболее популярной программой для работу по протоколу SLIP/CSLIP по модему является dip (DialUpIP). Она позволяет использовать модем как по выделенной так и по комутируемой линии и производить настройки скорости соединения, IP-адресов, процедуры входа и т. п.
Основная проблема в программой dip состоит в том, что при вызове она становится фоновым процессом и после падения линии снимается без повторного запуска так что очень трудно отследить падение линии и перезапустить процесс соединения. Для решения этой проблемы в данном примере используется модифицированая программа dip, которая не уходит в фоновый процесс и вы можете легко ее перезапустить после падения линии, написав процедуру на языке shell:
#!/bin/sh
while :;
do
/sbin/dip файл_конфигурации_dip
sleep 5
done
и вставив вызов этой процедуры в файл
rc.inet1.
Файл конфигурации описывает номер порта, скорость работы модема, локальный и удаленый IP-адрес интерфейса и т. п. Пример файла конфигурации приведен ниже:
# Установка локального IP-адреса
get $local 193.124.190.229
# Установка удаленного IP-адреса
get $remote 193.124.190.230
# Установка номера порта и скорости соединения
port ttyS0
speed 38400
# Установка размера максимально передаваемого пакета
# maximal transfere unit
get $mtu 576
# для комутируемых линий далее следует команды
# инициализации модема, дозвонки до IP-провайдера и процедуры входа
# для выделенной линии этот раздел опущен
done:
print CONNECTED $locip ---> $rmtip
default
mode CSLIP
exit
Более подробное описание команды dip и ее настроек Вы найдете в
документации на команду.
Настройка routing'а (маршрутизации пакетов между интерфейсами) может быть как статической (однократно настраиваемая таблица), так и динамической.
Динамическая настройка бывает необходима в том случае, если у Вас сложная, постоянно меняющаяся структура сети и одна и та же машина может быть доступна по различным интерфейсам (например через разные Ethernet или SLIP интерфейсы). Для динамической настройки routing'а служат команды routed и gated.
Как правило в большинстве ситуаций бывает достаточно статической настройки интерфейса командой route.
Настройка routing'а производится в файле rc.inet1. Как правило Вам бывает необходимо настроить routing по вышеперечисленным трем интерфейсам:
Локальный инерфейс поддерживает сеть с IP-номером 127.0.0.1 . Поэтому для машрутизации пакетов с адресом 127.... используется команда :
/sbin/route add -net 127.0.0.1
Если у Вас для связи с локалной сетью используется одна плата Ethernet и все машины находятся в этой сети (сетевая маска 255.255.255.0), то для настройки routing'а достаточно вызвать:
NETMASK=255.255.255.0
/sbin/route add -net ${NETWORK} netmast ${NETMASK}
Если же Вы имеете насколько интерфейсов, то Вам надо
определиться с сетевой маской и вызвать команду
route для каждого интерфейса.
Настройку routing'а по интерфейсу SLIP/CSLIP производит команда dip, вызывая при установлении связи команды ifconfig и route.
Если Вы не собираетесь заводить поддержку сервиса имен для свой сети (что является довольно сложной организациооной и технической проблемой) и доверяете ведение своих имен Вашему IP-провайдеру, то Вам достаточно указать в файле /etc/resolv.conf адрес nameserver'а вашего провайдера:
nameserver <адрес>
указать в файле
/etc/host.conf
order hosts, bind
и описать Ваши локальные машины в файле
/etc/hosts.
Не забудьте имена Ваших машин, которые должны быть
видны из Internet'а по их доменам, передать IP-провайдеру
для ведения сервиса имен.
Защита локальной сети от взлома осуществляется следующими способами:
Данный режим защиты использует возможности ядра Linux блокировать указанные пакеты при их передаче (forwarding) с одного интерфейса на другой. Эти возможности включаются при конфигурации ядра (make config - см.выше) с параметрами:
IP forwarding/gatewaying (CONFIG_IP_FORWARD) [y]
IP firewalling (CONFIG_IP_FIREWALL) [y]
Преимущество данного метода состоит в том, что Вы можете на одной машине (gateway между локальной сетью и Internet'ом) защитить всю локальную сеть, не защищая каждую мащину в отдельности.
Для того чтобы включить защиту Вам необходимо воспользоваться программой настройкой защиты ipfwadm.
В 90% случает бывает достаточно закрыть TCP-порты c 1-го по 1024 для запреты доступа к основным TCP-серверам и порты с 5000 по 65535 для запреда доступа с X-серверам, оставив порты 1025-4999 для работы программ-клиентов локальной сети. Если Вы хотите открыть доступ клиентам Internet к Вашим серверам (ftp,http и т п) (предварительно тщательно проверив защиту), то вы можете оставить открытыми соответствующие порты (см. /etc/service).
Все команды защиты Вы можете записать в отдельный командный файл (например /etc/rc.d/rc.firewall) и вызывать его при выходе системы в мультирежим из файла /etc/rc.d.rc.inet1.
Пример файла настройки защиты:
#!/bin/sh
NET=198.223.25
LOCALNET=198.223.25.0
/sbin/ipfwadm -B -f #сброс блокировок
#Пропускать все пакеты внутри локальной сети
/sbin/ipfwadm -B -a accept -S ${LOCALNET}/24 -D ${LOCALNET}/24
#Задерживать пакеты на TCP-серверы локальной сети сети
/sbin/ipfwadm -B -P tcp -a deny -S 255.255.255.255/0 -D ${LOCALNET}/24 0:1024
#Задерживать пакеты на X-server'ы локальной сети
/sbin/ipfwadm -B -P tcp -a deny -S 255.255.255.255/0 -D ${LOCALNET}/24 5000:64575
# Пакеты с TCP-портов 1025 по 4999 разрешены для доступа из/в Internet
# эти порты используются клиентами (а не серверами) и взлом по ним невозможен
#Задерживать пакеты на UDP-серверы локальной сети
/sbin/ipfwadm -B -P udp -a deny -S 255.255.255.255/0 -D ${LOCALNET}/24 0:1024
#Защита gateway в Internet
GateWayIP=194.126.198.229/32
/sbin/ipfwadm -B -P tcp -a deny -S 255.255.255.255/0 -D ${GateWayIP} 0:20
# оставить окрытыми порты 21-23 - ftp -доступ
/sbin/ipfwadm -B -P tcp -a deny -S 255.255.255.255/0 -D ${GateWayIP} 24:79
# и 80 - http - доступ
/sbin/ipfwadm -B -P tcp -a deny -S 255.255.255.255/0 -D ${GateWayIP} 81:1024
/sbin/ipfwadm -B -P tcp -a deny -S 255.255.255.255/0 -D ${GateWayIP} 5000:64575
/sbin/ipfwadm -B -P udp -a deny -S 255.255.255.255/0 -D ${GateWayIP} 0:1024
# не забудьте максимально защитить ftp и www серверы от возможности взлома
#Зашита машин локальной сети вне Internet'a
# Запретить локальным машинам с номерами 32-255 доступ к Internet
#машины 32-63
/sbin/ipfwadm -B -a deny -S 255.255.255.255/0 -D ${NET}.32/27
#машины 64-128
/sbin/ipfwadm -B -a deny -S 255.255.255.255/0 -D ${NET}.64/26
#машины 128-255
/sbin/ipfwadm -B -a deny -S 255.255.255.255/0 -D ${NET}.128/25
Для того чтобы полностью закрыть доступ на локальной машине (речь идет о UNIX-машинах) к определенному сервису (например telnetd) достаточно в файле /etc/inetd.conf закомментировать строчку запуска данного сервера. В отличие от защитычерез firewall
Если Вы хотите лишь огранчить доступ к серверу, не выключая его, то Вам надо настроить TCP-wrapper (см. следующий раздел).
В ОС Linux при обращении из сети к TCP-порту суперсервер inetd вызывает не сам сервер, а программу tcpd, передавая ей параметром имя необходимого сервера (см. файл /etc/inetd.conf). Программа tcpd определяет IP-адрес клиента ищет этот адрес для указанного сервиса в файлах /etc/hosts.allow и /etc/hosts.deny. Если адрес найден в файле /etc/hosts.allow - клиенту разрешается доступ к указанному серверу, если же адрес найден в файле /etc/hosts.deny, то клиент не получает доступ к серверу. Например, если Вы хотите открыть доступ на сервер telnetd только с одной машины Вы добавляете в файл /etc/hosts.deny строку:
in.telnetd:ALL EXCEPT 194.128.18.25
Для более подробного ознакомления Вам следует ознакомиться с документацией через команду:
man <имя_команды>
и документы HOWTO: