OS Linux kak most (gateway) mezhdu lokal'noj set'yu i Internet

Kostarev Aleksej Fedorovich, kaf@terem.perm.su


V dokumente opisana nastrojka OS Linux dlya podklyucheniya lokal'noj seti k seti Internet

1. Vvedenie

2. Funkcii mosta (gateway)

3. Nastrojka yadra OS Linux

4. Nastrojka programmnogo obespecheniya

5. Zaklyuchenie

1 Vvedenie

V dannom dokumente my rassmotrim variant podklyucheniya lokal'noj seti cherez odin serijnyj interfejs k odnomu IP-provajderu - naibolee chasto vstrechayushchijsya variant podklyucheniya k seti Internet.

Dannoe rukovodstvo spravedlivo dlya versij yadra 1.2.8 - 1.2.13 Novye eksperemental'nye yadra 1.3.... pozvolyayut Vam obespechit' dopolnitel'nye vozmozhnosti (Mobile-IP, IP-masquarading i t p) no v nastoyashchee vremya yavlyayutsya eksperemental'nymi.

Rassmatrivaemyj tip distributiva - Slackware v 3.0.0. Dlya drugih tipov distribucii (RED HAT, CALDERA i t p) neobhodimo sdelat' korrektirovku na drugoj sposob inicializacii sistemy (vyhod v mul'tirezhim - katalog /etc/rc.d/...), nabora komand komand podderzhki TCP/IP i t p.

2 Funkcii mosta (gateway)

Most mezhdu lokal'noj set'yu i Internet vypolnyaet sleduyushchie funkcii:

3 Nastrojka yadra OS Linux

3.1 Nachal'nye ustanovki

Kak pravilo vo vseh distributivah OS Linux yadro sobrano tak, chto ono ne rabotaet kak router (marshrutizator paketov) mezhdu raznymi setyami, ne podderzhivaet mehanizm zashchity (firewall) marshrutiziruemyh paketov i podscheta statistiki. Krome togo vybrannoe vami pervonachal'noe yadro mozhet ne soderzhat' neobhodimyh drajverov dlya podderzhki setevyh plat i soderzhit nabor drajverov ne nuzhnyh Vam dlya raboty.

Poetomu Vam neobhodimo budet sobrat' novoe yadro, vklyuchiv v nego neobhodimye funkcii i drajvera dlya raboty v kachestve gateway.

Dlya sborki yadra Vam neobhodimo ustanovit' v sistemu ishodnye teksty yadra (diskety K v Slackware v 3.0.0, ili diskety D v predydushchih versiyah Slackware).

Posle ustanovki perejdite v katalog /usr/src/linux i zapustite komandu

make config

Ustanovite neobhodimye parametry v sekciyah General Setup , IDE Drivers . Otvet'te y na vopros

Networking support (CONFIG_NET)
. V sekcii Loadable module support otvet'te y, esli vy sobiraetes' dinamicheski podklyuchat' drajvery (v tom sluchae, kogda konfiguraciya mashiny mozhet izmenit'sya, ili vy sobiraetes' ispol'zovat' eto yadro srazu na neskol'kih mashinah), ili n, esli vy zaranee znaete nabor drajverov kotorye Vy sobiraetes' ispol'zovat' v sisteme.

3.2 Vklyuchenie vozmozhnostej marshrutizacii paketov, zashchity seti (screening router) i podscheta IP-statistiki (account)

V sekcii Networking options Otvet'te utverditel'no na sleduyushchie voprosy:

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]
Otvety na ostal'nye voprosy etoj sekcii mozhete ostavit' prezhnimi.

3.3 Nastrojka setevyh drajverov

V sekcii Network device support otvet'te y na vopros

