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: