LinuxovΘ noviny | B°ezen 1998 | ||||||||||||||
| |||||||||||||||
Instalacφ tohoto balφku lze znaΦn∞ zv²╣it odolnost instalace systΘmu proti r∙zn²m ·tok∙m ze sφt∞, nebo╗ pomocφ tohoto balφku je mo╛nΘ monitorovat a filtrovat p°ichßzejφcφ po╛adavky pro sφ╗ovΘ slu╛by SYSTAT, FINGER, FTP, TELNET, RLOGIN, RSH, EXEC, TFTP, TALK a jinΘ. Jßdrem balφku je sφ╗ov² dΘmon tcpd. AnglickΘ slovo "wrapper" znamenß n∞co jako "p°epφnaΦ". Takto se skuteΦn∞ dß charakterizovat Φinnost tohoto dΘmona. Vysv∞tlφme si ji pozd∞ji na p°φkladu komunikace mezi klientem a serverem pro slu╛bu FINGER. Vzhledem k tomu, ╛e neexistuje (pokud je mi znßmo) ustßlen² Φesk² ekvivalent k termφnu wrapper, budu v dal╣φm textu pou╛φvat tento anglick² v²raz. Mezi funkce wrapperu pat°φ:
Je po╛adovßno, aby dΘmoni odpovφdajφcφ na sφ╗ovΘ po╛adavky, byli spou╣t∞ni pomocφ n∞jakΘho specißlnφho serveru, jako je (ve v∞t╣in∞ p°φpad∙) dΘmon inetd. Wrapper vyu╛φvß nastavenφ tzv. programovΘho rozhranφ TLI (transport level interface), pokud je k dispozici. Jak to pracujeTΘm∞° v╣echny aplikace provozovanΘ na protokolu TCP/IP jsou zalo╛eny na modelu klient-server. Nap°. pokud n∞jak² u╛ivatel zadß na lokßlnφm poΦφtaΦi p°φkaz telnet (klient), aby se p°ipojil na vzdßlen² poΦφtaΦ, je na tomto poΦφtaΦi spu╣t∞n proces (server), kter² umo╛nφ navßzßnφ spojenφ. P°φklady program∙ klient-server jsou v tabulce P°φklady architektury klient-server.
Tabulka 1: P°φklady architektury klient-server V∞t╣inou je na stran∞ serveru spu╣t∞n jedin² dΘmon, kter² Φekß na v╣echny p°φchozφ ╛ßdosti o spojenφ. Tento dΘmon se v∞t╣inou jmenuje inetd. Jakmile je spojenφ navßzßno, inetd spustφ p°φslu╣n² server a zaΦne op∞t Φekat na dal╣φ po╛adavky. Programy typu wrapper fungujφ na jednoduchΘm principu. Mφsto aby inetd spustil hned p°φslu╣n² server, inetd spustφ wrapper a jako parametr mu p°edß jmΘno serveru, kter² se m∞l p∙vodn∞ spustit. Wrapper pak zaznamenß do n∞jakΘho souboru (logu) jmΘno a adresu klientskΘho poΦφtaΦe a m∙╛e tΘ╛ provΘst dal╣φ kontrolnφ Φinnosti. Kdy╛ tyto Φinnosti prob∞hnou dob°e, wrapper spustφ p°φslu╣n² server a sßm skonΦφ. Programy typu wrapper majφ svoje v²hody i nev²hody. Mezi v²hody pat°φ to, ╛e wrapper je nezßvisl² jak na klientovi, tak na serveru, tak╛e tyto programy nejsou zßvislΘ na aplikaci, lze je pou╛φt (s jist²m omezenφm) na jakΘkoliv internetovΘ slu╛by. Krom∞ toho jsou wrappery pro klienty neviditelnΘ (p°inejmen╣φm pro autorizovanΘ klienty). V²hodnΘ je rovn∞╛ to, ╛e wrapper je aktivnφ pouze p°i inicißlnφm kontaktu mezi klientem a serverem, tak╛e jakmile wrapper splnφ svoji ·lohu, nevznikß dal╣φ overhead (tj. "nadbyteΦnß data") v komunikaci mezi klientem a serverem. Jednoduch² mechanismus funkce wrapperu mß v╣ak jednu velkou nev²hodu. Wrapper vφcemΘn∞ nelze pou╛φt pro servery, kterΘ obhospoda°ujφ vφce ne╛ jednoho klienta. Wrapper by toti╛ m∞l efekt pouze na klienta, kter² prvnφ kontaktuje server. Typick²m p°φpadem je NFS mount dΘmon. V n∞kter²ch p°φpadech mß v╣ak pou╛itφ nap°. p°φstupov²ch tabulek implementovßn p°φmo server, nebo lze n∞kdy pou╛φt pomocn² software, kter² tuto nev²hodu eliminuje. Wrapper zaznamenßvß informace o ╛ßdostech a pr∙b∞hu p°ipojenφ do logovacφch soubor∙ s vyu╛itφm logovacφho dΘmona, kter² se v∞t╣inou jmenuje syslogd (viz manovß strßnka syslogd(8)). To, do kterΘho souboru je informace uklßdßna, zßle╛φ na konfiguraci logovacφho dΘmona. Tato konfigurace je zpravidla v souboru /etc/syslog.conf. V distribuci Red Hat Linux wrapper zapisuje hlß╣ky v∞t╣inou do souboru /var/log/messages. Wrapper lze nastavit n∞kolika zp∙soby. Nejb∞╛n∞j╣φ p°φstup je zm∞na v souboru /etc/inetd.conf. Uvedeme si nynφ slφben² p°φklad se slu╛bou FINGER. P∙vodnφ polo╛ka v souboru /etc/inetd.conf mohla vypadat nap°. takto:
finger stream tcp nowait nobody \ /usr/sbin/in.fingerd in.fingerd Abychom uvedli v Φinnost program tcpd, zm∞nφme p∙vodnφ polo╛ku takto:
finger stream tcp nowait nobody \ /usr/sbin/tcpd in.fingerd Nynφ tedy p°i po╛adavku na p°ipojenφ slu╛bou FINGER nebude hned spu╣t∞n program in.fingerd, ale program tcpd. Pokud je dΘmon pro danou slu╛bu uveden bez cesty, tcpd jej hledß v adresß°i, kter² byl nastaven v konstant∞ REAL_DAEMON_DIR (lze ji zadat p°ed p°ekladem programu), co╛ je v Red Hat Linux 5.0 adresß° /usr/sbin. Lze v╣ak pou╛φt i absolutnφ cestu:
ntalk dgram udp wait root \ /usr/etc/tcpd /usr/local/lib/ntalkd Po tΘto zm∞n∞ musφme zaslat signßl HUP procesu inetd, aby se zm∞na projevila. UΦinφme tak nap°. p°φkazem
killall -HUP inetd Tabulky kontroly p°φstupuProgram tcpd je v distribuci Red Hat p°elo╛en s podporou kontroly p°φstup∙, kterß je realizovßna pomocφ dvou soubor∙: /etc/hosts.allow a /etc/hosts.deny. Tyto soubory se v∞t╣inou oznaΦujφ jako tabulky kontroly p°φstupu. Tyto soubory obsahujφ pravidla urΦujφcφ, kterß p°ipojenφ od kter²ch poΦφtaΦ∙ majφ b²t akceptovßna a kterß ne. Tyto tabulky jsou vyu╛φvßny i n∞kter²mi dal╣φmi programy, jako je nap°. ssh (alespo≥ podle m²ch zku╣enostφ), kterΘ pomocφ dΘmonu tcpd spou╣t∞ny nejsou. S tφmto je t°eba poΦφtat. Kdy╛ nap°. povolφme jen n∞kterΘ dΘmony, kterΘ vyΦteme ze souboru /etc/inetd.conf, musφme b²t p°ipraveni na to, ╛e mo╛nß nepojedou n∞kterΘ jinΘ v∞ci. Potom v╣ak staΦφ p°φslu╣nΘ slu╛by doplnit. Nap°. budeme chtφt zakßzat v╣echny slu╛by volanΘ dΘmonem inetd pro poΦφtaΦ se jmΘnem anchor.env.cz. Naeditujeme tedy soubor /etc/hosts.deny a dßme do n∞j pravidlo
ALL: anchor.env.cz Zjistφme v╣ak, ╛e se na nß╣ poΦφtaΦ nelze z jmenovanΘho poΦφtaΦe p°ipojit pomocφ programu ssh. Dßle se nßm nelφbφ, ╛e najednou nejdou na poΦφtaΦi anchor montovat disky z na╣eho poΦφtaΦe. Je to proto, ╛e tabulky kontroly p°φstupu ovliv≥ujφ i program portmapper, kter² je pro montovßnφ disk∙ pot°ebn². Slu╛bu programu portmapper musφme tedy rovn∞╛ povolit. Tato slu╛ba se oznaΦuje °et∞zcem "portmap". Na╣e pravidlo tedy upravφme takto:
ALL EXCEPT sshd,portmap: anchor.env.cz Nynφ by ji╛ m∞ly v²╣e zmφn∞nΘ v∞ci fungovat. Oba soubory mohou obsahovat vφce pravidel. Pravidla majφ obecn∞ tvar
<seznam dΘmon∙> : <klientskΘ poΦφtaΦe> \ [ : <p°φkaz shellu> ] ╚ßst v hranat²ch zßvorkßch je nepovinnß. Prvky seznamu mohou b²t odd∞leny Φßrkou nebo mezerou. Je mo╛no pou╛φvat nap°. tyto wildcards:
Podrobn∞j╣φ informace naleznete v manovΘ strßnce hosts_access(5). V seznamu m∙╛e b²t tΘ╛ uveden operßtor EXCEPT, jeho╛ funkce je patrnß z v²╣e uvedenΘho p°φkladu. Vysv∞tlφme si krßtce, jak wrapper urΦuje oprßvn∞nost po╛adavk∙ o p°ipojenφ. Wrapper hledß v tabulkßch a pou╛ije prvnφ pravidlo, kterΘ vyhovuje po╛adavku. P°i v²b∞ru pravidel se postupuje takto:
Syntaxe pravidel kontroly p°φstupu je dokumentovßna v manovΘ strßnce hosts_access(5). Je pot°eba, aby wrapper nezpomaloval odezvu serveru, a proto byl jazyk pro psanφ pravidel navr╛en tak, aby byl co nejjednodu╣╣φ. Se zvy╣ujφcφ se rychlostφ poΦφtaΦ∙ je tento jazyk mo╛nΘ roz╣φ°it. Toto roz╣φ°enφ je popsßno v manovΘ strßnce hosts_options(5). Aby bylo mo╛nΘ toto roz╣φ°enφ pou╛φt, musφ b²t wrapper s tφmto roz╣φ°enφm zkompilovßn. V p°φpad∞ distribuce Red Hat Linux tomu tak je. Kontrolnφ v²pis pravidel provedeme p°φkazem tcpdchk -v. Pravidla pro kontrolu p°φstupu mohou b²t tΘ╛ pou╛ita k tomu, aby klient∙m byl spu╣t∞n "ten sprßvn²" server. Nap°. chceme, aby WWW databßze komunikovala v rodnΘm jazyce, pokud se p°ipojφ klient z danΘ zem∞, a v angliΦtin∞, pokud se p°ipojφ klient odjinud. Vypisovßnφ zprßv klient∙m (banner messages)Pokud je povoleno roz╣φ°enφ jazyka, je mo╛nΘ p°ed spu╣t∞nφm p°φslu╣nΘho serveru vypsat klientovi n∞jakou zprßvu. Pravidlo bude mφt pak tento tvar:
<seznam dΘmon∙> : <seznam klient∙> : \ banners /some/directory Pokud dojde k vyhov∞nφ, program tcpd se nejprve podφvß do adresß°e /some/directory a pokud v n∞m najde soubor, kter² mß stejnΘ jmΘno, jako p°φslu╣n² dΘmon, zkopφruje jeho obsah klientovi. Nap°. pro slu╛bu TELNET se dΘmon jmenuje in.telnetd, tak╛e stejn∞ se bude jmenovat i p°φslu╣n² soubor. M∙╛e v n∞m b²t nap°. zprßva
Ahoj %u@%h, co t∞ k nßm p°ivßdφ? %u a %h jsou tzv. %<pφsmeno> expanze. KonkrΘtn∞ %u bude expandovßno na jmΘno u╛ivatele a %h na jmΘno klientskΘho poΦφtaΦe. T∞chto expanzφ je vφc a jsou popsßny v manovΘ strßnce hosts_access(5). Nßvod, jak spravovat soubory se zprßvami je v souboru /usr/doc/tcp_wrappers*/Banners.Makefile. Konfigurace a instalaceInstalace tohoto balφku na Linuxu je velice jednoduchß pokud pou╛φvßte nap°. distribuci Red Hat. Tento balφk m∙╛e b²t instalovßn ji╛ p°i instalaci celΘho systΘmu. Pro ·plnost uvedu je╣t∞ p°φslu╣n² postup, pokud balφk p°i instalaci celΘho systΘmu instalovßn nebyl:
Instalace pomocφ rpm provede p°φslu╣nΘ zm∞ny do souboru /etc/inetd.conf. Soubory /etc/hosts.allow a /etc/hosts.deny si upravφme podle sv²ch p°edstav. Dßle m∙╛eme zkusit program tcpdchk, kter² kontroluje r∙znΘ nesrovnalosti, nap°. p°i jeho spu╣t∞nφ m∙╛eme dostat hlß╣ku
warning: /etc/inetd.conf, line 28: \ /usr/sbin/wu-ftpd: not found: \ No such file or directorytakovΘto nesrovnalosti bychom m∞li odstranit. M∙╛eme taky vyzkou╣et, jak bude probφhat ╛ßdost o p°ipojenφ na n∞jakou slu╛bu z n∞jakΘho klienta. K tomu pou╛ijeme program tcpdmatch. Nap°.
tcpdmatch in.telnetd anchor.env.cz Vypφ╣e nap°.
client: hostname anchor.env.cz client: address 10.0.8.117 server: process in.telnetd access: granted Program tcpd, v╣echny soubory, kter² tento program pou╛φvß, a v╣echny p°φslu╣nΘ adresß°e by m∞li b²t ΦitelnΘ, ale ne zapisovatelnΘ pro neprivilegovanΘ u╛ivatele (m≤d 755 nebo 555). Program tcpd by nem∞l b²t set-uid. Pokud neexistujφ tabulky pro kontrolu p°φstupu, tcpd se bude chovat tak, jako by byly prßzdnΘ. Podle dokumentace program tcpd nepracuje s RPC slu╛bami nad protokolem TCP. Ov╣em jedinß netrivißlnφ slu╛ba, kterß je tφmto posti╛ena, je rexd, jejφ╛ pou╛φvßnφ je v╣ak pr² velice nebezpeΦnΘ. Dal╣φ informace a poznßmkyWrapper se sna╛φ odhalit tzv. host name spoofing a host address spoofing. Jde o to, ╛e klientsk² poΦφtaΦ se pokou╣φ zfal╣ovat svoji identitu. V prvnφm p°φpad∞ se jednß o pokus zfal╣ovßnφ jmΘna poΦφtaΦe, v druhΘm o pokus zfal╣ovßnφ jeho IP adresy. Pokud wrapper zjistφ v tomto sm∞ru n∞jakΘ nesrovnalosti, spojenφ odep°e.Wrapper je v distribuci Red Hat 5.0 p°elo╛en s volbou -DKILL_IP_OPTIONS, co╛ znamenß, ╛e programy budou odmφtat navßzat TCP spojenφ u paket∙, kterΘ majφ nastaveno sm∞rovßnφ (IP source routing packets). Protokol navr╛en² v dokumentu RFC 931 poskytuje prost°edky pro zφskßnφ u╛ivatelskΘho jmΘna z poΦφtaΦe klienta (client username lookup). Je po╛adovßno, aby na klientskΘm poΦφtaΦi b∞╛el n∞jak² dΘmon, kter² vyhovuje specifikaci RFC 931 (identd). Tato specifikace bohu╛el nenφ dßna jednoznaΦn∞, t∞ch protokol∙ je vφc. DΘmon tcpd podporuje jen nejb∞╛n∞j╣φ z nich. Program tcpd provßdφ zji╣╗ovßnφ jmΘna u╛ivatele pouze pokud je to vy╛adovßno v pravidlech pro kontrolu p°φstupu, nebo pokud je jmΘno u╛ivatele pot°eba v n∞jakΘ %<pφsmeno> expanzi. Rutiny pro kontrolu p°φstupu mohou b²t snadno integrovßny do dal╣φch program∙. Manovß strßnka hosts_access(3) popisuje aplikaΦnφ interface knihovny libwrap.a. Oznßmenφ o nov²ch verzφch tohoto software je postovßno do usenetov²ch skupin (alespo≥) comp.security.unix, comp.unix.admin a posφlßno do specißlnφ diskusnφ skupiny, do kterΘ se m∙╛ete p°ihlßsit zaslßnφm zprßviΦky bez subjectu, kterß bude obsahovat prßv∞ a jen °et∞zec subscribe tcp-wrappers-announce na adresu majordomo@wzv.win.tue.nl. M∙╛ete se tΘ╛ p°ihlßsit do diskusnφ skupiny o firewallech (po╣lete na adresu majordomo@greatcircle.com dopis bez subjectu obsahujφcφ prßv∞ a jen °et∞zec subscribe firewalls). Jejφ archiv je na serveru ftp://ftp.greatcircle.com. Dal╣φ informace naleznete tΘ╛ v manov²ch strßnkßch hosts_access(3, 5), hosts.allow(5), hosts.deny(5), hosts_options(5), tcpd(8), tcpdchk(8), tcpdmatch(8). P°φkazem
rpm -qil tcp_wrapperszφskßme krßtkou informaci o (nainstalovanΘm) balφku tcp_wrappers a v²pis v╣ech relevantnφch soubor∙. Dal╣φ informace jsou tΘ╛ k dispozici v adresß°i /usr/doc/tcp_wrappers*. Pou╛itß literatura:
![]()
|