Network device support? (CONFIG_NETDEVICES)
. Esli vy ustanovili rezhim dinamicheski zagruzhaemyh drajverov (sv. vyshe) , to na ostal'nye voprosy dannoj sekcii vy mozhete otvechat' n. V etom sluchae vy dolzhny proizvesti dinamicheskuyu zagruzku drajvera pri vyhode sistemy v mul'tirezhim s pomoshch'yu komandy insmod v fajle /etc/rc.d/rc.inet1. Isklyuchenie sostavlyayut neskol'ko drajverov setevyh plat (naprimer drajver platy NE2000). CHtoby proverit', yavlyaetsya li drajver dinamicheski zagruzhaemym, perejdite v direktorij /usr/src/linux/drivers/net, najdite ishodnyj fajl trebuemogo drajvera i poishchite stroku
#ifdef MODULE
Esli dannaya stroka v fajle est', to drajver dannogo ustrojstva mozhno zagruzhat' dinamicheski.

Esli vy ne ustanovili rezhima dinamicheski zagruzhaemyh drajverov ili Vash drajver setevoj platy ne yavlyaetsya dinamicheski zagruzhaemym, to Vam neobhodimo vklyuchit' ego (ih) vo vremya generacii sistemy.

Minimal'no neobhodimyj nabor drajverov:

3.4 Sborka yadra

Posle otveta na vse voprosy zapustite komandy:

make dep
make clean
make zImage

Esli Vy ustanovili rezhim dinamicheski zagruzhaemyh drajverov, to zapustite komandy sborki i ustanovki etih drajverov:

make modules
make modules_install
Dinamicheski zagruzhaemye drajvera pomestyatsya v katalog /lib/modules/.

Posle sborki yadra perepishite ego v kornevoj katagog pod lyubym udobnym dlya Vas imenem (naprimer: linuxroute) :

mv arch/i386/boot/zImage /linuxroute
vklyuchite eto yadro v sostav zagruzhaemyh yader (fajl /etc/lilo.conf) i vyzovite komandu lilo (sm. dokumentaciyu na komandu lilo).

Posle etogo perezagruzite mashinu i poprobujte zagruzit' novoe yadro. Esli vse proshlo uspeshno - perehodite k nastrojke programmnogo obespecheniya.

4 Nastrojka programmnogo obespecheniya

4.1 Nastrojka interfejsov

Dlya kazhdogo setevogo ustrojstva (serijnaya liniya s modemom, Ethernet plata) Vy dolzhny podklyuchit' drajver (na etape sborki yadra ili dinamicheski) i ustanovit' interfejs.

Dinamicheskoe podklyuchenie drajverov i ustnanovka interfejsa dlya ustrojstv, kak pravilo proizvoditsya v fajle /etc/rc/rc.inet1.

Dlya dinamicheskogo podklyucheniya drajvera neobhodimo v fajl rc.inet1. dobavit' komandu(y):

/sbin/insmod /lib/modules/<nomer_yadra>/net/<imya_ob'ektogo_fajla_drajvera>

Interfejsom s tochki zreniya OS yavlyaetsya ustrojstvo cherez kotoroe sistema poluchaet i peredaet IP-pakety. Kazhdoe ustrojstvo (ne vsya mashina) imeet svoj IP-adres. Interfejs dlya ustrojstva ustanavlivaetsya komandoj ifconfig.

V fajle rc.inet1 Vy dolzhny ustanovit' sleduyushchie interfejsy:

Nastrojka lokal'nogo interfejsa lo

Nastrojka lokal'nogo interfejsa avtomaticheski vklyuchaetsya v fajl rc.inet1 posle ustanovki TCP/IP. Lokal'nyj interfejs ustanavlivaetsya komandoj:

/sbin/ifconfig lo 127.0.0.1
|tot interfejs ispol'zuetsya dlya svyazi programm IP-klientov s IP-serverami toj zhe mashiny.

Naprimer, chtoby proverit' pravil'nost' ustanovki TCP/IP, naberite komandu:

ping 127.0.0.1

CHtoby proverit' pravil'nost' raboty IP-serverov ispol'zujte dlya IP-klientov adres lokal'nogo interfejsa: 127.0.0.1. Naprimer, dlya proverki raboty ftp-servera, naberite komandu

ftp  127.0.0.1

Nastrojka interfejsa platy Ethernet lokal'noj seti (eth0)

Dlya svyazi s lokal'noj set'yu kak pravilo ispol'zuyut odnu ili neskol'ko plat Ethernet. Drajver platy dolzhen byt' podklyuchen v yadro, libo na etape sborki yadra (sm. vyshe), libo komandoj podklyucheniya dinamicheski zagruzhaemyh drajverov:

