|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T b
Length: 42374 (0xa586) Types: TextFile Names: »b.cheswick.secure.internet.gtway.ps«
└─⟦4f9d7c866⟧ Bits:30007245 EUUGD6: Sikkerheds distributionen └─⟦this⟧ »./papers/Network_Security/b.cheswick.secure.internet.gtway.ps«
%!PS div 112 page header - research!pg /inch {72 mul} def /pageborder { 25 747 moveto 590 747 lineto 590 25 lineto 25 25 lineto closepath 2 setlinewidth 0 setgray stroke } def /topborder { 25 773 moveto 590 773 lineto 590 747 lineto 25 747 lineto closepath 2 setlinewidth 0 setgray stroke } def /toptext { 120 756 moveto /Courier-Bold findfont 14 scalefont setfont (ches Fri Apr 20 07:46:11 EDT 1990) show } def /prface { gsave translate rotate scale setgray 48 48 true [48 0 0 -48 0 48] {<00000e320000 00007fff0000 0001ffffc000 0007fffff000 000ffffff800 000ffffffc00 001ffffffc00 003ffffffe00 003fffffff00 007fffffff00 007fffffff80 01ffffffff80 01ffffffffc0 03fffcfbffc0 00fff982ffc0 01ffa040ffe0 01ff00003fc0 00fe00005fc0 01fc00009ff0 00fe80003ff0 00fc2007dfe0 00fffc1ffff0 00fe5120bfe4 00ff8e30ffd0 00f6ff6fdfe8 003bf259bf12 00388f325e28 000920243c52 00084658ae28 00148a381c54 000a2401e650 000803781eaa 001506e056a8 000441149d50 00090e093ea8 0004503e0d68 00033fe23d50 0004041c6ad0 000589009da8 000212287b50 0007444536a0 000288087aa8 00052001f540 0002c32beb50 0005fa57fe80 00186aaff0a0 0022bd5fd900 00681fff3400>} imagemask grestore } def save mark statusdict begin /manualfeed false def end /#copies 1 def erasepage initgraphics pageborder topborder toptext 0 14 14 0 94 752 prface .3 180 180 -90 3.0 inch 10.2 inch prface showpage cleartomark restore %! %!PS %! /TeXDict 200 dict def TeXDict begin /packedarray where not{/packedarray{array astore}bind def}if /setpacking where{/curpack currentpacking def pop true setpacking}if /Resolution 300 def /Inch{Resolution mul}bind def /Mtrx 6 array def /imm matrix def /@letter{72 Resolution div dup neg scale 1.03 Resolution mul -10.02 Resolution mul translate Mtrx currentmatrix pop}def /@landscape{ initmatrix 72 Resolution div dup neg scale Mtrx currentmatrix 0 0.0 put Mtrx 1 -1.0 put Mtrx 2 1.0 put Mtrx 3 0.0 put Mtrx setmatrix 1.0 Resolution mul 1.03 Resolution mul translate Mtrx currentmatrix pop}def /@copies{/#copies exch def }def /@restore /restore load def /restore{@restore}bind def /@pri{( )print ( )cvs print}bind def /dmystr(ZZf@@)def /newname{dmystr cvn}def /@FontMatrix[1 0 0 -1 0 0]def /@FontBBox[0 0 1 1]def /CharBuilder{exch /BitMaps get exch get dup null ne{aload pop 0 3 index neg 3 index neg 7 index 2 index add 7 index 2 index add setcachedevice imm dup 5 4 -1 roll put dup 4 4 -1 roll put true exch 5 -1 roll imagemask}{pop}ifelse} bind def /df{/fontname exch def dmystr 2 fontname cvx(@@@)cvs putinterval newname 7 dict def newname load begin /FontType 3 def /FontMatrix @FontMatrix def /FontBBox @FontBBox def /BitMaps 1 index array def /BuildChar /CharBuilder load def /Encoding 1 index array def 0 1 3 -1 roll 1 sub{Encoding exch /.undef put}for end newname newname load definefont setfont fontname{/foo setfont}2 array copy cvx def fontname load 0 dmystr 5 string copy cvn cvx put}bind def /dc{/ch-code exch def 6 packedarray currentfont /BitMaps get ch-code 3 -1 roll put currentfont /Encoding get ch-code dup( )cvs cvn put}bind def /bop{Mtrx setmatrix /SaveImage save def 0 0 moveto}bind def /eop{showpage SaveImage restore}bind def /@start{@letter}bind def /@end{end}bind def /p /show load def /v{/dy exch neg def /dx exch def /x1 currentpoint /y1 exch def def newpath x1 y1 moveto dx 0 rlineto 0 dy rlineto dx neg 0 rlineto closepath fill x1 y1 moveto}bind def /li /lineto load def /rl /rlineto load def /rc /rcurveto load def /np{/SaveX currentpoint /SaveY exch def def newpath}bind def /st{stroke SaveX SaveY moveto}bind def /fil{fill SaveX SaveY moveto}bind def /ellipse{ /endangle exch def /startangle exch def /yrad exch def /xrad exch def /yc exch def /xc exch def /savematrix matrix currentmatrix def xc yc translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}bind def /a /moveto load def /delta 0 def /b{exch p dup /delta exch def 0 rmoveto}bind def /c{p delta 4 sub dup /delta exch def 0 rmoveto}bind def /d{p delta 3 sub dup /delta exch def 0 rmoveto}bind def /e{p delta 2 sub dup /delta exch def 0 rmoveto}bind def /f{p delta 1 sub dup /delta exch def 0 rmoveto}bind def /g{p delta 0 rmoveto}bind def /h{p delta 1 add dup /delta exch def 0 rmoveto}bind def /i{p delta 2 add dup /delta exch def 0 rmoveto}bind def /j{p delta 3 add dup /delta exch def 0 rmoveto}bind def /k{p delta 4 add dup /delta exch def 0 rmoveto}bind def /l{p -4 0 rmoveto}bind def /m{p -3 0 rmoveto}bind def /n{p -2 0 rmoveto}bind def /o{p -1 0 rmoveto}bind def /q{p 1 0 rmoveto}bind def /r{p 2 0 rmoveto}bind def /s{p 3 0 rmoveto}bind def /t{p 4 0 rmoveto}bind def /w{0 rmoveto}bind def /x{0 exch rmoveto}bind def /y{3 -1 roll show moveto}bind def /bos{/section save def}bind def /eos{section restore}bind def /setpacking where{pop curpack setpacking}if end %! /ObliqueFont{/ObliqueAngle exch def /ObliqueBaseName exch def /ObliqueFontName exch def /ObliqueTransform[1 0 ObliqueAngle sin ObliqueAngle cos div 1 0 0] def /basefontdict ObliqueBaseName findfont ObliqueTransform makefont def /newfont basefontdict maxlength dict def basefontdict{exch dup /FID ne{dup /Encoding eq{exch dup length array copy newfont 3 1 roll put}{exch newfont 3 1 roll put}ifelse}{pop pop}ifelse}forall newfont /FontName ObliqueFontName put ObliqueFontName newfont definefont pop}def /Symbol-Oblique /Symbol 15 ObliqueFont /Times-Oblique /Times-Roman 15.5 ObliqueFont /pf{4736286.72 div Resolution mul /scfact exch def /PSname exch def /TeXname exch def dmystr 2 TeXname cvx(@@@)cvs putinterval PSname findfont[scfact 0 0 scfact neg 0 0] makefont newname exch def TeXname{/foo setfont}2 array copy cvx def TeXname load 0 dmystr 5 string copy cvn cvx put}def TeXDict begin @start bos 128 /fa df<FFF0FFF0>12 2 -1 -8 16 45 dc<60F0F060>4 4 -5 0 13 46 dc<03E0000E3800180C00300600300600700700600300600300E00380E00380E003 80E00380E00380E00380E00380E00380E00380E00380E00380E00380E003806003006003007007 00300600300600180C000C180003E000>17 29 -3 1 23 48 dc<01800003C00003C00003C000 03C00003C00003C00003C00001C00001C00001C00001C00000C00000C000006000006000002000 0020000010000010000008008004008002008002004001007FFF807FFF807FFFC0400000>18 29 -3 1 23 55 dc<FF803FFC1E0007C00C000780040007800400078002000F0002000F0002001F00 01001E0001FFFE0000803C0000803C0000803C0000407800004078000040F8000020F0000020F0 000011E0000011E0000011E000000BC000000BC000000FC0000007800000078000000300000003 000000030000>30 29 -2 0 34 65 dc<FFF00F000F000F000F000F000F000F000F000F000F00 0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00FFF0>12 28 -3 0 17 73 dc<000003E0FFF00E100F001E100F001C080F003C080F003C080F003C000F003C000F 003C000F003C000F003C000F003C000F0078000F0070000F01E0000FFF80000F00F0000F003800 0F001C000F000E000F000F000F000F000F000F000F000F000F000E000F001C000F0038000F00F0 00FFFF8000>29 29 -3 1 33 82 dc<000F80000070600000E0180001C0040003800400078002 00070002000F0001000F0001000F0001000F0001000F0001000F0001000F0001000F0001000F00 01000F0001000F0001000F0001000F0001000F0001000F0001000F0001000F0001000F0001000F 0001000F0001000F000380FFF01FF0>28 29 -3 1 34 85 dc<FE0FF83803C01801C008038008 038008038007FF00040700040700020E00020E00011C00011C00011C0000B80000B80000B80000 7000007000007000002000>21 21 -1 0 25 97 dc<FFFE001C07801C03C01C01C01C01E01C01 E01C01E01C01E01C03C01C03801FFF001FFF001C07801C03801C03C01C03C01C03C01C03C01C03 801C0700FFFC00>19 21 -1 0 24 98 dc<00FC000783000E00801C0040380040780020700020 F00020F00000F00000F00000F00000F00000F000207000207800203800601C00E00E01E0078260 00FC20>19 21 -2 0 25 99 dc<FFFC001C07001C01C01C00E01C00E01C00701C00701C00781C 00781C00781C00781C00781C00781C00781C00701C00701C00E01C00E01C01C01C0700FFFC00> 21 21 -1 0 26 100 dc<FFFFC01C01C01C00C01C00401C00601C00201C10201C10201C10001C 30001FF0001C30001C10001C10001C10401C00401C00401C00801C00801C0380FFFF80>19 21 -1 0 23 101 dc<FF8FF81C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01F FFC01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C0FF8FF8>21 21 -1 0 25 104 dc<FF801C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C 001C001C00FF80>9 21 -1 0 13 105 dc<FF83FC1C01F01C01E01C01C01C03801C07801C0700 1C0E001E1C001D1C001CB8001C70001C30001C10001C08001C04001C02001C01001C01801C01E0 FF83F8>22 21 -1 0 26 107 dc<FFFF001C07001C03001C01001C01801C00801C00801C00801C 00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0000FFC000> 17 21 -1 0 21 108 dc<FE083FE0381C0700101C0700101C0700103A0700103A070010710700 107107001071070010E0870010E0870011C0470011C0470011C047001380270013802700170017 0017001700170017001E000F00FE000FE0>27 21 -1 0 31 109 dc<FE00403800C01000C01001 C01003C01007C0100740100E40101C40101C4010384010704010704010E04011C04013C0401380 401700401E00401E00E0FC03F8>21 21 -1 0 25 110 dc<01F800070E001E07801C03803801C0 7801E07000E0F000F0F000F0F000F0F000F0F000F0F000F0F000F07000E07801E03801C01C0380 0C0300070E0001F800>20 21 -2 0 26 111 dc<FF80001C00001C00001C00001C00001C00001C 00001C00001C00001C00001FFC001C0F001C03801C03C01C03C01C03C01C03C01C03C01C03801C 0F00FFFC00>18 21 -1 0 23 112 dc<FF80F81C03CC1C07C41C07841C07801C07001C07001C07 001C0E001C1C001FF8001C0E001C07801C03801C03C01C03C01C03C01C03801C07801C0E00FFF8 00>22 21 -1 0 25 114 dc<8FC0F060C03080108018801800180038007803F01FE03FC07E00E0 00C000C010C010C030603030F01F10>13 21 -2 0 19 115 dc<07FF0000700000700000700000 700000700000700000700000700000700000700000700000700000700080700880700880700840 70104070106070307FFFF0>21 21 -1 0 25 116 dc<00FC000386000601000E00800C00C01C00 401C00401C00401C00401C00401C00401C00401C00401C00401C00401C00401C00401C00401C00 401C00E0FF83F8>21 21 -1 0 25 117 dc<FE07F83C03C00C03C0040380040700020F00010E00 011C0000BC0000780000700000F00000F00001D00003C8000384000704000F02000E03001E0380 FF87F0>21 21 -1 0 25 120 dc<01FF0000380000380000380000380000380000380000380000 3800007C0000740000E20000E20001C10003C1800380800700400F00400E00201E0078FF80FE> 23 21 0 0 25 121 dc /fb /Times-Bold 786432 pf /fc /Courier 655360 pf /fd /Times-Bold 655360 pf /fe /Times-Italic 655360 pf /ff /Symbol 655360 pf /fg /Times-Roman 655360 pf bop 538 282 a fb(The)13 b(Design)f(of)g(a)g(Secur)o (e)h(Internet)f(Gateway)857 377 y fg(Bill)c(Cheswick)783 427 y(ches@research.\ att.com)772 510 y fe(A)n(T&T)j(Bell)g(Laboratories)712 560 y(Murray)f(Hill,)f (New)h(Jersey)j(07974)867 681 y fg(ABSTRACT)254 781 y(The)h(Internet)e(suppor\ ts)g(a)i(vast)f(and)g(growing)f(community)g(of)h(computers)h(users)f(around)g (the)g(world.)150 831 y(Unfortunately)m(,)c(this)h(network)f(can)i(provide)f (anonymous)g(access)i(to)e(this)f(community)h(by)g(the)g(unscrupulous,)150 881 y(careless,)17 b(or)d(dangerous.)25 b(On)14 b(any)g(given)g(Internet)f(there) i(is)f(a)g(certain)g(percentage)h(of)f(poorly-maintained)150 931 y(systems.) 27 b(A)-5 b(T&T)16 b(has)f(a)h(lar)o(ge)e(internal)g(Internet)g(that)g(we)h (wish)f(to)g(protect)f(from)i(outside)e(attacks,)k(while)150 980 y(providing) 8 b(useful)i(services)h(between)f(the)h(two.)254 1030 y(This)f(paper)h(descri\ bes)g(our)f(Internet)g(gateway)m(.)16 b(It)10 b(is)h(an)g(application-level)d (gateway)j(that)f(passes)i(mail)150 1080 y(and)f(many)h(of)f(the)g(common)g (Internet)g(services)h(between)g(our)e(internal)g(machines)j(and)e(the)g(Inte\ rnet.)16 b(This)11 b(is)150 1130 y(accomplished)i(without)d(IP)i(connectivity) f(using)g(a)i(pair)f(of)g(machines:)18 b(a)13 b(trusted)e(internal)g(machine) i(and)g(an)150 1180 y(untrusted)c(external)h(gateway)m(.)15 b(These)d(are)f (connected)g(by)f(a)h(private)f(link.)j(The)e(internal)e(machine)i(provides)f (a)150 1229 y(few)g(carefully-guarded)f(services)h(to)f(the)h(external)f(gate\ way)m(.)15 b(This)9 b(con\256guration)f(helps)i(protect)f(the)g(internal)150 1279 y(internet)g(even)i(if)f(the)g(external)g(machine)h(is)f(fully)f(comprom\ ised.)0 1425 y fd(1.)42 b(Intr)o(oduction)104 1502 y fg(The)14 b(design)e(of) h(a)h(Corporate)e(gateway)h(to)g(the)g(Inter-)0 1552 y(net)j(must)g(deal)h (with)e(the)i(classical)g(tradeof)o(f)f(between)h(se-)0 1601 y(curity)11 b (and)i(convenience.)21 b(Most)12 b(institutio)o(ns)e(opt)h(for)h(con-)0 1651 y (venience)j(and)g(use)h(a)f(simple)g(router)f(between)h(their)f(inter-)0 1701 y(nal)e(internets)f(and)h(the)g(rest)h(of)e(the)h(world.)19 b(This)12 b(is)g (danger-)0 1751 y(ous.)18 b(Strangers)11 b(on)h(the)f(Internet)g(can)h(reach) h(and)e(test)h(every)0 1801 y(internal)i(machine.)30 b(W)n(ith)15 b(workstati\ ons)f(sitting)f(on)i(many)0 1850 y(desks,)c(system)g(administration)d(is)i (often)g(decentralized)h(and)0 1900 y(neglected.)23 b(Passwords)13 b(are)h (weak)g(or)f(missing.)21 b(A)13 b(profes-)0 1950 y(sor)c(or)h(researcher)h (often)e(may)h(install)f(the)g(operating)g(system)0 2000 y(and)i(for)o(get)f (it,)g(leaving)g(well-known)f(security)h(holes)h(uncor-)0 2050 y(rected.)k (For)10 b(example,)i(a)f(sweep)g(of)g(1,300)e(machines)j(inside)0 2100 y(Bell) g(Labs)h(around)e(the)h(time)h(of)e(the)i(Internet)e(W)m(orm)h(found)0 2149 y (over)d(300)g(that)g(had)g(at)g(least)h(one)f(of)g(several)h(known)f(security) 0 2199 y(holes.)104 2268 y(When)25 b(we)g(\256rst)f(obtained)f(a)j(connection) d(to)h(the)0 2317 y(ARP)l(Anet,)15 b(Dave)g(Presotto)f(con\256gured)g(our)g (gateway)g(ma-)0 2367 y(chine)h(\(named)h fa(arp)m(a)p fg(\))g(as)g(an)g(appl\ ication-level)d(gateway)m(.)0 2417 y(For)e(two)f(years)i(this)e(machine)i(was) f(the)g(sole)g(of)o(\256cial)g(link)f(to)0 2467 y(the)15 b(Internet)f(for)h (A)-5 b(T&T)m(.)17 b(Until)c(its)i(disconnection)e(a)j(little)0 2517 y(while) c(ago,)j(this)d(V)-5 b(AX)12 b(750)h(handled)f(all)h(the)g(Internet)f(mail)0 2566 y(traf)o(\256c)i(and)f(other)f(services)i(for)e(the)h(company)m(.)23 b fa (Arp)m(a)14 b fg(had)0 2616 y(Ethernet)d(connections)g(to)g(both)f(the)h(insi\ de)g(and)g(outside)g(In-)0 2666 y(ternets,)f(just)f(like)h(a)h(router)n(.)i (It)c(could)h(also)g(make)h(and)f(accept)0 2716 y(calls)g(on)g(our)g(corporat\ e)g(Datakit)g(network.)1139 1425 y(Dave)k(took)f(a)i(number)f(of)f(steps)h (to)g(make)h(our)e(gate-)1035 1475 y(way)h(more)h(secure.)26 b(He)14 b(turned) g(of)o(f)f(IP)h(forwarding)f(in)g(the)1035 1525 y(kernel)j(so)g(packets)g(cou\ ld)g(not)f(travel)h(between)g(the)g(Inter-)1035 1575 y(nets.)34 b(He)18 b(ins\ talled)e(a)h(kernel)g(modi\256cation)f(that)g(limited)1035 1624 y(TCP)e(conne\ ctions)g(from)g fa(arp)m(a)h fg(to)e(the)h(inside)g(network)f(to)1035 1674 y fe(smtp)p fg(,)k fe(uucp)p fg(,)g fe(named)q fg(,)g(and)f fe(hostname)f fg (ports.)29 b(And)15 b(he)h(re-)1035 1724 y(jected)11 b(the)f fe(sendmail)g fg (mailer)g(as)h(too)f(complicated)h(and)f(dan-)1035 1774 y(gerous:)22 b(the)15 b(Upas[1])f(mailer)h(was)h(installed)e(in)g(its)g(place.)1035 1824 y(W)m(e)i (removed)g(a)h(number)e(of)h(non-essential)f(daemons,)j(in-)1035 1873 y(cludi\ ng)9 b(the)h fe(\256nger)g fg(server)n(.)1139 1946 y(T)m(o)g(give)f(insiders) f(access)k(to)d(the)g(Internet,)h(a)g fe(gate)f fg(ser-)1035 1996 y(vice)17 b (was)g(installed)e(on)h fa(arp)m(a)p fg(.)35 b(Insiders)16 b(could)f(call)i (this)1035 2046 y(service)d(and)f(supply)f(an)i(Internet)e(address.)24 b(The) 14 b(gate)f(con-)1035 2095 y(nected)j(to)e(a)i(socket)f(of)g(a)g(remote)h(Int\ ernet)e(host)g(and)i(then)1035 2145 y(copied)11 b(bytes)f(between)i(the)e(two) h(connections.)k(It)c(was)g(easy)1035 2195 y(to)f(provide)f fe(atelnet)p fg (,)i(a)g(version)f(of)g fe(telnet)g fg(that)g(used)h(the)f(gate)1035 2245 y (service.)29 b fe(Aftp)14 b fg(supplied)g(FTP)h(services:)24 b(it)14 b(was)i (the)e(stan-)1035 2295 y(dard)c(FTP)h(modi\256ed)f(so)h(both)e(the)h(command) h(and)g(data)f(con-)1035 2344 y(nections)i(were)i(initiated)d(from)i(the)g (inside.)21 b(\(The)13 b(standard)1035 2394 y fe(ftp)e fg(would)g(have)h(trie\ d)f(to)g(make)i(the)f(data)g(connection)f(from)1035 2444 y fa(arp)m(a)h fg (to)f(the)g(inside,)g(a)g(connection)g(prohibited)d(by)j fa(arp)m(a)p fg(')n (s)1035 2494 y(kernel.\))1139 2566 y(This)d(con\256guration)f(successfully)i (resisted)f(the)h(Inter-)1035 2616 y(net)g(worm.)14 b(W)m(e)c(ran)f(neither)g fe(sendmail)f fg(nor)h fe(\256nger)n(d)q fg(,)h(the)f(two)1035 2666 y(program\ s)h(exploited)g(by)g(the)g(worm.[2])g(The)i(internal)d(inter-)1035 2716 y(net) g(was)g(spared)h(the)e(infection.)13 b(\(Actually)m(,)8 b(there)h(was)h(a)f (sec-)1929 2917 y(1)g eop bop 0 57 a fg(ond,)14 b(unguarded)f(IP)g(link)f(to) h(the)g(Outside.)23 b(W)m(e)14 b(got)e(lucky:)0 107 y(only)e(a)i(few)g(machin\ es)h(at)e(the)h(other)e(end)i(knew)g(of)f(the)g(link,)0 157 y(and)16 b(their) f(machines)h(were)h(shut)e(down)g(before)h(the)f(worm)0 207 y(could)10 b(cree\ p)h(across.\))104 278 y(Had)k fa(arp)m(a)h fg(been)f(infected,)h(the)f(worm)g (could)f(have)0 328 y(reached)e(the)e(inside)g(machines.)16 b(The)11 b(initia\ l)e fe(smtp)h(sendmail)0 378 y fg(connection)g(was)h(permitted,)f(and)h(the)f (worm')n(s)g(second)h(con-)0 427 y(nection)d(would)g(have)h(been)h(initiated) d(from)h(the)h(inside)f(tar)o(get)0 477 y(machine)j(into)e fa(arp)m(a)p fg (,)j(the)e(permitted)g(direction.)0 587 y fd(2.)42 b(The)10 b(new)h(gateway) 104 666 y fg(All)g(of)h fa(arp)m(a)p fg(')n(s)h(protection)e(has,)i(by)f(desi\ gn,)h(left)e(the)0 716 y(internal)k(A)-5 b(T&T)17 b(machines)f(untested\320a) f(sort)g(of)g(crunchy)0 766 y(shell)8 b(around)g(a)h(soft,)f(chewy)h(center)n (.)14 b(W)m(e)8 b(run)g(security)g(scans)0 815 y(on)j(internal)g(machines)i (and)e(bother)g(system)h(administrators)0 865 y(when)i(holes)g(are)h(found.) 24 b(Still,)14 b(it)f(would)g(be)i(nice)f(to)g(have)0 915 y(a)d(gateway)f(tha\ t)g(is)g(demonstrably)f(secure)i(to)e(protect)h(the)g(in-)0 965 y(ternal)e (machines.)14 b(For)9 b(peace)h(of)e(mind,)g(the)h(gateway)g(design)0 1015 y (should)h(not)h(rely)h(on)f(vendors')g(code)h(more)g(than)f(absolutely)0 1065 y(necessary)m(.)31 b(W)m(e)16 b(would)e(like)h(the)g(internal)g(machines)h (pro-)0 1114 y(tected)e(even)g(if)f(an)g(invader)g(breaks)h(into)e(the)i(gate\ way)f(ma-)0 1164 y(chine,)d(becomes)g(root,)f(and)g(creates)i(and)e(runs)g (a)g(new)h(kernel.)104 1235 y(W)m(e)h(had)f(to)g(replace)i fa(arp)m(a)p fg (.)k(The)11 b(V)-5 b(AX)11 b(750)f(ran)g(with)0 1285 y(typical)d(load)g(avera\ ges)i(of)e(seven)h(to)f(twelve)h(jobs)f(throughout)0 1335 y(the)h(day)m(.)14 b (When)9 b(the)f(load)g(average)h(hit)f(about)f(\256fteen,)j(the)e(old)0 1385 y (Datakit)13 b(driver)h(expired,)h(wedging)e(the)h(Datakit)f(ports)g(and)0 1435 y(requiring)c(a)h(reboot.)104 1506 y(A)i(new)f(machine)i(gave)f(the)g(opportu\ nit)o(y)d(for)i(a)h(clean)0 1556 y(start.)27 b(W)m(e)16 b(could)e(re-think)f (the)i(security)f(arrangements)i(to)0 1606 y(improve)10 b(on)g fa(arp)m(a)p fg (')n(s)h(shortcomings.)104 1677 y(Our)18 b(new)h(gateway)g(machine,)j(named)d fa(inet)p fg(,)i(is)e(a)0 1727 y(MIPS)7 b(M/120)g(running)e(System)j(V)g(with) e(Berkeley)h(enhance-)0 1776 y(ments.)35 b(V)-5 b(arious)17 b(daemons)h(and)f (critical)g(programs)g(have)0 1826 y(been)j(obtained)e(from)h(other)g(sources\ ,)k(checked,)g(and)c(in-)0 1876 y(stalled.)104 1947 y(W)m(e)8 b(store)g(nothi\ ng)e(vital)h(or)g(secret)i(on)f fa(inet)p fg(,)g(since)h(we)0 1997 y(assume) 14 b(that)e(it)f(may)i(be)g(defeated)g(in)f(unforeseen)h(ways.)21 b(It)0 2047 y(does)13 b(not)e(currently)g(run)h fe(uucp)p fg(\320systems)g(\256les)h(and) f(dialers)0 2097 y(could)f(fall)g(into)g(the)h(wrong)f(hands.)18 b(There)13 b (are)g(few)f(system)0 2146 y(administration)c(accounts,)i(and)g(user)g(accoun\ ts)g(are)g(discour-)0 2196 y(aged.)30 b fa(Inet)15 b fg(is)g(not)g(used)g(for) g(other)g(tasks.)29 b(It)15 b(is)g(backed)0 2246 y(up)9 b(regularly)m(,)f(and) h(scanned)h(for)f(unauthorized)e(changes)j(and)0 2296 y(common)k(system)h(adm\ inistration)d(mistakes.)25 b(Though)14 b(we)0 2346 y(don')o(t)9 b(trust)g fa (inet)p fg(,)i(we)g(protect)e(it)h(as)h(much)f(as)h(we)g(can.)104 2417 y fa (Inet)17 b fg(has)h(a)f(single)g(Ethernet)g(port)f(which)g(is)h(con-)0 2467 y (nected)f(to)f(a)h(router)e(on)h(JVNCnet,)i(our)e(external)g(regional)0 2517 y (network.)j(It)12 b(also)g(has)g(a)h(connection)e(to)h(Datakit.)18 b(W)m(e)13 b(have)0 2566 y(con\256gured)i(our)g(Datakit)f(controller)g(to)h(force)h(all) f(connec-)0 2616 y(tions)g(from)g fa(inet)h fg(to)f(a)i(single)e(internal)g (machine,)j(named)0 2666 y fa(r70)p fg(.)d fa(R70)10 b fg(can)h(redial,)g(or) f(splice)g(connections)g(to)g(other)g(in-)0 2716 y(ternal)f(machines.)15 b fa (R70)10 b fg(provides)e(a)i(limited)e(set)i(of)f(services)1035 57 y(to)h fa (inet)g fg(for)g(reaching)h(internal)e(machines.)16 b(The)11 b(list)f(of)g (ser-)1035 107 y(vices)h(are:)1087 185 y(1.)21 b(connection)9 b(to)h(an)h(app\ roved)e(machine')n(s)i fe(smtp)f fg(port,)1087 295 y(2.)21 b(connection)7 b (to)g(a)h(login)e(or)i(trusted-login)d(Datakit)i(des-)1139 345 y(tination)13 b (after)j(passing)g(a)g(challenge-response)g(test,)1139 395 y(and)1087 506 y (3.)21 b(connection)9 b(to)h(a)h(logging)d(service.)1139 583 y(The)13 b(key)g (to)f(the)h(arrangement)g(is)g(a)g(restricted)g(chan-)1035 633 y(nel)e(from)g fa(inet)f fg(to)h fa(r70)p fg(.)16 b(This)11 b(private)f(channel)i(was)f(easi\ ly)1035 683 y(constructed)e(using)f(stock)g(features)i(of)f(our)f(research)j (Datakit)1035 733 y(controller)n(.)21 b(Other)13 b(connection)f(schemes)j(cou\ ld)d(be)i(imple-)1035 783 y(mented)d(using)f(a)h(simple)g(multiplexed)e(proto\ col)g(over)h(some)1035 832 y(back-to-back)17 b(connection)g(between)h(the)f (machines,)j(or)e(a)1035 882 y(simple)c(Ethernet)g(would)e(suf)o(\256ce.)27 b (If)13 b(the)h(last)g(approach)g(is)1035 932 y(used)g(with)f(TCP)-5 b(,)15 b (the)f(internal)f(machine)i(must)f(supply)f(dif-)1035 982 y(fering)h(TCP)h (services)h(to)e(its)g(two)g(Ethernet)h(interfaces.)28 b(\(I)1035 1032 y(am) 14 b(not)f(sure)g(this)g(is)g(possible)g(with)f(standard)h(TCP/IP)g(im-)1035 1081 y(plementations.)j(It)11 b(wouldn')o(t)e(be)j(too)e(hard)h(to)g(modify)f fe(inetd)1035 1131 y fg(to)g(do)g(this.\))1139 1207 y(These)h(functions)e(do) h(not)g(load)g(the)g(internal)f(machine)1035 1257 y(too)j(much;)j(it)d(could) h(have)g(other)g(uses)h(like)e fe(uucp)p fg(,)i fe(mail)p fg(,)f(or)1035 1307 y(even)f(normal)f(user)h(jobs.)k(But)11 b(the)g(services)h(it)f(provides)f (the)1035 1357 y(external)k(machine)h(are)f(the)g(key)g(to)g(security)m(,)h (and)f(must)g(be)1035 1407 y(protected)c(well.)1035 1531 y fd(3.)42 b(Outboun\ d)10 b(services)1139 1617 y fg(It)h(is)g(quite)f(easy)i(to)f(implement)g(most) g(outbound)f(ser-)1035 1667 y(vices)g(to)f(the)h(Internet.)j fa(Inet)c fg(has) i(a)f(small)f(program,)h(named)1035 1717 y fe(pr)n(oxy)k fg(\(a)g(descendant) f(of)g fa(arp)m(a)p fg(')n(s)h fe(gate)p fg(\),)g(that)f(makes)h(calls)1035 1767 y(to)f(the)h(Internet)f(on)g(behalf)g(of)h(an)g(inside)f(machine)h(and)g (re-)1035 1816 y(lays)h(bytes)g(between)h(the)f(inside)g(Datakit)f(connection) h(and)1035 1866 y(the)8 b(outside)f(Internet)h(TCP)g(connection.)13 b fe(Pr)n (oxy)d fg(can)f(also)f(lis-)1035 1916 y(ten)h(to)f(a)i(non-privileged)d(socke\ t)i(and)g(report)f(connections)h(to)1035 1966 y(an)g(inside)f(process.)15 b (Several)9 b(outbound)e(services)j(are)g(imple-)1035 2016 y(mented)h(using)f fe(pr)n(oxy)p fg(,)i(and)f(more)g(are)g(easy)h(to)e(create.)16 b(In)10 b(all) 1035 2065 y(cases,)18 b(it)c(appears)i(to)f(the)f(remote)i(Internet)e(hosts)g (that)h(our)1035 2115 y(gateway)c(machine)g(is)f(making)g(the)g(calls.)1139 2191 y fa(Inet)h fg(may)g(be)h(reached)g(over)e(the)h(Datakit.)16 b(But)10 b (how)1035 2241 y(do)18 b(internal)g(machines)h(reach)h fa(inet)e fg(over)h (the)f(Ethernet?)1035 2291 y fa(R70)f fg(responds)g(to)f(two)h(IP)g(addresses\ :)28 b(its)16 b(own,)j(and)e(an)1035 2341 y(internal)f(IP)h(address)g(for)g fa (inet)p fg(.)34 b(\(Dave)17 b(Presotto)g(imple-)1035 2391 y(mented)d(this)e (after)i(a)g(trivial)e(change)i(to)f(the)g(T)m(enth)h(Edition)1035 2440 y(Res\ earch)j(Unix)e(connection)g(server)n(.[3]\))h(Calls)f(to)g(certain)1035 2490 y (TCP)8 b(ports)e(on)h(this)f(internal)g(IP)i(address)g(invoke)e fe(dcon)p fg (,)i(a)g(pro-)1035 2540 y(gram)i(that)e(simply)h(relays)g(the)h(bytes)f(betwe\ en)g(the)h(TCP)f(port)1035 2590 y(and)h(Datakit)g(connections)g(on)f fa(inet) p fg(.)1139 2666 y(I)g(have)h(replaced)h(the)e(old)g fe(aftp)f fg(and)h fe (atelnet)g fg(with)g fe(ptel-)1035 2716 y(net)14 b fg(and)g fe(pftp)p fg(.)24 b(They)15 b(work)e(in)h(the)f(same)j(manner)n(,)g(but)d(the)g eop bop 0 57 a fg(new)9 b(routines)e(call)i(a)g(portable)f(implementation)f(of)h fe(ipcopen) p fg(,)0 107 y(a)k(piece)g(of)e(the)i(connection)e(server)n(.)17 b fe(Ipcopen) 11 b fg(hides)g(the)g(de-)0 157 y(tails)h(of)g(a)g(connection)g(\(TCP)g(socke\ ts)h(or)f(Datakit\),)g(simpli-)0 207 y(fying)d(the)h(application)f(program.) 14 b(For)c(example:)0 280 y fc(ptelnet)24 b(tcp!toucan)0 352 y fg(connects)11 b(to)e(machine)i fa(toucan)h fg(on)d(our)h(internet,)g(and)0 425 y fc(ptelnet) 24 b(proxy!ernie.berkeley.edu)0 498 y fg(connects)10 b(to)g fa(ernie.berkeley\ .edu)j fg(on)d(the)g(external)g(In-)0 548 y(ternet.)k fc(proxy!)f fg(is)c(the) h(default.)j(The)e fe(ipcopen)e fg(implemen-)0 598 y(tation)f(is)i(not)f(\257\ awless:)k(some)e(socket)f(features)g(such)g(as)g(out-)0 647 y(of-band)e(data) h(and)g(the)g(ur)o(gent)f(pointer)g(are)h(missing)g(because)0 697 y(they)h (are)h(not)e(supported)g(by)h(Datakit.)j fe(Ptelnet)d fg(was)h(stripped)0 747 y(down)f(to)f(avoid)h(these)h(features.)104 820 y fe(Pftp)f fg(provides)h(FTP) h(access)h(in)e(a)h(similar)f(manner)n(.)18 b(It)0 870 y(is)11 b(an)h(updated) g(version)f(of)g fe(aftp)f fg(from)i fa(arp)m(a)p fg(.)19 b(The)13 b fe(ipcop\ en)0 920 y fg(routines)c(allow)h(it)f(to)h(work)g(over)g(Datakit.)104 992 y (Outgoing)h(mail)i(is)h(sent)f(to)g fa(inet)g fg(via)g fe(smtp)g fg(over)g (ei-)0 1042 y(ther)c(Datakit)g(or)g(the)g(internal)g(Internet.)k(It)c(is)g (stored)g(and)h(for-)0 1092 y(warded)16 b(from)f(there.)29 b(Upas)15 b(perfor\ ms)g(the)h(mail)f(gateway)0 1142 y(functions.)0 1254 y fd(4.)42 b(Inbound)10 b (services)104 1335 y fg(W)m(e)f(provide)f(incoming)g(login)g(and)h(mail)g(ser\ vice.)14 b(For)0 1385 y(incoming)j(\256le)h(transfer)n(,)j fa(inet)c fg(provi\ des)g(an)i(anonymous)0 1435 y(FTP)11 b(service.)104 1508 y(W)m(e)17 b(do)g (not)f(trust)g(our)g(passwords)h(to)g(the)f(Internet:)0 1558 y(it)g(is)g(too) g(easy)h(to)f(eavesdrop)h(or)g(steal)f(packets.)34 b(See)18 b([4)o(])0 1607 y (for)11 b(a)h(discussion)e(of)h(these)h(security)f(problems.)17 b(Login)11 b (ser-)0 1657 y(vice)j(requires)g(a)g(hand-held)f(authenticator)g(\(HHA\).)h (These)0 1707 y(are)h(calculator)o(-sized)g(devices)g(that)f(contain)g(DES)h (encryp-)0 1757 y(tion)8 b(and)i(a)g(manually-loaded)f(64-bit)f(key)m(.)14 b (They)c(cost)g(about)0 1807 y($50.)104 1879 y(Inbound)f(login)f(service)j(is) g(provided)e(through)f(an)j(au-)0 1929 y(thentication)i(manager)j(on)f fa(r70) p fg(.)29 b(A)15 b(session)g(is)g(shown)g(in)0 1979 y(\256gure)10 b(1.)k(T)m (o)d(connect,)g(the)f(following)e(sequence)j(occurs:)64 2052 y ff(\267)21 b fg (The)13 b(Internet)f(caller)i(uses)f fe(telnet)g fg(to)f(connect)h(to)f fa (re-)104 2102 y(sear)o(ch.a)m(tt.com)i fg(\(a.k.a)h fa(inet)p fg(\))f(via)f fe (telnet)p fg(.)24 b(The)104 2152 y(login)9 b(name)i(is)f fc(guard)p fg(.)64 2257 y ff(\267)21 b fg(The)13 b fc(guard)e fg(login)g(connects)h(to)g(the)g (authentication)104 2306 y(manager)h(on)g fa(r70)f fg(over)h(the)f(Datakit.) 21 b(It)12 b(spends)g(the)104 2356 y(rest)e(of)g(the)g(connection)f(relaying) g(bytes)h(between)g(the)104 2406 y(two)f(connections.)64 2511 y ff(\267)21 b fg(The)8 b(authentication)e(manager)j(on)f fa(r70)g fg(requests)g(a)g(lo-)104 2561 y(gin)h(name.)64 2666 y ff(\267)21 b fa(R70)16 b fg(sends)g(a)h(random)f (challenge)g(number)n(,)j(which)104 2716 y(the)10 b(caller)g(supplies.)1099 57 y ff(\267)21 b fg(The)11 b(user)f(enters)h(the)f(challenge)g(into)f(his)h(HHA\ .)1099 168 y ff(\267)21 b fg(The)e(HHA)g(encrypts)f(the)h(challenge)f(using)g (a)h(pre-)1139 217 y(loaded)10 b(DES)h(key)m(,)g(and)f(displays)f(the)h(respo\ nse.)1099 328 y ff(\267)21 b fg(The)10 b(user)g(types)g(the)g(response.)k(He) c(has)g(three)g(tries)g(to)1139 377 y(answer)g(a)g(challenge)f(correctly)m (,)h(and)f(is)g(disconnected)1139 427 y(if)h(he)g(fails.)1099 538 y ff(\267) 21 b fg(The)10 b(authorization)e(manager)j(prompts)e(for)g(a)i(Datakit)1139 587 y(destination.)1099 698 y ff(\267)21 b fg(When)8 b(the)g(user)g(enters)g (the)f(destination,)g(the)h(manager)1139 747 y(sends)17 b(a)h(redial)e(reques\ t)h(to)g(the)f(Datakit)h(controller)1139 797 y(with)6 b(the)i(given)f(destina\ tion)f(and)i(a)g(service)h(of)e(`dcon'.)1139 847 y(For)14 b(machines)h(that)f (trust)f fa(r70)p fg(,)j(the)f(`dcon')e(service)1139 897 y(bypasses)h(further) f(logins)f(and)i(avoids)f(further)g(pass-)1139 947 y(words.)1099 1057 y ff (\267)21 b fg(The)d(redial)f(request)g(transfers)h(the)f(call,)j(switching) 1139 1107 y fa(r70)15 b fg(out)f(of)h(the)g(connection.)27 b(In)15 b(non-Data\ kit)e(im-)1139 1157 y(plementations,)e fa(r70)g fg(would)f(probably)g(have)h (shuttle)1139 1206 y(bytes)f(between)g(the)h(two)e(connections.)1139 1283 y (Each)19 b(user)f(requires)g(a)g(DES)h(key)m(,)h(and)e(keys)h(have)1035 1333 y (an)14 b(expiration)f(date.)26 b(The)15 b(keys)f(are)h(stored)f(on)f(a)i(sepa\ rate)1035 1383 y(passwd/key)7 b(server)h(machine)g(connected)f(to)g fa(r70)p fg(.)13 b(The)8 b(keys)1035 1433 y(in)g(this)h(machine)g(may)h(be)f(changed)h (or)f(examined)g(only)f(from)1035 1483 y(its)i(console.)1139 1559 y(Inbound)e (mail)h(is)h(delivered)f(directly)f(to)h fa(inet)p fg(.)14 b fa(Inet)1035 1608 y fg(checks)d(the)e(destination.)j(If)d(it)g(is)h(a)g(trusted)e(machine)j(\(i\ .e.)j(its)1035 1658 y fe(smtp)c fg(is)h(trusted\),)g(a)g(connection)f(request) h(is)g(sent)g(to)f fa(r70)p fg(.)16 b(If)1035 1708 y(not,)e(the)g(mail)g(is)g (relayed)g(through)f(an)h(accessible)h(internal)1035 1758 y(machine.)21 b fa (R70)13 b fg(will)e(permit)g(connections)h(only)f(to)h(trusted)1035 1808 y fe (smtp)i fg(implementations.)24 b(The)15 b(list)e(is)h(short)g(because)h(most) 1035 1857 y(internal)9 b(machines)i(run)f fe(sendmail)p fg(.)1035 1981 y fd (5.)42 b(Pr)o(otecting)11 b(INET)1139 2066 y fg(The)k(preceding)f(precautions) g(might)f(imply)h(that)g(we)1035 2116 y(expect)f(our)f(gateway)h(to)f(be)h (compromised)g(at)g(some)g(point.)1035 2166 y(In)8 b(fact,)h(we)g(are)h(takin\ g)d(great)h(pains)g(to)g(protect)g(the)g(machine,)1035 2215 y(including)14 b (the)i(usual)g(good)g(system)h(administration)d(steps)1035 2265 y(needed)8 b (to)f(secure)h(any)f fa(Unix)h fg(system[5]:)j(directory)c(and)g(\256le)1035 2315 y(permissions)j(are)h(checked,)h(backups)f(performed)f(regularly)m(,) 1035 2365 y(etc.)1139 2441 y(W)m(e)19 b(have)g(taken)f(some)h(steps)g(to)f (avoid)f(denial-of-)1035 2491 y(service)g(attacks.)31 b(For)16 b(example,)i (the)e(logs,)h(the)f(spool)f(di-)1035 2540 y(rectory)m(,)10 b(and)g(the)f(pub\ lically-accessible)g(FTP)i(directory)d(are)1035 2590 y(each)i(on)f(separate)i (\256le)e(systems.)14 b(If)9 b(a)h(stranger)f(\256lls)g(the)g(pub-)1035 2640 y (lic)h(FTP)h(directory)m(,)f(there)g(is)g(still)f(room)h(for)g(the)g(logs.) 1139 2716 y(Here)h(are)g(some)g(other)f(steps)g(taken:)g eop bop 498 52 a fc ($)25 b(telnet)f(research.att.com)498 102 y(Trying...)498 152 y(Connected)g (to)h(research.att.com.)498 202 y(Escape)f(character)h(is)f('^]'.)498 351 y (RISC/os)g(\(inet\))498 451 y(login:)g(guard)498 500 y(RISC/os)g(\(UMIPS\))h (4.0)f(inet)498 550 y(Copyright)g(1986,)h(MIPS)f(Computer)g(Systems)498 600 y (All)h(Rights)f(Reserved)498 650 y(Security)g(Authentication)g(check)498 750 y (login:)g(ches)498 799 y(Enter)h(response)f(code)g(for)h(90902479:)f(818b71fe) 498 899 y(Destination)g(please:)g(coma)498 949 y(OKYou)h(have)f(mail.)498 999 y(coma=;)g(date)498 1048 y(Tue)h(Nov)f(14)h(10:52:37)f(EST)h(1989)498 1098 y (coma=;)498 1148 y(Eof)498 1198 y(Connection)f(closed)g(by)h(foreign)f(host.) 498 1248 y($)558 1347 y fg(Figure)10 b(1:)j(A)d(connection)g(session)g(throug\ h)f(the)h(guard.)64 1481 y ff(\267)21 b fg(All)7 b(the)h(important)f(executab\ le)i(\256les)g(are)g(periodically)104 1531 y(checksummed)j(and)e(checked)h (for)f(changes.)64 1638 y ff(\267)21 b fg(Most)11 b(user)h(accounts)g(do)f (not)g(have)h(passwords)g(to)f(be)104 1688 y(checked.)21 b(They)13 b(obtain)e (permission)g(to)h(login)e(based)104 1738 y(on)g(the)g(source)g(of)g(the)h (call.)64 1845 y ff(\267)21 b fg(Non-essential)d(network)h(daemons)h(have)f (been)h(re-)104 1895 y(moved:)13 b(we)e(don')o(t)e(need)i(to)f(trust)f(them.) 64 2002 y ff(\267)21 b fe(Inetd\(8\))14 b fg(handles)h(all)g(network)g(connec\ tions.)28 b(Cer-)104 2052 y(tain)11 b(modi\256cations)g(allow)g fe(telnetd)q fg(,)g fe(smtpd)q fg(,)h(and)f fe(ftpd)104 2102 y fg(to)f(run)g(without)f(spe\ cial)i(permissions:[5)o(])f fe(inetd)h fg(han-)104 2152 y(dles)f(the)g(privil\ eged)f(stuf)o(f.)64 2259 y ff(\267)21 b fg(There)8 b(is)g(extensive)f(logging) f(of)h(network)f(activity)m(,)i(in-)104 2309 y(cluding)i(connection)i(and)g (login)e(attempts.)19 b(A)12 b(write-)104 2359 y(only)g(log)g(server)i(is)f (planned)g(that)f(will)g(keep)i(a)f(copy)104 2409 y(of)c(these)h(logs)f(of)o (f-machine)g(and)h(inaccessible)g(to)f(any)104 2458 y(network.)64 2566 y ff (\267)21 b fg(Since)15 b(the)f(network)g(daemons)h(are)h(so)f(important)e(to) 104 2616 y(the)e(security)h(of)f(the)h(machine,)h(we)f(obtained)f(the)h(lat-) 104 2665 y(est)7 b(BSD)g(versions)f(and)h(examined,)h(modi\256ed,)g(and)f(in-) 104 2715 y(stalled)j(them.)1035 1481 y fd(6.)42 b(Gateway)10 b(alternatives) 1139 1567 y fg(There)16 b(are)f(several)h(much)f(simpler)f(alternatives)h(for) 1035 1617 y(an)h(Internet)f(gateway)m(.)31 b(The)17 b(simplest)e(is)g(a)i(rou\ ter)n(,)g(which)1035 1667 y(just)7 b(lets)g(the)h(packets)g(through.)j(Some)d (routers,)g(like)f(Cisco')n(s,)1035 1716 y(provide)j(packet)i(\256ltering)e (that)h(can)h(block)f(various)f(types)h(of)1035 1766 y(access)h(to)e(an)h(ins\ titutio)o(n.)1139 1843 y(W)m(e)d(did)e(not)h(choose)h(the)f(router)n(.)12 b (Though)7 b(the)h(\256ltering)1035 1892 y(is)g(quite)f(good,)i(it')n(s)e(not) g(clear)i(whether)f(a)h(clever)g(worm)f(could)1035 1942 y(get)f(through)f(the) i(permitted)f(ports.)12 b(Can)7 b(we)i(trust)d(the)h(router?)1035 1992 y(If)k fe(telnet)g fg(access)j(is)d(allowed)g(from)g(the)h(outside,)f(inside)f(ma-) 1035 2042 y(chines)f(are)g(exposed)g(to)f(password-guessing)f(attacks.)14 b (If)9 b fe(tel-)1035 2092 y(net)i fg(access)j(is)d(not)f(allowed,)h(an)h(alte\ rnative)e(is)h(needed)h(any-)1035 2141 y(way)m(,)k(requiring)c(additional)g (provisions.)24 b(The)15 b(router)e(does)1035 2191 y(not)h(provide)f(logging) f(to)i(detect)h(invasion)e(attempts.)27 b(And)1035 2241 y(mail)8 b(gating)g (must)g(be)h(provided)e(by)h(a)h(machine)g(somewhere:)1035 2291 y(it)g(is)h (unreasonable)g(to)f(expect)h(each)h(internal)e(machine)i(to)e(be)1035 2341 y (con\256gured)14 b(to)h(handle)f(all)h(the)f(varieties)h(of)g(external)f(mail) 1035 2390 y(addressing.)1139 2467 y(Many)f(Internet)g(sites)h(use)g(a)g(gatew\ ay)g(machine)h(like)1035 2517 y(a)k(Sun.)38 b(These)19 b(machines)g(forward)f (IP)h(packets)f(in)g(both)1035 2566 y(directions,)f(and)f(provide)f(a)i(mail) f(gateway)h(service.)32 b(The)1035 2616 y(packet)12 b(\257ow)f(is)h(still)d (dangerous,)j(though)e(\256ltering)g(is)h(avail-)1035 2666 y(able.)26 b(Many) 14 b(internal)f(machines)i(may)g(trust)e(the)h(gate)g(ma-)1035 2716 y(chine,) c(leaving)e(them)i(further)e(exposed)h(if)g(the)g(gate)g(machine)g eop bop 0 57 a fg(is)10 b(compromised.)0 168 y fd(7.)42 b(Performance)104 249 y fg(The) 8 b(mail)g(throughput)d(of)j(the)g(new)g(gateway)g(has)h(been)0 299 y(gratify\ ing,)d(though)g(a)i(V)-5 b(AX)7 b(750)g(is)g(an)h(easy)g(act)g(to)e(follow)m (.)12 b(In)0 348 y(many)g(cases,)i(we)f(have)f(had)g(replies)f(to)g(cross-cou\ ntry)g(mail)0 398 y(return)c(in)h(less)h(than)f(a)g(minute.)13 b(It)8 b(somet\ imes)h(seems)h(that)d(the)0 448 y(mail)i(must)h(have)g(bounced.)k fa(Inet)9 b fg(has)h(little)e(else)i(to)f(do,)h(and)0 498 y(a)h(MIPS)f(M/120)f(is)h(a)h (fast)f(machine.)104 570 y fe(Pftp)g fg(transfers)h(are)h(fastest)g(over)f (Datakit,)g(since)h(they)0 620 y(avoid)j(the)g fe(dcon)h fg(gateway)g(in)f fa (r70)p fg(.)30 b(File)15 b(transfers)h(range)0 670 y(from)c(17)g(to)g(44)g (Kb/sec.)20 b(TCP)13 b(transfers)f(through)e fa(r70)j fg(run)0 719 y(at)i(9)g (to)f(16)g(Kb/sec.)28 b(By)15 b(comparison,)23 b fe(ftp)13 b fg(on)i fa(inet) g fg(runs)0 769 y(at)e(about)f(60\26190)g(Kb/sec.)23 b(Clearly)m(,)13 b(secur\ ity)g(has)g(its)g(costs.)0 819 y(But)g(these)i(are)g(top)e(speeds.)26 b(The) 15 b(limiting)d(factor)i(is)g(often)0 869 y(the)c(external)g(net)h(or)f(host.) j(In)d(any)h(case,)h(several)f(users)g(have)0 919 y(expressed)g(satisfaction) f(about)f(the)h(throughput.)0 1030 y fd(8.)42 b(Conclusions)104 1110 y fg(The) 17 b(new)f(gateway)h(achieves)g(a)g(useful)f(balance)h(of)0 1160 y(utility)e (and)j(security)m(.)37 b(Most)17 b(internal)g(users)h(seem)i(to)d(be)0 1210 y (happy)10 b(with)g fe(pftp)f fg(and)i fe(ptelnet)p fg(.)k(Some)d(have)f(asked) g(for)g fe(talk)q fg(,)0 1259 y(resolver)f(service)g(and)g(other)f(UDP-based) h(protocols.)j(These)0 1309 y(could)c(be)i(provided)e(with)g(non-)p fe(pr)n (oxy)h fg(services)h(on)e fa(inet)h fg(ac-)0 1359 y(cessible)h(through)d(Data\ kit.)104 1431 y(There)k(are)g(certainly)f(limits)f(to)h(our)g(security)m(.)18 b(If)11 b fa(r70)0 1481 y fg(and)i fa(inet)h fg(are)g(subverted,)g(the)f(insi\ de)g(machines)h(could)f(be)0 1531 y(attacked.)104 1603 y(Insiders)d(can)i(eas\ ily)f(import)e(trouble)h(such)h(as)h(T)o(rojan)0 1653 y(horses)g(or)f(program\ s)g(infected)g(with)f(viruses.)18 b(Our)11 b(best)g(de-)0 1703 y(fense)f(is)f (continued)f(scanning)g(of)h(internal)f(machines)i(for)f(se-)0 1752 y(curity) g(holes)h(in)g(case)i(such)e(a)h(program)f(gets)g(loose.)104 1824 y(There)15 b (is)f(now)g(a)h(second)f(A)-5 b(T&T)16 b(internet)d(gateway)m(.)0 1874 y(Its) f(con\256guration)g(is)g(similar)g(to)g fa(inet)p fg(')n(s.)21 b(These)14 b (two)e(front)0 1924 y(doors)c(provide)f(reasonable)i(security)f(to)g(an)h(iso\ lated)e(internal)0 1974 y(internet.)21 b(But)12 b(A)-5 b(T&T)14 b(is)f(a)g (lar)o(ge)g(company)m(,)i(so)e(we)g(keep)h(a)0 2024 y(constant)9 b(watch)h (to)f(assure)i(that)e(no)h(other)f(links)f(are)j(made)g(to)0 2074 y(the)h(ext\ ernal)h(Internet.)20 b(A)13 b(locked)g(front)e(door)h(is)g(useless)i(if)0 2123 y(the)c(back)h(wall)f(of)g(the)g(house)g(is)g(missing.)104 2195 y(The)k(incom\ ing)f(guarded)h fe(telnet)g fg(service)g(is)g(not)f(per-)0 2245 y(fect.)22 b (The)13 b(remote)g fe(telnet)f fg(may)i(be)f(insecure,)h(and)e(the)h(TCP)0 2295 y(connection)k(itself)g(could)h(be)g(stolen)f(after)h(login)f(is)h(com-) 0 2345 y(plete.)37 b(Most)18 b(internal)f(A)-5 b(T&T)19 b(machines)g(do)f(not) f(accept)0 2395 y fa(r70)p fg(')n(s)9 b(judgement)g(that)f(the)h(user)h(is)f (valid,)g(and)g(require)g(their)0 2444 y(own)i(login)e(passwords.)17 b(These) 12 b(passwords)g(travel)e(over)h(the)0 2494 y(Internet)e(in)h(the)g(clear)n (.)104 2566 y(Our)e(solution)e(does)j(have)f(some)i(drawbacks.)k(W)m(e)8 b (rely)0 2616 y(on)13 b(two)h(machines)g(and)g(Datakit)f(to)h(keep)g(things)e (working.)0 2666 y(This)d(yields)g(three)g(points)f(of)g(failure,)i(while)e (the)h(simpler)g(ap-)0 2716 y(proaches)g(have)h(\(in)d(some)j(sense\))f(only) f(one)h(point)e(of)h(failure.)1035 57 y(The)j(use)g(of)e(TCP-level)h(gateways) h(does)g(lower)e(throughput.)1035 107 y(Though)h(most)g(users)h(seem)h(to)e (be)g(content)g(with)f(the)i fe(pftp)e fg(re-)1035 157 y(sponse,)i(it)e(would) g(be)i(nice)f(to)g(speed)h(it)e(up)h(some.)1139 229 y fd(This)j(paper)i(is)f (not)g(an)g(invitation)d(to)j(come)1139 279 y(test)k(the)g(security)g(of)f (our)h(gateway)n(.)35 b(It)18 b(is)1139 328 y(management')n(s)9 b(policy)f (to)h(call)g(the)h(authori-)1139 378 y(ties)g(when)h(intruders)g(ar)o(e)h(det\ ected.)1035 480 y(9.)42 b(Acknowledgements)1139 555 y fg(Many)13 b(people)g (have)h(contributed)e(to)g(the)h(support)f(of)1035 605 y(these)17 b(gateways.) 35 b(Steve)17 b(Bellovin)e(did)h(most)h(of)g(the)f(ini-)1035 655 y(tial)j(wor\ k)h(to)f(get)h fa(arp)m(a)h fg(talking)e(to)g(the)h(ARP)l(Anet)g(and)1035 705 y(Datakit.)g(Dave)13 b(Presotto)f(has)h(supplied)e(much)i(of)g(the)f(soft-) 1035 755 y(ware)f(and)e(most)h(of)f(the)h(paranoia)g(to)f(provide)g(a)h(secur\ e)h(gate-)1035 804 y(way)m(.)20 b(Howard)12 b(T)o(rickey)g(implemented)g(earl\ ier)h(versions)e(of)1035 854 y fe(ptelnet)d fg(and)g fe(pftp)p fg(.)k(Dennis) d(Ritchie)e(has)i(kept)f(a)h(watchful)e(eye)1035 904 y(and)12 b(stepped)g(in) g(when)g(things)e(broke.)19 b(Steve)13 b(Bellovin)d(and)1035 954 y(others)i (have)g(provided)f(numerous)h(suggestions)f(and)h(warn-)1035 1004 y(ings)k (on)g(various)g(networking)e(and)j(security)f(topics.)32 b(Jim)1035 1053 y (McKie)11 b(ported)e(many)i(useful)e(Research)j(Unix[6)n(])e(functions)1035 1103 y(and)g(the)h(INCON)e(Datakit)h(driver)g(to)g(our)f(MIPS)i(computers,) 1035 1153 y(making)f(life)g(much)g(easier)h(for)f(me.)1035 1254 y fd(Refer)o (ences)1148 1322 y fg([1])20 b(David)13 b(Presotto.)g fe(Upas)g(-)g(a)g(simpl\ er)g(appr)n(oach)1217 1372 y(to)f(network)f(mail.)h fg(USENIX)g(Summer)h(Conf\ er-)1217 1421 y(ence)e(Proceedings,)g(pps.)f(533\261538,)e(June)j(1985.)1148 1518 y([2])20 b(Donn)10 b(Seeley)m(.)j fe(A)e(T)l(our)g(of)f(the)h(W)l(orm.)g fg(USENIX)1217 1568 y(W)n(inter)f(Conference)h(Proceedings,)g(Jan.)g(1989.) 1148 1665 y([3])20 b(David)e(Presotto)g(and)g(Dennis)h(Ritchie.)e fe(Inter-) 1217 1715 y(pr)n(ocess)10 b(Communication)d(in)h(the)h(Ninth)e(Edition)1217 1764 y(UNIX)13 b(System.)h fg(Unix)f(Programmer)r(')n(s)g(Manual,)1217 1814 y (T)m(enth)d(Edition.)f(A.)i(G.)f(Hume)h(and)f(M.)h(D.)f(McIl-)1217 1864 y(roy) m(,)i(Editors.)e(A)-5 b(T&T)13 b(Bell)d(Laboratories,)i(Mur-)1217 1914 y(ray) f(Hill,)e(NJ.)i(1990.)1148 2011 y([4])20 b(Bellovin,)26 b(S.M.)e fe(Security) g(Pr)n(oblems)g(in)f(the)1217 2060 y(TCP/IP)14 b(Pr)n(otocol)f(Suite.)h fg (Computer)e(Commu-)1217 2110 y(nications)c(Review)m(,)i(V)-5 b(ol.)9 b(9,)g (No.)g(2;)g(April,)g(1989,)1217 2160 y(pps.)i(32\26148.)1148 2257 y([5])20 b (Dennis)8 b(M.)h(Ritchie.)f fe(On)h(the)f(Security)h(of)f(UNIX.)1217 2307 y fg (Unix)j(Programmer)r(')n(s)h(Manual,)h(T)m(enth)f(Edition.)1217 2356 y(A.)19 b (G.)f(Hume)h(and)f(M.)g(D.)h(McIlroy)m(,)h(Editors.)1217 2406 y(A)-5 b(T&T)17 b(Bell)d(Laboratories,)j(Murray)e(Hill,)h(NJ.)1217 2456 y(1990.)1148 2553 y ([6])k(Unix)11 b(Programmer)r(')n(s)h(Manual,)h(T)m(enth)f(Edition,)1217 2603 y(V)-5 b(olumes)10 b(One)h(and)g(T)m(wo.)g(A.)h(G.)f(Hume)g(and)g(M.)1217 2652 y(D.)16 b(McIlroy)m(,)g(Editors.)e(A)-5 b(T&T)17 b(Bell)d(Laborato-)1217 2702 y(ries,)d(Murray)f(Hill,)f(NJ.)i(1990.)g eop eos @end