Differences between current version and previous revision of HowToTermFirewall.
Other diffs: Previous Major Revision, Previous Author, or view the Annotated Edit History
Newer page: | version 3 | Last edited on Friday, October 29, 2004 4:28:47 am | by StuartYeates | |
Older page: | version 2 | Last edited on Friday, June 7, 2002 1:07:40 am | by perry | Revert |
@@ -1,373 +1 @@
-Using Term to Pierce an Internet Firewall mini-HOWTO
-!!!Using Term to Pierce an Internet Firewall mini-HOWTO
-!Barak Pearlmutter
-
-bap@cs.unm.edu
-
-
-!David C. Merrill
-
-david@lupercalia.net
-
-
-
-Copyright (c) 1996 by Barak Pearlmutter
-
-
-
-Copyright (c) 2001 by David C. Merrill
-
-
-__Revision History__Revision 1.12001-07-14Revised by: dcmCleaned up a bit, reorganized a bit, converted to !DocBook SGML
-and relicensed under GFDL.Revision 1.01996-07-15Revised by: pbInitial Release.
-
-
-
-
-
- This document explains how to use the __term__ program
-to pierce a firewall from the inside, even without root privileges.
-
-
-
-
- Term is an old program that almost no one uses anymore,
-because the 7-bit serial lines it is meant to cross are nowhere
-to be found anymore, and full IP ppp access is dirt cheap.
-
-
-
-
-
-
-
-
-
-
-
- __Archived Document Notice: __
-This document has been archived by the LDP because it does not apply
-to modern Linux systems. It is no longer being actively maintained.
-
-
-
-
-
-
-
-
-
-----; __Table of Contents__; 1. Preface: ; 1.1. Disclaimer; 1.2. License; 2. Introduction; 3. The Basic Procedure; 4. Detailed Directions; 5. Multiple Term Sockets; 6. The `#732/.term/termrc.telnet Init File; 7. Direction; 8. Security; 9. Telnet Mode; 10. Bugs and Term Wish List; 11. Tricks That Do Not Seem to Work; 12. Related Resources; 13. Acknowledgments----
-!!!1. Preface
-!!1.1. Disclaimer
-
- While every precaution has been taken in the preparation of this document,
-the Linux Documentation Project and the author(s) assume no responsibility
-for errors or omissions, or for damages resulting from the use of the
-information contained herein.
-
-
-----
-!!1.2. License
-
- This document is made available under the terms of the
-''GNU Free Documentation License (GFDL)'',
-which is hereby incorporated by reference.
-
-
-----
-!!!2. Introduction
-
-The __term__ program is usually used to provide host-to-host services
-over a modem or serial line.
-However, sometimes it is useful to establish a term
-connection between two machines that communicate via telnet.
-The most
-interesting example is connecting two hosts which are
-separated by ethernet firewalls or SOCKS servers. Such firewalls
-provide facilities for establishing a telnet connection through the
-firewall, typically by using the SOCKS protocol, to allow inside
-machines to get connections out, and requiring outside users to telnet
-first to a gateway machine which requires a one-time password. These
-firewalls make it impossible to, for instance, have X clients on an
-inside machine communicate with an X server on an outside machine.
-But, by setting up a term connection, these restrictions can all be
-bypassed quite conveniently, at the user level.
-
-----
-!!!3. The Basic Procedure
-
-Setting up a term connection over a telnet substrate is a two-phase
-process. First your usual telnet client is used to set up a telnet
-connection and log in. Next, the telnet client is paused and control
-of the established telnet connection is given to term.
-
-----
-!!!4. Detailed Directions
-
-First, from a machine inside the firewall, telnet to a target machine
-outside the firewall and log in.
-
-
-
-Unless you are under linux and will be using the proc filesystem (see
-below) make sure your shell is an sh style shell. Ie if your default
-shell is a csh variant, invoke telnet by:
-
-
-
-
-setenv SHELL /bin/sh; telnet machine.outside
-
-
-
-After logging in, on the remote (outside) machine invoke the command:
-
-
-
-
-term -r -n off telnet
-
-
-
-Now break back to the telnet prompt on the local (inside) machine,
-using ^
] or whatever, and use the telnet shell escape command
-! to invoke term:
-
-
-
-
-telnetb ! term -n on telnet b83 `83
-
-
-
-That's it!
-
-
-
-If you have a variant telnet, you might have to use some other file
-descriptor than 3; easy to check using strace. But three seems to
-work on all bsd descendent telnet clients I've tried, under both SunOS
-4.x and the usual linux distributions.
-
-
-
-Some telnet clients do not have the ! shell escape command. Eg the
-telnet client distributed with Slackware 3.0 is one such client. The
-sources that the Slackware telnet client is supposedly built from
-
-
-
-''ftp://ftp.cdrom.com:/pub/linux/slackware-3./source/n/tcpip/!NetKit-B-.05.tar.gz''
-
-
-
-A simple solution is therefore to
-obtain these sources and recompile them. This unfortunately is a task
-I have had no luck with. Plus, if you are running from inside a SOCKS
-firewall, you will need a SOCKSified telnet client anyway. To that
-end, I was able to compile a SOCKSified telnet client from:
-
-
-
-''ftp://ftp.nec.com/pub/security/socks.cstc/socks.cstc.4.2.tar.gz''
-
-
-
-or, if you're outside the USA,
-
-
-
-''ftp://ftp.nec.com/pub/security/socks.cstc/export.socks.cstc.4.2.tar.gz''
-
-
-
-Alternatively, under linux kernels up to 1.2.13, you can pause the
-telnet with ^]^z, figure out its pid, and invoke:
-
-
-
-
-term -n on -v /proc/8,t;telnetpidb/fd/3 telnet
-
-
-
-This doesn't work with kernels after 1.3.x, which closed some
-mysterious security hole by preventing access to these fd's by
-processes other than the owner process and its children.
-
-----
-!!!5. Multiple Term Sockets
-
-It is a good idea to give the term socket an explicit name.
-This is the telnet; argument in the invocations
-of term above.
-Unless you have the TERMSERVER environment variable set to telnet as
-appropriate, you invoke term clients with the -t switch,
-e.g., trsh -t telnet.
-
-----
-!!!6. The `#732/.term/termrc.telnet Init File
-
-I have checked line clarity using linecheck over this medium.
-I expected it to be completely transparent, but it is not.
-However, the only bad character seems to be 255.
-The #732/.term/termrc.telnet I use
-(the .telnet is the name of the term connection, see above)
-contains:
-
-
-
-
-baudrate off
-escape 255
-ignore 255
-timeout 600
-
-
-
-Perhaps it could be improved by diddling,
-I am getting a throughput of only about 30k cps over
-a long-haul connection through a slow firewall.
-Ftp can move about 100k cps over the same route.
-A realistic baudrate might avoid some timeouts.
-
-----
-!!!7. Direction
-
-Obviously, if you are starting from outside the firewall and zitching
-in using a SecureID card or something, you will want to reverse the
-roles of the remote vs local servers given above. (If you don't
-understand what this means, perhaps you are not familiar enough with
-term to use the trick described in this file responsibly.)
-
-----
-!!!8. Security
-
-This is not much more of a vulnerability than the current possibility
-of having a telnet connection hijacked on an unsecured outside
-machine. The primary additional risk comes from people being able to
-use the term socket you set up without you even being aware of it. So
-be careful out there. (Personally, I do this with an outside machine
-I know to be pretty secure, namely a linux laptop I maintain myself
-that does not accept any incoming connections.)
-
-
-
-Another possibility is to add
-
-
-
-
-socket off
-
-
-
-to the remote #732/.term/termrc.telnet file, or
-
-
-
-
-add "-u off"
-
-
-
-to the invocation of term.
-This prevents the socket from being hijacked from the remote end,
-with only a minor loss of functionality.
-
-----
-!!!9. Telnet Mode
-
-Be sure the remote telnetd is not in some nasty seven-bit mode.
-Or if it is, you have to tell term about it when you invoke term,
-by adding the -a switch at both ends.
-(I sometimes use b^] telnetb set outbin or
-set bin, or invoke telnet with a -8 switch
-to put the connection into eight-bit mode.)
-
-----
-!!!10. Bugs and Term Wish List
-
-The __linecheck__ program has some problems checking telnet connections
-sometimes. This is sometimes because it doesn't check the return code
-of the read() call it makes. For network connections,
-this call to read() can return -1
-with an EINTR (interrupted) or
-EAGAIN (try again) error code.
-Obviously this should be checked for.
-
-
-
-There are a number of features that could ease the use of term over
-telnet. These primarily relate to an assumption that influenced the
-design of term, namely that the connection is low bandwidth, low
-latency, and somewhat noisy.
-
-
-
-A telnet connection is in general high bandwidth, high latency, and
-error free. This means that the connection could be better utilized
-if (a) the maximum window size was raised, well above the limit
-imposed by term's N_PACKETS/2=16,
-(b) there was an option to turn off sending and checking packet checksums,
-and (c) larger packets were permitted when appropriate.
-
-
-
-Also, to enhance security, it would be nice to have a term option to
-log all connections through the socket it monitors to a log file, or
-to stderr, or both. This would allow one to see if one's term
-connection is being subverted by nasty hackers on the outside insecure
-machine.
-
-----
-!!!11. Tricks That Do Not Seem to Work
-
-Some telnet clients and servers agree to encrypt their communications,
-to prevent eavesdropping on the connection. Unfortunately, the hack
-used above (using the network connection that the telnet client has
-set up while the telnet client is idle) won't work in that case.
-Instead, one really must go through the telnet client itself, so it
-can do its encryption. It seems like that requires a simple hack to
-the telnet client itself, to add a command that runs a process with
-its stdin and stdout are connected
-to the live telnet connection.
-This would also be useful for various bots, so perhaps someone has
-already hacked it up.
-
-----
-!!!12. Related Resources
-
-A vaguely related trick is to SOCKSify one's Term library.
-Details, including patches to SOCKS, are available from
-Steven Danz ''danz@wv.mentorg.com''.
-
-----
-!!!13. Acknowledgments
-
-Thanks for valuable suggestions from:
-
-
-
-
-
-
-*
-
-Gary Flake ''flake@scr.siemens.com''
-
-
-*
-*
-
-Bill Riemers ''bcr@physics.purdue.edu''
-
-
-*
-*
-
-Greg Louis ''glouis@dynamicro.on
.ca''
-
-
-*
+Describe [HowToTermFirewall
] here
.