insmod <imya_ob'ektnogo_modulya_drajvera>

YAdro imenuet drajvery Ethernet kak eth0, eth1 i t. d.

Dlya konfiguracii interfejsa Vam nado znat' :

V fajle rc.inet1 posle installyacii uzhe est' zakommentirovannye stroki s nastrojkoj interfejsa. Vam nado lish' opredelit' vysheperechislenye peremennye i raskommentirovat' stroki:
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}

Interfejs dlya serijnogo porta - SLIP/CSLIP (sl0) ili PPP (ppp0)

Dlya raboty po serijnomu portu Vy mozhete ispol'zovat' kak SLIP (Serial Line Interface Protocol) s ego modifikaciej CSLIP (Compressed Serial Line Interface Protocol), tak i PPP (Point To Point) protokol.

PPP-protokol (programma pppd) yavlyaetsya bolee slozhnym - on pozvolyaet proveryat' dostovernost' vhoda dlya kommutiruemyh linij, podderzhivaet ne tol'ko IP-protokol no i drugie.

SLIP/CSLIP - protokol yavlyaetsya bolee prostym i udobnym v nastrojke i chasto ispol'zuetsya dlya vydelennyh linij.

V dannoj rabote my rassmotrim nastrojku SLIP/CSLIP protokola dlya raboty po vydelennoj linii cherez modemy.

Naibolee populyarnoj programmoj dlya rabotu po protokolu SLIP/CSLIP po modemu yavlyaetsya dip (DialUpIP). Ona pozvolyaet ispol'zovat' modem kak po vydelennoj tak i po komutiruemoj linii i proizvodit' nastrojki skorosti soedineniya, IP-adresov, procedury vhoda i t. p.

Osnovnaya problema v programmoj dip sostoit v tom, chto pri vyzove ona stanovitsya fonovym processom i posle padeniya linii snimaetsya bez povtornogo zapuska tak chto ochen' trudno otsledit' padenie linii i perezapustit' process soedineniya. Dlya resheniya etoj problemy v dannom primere ispol'zuetsya modificirovanaya programma dip, kotoraya ne uhodit v fonovyj process i vy mozhete legko ee perezapustit' posle padeniya linii, napisav proceduru na yazyke shell:

#!/bin/sh

while :;
do
    /sbin/dip fajl_konfiguracii_dip
    sleep 5
done
i vstaviv vyzov etoj procedury v fajl rc.inet1.

Fajl konfiguracii opisyvaet nomer porta, skorost' raboty modema, lokal'nyj i udalenyj IP-adres interfejsa i t. p. Primer fajla konfiguracii priveden nizhe:

# Ustanovka lokal'nogo IP-adresa
get $local 193.124.190.229

# Ustanovka udalennogo IP-adresa
get $remote 193.124.190.230
# Ustanovka nomera porta i skorosti soedineniya
port ttyS0
speed 38400


# Ustanovka razmera maksimal'no peredavaemogo paketa
# maximal transfere unit
get $mtu 576

# dlya komutiruemyh linij dalee sleduet komandy
# inicializacii modema, dozvonki do IP-provajdera i procedury vhoda
# dlya vydelennoj linii etot razdel opushchen

done:
  print CONNECTED $locip ---> $rmtip
  default
  mode CSLIP
  exit
Bolee podrobnoe opisanie komandy dip i ee nastroek Vy najdete v dokumentacii na komandu.

4.2 Nastrojka routing'a

Nastrojka routing'a (marshrutizacii paketov mezhdu interfejsami) mozhet byt' kak staticheskoj (odnokratno nastraivaemaya tablica), tak i dinamicheskoj.

Dinamicheskaya nastrojka byvaet neobhodima v tom sluchae, esli u Vas slozhnaya, postoyanno menyayushchayasya struktura seti i odna i ta zhe mashina mozhet byt' dostupna po razlichnym interfejsam (naprimer cherez raznye Ethernet ili SLIP interfejsy). Dlya dinamicheskoj nastrojki routing'a sluzhat komandy routed i gated.

Kak pravilo v bol'shinstve situacij byvaet dostatochno staticheskoj nastrojki interfejsa komandoj route.

Nastrojka routing'a proizvoditsya v fajle rc.inet1. Kak pravilo Vam byvaet neobhodimo nastroit' routing po vysheperechislennym trem interfejsam:

Lokal'nyj inerfejs podderzhivaet set' s IP-nomerom 127.0.0.1 . Poetomu dlya mashrutizacii paketov s adresom 127.... ispol'zuetsya komanda :

/sbin/route add -net 127.0.0.1

Esli u Vas dlya svyazi s lokalnoj set'yu ispol'zuetsya odna plata Ethernet i vse mashiny nahodyatsya v etoj seti (setevaya maska 255.255.255.0), to dlya nastrojki routing'a dostatochno vyzvat':

NETMASK=255.255.255.0
/sbin/route add -net ${NETWORK} netmast ${NETMASK}
Esli zhe Vy imeete naskol'ko interfejsov, to Vam nado opredelit'sya s setevoj maskoj i vyzvat' komandu route dlya kazhdogo interfejsa.

Nastrojku routing'a po interfejsu SLIP/CSLIP proizvodit komanda dip, vyzyvaya pri ustanovlenii svyazi komandy ifconfig i route.

4.3 Nastrojka nameserver'a

Esli Vy ne sobiraetes' zavodit' podderzhku servisa imen dlya svoj seti (chto yavlyaetsya dovol'no slozhnoj organizacioonoj i tehnicheskoj problemoj) i doveryaete vedenie svoih imen Vashemu IP-provajderu, to Vam dostatochno ukazat' v fajle /etc/resolv.conf adres nameserver'a vashego provajdera:

nameserver <adres>
ukazat' v fajle /etc/host.conf
order hosts, bind
i opisat' Vashi lokal'nye mashiny v fajle /etc/hosts. Ne zabud'te imena Vashih mashin, kotorye dolzhny byt' vidny iz Internet'a po ih domenam, peredat' IP-provajderu dlya vedeniya servisa imen.

4.4 Nastrojka zashity

Zashchita lokal'noj seti ot vzloma osushchestvlyaetsya sleduyushchimi sposobami:

Screening routing

Dannyj rezhim zashchity ispol'zuet vozmozhnosti yadra Linux blokirovat' ukazannye pakety pri ih peredache (forwarding) s odnogo interfejsa na drugoj. |ti vozmozhnosti vklyuchayutsya pri konfiguracii yadra (make config - sm.vyshe) s parametrami:

IP forwarding/gatewaying (CONFIG_IP_FORWARD) [y]
IP firewalling (CONFIG_IP_FIREWALL) [y]

Preimushchestvo dannogo metoda sostoit v tom, chto Vy mozhete na odnoj mashine (gateway mezhdu lokal'noj set'yu i Internet'om) zashchitit' vsyu lokal'nuyu set', ne zashchishchaya kazhduyu mashchinu v otdel'nosti.

Dlya togo chtoby vklyuchit' zashchitu Vam neobhodimo vospol'zovat'sya programmoj nastrojkoj zashchity ipfwadm.

V 90% sluchaet byvaet dostatochno zakryt' TCP-porty c 1-go po 1024 dlya zaprety dostupa k osnovnym TCP-serveram i porty s 5000 po 65535 dlya zapreda dostupa s X-serveram, ostaviv porty 1025-4999 dlya raboty programm-klientov lokal'noj seti. Esli Vy hotite otkryt' dostup klientam Internet k Vashim serveram (ftp,http i t p) (predvaritel'no tshchatel'no proveriv zashchitu), to vy mozhete ostavit' otkrytymi sootvetstvuyushchie porty (sm. /etc/service).

Vse komandy zashchity Vy mozhete zapisat' v otdel'nyj komandnyj fajl (naprimer /etc/rc.d/rc.firewall) i vyzyvat' ego pri vyhode sistemy v mul'tirezhim iz fajla /etc/rc.d.rc.inet1.

Primer fajla nastrojki zashchity:

#!/bin/sh

NET=198.223.25
LOCALNET=198.223.25.0

/sbin/ipfwadm -B -f     #sbros blokirovok

#Propuskat' vse pakety vnutri lokal'noj seti
/sbin/ipfwadm -B -a accept -S ${LOCALNET}/24 -D ${LOCALNET}/24

#Zaderzhivat' pakety na TCP-servery lokal'noj seti seti
/sbin/ipfwadm -B -P tcp -a deny -S 255.255.255.255/0 -D ${LOCALNET}/24 0:1024

#Zaderzhivat' pakety na X-server'y lokal'noj seti
/sbin/ipfwadm -B -P tcp -a deny -S 255.255.255.255/0 -D ${LOCALNET}/24 5000:64575

# Pakety s TCP-portov 1025 po 4999 razresheny dlya dostupa iz/v Internet
# eti porty ispol'zuyutsya klientami (a ne serverami) i vzlom po nim nevozmozhen


#Zaderzhivat' pakety na UDP-servery lokal'noj seti
/sbin/ipfwadm -B -P udp -a deny -S 255.255.255.255/0 -D ${LOCALNET}/24 0:1024


#Zashchita gateway v Internet
GateWayIP=194.126.198.229/32

/sbin/ipfwadm -B -P tcp -a deny -S 255.255.255.255/0 -D ${GateWayIP} 0:20
# ostavit' okrytymi porty 21-23 - ftp -dostup
/sbin/ipfwadm -B -P tcp -a deny -S 255.255.255.255/0 -D ${GateWayIP} 24:79
# i 80 - http - dostup
/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
# ne zabud'te maksimal'no zashchitit' ftp i www servery ot vozmozhnosti vzloma


#Zashita mashin lokal'noj seti vne Internet'a
#  Zapretit' lokal'nym mashinam s nomerami 32-255 dostup k Internet
#mashiny 32-63
/sbin/ipfwadm -B -a deny -S 255.255.255.255/0 -D ${NET}.32/27
#mashiny 64-128
/sbin/ipfwadm -B -a deny -S 255.255.255.255/0 -D ${NET}.64/26
#mashiny 128-255
/sbin/ipfwadm -B -a deny -S 255.255.255.255/0 -D ${NET}.128/25

Vyklyuchenie serverov na lokal'nym mashinah

Dlya togo chtoby polnost'yu zakryt' dostup na lokal'noj mashine (rech' idet o UNIX-mashinah) k opredelennomu servisu (naprimer telnetd) dostatochno v fajle /etc/inetd.conf zakommentirovat' strochku zapuska dannogo servera. V otlichie ot zashchitycherez firewall

Esli Vy hotite lish' ogranchit' dostup k serveru, ne vyklyuchaya ego, to Vam nado nastroit' TCP-wrapper (sm. sleduyushchij razdel).

Wrapping

V OS Linux pri obrashchenii iz seti k TCP-portu superserver inetd vyzyvaet ne sam server, a programmu tcpd, peredavaya ej parametrom imya neobhodimogo servera (sm. fajl /etc/inetd.conf). Programma tcpd opredelyaet IP-adres klienta ishchet etot adres dlya ukazannogo servisa v fajlah /etc/hosts.allow i /etc/hosts.deny. Esli adres najden v fajle /etc/hosts.allow - klientu razreshaetsya dostup k ukazannomu serveru, esli zhe adres najden v fajle /etc/hosts.deny, to klient ne poluchaet dostup k serveru. Naprimer, esli Vy hotite otkryt' dostup na server telnetd tol'ko s odnoj mashiny Vy dobavlyaete v fajl /etc/hosts.deny stroku:

in.telnetd:ALL EXCEPT 194.128.18.25

5 Zaklyuchenie

Dlya bolee podrobnogo oznakomleniya Vam sleduet oznakomit'sya s dokumentaciej cherez komandu:

man <imya_komandy>
i dokumenty HOWTO:

LINUX_ETHETNET_HOWTO

LINUX_NET-2/3-HOWTO

FIREWALLING_AND_PROXY_SERVER_HOWTO

THE_LINUX_KERNEL_HOWTO