Penguin

Differences between current version and predecessor to the previous major change of HowToDomain.

Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History

Newer page: version 3 Last edited on Monday, October 25, 2004 2:21:48 am by StuartYeates
Older page: version 2 Last edited on Friday, June 7, 2002 1:06:30 am by perry Revert
@@ -1,3065 +1 @@
-  
-  
-  
-Setting Up Your New Domain Mini-HOWTO.  
-  
-  
-  
-----  
-  
-!!!Setting Up Your New Domain Mini-HOWTO.  
-  
-!!by Christopher Neufeld (neufeld@linuxcare.com)version .12. 2000-10-27.  
-  
-  
-----  
-''This document outlines the things you will probably have to do when  
-you want to set up a network of computers under your own domain. It  
-covers configuration of network parameters, network services, and  
-security settings.''  
-----  
-  
-  
-  
-  
-!!1. Notices  
-  
-  
-*1.1 Disclaimer  
-  
-*1.2 Location  
-  
-*1.3 Copyright  
-  
-  
-  
-  
-  
-!!2. Introduction  
-  
-  
-  
-  
-!!3. Planning Your Network Topology  
-  
-  
-  
-  
-!!4. Obtaining Your Connection  
-  
-  
-*4.1 Choosing Your Provider  
-  
-*4.2 Preparing For Hardware Installation  
-  
-*4.3 Testing The Connection  
-  
-*4.4 Using A Dynamic IP  
-  
-  
-  
-  
-  
-!!5. Registering A Domain Name  
-  
-  
-  
-  
-!!6. Deciding Which Domain Services You Will Host  
-  
-  
-*6.1 Primary DNS Authority  
-  
-*6.2 Electronic Mail  
-  
-*6.3 Web Space Hosting  
-  
-*6.4 FTP Site Hosting  
-  
-*6.5 Packet Filtering  
-  
-  
-  
-  
-  
-!!7. Configuring Your Hosted Services  
-  
-  
-*7.1 Setting up Name Resolution  
-  
-*7.2 DNS Configuration If You Are Not Hosting Email  
-  
-*7.3 Setting up Electronic Mail  
-  
-*7.4 Setting up Web Space Hosting  
-  
-*7.5 Setting up FTP Hosting  
-  
-*7.6 Setting up Packet Filtering  
-  
-  
-  
-  
-  
-!!8. Securing Your Domain  
-  
-  
-*8.1 Configuring Your Firewall  
-  
-*8.2 Configuring OpenSSH or SSH1  
-  
-*8.3 Configuring X  
-  
-*8.4 Configuring Disk Sharing  
-  
-  
-  
-  
-  
-!!9. Acknowledgements  
-  
-  
-  
-  
-!!10. Glossary of Terms  
-----  
-  
-!!1. Notices  
-  
-!!1.1 Disclaimer  
-  
-  
-  
-This is a preliminary document. I have glossed over many things  
-which could be given in much more detail, and have probably missed  
-important sections entirely. Any suggestions for additions,  
-deletions, or areas where I ought to provide more or less detail are  
-very welcome.  
-  
-  
-  
-  
-!!1.2 Location  
-  
-  
-  
-The most recent version of this document can be found at  
-http://caliban.physics.utoronto.ca/neufeld/Domain.HOWTO/.  
-  
-  
-  
-  
-!!1.3 Copyright  
-  
-  
-  
-Copyright (c) by Christopher Neufeld. This document may be  
-distributed only subject to the terms and conditions set forth in the  
-LDP License at  
-this location.  
-  
-  
-  
-  
-  
-  
-----  
-  
-!!2. Introduction  
-  
-  
-This is a guide to setting up your own domain of Linux machines, or  
-mixed Linux and Windows machines, on an always-up connection with a  
-static IP and a named domain. It is not really intended for setups  
-which use dynamic IPs, or which are regularly disconnected from their  
-provider for long periods of time, though some basic hints for  
-operating such a setup are available in section  
-Using A Dynamic IP.  
-  
-  
-  
-  
-  
-With the increasing availability of permanent connections and static  
-IPs, it's becoming easier for people and organizations to set up a  
-real domain, with the associated Internet presence. Proper planning at  
-the outset can reduce problems later.  
-  
-  
-  
-  
-  
-Much of this document describes techniques for implementing  
-unobtrusive security on the newly exposed network. This deals with  
-protection from external attack, and from casual internal attack. It  
-does not claim to provide an extremely secure setup, but is usually  
-enough to discourage the less determined attacker.  
-  
-  
-  
-  
-  
-This document is primarily directed at small organizations which have  
-an existing network of computers, possibly with a shared dialup line,  
-which are trying to move to a permanent, relatively high-speed  
-connection, either to improve data transfer with the outside world, or  
-to create a WWW or FTP site. The document is also directed at new  
-organizations which want to skip the early stage and start out with  
-higher speed networking and services under their own domain name.  
-  
-  
-  
-  
-  
-Throughout this document, I will discuss the configuration of a newly  
-registered domain, __example.com__. Note that the name  
-example.com is reserved by the Internet Assigned Numbers Authority for  
-use in documentation, and so will never correspond to an actual  
-domain.  
-  
-  
-  
-  
-  
-Much of the information in this document is available in other  
-places. I have tried to distill the material relevant to the creation  
-of a new domain. Where detail on a specific subject is lacking, you  
-may want to consult one of the more comprehensive documents.  
-  
-  
-  
-  
-  
-This document will also assume a mixed OS environment. Specifically, I  
-will assume that some desktop machines are running some version of  
-Microsoft Windows, while servers and the private network gateway are  
-running Linux.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-----  
-  
-!! 3. Planning Your Network Topology  
-  
-  
-While there are arguments which can be made for many different network  
-layouts, the requirements of many organizations can be met by putting  
-the desktop machines and private servers on a private masqueraded  
-subnet, and the publicly accessible machines on valid external  
-IPs. The machines on valid external IPs will be referred to in this  
-document as ``exposed hosts''. This leads to the following (example)  
-topology:  
-  
-  
-  
-  
-  
-+--------------+  
-| | +---------------+  
-| ISP-supplied |---------------| FTP server |  
-| router | | +---------------+  
-| | |  
-+--------------+ | +---------------+  
-|------| WWW server #1 |  
-| +---------------+  
-|  
-| +---------------+  
-|------| WWW server #2 |  
-| +---------------+  
-|  
-~  
-~  
-|  
-| +---------------+  
-|------| Private |  
-| Network |  
-| Gateway |  
-+---------------+  
-|  
-|  
-|  
-|  
-+------------+ | +-------------------+  
-| Desktop #1 |-------------------|------| Private server #1 |  
-+------------+ | +-------------------+  
-|  
-. -------------------|-------- .  
-. | .  
-. -------------------|-------- .  
-|  
-+------------+ | +-------------------+  
-| Desktop #N |-------------------|------| Private server #N |  
-+------------+ +-------------------+  
-  
-  
-  
-  
-  
-  
-  
-In this example, the router provided by the ISP (Internet Service  
-Provider), FTP server, WWW servers, and the machine labelled ``private  
-network gateway'' all have externally visible IP numbers, while the  
-desktop and private server machines have IP numbers allocated from  
-RFC 1918,  
-reserved for private use. The IP numbers you choose for use within the  
-private network (everything below the private network gateway  
-machine) should be chosen to be unique, not only among the hosts under  
-your control, but should also not conflict with numbers assigned on  
-similar private subnets at other sites or partner companies with whom  
-you might, at some time, want to implement a virtual private network,  
-in order to reduce confusion and reconfiguration when the networks are  
-merged in that way. As outlined in the RFC, you can choose from any  
-class C network from 192.168..* to 192.168.255.*, or any class B  
-network from 172.16.*.* to 172.31.*.*, or the class A network  
-10.*.*.*. In the rest of this document I will assume that your private  
-network (if you've chosen to create one) is on the class C network  
-192.168.1.*, and your private network gateway machine is at IP number  
-10.1.1.9, one of the IP numbers provided to you by your provider (note  
-that this is not a valid external IP, I use it as an example only). I  
-will also assume that there is a machine, betty.example.com, at  
-10.1.1.10, which will handle both www and FTP services.  
-  
-  
-  
-  
-  
-Take note of the number of external IP numbers which you need for your  
-own machines. You will need one IP number for each machine which lies  
-outside the private network gateway, plus one for the gateway  
-itself. This count does not include any IP numbers which may be taken  
-by routers, broadcast addresses, and so on. You should ask your  
-provider for a block of addresses large enough to mount the given  
-number of machines. For example, in my office network, of the 8 IP  
-numbers allocated from the ISP, three were not usable by my  
-computers, leaving enough IP numbers for four machines outside the  
-gateway, plus the gateway itself.  
-  
-  
-  
-  
-  
-This network topology is not correct for everybody, but it is a  
-reasonable starting point for many configurations which don't have  
-special needs. The advantages of this configuration include:  
-  
-  
-*Easy expandability. If you suddenly double your number of  
-private nodes, you don't have to worry about getting a new IP block  
-from your provider and reconfiguring all of the interfaces on your  
-machines.  
-*  
-  
-*Local network control. Adding a new workstation to your private  
-network requires no communication with your provider, unlike exposed  
-nodes, which need both forward and reverse DNS (domain name service)  
-mappings if they are to perform certain tasks (ssh and ftpd may  
-complain if they can't perform reverse and forward DNS on incoming  
-connections). A reverse DNS query is an attempt to obtain the host name  
-from the IP number.  
-*  
-  
-*Centralized security. The private network gateway can enforce  
-security over the whole private network, filtering packets and logging  
-attacks, rather than having to install such measures on each desktop  
-and server on the private network. This can be enforced not only on  
-incoming packets, but also on outgoing packets, so that a  
-misconfigured desktop machine doesn't inadvertently broadcast data  
-to the outside world which ought to remain internal.  
-*  
-  
-*Easy transplantability. Because the IP numbers within the  
-private network are yours for as long as you want them, you can move  
-the entire network to a new range of IP numbers without having to make  
-any changes to the network configuration on the private network. The  
-publicly exposed hosts still have to be reconfigured, of course.  
-*  
-  
-*Transparent Internet access. The machines on your private  
-network can still use FTP, telnet, WWW, and other services with  
-minimal obstruction, assuming a Linux masquerading router. The users  
-may not even be aware that their machines are not on externally  
-visible IP numbers.  
-*  
-  
-  
-  
-  
-  
-  
-Some of the potential disadvantages of such a configuration are:  
-  
-  
-*Some services will not be available directly to the machines on  
-the internal network. NTP synchronization against an outside host,  
-certain obscure services which may not have masquerading rules in the  
-kernel, and .shosts authentication for logging in to external nodes  
-are all difficult or impossible, but simple workarounds are almost  
-always available.  
-*  
-  
-*More network hardware costs. The private network gateway machine  
-needs two network cards, and you need at least two hubs / switches,  
-one on the visible network and one on the private network.  
-*  
-  
-*Machines outside the private network cannot easily make direct  
-connections to machines within the private network. They may have to  
-open a session first on the private network gateway machine, then log  
-through to the internal host. It is possible to route packets  
-transparently through the firewall, but this is not recommended for  
-security reasons which will be discussed in a later section.  
-*  
-  
-  
-  
-  
-  
-  
-You should consider these points in planning your network topology,  
-and decide if a fully visible network is more appropriate for your  
-situation. In the rest of this document I will assume that you have  
-configured your network as shown above. If you have chosen to have a  
-fully visible network, some details will differ, and I will try to  
-point out such differences in this document.  
-  
-  
-  
-  
-  
-As a special case, if you do not need any external servers, the  
-ISP-supplied router can be attached directly to your external  
-interface on the private network gateway machine, rather than with a  
-hub.  
-  
-  
-  
-  
-  
-  
-----  
-  
-!! 4. Obtaining Your Connection  
-  
-  
-  
-  
-!! 4.1 Choosing Your Provider  
-  
-  
-  
-As with anything, shop around. Determine which services are available  
-in your area, as well as the costs associated with those services. Not  
-all locations are wired to accept DSL, and some locations may not be  
-suitable for wireless connections due to constraints of the landscape,  
-architecture, or environment. Be prepared to provide the street  
-address of the location where your hookup will be installed, as DSL  
-speeds are strongly dependent on your distance from the switch, and  
-ask specifically about such details as bandwidth between your machine  
-and the provider, what has to be done to install the connection, and  
-what hardware is provided in the quoted monthly rate. Also, you should  
-have some idea of how many IP numbers you need for your own machines  
-(remember that not all IP numbers in the block you get from the  
-provider will be available for attaching your computers). Ask the  
-provider what their total bandwidth is out to the outside world, as  
-the quoted speed is only between your site and theirs. If the provider  
-has insufficient bandwidth to the outside, the customers will suffer  
-bottlenecks within the provider's network.  
-  
-  
-  
-  
-  
-Once you have narrowed down a list of candidates, ask around, see if  
-anybody can provide you with recommendations for the services you're  
-considering. Ask them what sort of bandwidth they get to unloaded  
-sites. Also, if you intend to have fast connections between the new  
-domain and local ISP accounts from home, for telecommuting, or just  
-remote administration, it is essential that you do a  
-''traceroute'' from your home ISP account to a host operating on  
-the service you're considering. This will tell you how many hops, and  
-how much latency you should expect, between home and the new  
-domain. Latencies much above 100 to 200 milliseconds can be difficult  
-to use for extended periods of time. The ''traceroute'' should be  
-run around the time of day that you expect to make use of the network  
-connection between home and the new domain.  
-  
-  
-  
-  
-  
-  
-  
-!! 4.2 Preparing For Hardware Installation  
-  
-  
-  
-After you have chosen the provider and service type for the new  
-domain, ask about installation details. You may require service calls  
-from the telephone company as well as from the ISP in order to install  
-the service, and the technicians may need access to controlled areas  
-of your building, so inform the building engineer of the installation  
-requirements.  
-  
-  
-  
-  
-  
-Before the ISP technician arrives, ask for the network parameters,  
-specifically the IP number, netmask, broadcast address, gateway  
-routing address, DNS server address, and also what cabling you need to  
-connect to the hardware delivered by the technician  
-(i.e. straight-through or crossover RJ45 cabling, etc.).  
-  
-  
-  
-  
-  
-Have one machine available for testing, and put it close to where the  
-network connection hardware will be installed. If possible, configure  
-it before the service technician arrives, setting the IP number and  
-netmask, and have the appropriate cabling ready so that the  
-installation and testing can be done quickly.  
-  
-  
-  
-  
-  
-  
-  
-!! 4.3 Testing The Connection  
-  
-  
-  
-With your test machine attached to the ISP's hardware, make sure that  
-you can ping sites beyond the ISP. If not, a ''traceroute'' to  
-the outside can help to show where the connection is failing. If  
-traceroute shows no successful hops it indicates that your test  
-machine's network configuration (default route, interface address, NIC  
-drivers, DNS, etc.) is incorrectly set. If it shows one hop, that could  
-mean that your router is not correctly configured to communicate with  
-the ISP. If it shows several hops before failing, the problem is  
-almost certainly in the ISP or in the outside world, and beyond your  
-immediate control.  
-  
-  
-  
-  
-  
-  
-  
-!! 4.4 Using A Dynamic IP  
-  
-  
-  
-The benefits of a corporate connection, with a static IP block and  
-various hosted services, comes with a cost. It can be more than ten  
-times as expensive as a high speed home connection on DSL or cable  
-modem. If the budget can't support a corporate connection, or if no  
-such connections are available in your area, you might want to try to  
-set up a domain on a dynamic IP. Instead of a range of IP numbers, you  
-typically get exactly one, which means that your private network  
-gateway machine will also have to host any incoming services from the  
-outside.  
-  
-  
-  
-  
-  
-First, you might want to check the legality of it. Many companies'  
-user agreements explicitly forbid setting up externally-accessible  
-servers on personal accounts. They may enforce this with packet  
-filters blocking incoming connections on the http and FTP ports. You  
-should also be aware that the quoted connection speed for personal  
-accounts such as home DSL or cable modem are the downlink speeds, and  
-that the uplink speeds might be much slower. The uplink speed is what  
-is important for serving up FTP or web content.  
-  
-  
-  
-  
-  
-If you have a dynamic IP, and you want to have incoming connections,  
-you will have to subscribe to a dynamic IP hosting service, such as  
-one of those listed at  
-Dynamic DNS Providers. These services typically work by running  
-software on your machine which passes your current IP number on to the  
-company's servers. When your current IP number arrives at the servers,  
-their DNS tables are updated to reflect the new value. You can either  
-get a domain name under their domain name, such as  
-``example.dynip.com'' or ``example.dynhost.com'', or you can register  
-your own domain and set the primary DNS authority to point to  
-the company providing this service (usually at a higher cost).  
-  
-  
-  
-  
-  
-There is also a free hosting service, at  
-Domain Host Services. They seem  
-fairly new, and there are few details on their web site at the moment,  
-but you might find it worth a look.  
-  
-  
-  
-  
-  
-If you have set up a dynamic IP, and subscribed to one of these  
-services, it will affect some of the decisions you make in section  
-Deciding Which Domain Services You Will Host. In particular, there is little point subscribing to a dynamic  
-IP hosting service if you do not plan to host at least one of web or  
-FTP services. You will have to set primary DNS authority to point to  
-the company you've chosen. You should not have a ''named'' daemon  
-answering requests from outside your private network. Other details,  
-such as handling of email, will depend on the specifics of the service  
-you've subscribed to, and can best be answered by the support staff of  
-that company.  
-  
-  
-  
-  
-  
-One final note: if you want to have remote access to a machine with a  
-dynamic IP, but don't need it for hosting other services, the  
-inexpensive solution is to create a ``drop box'' on a publicly  
-accessible machine with a static IP, and have your dynamic IP host  
-send its IP number there, either in email or simply by writing it into  
-a file on a shell account. When you want to access your machine  
-remotely, first extract the current IP number from the drop box, then  
-use ''slogin'' to attach directly to that IP number. This is,  
-after all, really all that a dynamic IP hosting service does, they  
-just do it automatically over standard services, saving you some  
-steps.  
-  
-  
-  
-  
-  
-  
-----  
-  
-!! 5. Registering A Domain Name  
-  
-  
-In order for people in the outside world to locate your servers under  
-the domain name of your choice, whether for web, FTP, or email  
-delivery, you will have to register the domain name for insertion into  
-the relevant top level domain database.  
-  
-  
-  
-  
-  
-Exercise some simple prudence in choosing your domain name. Certain  
-words or phrases may be forbidden on the grounds of community  
-standards, or may be offensive to visitors whose language or slang  
-differs from that of your region. Domain names can contain only the 26  
-letters of the Roman alphabet (without accents), the hyphen (though  
-not at the beginning or end of the name), and the 10 digits. Domain  
-names are not case-sensitive, and can be at least 26 characters long  
-(this limit is subject to change). Be careful not to register a name  
-which you can reasonably have been expected to know infringes on the  
-trademarks of an existing company, the courts are not kind to  
-cybersquatters. Some information on the circumstances under which your  
-poorly-chosen domain name might be stripped from your control are  
-available in this  
-Uniform Domain Name Dispute Resolution Policy.  
-  
-  
-  
-  
-  
-There are many companies which register names in the ``.com'',  
-``.net'', and ``.org'' top level domains. For a current list, check  
-the  
-list of accredited registrars.  
-  
-  
-  
-  
-  
-To register a name under a country top level domain, such as a  
-``.ca'', ``.de'', ``.uk'', etc., check with the appropriate authority,  
-which can be located in the  
-Country Code Top-Level Domains database.  
-  
-  
-  
-  
-  
-Typically, you have to provide the registrar with contact information,  
-primary and secondary DNS IP numbers, a change request validation  
-scheme (you wouldn't want just anybody changing your domain for you),  
-and money in the form of an annual fee. If you're not comfortable with  
-the change request validation schemes offered by a registrar, let them  
-know that you're not willing to use the service until they address  
-your security concerns.  
-  
-  
-  
-  
-  
-  
-----  
-  
-!! 6. Deciding Which Domain Services You Will Host  
-  
-  
-Most full-service ISPs will provide a variety of domain services for  
-their customers. This is largely because of the problems associated  
-with hosting these services under certain other, more popular desktop  
-and server operating systems. These services are much easier to  
-provide under Linux, and can be hosted on fairly inexpensive hardware,  
-so you should decide what services you want to take on for  
-yourself. Some of these services include:  
-  
-  
-*Primary DNS authority on your domain. See section  
-Primary DNS Authority.  
-*  
-  
-*Electronic mail. See section  
-Electronic Mail.  
-*  
-  
-*Web space hosting. See section  
-Web Space Hosting.  
-*  
-  
-*FTP space hosting. See section  
-FTP Site Hosting.  
-*  
-  
-*Packet filtering. See section  
-Packet Filtering.  
-*  
-  
-  
-  
-In each of these, you basically have to weigh convenience against  
-control. When your ISP performs one or more of these services, you can  
-usually be fairly sure that they have people with experience  
-maintaining the service, so you have less to learn, and less to worry  
-about. At the same time, you lose control over these services. Any  
-changes require that you go through the technical support of your ISP,  
-something which may sometimes be inconvenient or cause longer delays  
-than you would like. There's also a security issue involved, the ISP  
-is a much more tempting target to attackers than your own site. Since  
-an ISP's servers might host email and/or web space for the dozens of  
-companies which are their customers, an attacker who compromises one  
-of those servers gets a much higher return for his efforts than one  
-who attacks your personal servers, where only one company's data is  
-kept.  
-  
-  
-  
-  
-  
-  
-  
-!! 6.1 Primary DNS Authority  
-  
-  
-  
-When a person somewhere in the outside world attempts to connect to a  
-machine in the new example.com domain, queries are sent between  
-various servers on the Internet, ultimately resulting in the IP number  
-of that machine being returned to the software of the person  
-attempting the connection. The details of this sequence are beyond the  
-scope of this document. Neglecting many details, when a request is  
-made for the machine fred.example.com, a centralized database is  
-consulted to determine what is the IP number of the machine which  
-holds primary DNS authority for the example.com domain. This IP number  
-is then queried for the IP number of the machine fred.example.com.  
-  
-  
-  
-  
-  
-There must be a primary and a secondary DNS server for every domain  
-name. The names and IP numbers of these two servers are stored in a  
-centralized database whose entries are controlled by domain  
-registration authorities such as  
-Network Solutions.  
-  
-  
-  
-  
-  
-If you elect to have primary DNS authority hosted by your ISP, these  
-two servers will probably both be machines controlled by the ISP. Any  
-time you want to add an externally visible machine to your network,  
-you will have to contact the ISP and ask them to put the new machine  
-in their database.  
-  
-  
-  
-  
-  
-If you elect to hold primary DNS authority on your own host, you will  
-still use another machine as your secondary. Technically, you should  
-use one on a redundant Internet connection, but it is very common that  
-the secondary is held on one of your ISP's machines. If you want to  
-add an externally visible machine to your network, you will have to  
-update your own database, and then wait for the change to propagate  
-(something which takes, typically, a small number of hours). This  
-allows you to add barney.example.com without having to go through your  
-ISP.  
-  
-  
-  
-  
-  
-It is a good idea to set up secondary DNS on a geographically distant  
-host, so that a single cable cut near your ISP doesn't take both your  
-primary and secondary DNS servers off line. The domain registrar you  
-used to register your domain name may provide secondary DNS service.  
-There is also a free service,  
-Granite Canyon, available to anybody who asks.  
-  
-  
-  
-  
-  
-Regardless of whether or not you choose to act as primary DNS  
-authority for your domain, see section  
-Setting Up Name Resolution for configuration help. You will  
-want some sort of name resolution system for your private network,  
-even if you delegate primary DNS authority to the ISP.  
-  
-  
-  
-  
-  
-  
-  
-!! 6.2 Electronic Mail  
-  
-  
-  
-When you subscribe with your ISP, they will typically supply a number  
-of email boxes. You can elect to use this service exclusively, in  
-which case all incoming email is stored on the ISP's servers and your  
-users read their mail with POP3 clients which connect to the ISP's  
-servers. Alternately, you may decide to set up email on your own  
-machines. Once again, you should weigh the merits of the two  
-approaches, and choose the one which you prefer.  
-  
-  
-  
-  
-  
-Things to remember if you use the ISP for all email:  
-  
-  
-*It may be easier to access the email from home, or from other  
-locations when you're on a business trip, depending on the security  
-which you use to protect your domain.  
-*  
-  
-*Email is routinely stored on the ISP's servers, which may be a  
-problem if sensitive material is sent unencrypted.  
-*  
-  
-*You have a limited number of email accounts, and may have to pay  
-if you exceed this limit.  
-*  
-  
-*To create a new email address, you have to go through the ISP.  
-*  
-  
-  
-  
-  
-  
-  
-Things to remember if you provide your own email:  
-  
-  
-*Email is routinely stored on your own servers, with backup  
-storage on your ISP if your mail host goes down or its disk fills up.  
-*  
-  
-*You have an essentially unlimited number of email accounts,  
-which you can create and delete yourself.  
-*  
-  
-*You have to support the email clients used on your private  
-network, and possibly by people trying to read their email from home.  
-*  
-  
-  
-  
-  
-  
-  
-One possible approach is to host email yourself, but also use the  
-several email addresses provided by the ISP. People who need email  
-accessible from outside the private network can have an email address  
-in your domain which gets redirected to one of the ISP-supplied email  
-addresses. Others can have local email on the private network. This  
-requires a bit more coordination and configuration, but gives more  
-flexibility than either of the other approaches.  
-  
-  
-  
-  
-  
-Should you choose to host email for your domain, see  
-section  
-Setting Up Email For Your Domain for  
-configuration help.  
-  
-  
-  
-  
-  
-If you decide not to host email for your domain, refer to section  
-DNS Configuration If You Are Not Hosting Email for important notes on the name resolution configuration.  
-  
-  
-  
-  
-  
-  
-  
-!! 6.3 Web Space Hosting  
-  
-  
-  
-Your ISP may allocate you a certain amount of space on their web  
-servers. You might decide to use that, or you might have a web hosting  
-machine which you put on your external network, in one of your  
-external IP numbers.  
-  
-  
-  
-  
-  
-Points to remember if you choose to use the ISP's web space hosting:  
-  
-  
-*You have a certain disk space allocation which you should not  
-exceed. This will include not only web space contents, but also data  
-collected from people visiting the site.  
-*  
-  
-*The bandwidth between your web server and the outside world will  
-almost certainly be higher than it would be if you hosted it on your  
-own hardware. In any case, it will not be slower.  
-*  
-  
-*It may be difficult to install custom CGI scripts or commercial  
-packages on your web site.  
-*  
-  
-*Your bandwidth between your network and your web server will  
-almost certainly be lower than it would be if you hosted it on your  
-own network.  
-*  
-  
-  
-  
-  
-  
-  
-Points to remember if you choose to host your own web space:  
-  
-  
-*You have much more control over the hosting machine. You can  
-tailor your security more precisely for your application.  
-*  
-  
-*Potentially sensitive data, such as credit card numbers or  
-mailing addresses, remains on machines which you control.  
-*  
-  
-*Your backup strategy is probably not as comprehensive as your  
-ISP's.  
-*  
-  
-  
-  
-  
-  
-  
-Notice that I do not mention anything about the ISP having more  
-powerful hardware, higher peak data rates, and so on. By the time these  
-things become important, you're talking about very high data rate  
-network connections, and, quite frankly, you had better be delegating  
-these decisions to a skilled consultant, not looking in a Linux  
-HOWTO.  
-  
-  
-  
-  
-  
-Should you choose to host web space for your domain on your own  
-server(s), refer to other documents, such as the  
-WWW-HOWTO, for configuration help. I strongly recommend that  
-this service be run on a different machine from the private network  
-gateway machine, for security reasons.  
-  
-  
-  
-  
-  
-  
-  
-!! 6.4 FTP Site Hosting  
-  
-  
-  
-Basically, the same arguments apply to FTP hosting as apply to WWW  
-hosting, with the exception that active content is not an issue for  
-FTP, and CGI scripts don't appear. Most of the recent ftpd exploits  
-have come from buffer overruns resulting from the creation of large  
-directory names in anonymously-writable upload directories, so if  
-your ISP allows uploads and is lax in keeping up with security updates  
-on the FTP daemon, you might be better off hosting this service  
-yourself.  
-  
-  
-  
-  
-  
-Should you choose to host FTP for your domain on your own server(s),  
-make sure to get the latest version of your FTP daemon, and consult  
-the configuration instructions there. Once more, I strongly recommend  
-that this service be run on a different machine from the private  
-network gateway machine, for security reasons.  
-  
-  
-  
-  
-  
-For ''wu-ftpd'', I would recommend the following configuration options:  
-  
-  
-*--disable-upload - unless you need anonymous uploads  
-*  
-  
-*--enable-anononly - encourage your local users to use  
-''scp'' to transfer files between machines.  
-*  
-  
-*--enable-paranoid - disable whatever features of the current  
-release might be considered questionable.  
-*  
-  
-  
-  
-  
-  
-  
-  
-  
-!! 6.5 Packet Filtering  
-  
-  
-  
-Some ISPs will put packet filters on their network, to protect the  
-users of the system from each other, or from external attackers. Cable  
-modem networks and similar broadcast networks have had embarrassing  
-problems when users of Windows 95 or 98 inadvertently set up disk  
-shares, exporting the full contents of their hard drives to anybody on  
-the network segment who cared to browse for active servers in the  
-neighbourhood. In some cases, the solution has been to tell the users  
-not to do that, but some providers have put filtering into the access  
-hardware to prevent people from exporting their data by accident.  
-  
-  
-  
-  
-  
-Packet filtering is really something which you ought to do yourself.  
-It fits in easily into the kernel running on your private network  
-gateway machine and gives you a better idea of what's happening around  
-you. You often will find that you have to make small tweaks to the  
-firewall to optimize it during the initial setup, and this is much  
-easier to do in real time than through a technical support contact.  
-  
-  
-  
-  
-  
-Should you choose to do packet filtering for your domain, see section  
-Setting Up Packet Filtering for  
-configuration help.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-----  
-  
-!!7. Configuring Your Hosted Services  
-  
-!! 7.1 Setting up Name Resolution  
-  
-  
-  
-You will want some way for the computers on your network to refer to  
-one another by name, and also a way for people in the outside world to  
-refer to your exposed hosts by name. There are several ways to go  
-about doing this.  
-  
-  
-  
-  
-! DNS On Private Network, ISP Handles Domain  
-  
-  
- [[ Note: if you have chosen not to implement a private network, go to  
-section  
-Fully Exposed Network, Hosted By ISP. ]  
-  
-  
-  
-  
-  
-In this configuration, you have delegated responsibility for the  
-primary DNS authority on your domain to the ISP. You still use DNS  
-within your private network when hosts there want to talk to one  
-another. You have given your ISP a list of the names and IP numbers of  
-all exposed hosts. If you want one externally visible machine, for  
-instance betty.example.com, to act both as web and FTP server, you  
-should ask the ISP to make CNAME entries for www.example.com and  
-ftp.example.com pointing to betty.example.com.  
-  
-  
-  
-  
-  
-Set up DNS on your private network gateway machine. This can be done  
-securely, and makes upgrading easier, should you later decide to host  
-primary DNS authority for your domain.  
-  
-  
-  
-  
-  
-I will assume that you have decided to host DNS from the machine  
-dns.example.com, which is on the private network gateway, and an alias  
-for fred.example.com at 192.168.1.1. Some small modifications have to  
-be made to this configuration if this is not the case. I will not  
-cover that in this HOWTO unless there is significant interest.  
-  
-  
-  
-  
-  
-You will have to download and compile a recent  
-version of BIND, the Berkeley Internet Name Domain. It is available at  
-the  
-BIND web site. Next, you have to configure the daemon.  
-Create the following file, /etc/named.conf:  
-  
-----  
-  
-options {  
-directory "/var/named";  
-listen-on { 192.168.1.1 };  
-};  
-zone "." {  
-type hint;  
-file "root.hints";  
-};  
-zone "..127.in-addr.arpa" {  
-type master;  
-file "pz/127..";  
-};  
-zone "1.168.192.in-addr.arpa" {  
-type master;  
-file "pz/1.168.192";  
-};  
-zone "example.com" {  
-type master;  
-notify no;  
-file "pz/example.com";  
-};  
-  
-----  
-  
-  
-  
-Note that we are declaring ourselves the master for the example.com  
-domain. Meanwhile, our ISP is also declaring itself to be the master  
-for the same domain. This is not a problem, as long as you are careful  
-about the setup. All of the machines on the private network must use  
-dns.example.com to perform their name resolution. They must  
-''not'' use the name resolvers of the ISP, as the ISP name server  
-believes itself to be authoritative over your entire domain, but it  
-doesn't know the IP numbers or names of any machines on your private  
-network. Similarly, hosts on exposed IP numbers in your domain  
-''must'' use the ISP name server, not the private name server on  
-dns.example.com.  
-  
-  
-  
-  
-  
-The various files under /var/named must now be  
-created.  
-  
-  
-  
-  
-  
-The root.hints file is exactly as described in the  
-BIND documentation, or in the  
-DNS HOWTO. At the time of this writing, the following is a valid  
-root.hints file:  
-  
-----  
-  
-H.ROOT-SERVERS.NET. 6d15h26m24s IN A 128.63.2.53  
-C.ROOT-SERVERS.NET. 6d15h26m24s IN A 192.33.4.12  
-G.ROOT-SERVERS.NET. 6d15h26m24s IN A 192.112.36.4  
-F.ROOT-SERVERS.NET. 6d15h26m24s IN A 192.5.5.241  
-B.ROOT-SERVERS.NET. 6d15h26m24s IN A 128.9..107  
-J.ROOT-SERVERS.NET. 6d15h26m24s IN A 198.41..10  
-K.ROOT-SERVERS.NET. 6d15h26m24s IN A 193..14.129  
-L.ROOT-SERVERS.NET. 6d15h26m24s IN A 198.32.64.12  
-M.ROOT-SERVERS.NET. 6d15h26m24s IN A 202.12.27.33  
-I.ROOT-SERVERS.NET. 6d15h26m24s IN A 192.36.148.17  
-E.ROOT-SERVERS.NET. 6d15h26m24s IN A 192.203.230.10  
-D.ROOT-SERVERS.NET. 6d15h26m24s IN A 128.8.10.90  
-A.ROOT-SERVERS.NET. 6d15h26m24s IN A 198.41..4  
-  
-----  
-  
-  
-  
-  
-  
-  
-The pz/127..0 file is as follows:  
-  
-----  
-  
-$TTL 86400  
-@ IN SOA example.com. root.example.com. (  
-1 ; Serial  
-8H ; Refresh  
-2H ; Retry  
-1W ; Expire  
-1D) ; Minimum TTL  
-NS dns.example.com.  
-1 PTR localhost.  
-  
-----  
-  
-  
-  
-  
-  
-  
-The pz/1.168.192 file is as follows:  
-  
-----  
-  
-$TTL 86400  
-@ IN SOA dns.example.com. root.dns.example.com. (  
-1 ; Serial  
-8H ; Refresh 8 hours  
-2H ; Retry 2 hours  
-1W ; Expire 1 week  
-1D ; Minimum 1 day  
-)  
-NS dns.example.com.  
-1 PTR fred.example.com.  
-PTR dns.example.com.  
-PTR mail.example.com.  
-2 PTR barney.example.com.  
-3 PTR wilma.example.com.  
-  
-----  
-  
-and so on, where you create one PTR record for each machine with an  
-interface on the private network. In this example, fred.example.com is  
-on IP number 192.168.1.1, and is pointed to by the dns.example.com and  
-mail.example.com aliases. The machine barney.example.com is on IP  
-number 192.168.1.2, and so on.  
-  
-  
-  
-  
-  
-The pz/example.com file is as follows:  
-  
-----  
-  
-$TTL 86400  
-@ IN SOA example.com. root.dns.example.com. (  
-1 ; Serial  
-8H ; Refresh 8 hours  
-2H ; Retry 2 hours  
-1W ; Expire 1 week  
-1D ; Minimum 1 day  
-)  
-NS dns.example.com.  
-IN A 192.168.1.1  
-IN MX 10 mail.example.com.  
-IN MX 20 <ISP mail machine IP>.  
-localhost A 127...1  
-fred A 192.168.1.1  
-A 10.1.1.9  
-dns CNAME fred  
-mail CNAME fred  
-barney A 192.168.1.2  
-wilma A 192.168.1.3  
-betty A 10.1.1.10  
-www CNAME betty  
-ftp CNAME betty  
-  
-----  
-  
-Note that we create entries for machines both within the private  
-network and on external IPs, since machines within the private network  
-will not query the ISP's name servers for a request on, say,  
-betty.example.com. We also provide both IP numbers for fred, the  
-private and external IP numbers.  
-  
-  
-  
-  
-  
-One line in the ``options'' section of  
-/etc/named.conf bears discussion:  
-  
-  
-listen-on { 192.168.1.1 };  
-  
-  
-This will prevent your named daemon from answering DNS requests on the  
-outside interface (all requests from the outside must go through the  
-ISP's name resolver, not yours).  
-  
-  
-  
-  
-  
-  
-  
-!Non-DNS Resolution On Private Network, ISP Handles Domain  
-  
-  
-[[ Note: if you have chosen not to implement a private network, go to  
-section  
-Fully Exposed Network, Hosted By ISP. ]  
-  
-  
-  
-  
-  
-In this configuration, you have decided that your private network is  
-fairly small and unlikely to change often. You have decided not to use  
-the centralized database of a DNS server, and instead to maintain the  
-host resolution separately on each machine. All machines should use  
-the ISP's DNS server for their host name resolution for machines  
-beyond the private network gateway. For name resolution on the private  
-network, a hosts table has to be created. For Linux, this means  
-entering the names and IP numbers of all of the machines on the  
-private network into the /etc/hosts on each  
-machine. Any time a new machine is added, or a name or IP number is  
-changed, this file has to be updated on each Linux box.  
-  
-  
-  
-  
-  
-As in section  
-DNS Resolution on Private Network, ISP Handles Domain, the list of host names on exposed IP  
-numbers must be sent to the ISP, and any aliases (such as for www and  
-ftp names) should be specified so that a CNAME entry can be created by  
-the ISP.  
-  
-  
-  
-  
-  
-  
-  
-!You Are Primary DNS Authority For Domain  
-  
-  
-While you could set up ''named'' resolution on the exposed hosts, and  
-private database resolution for the private network, I will not cover  
-that case. If you're going to be running named for one service, you  
-ought really to do it for both, just to simplify the configuration. In  
-this section I will assume that the private network gateway machine is  
-handling name resolution both for the private network and for outside  
-requests.  
-  
-  
-  
-  
-  
-At the time of this writing, under version 8.2.2 of the BIND package,  
-there is no way for a single ''named'' daemon to produce  
-different answers to requests, depending on which interface the  
-request arrives on. We want name resolution to act differently if the  
-query comes from the outside world, because IP numbers on the private  
-network shouldn't be sent out, but have to be available in answer to  
-requests from within the private network. There is some discussion of  
-a new ``views'' keyword which may be added to BIND to fill this need  
-at a later date, but until that happens, the solution is to run two  
-''named'' daemons with different configurations.  
-  
-  
-  
-  
-  
-First, set up the private network domain name server as described in  
-section  
-DNS Resolution on Private Network, ISP Handles Domain. This will be the name resolver visible  
-from within your private network.  
-  
-  
-  
-  
-  
-Next, you have to set up DNS for your domain, as visible to hosts in  
-the outside world. First, check with your provider to see if they will  
-delegate reverse lookups of your IP numbers to them. While the  
-original DNS standard didn't account for the possibility of  
-controlling reverse DNS on subnets smaller than a class C network, a  
-workaround has been developed which works with all compliant DNS  
-clients, and has been outlined in  
-RFC 2317. If  
-your provider is willing to delegate control of reverse DNS on your IP  
-block, you will have to determine from them the exact name of the in-addr  
-pseudo-domain they have chosen to delegate to (the RFC does not offer  
-a convention they recommend for everyday use), and you will have to  
-register control for that pseudo-domain. I will assume that the  
-provider has delegated control to you, and the name of the  
-pseudo-domain is 8.1.1.10.in-addr.arpa. The provider would create  
-CNAME entries of the form  
-  
-  
-8.1.1.10.in-addr.arpa. 2H IN CNAME 8.8.1.1.10.in-addr.arpa.  
-9.1.1.10.in-addr.arpa. 2H IN CNAME 9.8.1.1.10.in-addr.arpa.  
-10.1.1.10.in-addr.arpa. 2H IN CNAME 10.8.1.1.10.in-addr.arpa.  
-etc.  
-  
-  
-in their zone file for the 1.1.10.in-addr.arpa domain. The  
-configuration of your 8.1.1.10.in-addr.arpa zone file is given later  
-in this section.  
-  
-  
-  
-  
-  
-If your provider is willing to delegate control of the reverse DNS to  
-you, they will create CNAME entries in their reverse DNS zone table  
-for those IP numbers you control, pointing to the corresponding  
-records in your pseudo-domain, as shown above. If they are not willing  
-to delegate control to you, you will have to ask them to update their  
-reverse DNS entries any time you add, delete, or change the name of an  
-externally visible host in your domain. If the reverse DNS table is  
-not synchronized with your forward DNS entries, certain services may  
-generate warnings, or refuse to handle requests issued by machines  
-affected by the mismatch.  
-  
-  
-  
-  
-  
-You now have to create a second ''named'' setup, this one to handle  
-requests issued by machines outside the private network gateway. This  
-setup lists only those hosts and IP numbers which are externally  
-visible, and responds only to requests on the outside interface of the  
-private network gateway machine.  
-  
-  
-  
-  
-  
-First, create a second configuration file, for instance  
-/etc/named.ext.conf for requests from the external  
-interface. In our example, it might be as follows:  
-  
-----  
-  
-options {  
-directory "/var/named";  
-listen-on { 10.1.1.9; };  
-};  
-zone "." {  
-type hint;  
-file "root.hints";  
-};  
-zone "..127.in-addr.arpa" {  
-type master;  
-file "pz/127..";  
-};  
-zone "8.1.1.10.in-addr.arpa" {  
-type master;  
-file "ext/8.1.1.10";  
-};  
-zone "example.com" {  
-type master;  
-notify no;  
-file "ext/example.com";  
-};  
-  
-----  
-  
-  
-  
-  
-  
-  
-The root.hints and pz/127..  
-files, both under /var/named are shared with the  
-other running daemon. The file ext/8.1.1.10 is as  
-follows:  
-  
-----  
-  
-$TTL 86400  
-@ IN SOA fred.example.com. root.fred.example.com. (  
-1 ; Serial  
-10800 ; Refresh 3 hours  
-3600 ; Retry 1 hour  
-3600000 ; Expire 1000 hours  
-86400 ) ; Minimum 24 hours  
-NS dns.example.com.  
-9 IN PTR fred.example.com.  
-PTR dns.example.com.  
-PTR mail.example.com.  
-10 IN PTR betty.example.com.  
-PTR www.example.com.  
-PTR ftp.example.com.  
-  
-----  
-  
-  
-  
-  
-  
-  
-The file ext/example.com contains the following:  
-  
-----  
-  
-$TTL 86400  
-@ IN SOA example.com. root.fred.example.com. (  
-10021 ; Serial  
-8H ; Refresh 8 hours  
-2H ; Retry 2 hours  
-1W ; Expire 1 week  
-1D ; Minimum 1 day  
-)  
-NS fred.example.com.  
-IN A 10.1.1.9  
-IN MX 10 mail.example.com.  
-IN MX 20 <ISP Mail Machine>.  
-localhost A 127...1  
-fred A 10.1.1.9  
-betty A 10.1.1.10  
-dns CNAME fred  
-mail CNAME fred  
-www CNAME betty  
-ftp CNAME betty  
-  
-----  
-  
-  
-  
-  
-  
-  
-Start the two daemons on the private network gateway machine. Put the  
-following into your network daemon initialization scripts:  
-  
-  
-/usr/sbin/named -u dnsuser -g dnsgroup /etc/named.conf  
-/usr/sbin/named -u dnsuser -g dnsgroup /etc/named.ext.conf  
-  
-  
-I've assumed here that you have created the unprivileged user  
-``dnsuser, and the corresponding unprivileged group ``dnsgroup''. If a  
-bug in bind turns up, which allows an attacker to execute code from  
-within ''named'', the attacker will find himself restricted to  
-those operations available to the unprivileged user. The  
-/var/named directory and the files within should not be  
-writable by ``dnsuser''.  
-  
-  
-  
-  
-  
-The machines on the private network must have their name resolution  
-configured to ask dns.example.com (at IP 192.168.1.1 in our example),  
-while the externally visible machines can either query the network  
-gateway's outside interface (at IP 10.1.1.9 in our example), or the  
-ISP's DNS servers.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-! Fully Exposed Network, Hosted By ISP  
-  
-  
-In this configuration, you have chosen to expose all of your  
-hosts. You have a real IP number for each machine in your domain, and  
-you've given your ISP the list of machine names and IP numbers. The  
-ISP has given you at least one IP number for their DNS host(s). Your  
-Linux boxes are now configured for name resolution in  
-/etc/resolv.conf:  
-  
-----  
-  
-search example.com  
-nameserver <DNS host 1>  
-nameserver <DNS host 2>  
-  
-----  
-  
-  
-  
-  
-  
-  
-Windows boxes are configured with the same parameters, in the network  
-settings dialogues.  
-  
-  
-  
-  
-  
-  
-  
-!Preparing DNS Before Moving Your Domain  
-  
-  
-If you decide to move your domain to a new IP number, either because  
-you have to change your ISP or because you've changed some details of  
-your service which require you to move to a new IP number from the  
-same ISP, you will have to make a few preparations ahead of the move.  
-  
-  
-  
-  
-  
-You want to set things up so that the IP number fetched by a DNS  
-lookup somewhere in the outside world points properly to the original  
-IP number until you move, and then quickly points to the new IP number  
-after you move. Remote sites can have cached your IP number, and  
-subsequent queries may be answered locally from the cache, rather than  
-querying the appropriate servers. The effect of this might be that  
-people who had visited your site recently are unable to connect, while  
-new visitors have no problems, because only the new visitors are  
-getting valid uncached data. Complicating things further is the fact  
-that the root-level servers are only updated twice a day, so it's  
-difficult to time a change to the identities of your primary and  
-secondary DNS servers in the root servers.  
-  
-  
-  
-  
-  
-The easiest way to make the transition is probably to duplicate the  
-entire site, or at least the publicly visible components of it, on the  
-new IP number, submit the changes, and then wait for the traffic to  
-shift completely to the new IP number. This is probably not very  
-practical, though.  
-  
-  
-  
-  
-  
-What you should do first is to arrange with your new ISP (or your  
-current ISP if you've just changing IP numbers within a single ISP) to  
-host primary and secondary DNS during the transition. This should be  
-done at least a day before the move. Ask them to set the TTL on this  
-record to something appropriately small (for instance, five  
-minutes). The sample DNS files given earlier in this section all have  
-TTL values set to 86400 seconds (1 day). If your TTL is longer than  
-this, you will have to arrange the change that much more in advance of  
-the move. Ultimately, here's what you have to achieve. If your current  
-domain information TTL is, say, N hours, then the following have  
-to be finished more than N hours before the move:  
-  
-  
-*Your domain registration entry must show primary and secondary  
-DNS on the new ISP's machines in the root database. Allow at least a  
-day between the time you submit the change and the time the change  
-enters the database.  
-*  
-  
-*The new primary and DNS servers should point to the original IP  
-numbers of your site, with a fairly small TTL.  
-*  
-  
-Note that you cannot accelerate this process by reducing your current  
-domain TTL value, unless you've also done this at least N hours before  
-the move.  
-  
-  
-  
-  
-  
-Now, you're ready for the move. Move your machines over to the new IP  
-numbers. Synchronize this with an update of the DNS records on your  
-ISP to point to the new numbers. Within five minutes (the small TTL  
-you set for the move), the traffic should have switched over to the  
-new site. You can now rearrange the DNS authority to your liking,  
-making yourself primary if that's how you want it, and putting the TTL  
-back up to a reasonably large value.  
-  
-  
-  
-  
-  
-  
-  
-!! 7.2 DNS Configuration If You Are Not Hosting Email  
-  
-  
-  
-The configurations described in section  
-Setting Up Name Resolution have MX records pointing to a  
-machine ``mail.example.com''. The MX record with the lowest priority  
-number following tells remote sites where to send email. Other MX  
-records with higher priority numbers are used as backup email  
-receivers. These backups will hold the mail for a certain period of  
-time if the primary email receiver is not able to accept the messages  
-for some reason. In the examples in that section, I have assumed that  
-fred.example.com, under its alias of mail.example.com, is handling  
-email for the domain. If you have chosen to let the ISP handle all of  
-your email hosting, you should change those MX records to point to the  
-appropriate ISP machines. Ask your ISP technical support  
-representative what host names you should use for the MX records in  
-the various files.  
-  
-  
-  
-  
-  
-  
-  
-!! 7.3 Setting up Electronic Mail  
-  
-  
-  
-If you have chosen to do full electronic mail hosting for your domain,  
-you'll have to take special actions for email coming from hosts on the  
-private network, and for allowing transparent mail reading from  
-anywhere within the private network. Unless you're careful, messages  
-are likely to sit around for long times if they are waiting on one  
-host, and the intended recipient is logged on another machine. For  
-security reasons, I recommend that the incoming email not be  
-accessible from the externally visible hosts (this might help to  
-discourage a PHB who wants his desktop machine to be on a real IP,  
-then wonders why he gets brought down by a ping of death twice a  
-day). A transparent email sharing system on the private network fairly  
-straight-forward in sendmail. If anybody wants to provide  
-''tested'' solutions for other mail handling daemons, I welcome  
-additions.  
-  
-  
-  
-  
-!A Solution Using "sendmail"  
-  
-  
-In order that email delivered to one host be visible on all machines,  
-the simplest solution is to export the mail spool directory with  
-read-write privileges over the entire private network. The private  
-network gateway machine will also act as mail collector and forwarder  
-for the entire private network, and so must have root write privileges  
-to the mail spool drive. The other clients may or may not squash root,  
-at your discretion. My general security philosophy is not to grant  
-privileges unless there is a clear reason for it, so I squash root on  
-the mail spool network drive for all hosts except the private network  
-gateway machine. This has the effect that root can only read his mail  
-from that machine, but this is not a particularly serious  
-handicap. Note that the mail spool drive can be a directory on the  
-private network gateway machine, exported via NFS, or it can be a  
-directory on one of the internal servers, exported to the entire  
-private network. If the mail spool drive is resident on the private  
-network gateway, there is no issue of squashing root for that  
-machine. If it is on another server, then note that email will be  
-undeliverable if that server, the gateway machine, or the network  
-connecting them, is down.  
-  
-  
-  
-  
-  
-For Windows machines on your private network, you may either set up a  
-POP server on the mail spool host, or use samba to export the mail  
-spool to those machines. The Windows machines should be configured to  
-send and retrieve mail under a Linux username, such as  
-joeuser@example.com, so that the email address host name is the bare  
-domain name, not a machine name like barney.example.com. The outgoing  
-SMTP host should be set to the private network gateway machine, which  
-will be responsible for forwarding the mail and doing any address  
-rewriting.  
-  
-  
-  
-  
-  
-Next, you should configure sendmail to forward email from the machines  
-on the private network, rewriting the addresses if necessary. Obtain  
-the latest sources to sendmail from the  
-sendmail.org WWW site. Compile  
-the binaries, then go to the cf/domain subdirectory  
-within the sendmail source tree, and create the following new file:  
-example.com.m4  
-  
-----  
-  
-divert(-1)  
-#  
-# Copyright (c) 1998 Sendmail, Inc. All rights reserved.  
-# Copyright (c) 1983 Eric P. Allman. All rights reserved.  
-# Copyright (c) 1988, 1993  
-# The Regents of the University of California. All rights reserved.  
-#  
-# By using this file, you agree to the terms and conditions set  
-# forth in the LICENSE file which can be found at the top level of  
-# the sendmail distribution.  
-#  
-#  
-#  
-# The following is a generic domain file. You should be able to  
-# use it anywhere. If you want to customize it, copy it to a file  
-# named with your domain and make the edits; then, copy the appropriate  
-# .mc files and change `DOMAIN(generic)' to reference your updated domain  
-# files.  
-#  
-divert()  
-define(`confFORWARD_PATH', `$z/.forward.$w+$h:$z/.forward+$h:$z/.forward.$w:$z/.forward')dnl  
-FEATURE(redirect)dnl  
-MASQUERADE_AS(example.com)dnl  
-FEATURE(masquerade_envelope)dnl  
-  
-----  
-  
-  
-  
-  
-  
-  
-This defines the domain ``example.com''. Next, you have to create the  
-sendmail.cf files which will be used on the mail  
-host (the private network gateway), and on the other Linux nodes on  
-the private network.  
-  
-  
-  
-  
-  
-Create the following file in the sendmail source tree, under  
-cf/cf:  
-example.master.m4  
-  
-----  
-  
-divert(-1)  
-#  
-# Copyright (c) 1998 Sendmail, Inc. All rights reserved.  
-# Copyright (c) 1983 Eric P. Allman. All rights reserved.  
-# Copyright (c) 1988, 1993  
-# The Regents of the University of California. All rights reserved.  
-#  
-# By using this file, you agree to the terms and conditions set  
-# forth in the LICENSE file which can be found at the top level of  
-# the sendmail distribution.  
-#  
-#  
-#  
-# This is the prototype file for a configuration that supports nothing  
-# but basic SMTP connections via TCP.  
-#  
-# You MUST change the `OSTYPE' macro to specify the operating system  
-# on which this will run; this will set the location of various  
-# support files for your operating system environment. You MAY  
-# create a domain file in ../domain and reference it by adding a  
-# `DOMAIN' macro after the `OSTYPE' macro. I recommend that you  
-# first copy this to another file name so that new sendmail releases  
-# will not trash your changes.  
-#  
-divert()dnl  
-OSTYPE(linux)dnl  
-DOMAIN(example.com)dnl  
-FEATURE(nouucp)  
-FEATURE(relay_entire_domain)  
-FEATURE(`virtusertable', `hash /etc/sendmail/virtusertable')dnl  
-FEATURE(`genericstable', `hash /etc/sendmail/genericstable')dnl  
-define(`confPRIVACY_FLAGS', ``noexpn,novrfy'')dnl  
-MAILER(local)  
-MAILER(smtp)  
-Cw fred.example.com  
-Cw example.com  
-  
-----  
-  
-In this example we have disabled the ``expn'' and ``vrfy''  
-commands. An attacker could troll for aliases with ``expn'', trying  
-names like ``staff'', ``allstaff'', ``office'', and so on, until he  
-hits an alias which expands out several usernames for him. He can then  
-try the usernames against certain weak passwords in hopes of getting  
-in (assuming he can get a login prompt - the security settings  
-described in section  
-Securing Your Domain  
-are set up so that no login prompt is available for off-site attackers).  
-  
-  
-  
-  
-  
-The other file you should create will define the sendmail.cf for the  
-slave machines:  
-example.slave.m4  
-  
-----  
-  
-divert(-1)  
-#  
-# Copyright (c) 1998 Sendmail, Inc. All rights reserved.  
-# Copyright (c) 1983 Eric P. Allman. All rights reserved.  
-# Copyright (c) 1988, 1993  
-# The Regents of the University of California. All rights reserved.  
-#  
-# By using this file, you agree to the terms and conditions set  
-# forth in the LICENSE file which can be found at the top level of  
-# the sendmail distribution.  
-#  
-#  
-#  
-# This the prototype for a "null client" -- that is, a client that  
-# does nothing except forward all mail to a mail hub. IT IS NOT  
-# USABLE AS IS!!!  
-#  
-# To use this, you MUST use the nullclient feature with the name of  
-# the mail hub as its argument. You MUST also define an `OSTYPE' to  
-# define the location of the queue directories and the like.  
-# In addition, you MAY select the nocanonify feature. This causes  
-# addresses to be sent unqualified via the SMTP connection; normally  
-# they are qualified with the masquerade name, which defaults to the  
-# name of the hub machine.  
-# Other than these, it should never contain any other lines.  
-#  
-divert()dnl  
-OSTYPE(linux)  
-FEATURE(nullclient, fred.$m)  
-Cm example.com  
-  
-----  
-  
-  
-  
-  
-  
-  
-You build the appropriate sendmail.cf files with the command:  
-  
-  
-make example.master.cf example.slave.cf  
-  
-  
-and then copy the files to the appropriate machines under the name  
-sendmail.cf.  
-  
-  
-  
-  
-  
-This configuration puts most of the sendmail configuration files under  
-the /etc/sendmail/ subdirectory. This configuration  
-causes ''sendmail'' to parse and use two special files,  
-virtusertable.db and  
-genericstable.db. To use these special files,  
-create their parent files. First,  
-virtusertable.src:  
-  
-----  
-  
-John.Public@example.com jpublic  
-Jane.Doe@example.com jdoe@somemachine.somedomain  
-abuse@example.com root  
-Pointyhaired.Boss@example.com #phb#@hotmail.com  
-  
-----  
-  
-This maps the email addresses on incoming email to new  
-destinations. Mail sent to John.Public@example.com is delivered  
-locally to the Linux account jpublic. Mail to Jane.Doe@example.com is  
-redirected to another email account, possibly in a different  
-domain. Mail to abuse@example.com is sent to root, and so on.  
-The other file is genericstable.src:  
-  
-----  
-  
-jpublic John.Public@example.com  
-janedoe Jane.Doe@example.com  
-whgiii Pointyhaired.Boss@example.com  
-  
-----  
-  
-This file renames the sender on outgoing email from locally-sourced  
-mail. While it clearly can't affect the return address for mail sent  
-directly from jdoe@somemachine.somedomain, it allows you to rewrite  
-the sender's email address from the internal usernames to whatever  
-email address convention you've chosen. Finally, create the following  
-Makefile in /etc/sendmail/:  
-  
-----  
-  
-all : genericstable.db virtusertable.db  
-virtusertable.db : virtusertable.src  
-makemap hash virtusertable < virtusertable.src  
-genericstable.db : genericstable.src  
-makemap hash genericstable < genericstable.src  
-  
-----  
-  
-Run ''make'' to create the hashed files which ''sendmail''  
-can use, and remember to re-run ''make'' and restart  
-''sendmail'' (or send it a SIGHUP) after any changes to either of  
-these ``.src'' files.  
-  
-  
-  
-  
-  
-  
-  
-!Solutions Using Other Mail Transfer Agents  
-  
-  
-My experience is only with sendmail. If anybody would like to write  
-this section, please contact me. Otherwise, I may, at some later time,  
-try to provide details myself on such MTAs as ''Postfix'',  
-''Exim'', or ''smail''. I'd really rather somebody wrote  
-these sections who uses those programs.  
-  
-  
-  
-  
-  
-  
-  
-!! 7.4 Setting up Web Space Hosting  
-  
-  
-  
-You should set up your externally visible web server on a machine  
-outside the private network, and not on the private network gateway  
-machine, for security reasons. If the web server needs access to  
-databases or other resources stored on the private network, the  
-situation becomes more complicated, both from a network and a security  
-standpoint. Such configurations are beyond the scope of this  
-document.  
-  
-  
-  
-  
-  
-The details of setting up the server itself can be found in  
-the apache documentation, and in the  
-Linux WWW HOWTO document.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-!! 7.5 Setting up FTP Hosting  
-  
-  
-  
-Once again, your FTP host should be an externally visible machine, and  
-not the private network gateway machine. Follow the setup directions  
-which ship with your FTP daemon package. Be sure to download the most  
-recent version of the daemon, as there are security vulnerabilities in  
-some older versions of many daemons. If your FTP site does not require  
-anonymous users to upload files, be sure to disable that feature in  
-the daemon. I recommend that user (non-anonymous) FTP logins not be  
-permitted on the FTP host, that you require your regular users to use  
-scp, the secure shell remote copy command, for any file updating they  
-may have to do on the FTP host. This is to help build secure habits in  
-the users, and to protect against the ``hostile router'' problem  
-described in section  
-Securing Your Domain.  
-  
-  
-  
-  
-  
-  
-  
-!! 7.6 Setting up Packet Filtering  
-  
-  
-  
-This is discussed in detail in section  
-Configuring Your Firewall.  
-  
-  
-  
-  
-  
-  
-----  
-  
-!! 8. Securing Your Domain  
-  
-  
-This section deals with setting up security for your new domain. The  
-emphasis is on user-transparent features. If your security is too  
-obtrusive, and interferes strongly with the actions of the users, the  
-users will develop their own workarounds which may compromise the  
-entire domain. The best way to avoid this is to make the security as  
-transparent as possible, and to encourage users to come to you first  
-when they have difficulties which might be related to the security  
-measures of the site. A certain flexibility in attitude is  
-important. I know from personal experience that if the security policy  
-is too rigid, the users will simply set up their own network tunnels  
-through the firewall so they can log in from outside the domain. It's  
-better that remote login procedures, or whatever the users are trying  
-to do, be set up, inspected, and approved by you.  
-  
-  
-  
-  
-  
-This section deals with securing your network against outside attack,  
-and against casual snooping from within. Securing your site against  
-determined attack from validated users within the private network is a  
-more difficult and involved task, and is beyond the scope of this  
-document.  
-  
-  
-  
-  
-  
-One of the security considerations used in this section is protecting  
-against the ``hostile router''. The router provided by your ISP may be  
-a remotely configurable computer in its own right, with the  
-administrative password held by your provider. There have been  
-security problems in the past when the router's manufacturer override  
-password (the one used when your ISP forgets the password they  
-programmed in) has become known to system crackers. When possible, you  
-should design your security around the assumption that the router is  
-potentially hostile. That is, it could be using any IP number in your  
-public ''or private'' network blocks, it could be redirecting  
-traffic on outgoing packets to another site, and it could be recording  
-anything which goes through.  
-  
-  
-  
-  
-  
-  
-  
-!! 8.1 Configuring Your Firewall  
-  
-  
-  
-This section deals with configuring an ''ipchains''-based  
-masquerading, forwarding, filtering router. You should probably read  
-the  
-IPCHAINS-HOWTO document first, then look here for additional  
-hints. That HOWTO describes the steps necessary to compile a kernel  
-with masquerading support, and describes the use of the ipchains  
-binary in detail. You should enable firewalling on all machines with  
-exposed IP numbers.  
-  
-  
-  
-  
-  
-Check your startup scripts to make sure that the sequence is as  
-follows on the private network gateway machine:  
-  
-  
-#Outside Ethernet card is initialized.  
-#  
-  
-#Firewall rules are run through ipchains.  
-#  
-  
-#Forwarding is turned on.  
-#  
-  
-#Network service daemons are started.  
-#  
-  
-  
-  
-So, as an example, on a Slackware-based system, the firewall  
-configuration should come between the execution of  
-rc.inet1 and rc.inet2. Further,  
-if any problems arise during the firewall configuration steps, a  
-warning should be printed, and the external Ethernet card taken  
-off line before the network service daemons are run.  
-  
-  
-  
-  
-  
-One common problem with ipchains-based firewalls is the tedium of  
-making sure that your rules are correctly set for packets arriving  
-from the loopback interface, or arriving from either of the internal  
-or external interfaces on the firewall machine. These locally-sourced  
-packets can be blocked by a firewall. All too often, this is fixed by  
-a sort of shotgun debugging approach, whereby the rules for the  
-firewall are tweaked until all applications seem to run properly on  
-the firewall host again. Unfortunately, this can sometimes result in a  
-firewall which has unintended holes. With ipchains it is possible to  
-write a firewall script which is easily debugged, and which avoids  
-many of the packet source problems. Here is a sample script,  
-/sbin/firewall.sh:  
-  
-----  
-  
-#! /bin/sh  
-#  
-# New firewalling script using IP chains. Creates a filtering router  
-# with network masquerading.  
-#  
-# define a few variables  
-IPCHAINS=/sbin/ipchains  
-LOCALNET="192.168.1./24" # the private network  
-ETHINSIDE="192.168.1.1" # fred.example.com's private IP #  
-ETHOUTSIDE="10.1.1.9" # fred.example.com's public IP #  
-LOOPBACK="127...1/8"  
-ANYWHERE="/"  
-OUTSIDEIF=eth1 # fred.example.com's private interface  
-FORWARD_PROCENTRY=/proc/sys/net/ipv4/ip_forward  
-#  
-# These two commands will return error codes if the rules  
-# already exist (which happens if you run the firewall  
-# script more than once). We put the commands before "set -e"  
-# so that the script doesn't abort in that case.  
-$IPCHAINS -N outside  
-$IPCHAINS -N portmap  
-set -e # Abort immediately on error setting  
-# up the rules.  
-#  
-# Turn off forwarding and clear the tables  
-echo "" > ${FORWARD_PROCENTRY}  
-$IPCHAINS -F forward  
-$IPCHAINS -F input  
-$IPCHAINS -F output  
-$IPCHAINS -F outside  
-$IPCHAINS -F portmap  
-#  
-# Masquerade packets from within our local network destined for the  
-# outside world. Don't masquerade packets which are local to local  
-$IPCHAINS -A forward -s $LOCALNET -d $LOCALNET -j ACCEPT  
-$IPCHAINS -A forward -s $ETHOUTSIDE -d $ANYWHERE -j ACCEPT  
-$IPCHAINS -A forward -s $LOCALNET -d $ANYWHERE -j MASQ  
-#  
-# Set the priority flags. Minimum delay connections for www, telnet,  
-# ftp, and ssh (outgoing packets only).  
-$IPCHAINS -A output -p tcp -d $ANYWHERE www -t 0x01 0x10  
-$IPCHAINS -A output -p tcp -d $ANYWHERE telnet -t 0x01 0x10  
-$IPCHAINS -A output -p tcp -d $ANYWHERE ftp -t 0x01 0x10  
-$IPCHAINS -A output -p tcp -d $ANYWHERE ssh -t 0x01 0x10  
-#  
-# Anything from our local class C is to be accepted, as are  
-# packets from the loopback and fred's external IP.  
-$IPCHAINS -A input -s $LOCALNET -j ACCEPT  
-$IPCHAINS -A input -s $LOOPBACK -j ACCEPT  
-$IPCHAINS -A input -s $ETHOUTSIDE -j ACCEPT  
-# We'll create a set of rules for packets coming from the big, bad  
-# outside world, and then bind all external interfaces to it. This  
-# rule will be called "outside"  
-#  
-# We also create a "portmap" chain. The sockets used by daemons  
-# registered with the RPC portmapper are not fixed, and so it is  
-# a bit difficult to set up filter rules for them. The portmap  
-# chain is configured in a separate script.  
-#  
-# Send packets from any outside interface to the "outside"  
-# rules chain. This includes the $OUTSIDEIF interface and any  
-# ppp interfaces we create for dialout (or dialin).  
-$IPCHAINS -A input -i ${OUTSIDEIF} -j outside  
-$IPCHAINS -A input -i ppp+ -j outside  
-##################################################  
-#  
-# Set up the "outside" rules chain #  
-#  
-##################################################  
-#  
-# Nobody from the outside should claim to be coming from our localnet  
-# or loopback  
-$IPCHAINS -A outside -s $LOCALNET -j DENY  
-$IPCHAINS -A outside -s $LOOPBACK -j DENY  
-#  
-# No packets routed to our local net should come in from outside  
-# because the outside isn't supposed to know about our private  
-# IP numbers.  
-$IPCHAINS -A outside -d $LOCALNET -j DENY  
-#  
-# Block incoming connections on the X port. Block 6000 to 6010.  
-$IPCHAINS -l -A outside -p TCP -s $ANYWHERE -d $ANYWHERE 6000:6010 -j DENY  
-#  
-# Block NFS ports 111 and 2049  
-$IPCHAINS -l -A outside -p TCP -s $ANYWHERE -d $ANYWHERE 111 -j DENY  
-$IPCHAINS -l -A outside -p TCP -s $ANYWHERE -d $ANYWHERE 2049 -j DENY  
-$IPCHAINS -l -A outside -p UDP -s $ANYWHERE -d $ANYWHERE 111 -j DENY  
-$IPCHAINS -l -A outside -p UDP -s $ANYWHERE -d $ANYWHERE 2049 -j DENY  
-#  
-# Block XDM packets from outside, port 177 UDP  
-$IPCHAINS -l -A outside -p UDP -s $ANYWHERE -d $ANYWHERE 177 -j DENY  
-#  
-# Block the YP/NIS port 653  
-$IPCHAINS -l -A outside -p TCP -s $ANYWHERE -d $ANYWHERE 653 -j DENY  
-#  
-# Don't bother logging accesses on TCP port 80, the www port.  
-$IPCHAINS -A outside -p TCP -s $ANYWHERE -d $ANYWHERE 80 -j DENY  
-#  
-# Accept FTP data and control connections.  
-$IPCHAINS -A outside -p TCP -s $ANYWHERE 20:21 -d $ANYWHERE 1024: -j ACCEPT  
-#  
-# Accept ssh packets  
-$IPCHAINS -A outside -p TCP -s $ANYWHERE -d $ANYWHERE ssh -j ACCEPT  
-#  
-# Accept DNS packets from outside  
-$IPCHAINS -A outside -p TCP -s $ANYWHERE -d $ANYWHERE 53 -j ACCEPT  
-$IPCHAINS -A outside -p UDP -s $ANYWHERE -d $ANYWHERE 53 -j ACCEPT  
-#  
-# Accept SMTP from the world  
-$IPCHAINS -A outside -p TCP -s $ANYWHERE -d $ANYWHERE 25 -j ACCEPT  
-#  
-# Accept NTP packets  
-$IPCHAINS -A outside -p UDP -s $ANYWHERE -d $ANYWHERE 123 -j ACCEPT  
-#  
-# Accept no tap ident packets, we don't use them  
-$IPCHAINS -A outside -p TCP -s $ANYWHERE -d $ANYWHERE 113 -j DENY  
-#  
-# Turn off and log all other packets incoming, TCP or UDP, on privileged ports  
-$IPCHAINS -l -A outside -p TCP -s $ANYWHERE -d $ANYWHERE :1023 -y -j DENY  
-$IPCHAINS -l -A outside -p UDP -s $ANYWHERE -d $ANYWHERE :1023 -j DENY  
-#  
-# Check against the portmapper ruleset  
-$IPCHAINS -A outside -j portmap  
-##############################################  
-#  
-# End of "outside" rules chain #  
-#  
-##############################################  
-#  
-# Block outgoing rwho packets  
-$IPCHAINS -A output -p UDP -i $OUTSIDEIF -s $ANYWHERE 513 -d $ANYWHERE -j DENY  
-#  
-# Prevent netbios packets from leaving  
-$IPCHAINS -A output -p UDP -i $OUTSIDEIF -s $ANYWHERE 137 -d $ANYWHERE -j DENY  
-#  
-# Turn on forwarding  
-echo "1" > ${FORWARD_PROCENTRY}  
-  
-----  
-  
-Notice that the firewall can be used not only to block incoming  
-packets, but also outgoing packets which might leak information about  
-your private network, such as rwho and netbios packets.  
-  
-  
-  
-  
-  
-As noted earlier, the portmapper rules are a bit different, because  
-the portmap daemons register themselves with the portmapper and are  
-told which ports to listen on. The ports used by a particular daemon  
-may change as you change the RPC services used, or change their order  
-of startup. The following script,  
-/sbin/firewall.portmap.sh generates rule sets for the  
-portmapped daemons:  
-  
-----  
-  
-#! /bin/sh  
-#  
-ANYWHERE=/  
-IPCHAINS=/sbin/ipchains  
-$IPCHAINS -F portmap  
-# Rules for preventing access to portmapped services by people on the outside  
-#  
-/usr/bin/rpcinfo -p | tail +2 | \  
-{ while read program vers proto port remainder  
-do  
-prot=`echo $proto | tr "a-z" "A-Z"`  
-$IPCHAINS -l -A portmap -p $prot -s $ANYWHERE -d $ANYWHERE $port -j DENY || exit 1  
-done  
-}  
-  
-----  
-  
-We didn't have to worry about whether packets coming in were  
-legitimate packets from the private network, the portmap chain is only  
-checked when the packets come in from the outside.  
-  
-  
-  
-  
-  
-This firewall configuration logs most suspicious packets through  
-klogd with the kern.info logging priority. It will log normal  
-connection attempts, as well as all known ``stealth'' probes.  
-  
-  
-  
-  
-  
-Now, we put these all together. We'd like to make sure that there  
-isn't a small window of vulnerability while the system is starting up,  
-so you should configure your startup sequence as follows:  
-  
-----  
-  
-#! /bin/sh  
-#  
-# Get the network started, securely  
-#  
-#  
-/etc/rc.d/rc.inet1 # Configure the network interfaces  
-# and set up routing.  
-/sbin/firewall.sh || { echo "Firewall configuration failed"  
-/sbin/ifconfig eth1 down }  
-/sbin/ipchains -I outside 1 -j DENY # Deny all incoming packets  
-/etc/rc.d/rc.inet2 # Start the network daemons  
-sleep 5 # Let them stabilize  
-# Secure the portmapped services  
-/sbin/firewall.portmap.sh || { echo "Portmap firewall configuration failed"  
-/sbin/ifconfig eth1 down }  
-/sbin/ipchains -D outside 1 # Allow incoming packets  
-  
-----  
-  
-This assumes that eth1 is the interface on the externally visible IP  
-number. If any of the ipchains rule sets fail to install, a warning is  
-issued and that interface is taken off line. The ``outside'' chain is set  
-to deny all packets before the network service daemons are started,  
-because the firewalling rules are not yet in place for the portmapped  
-services. Once the portmapped services are firewalled, the ``outside''  
-chain is restored to its proper behaviour.  
-  
-  
-  
-  
-  
-  
-  
-!! 8.2 Configuring OpenSSH or SSH1  
-  
-  
-  
-At the time of this writing, OpenSSH, like SSH1, now offers a  
-configuration setting which allows you to insert ''scp'',  
-''ssh'', and ''slogin'' as binaries named ''rcp'',  
-''rsh'', and ''rlogin'', with transparent fall-through in  
-the ssh client programs to the original ''rsh'', ''rcp'', or  
-''rlogin'' when the remote site isn't running  
-''sshd''. Making an invocation of ''rsh'' run, instead, the  
-''ssh'' client program is, in my opinion, important for keeping  
-the security easy to use and out of the way of the users. Everybody's  
-scripts, ''rdist'' configurations, and so on will continue to  
-work without modification if the remote site is running ''sshd'',  
-but data will be sent encrypted, with strong host authentication. The  
-converse will not always be true. Specifically, if the remote machine  
-is not running ''sshd'', the ''rsh'' program will echo a  
-diagnostic to the screen warning that the connection is  
-unencrypted. This message breaks ''rdist'', and possibly other  
-programs. The message cannot be suppressed with command line or  
-compile time switches. For ''rdist'', one solution is to invoke  
-the program with -p /usr/lib/rsh/rsh.  
-  
-  
-  
-  
-  
-Obtain ssh1 from the  
-ssh web site, or OpenSSH from the  
-OpenSSH web site, and compile it to replace the unencrypted  
-r-programs (''rsh'', ''rlogin'', and ''rcp''). First,  
-copy those three files to /usr/lib/rsh/, then configure the  
-ssh package with:  
-  
-  
-./configure --with-rsh=/usr/lib/rsh/rsh --program-transform-name='s/^s/r/' --prefix=/usr  
-  
-  
-Install the binaries, and configure according to the directions. On  
-the private network gateway machine, make sure that the sshd  
-configuration has the following entries defined:  
-  
-  
-!ListenAddress 192.168.1.1 # fred's internal IP  
-!IgnoreRhosts no  
-X11Forwarding yes  
-X11DisplayOffset 10  
-!RhostsAuthentication no  
-RhostsRSAAuthentication yes  
-RSAAuthentication yes  
-!PasswordAuthentication yes  
-  
-  
-You will have to do further configuration of other entries in the  
-/etc/sshd_config file, but try not to change these  
-fields. Once you have all of the entries in the file set to your  
-satisfaction, copy this entire file into a new file,  
-/etc/sshd_config.ext, for the external  
-network. Change two fields in the new file: the ``!ListenAddress'' should  
-be changed to the private network gateway's external IP number  
-(10.1.1.9 in our fred.example.com case), and ``!PasswordAuthentication''  
-should be set to ``no'' in /etc/sshd_config.ext. In  
-your network services startup script, start sshd twice, once with  
-  
-  
-/usr/sbin/sshd  
-  
-  
-and once with  
-  
-  
-/usr/sbin/sshd -f /etc/sshd_config.ext  
-  
-  
-This will create two running sshd daemons. The one operating on the  
-internal interface will allow logins with passwords, but the external  
-interface will require an RSA key validation before anybody can log  
-on.  
-  
-  
-  
-  
-  
-Next, turn off incoming telnet and shell services in the inetd  
-configuration file (note that the firewall configuration listed in  
-section  
-Configuring Your Firewall already  
-prevents access from outside, but it's best to defend in depth, don't  
-rely on everything working correctly).  
-  
-  
-  
-  
-  
-People who want to be able to log in from home, or from out of town,  
-will need an RSA key. Make sure they know how to do this, so they  
-don't spend their energies trying to figure out another way to do it,  
-like running a telnetd on an unprivileged port on your firewall  
-machine.  
-  
-  
-  
-  
-  
-An RSA key is generated by the command:  
-  
-  
-ssh-keygen -b 1024 -f new_rsa_key  
-  
-  
-You will be prompted for a pass phrase. This should ''not'' be  
-blank. A person with access to the file  
-new_rsa_key, and knowledge of the pass phrase, has  
-everything necessary to pass an RSA authentication challenge. The  
-pass phrase can be an ``unguessable'' password, or a long sentence, but  
-make it something non-trivial. The file new_rsa_key  
-can be copied to a floppy disk, or onto a laptop, and, along with the  
-pass phrase, can be used to log into accounts which are set to grant  
-access to that particular RSA key.  
-  
-  
-  
-  
-  
-To configure an account to allow access by a particular RSA key,  
-simply create a $HOME/.ssh/ directory for that user  
-on the private network gateway machine (i.e. the machine which will be  
-receiving the login attempt), and copy the file  
-new_rsa_key.pub which was created by the  
-"ssh-keygen" command into the file  
-$HOME/.ssh/authorized_keys. See the section  
-``AUTHORIZED_KEYS FILE FORMAT'' in the sshd man page for details on  
-other options you can add to the key, such as requiring the login to  
-come from a certain IP or host name, or authorizing the key only to  
-permit the remote invocation of certain commands (for instance, an RSA  
-key which commands a backup to take place, or commands a status report  
-to be emailed somewhere off site).  
-  
-  
-  
-  
-  
-Only one thing remains to make the RSA key mechanism as gentle as  
-possible to the users. If a user is forced to enter the pass phrase  
-more than once or twice in a session, they are likely to become bored  
-and take security matters into their own hands. Under Linux, arrange  
-their login shell to be invoked under ''ssh-agent''. For  
-instance, if the company laptop used on business trips runs  
-''xdm'', and drops users into an X session, go into the  
-/var/X11R6/lib/xdm/Xsession_0 file and change the lines which  
-invoke the startup, which are probably of the form:  
-  
-  
-exec "$startup"  
-  
-  
-into lines of the form:  
-  
-  
-exec ssh-agent "$startup"  
-  
-  
-In my xdm setup, there are three such lines which should be altered in  
-that one file. Now, when the user logs onto the laptop, he enters the  
-command  
-  
-  
-ssh-add new_rsa_key  
-  
-  
-at any prompt, enters the pass phrase when prompted, and all windows  
-will have pass phrase-free access to the account on the private network  
-gateway until the user logs off his X session on the laptop.  
-  
-  
-  
-  
-  
-Run sshd on all of the machines on your private network, as well as on  
-any exposed hosts. For machines other than the private network gateway  
-machine, the !ListenAddress entry in  
-/etc/sshd_config can be set to ``...''. You  
-should set up the host keys with the command:  
-  
-  
-ssh-keygen -b 1024 -f /etc/ssh_host_key -N ""  
-  
-  
-then run ''make-ssh-known-hosts'' and distribute the  
-/etc/ssh_known_hosts file among all of the machines  
-on the private and public networks.  
-  
-  
-  
-  
-  
-Disable incoming telnet and the unencrypted r-services. Don't delete  
-the ''telnet'' binary, it's useful for things other than simple  
-telnet sessions on port 23. You should allow password authentication  
-on the private network, and disable it on the exposed machines,  
-requiring an RSA key to log onto the exposed hosts.  
-  
-  
-  
-  
-  
-It is convenient for the users if the hosts on the private network are  
-mentioned in each other's /etc/hosts.equiv  
-files. The sshd daemons will respect those, and allow people to rlogin  
-and rsh between machines without passwords or pass phrases. On every  
-connection, the machines will be verifying each other's identities  
-with host-level RSA keys.  
-  
-  
-  
-  
-  
-One difficulty arises when a user logged onto a machine on the private  
-network wants to log onto a box on an exposed IP number. You can't use  
-/etc/hosts.equiv or $HOME/.shosts to allow  
-password-less validation, because the user is coming from a machine  
-whose IP number cannot be determined - it will appear to be coming  
-from the masquerading firewall machine, but the host keys won't  
-match. There are two solutions to this. First, if you insist on using  
-the /etc/hosts.equiv or $HOME/.shosts  
-methods, the user will have to log onto the private network gateway  
-machine (fred.example.com in our example here), and then log through  
-to the exposed machine from there. The other technique is to use RSA  
-key authentication, that always works regardless of what games are  
-going on with IP numbers and host name lookups.  
-  
-  
-  
-  
-  
-  
-  
-!!8.3 Configuring X  
-  
-  
-  
-In the user's continuing quest to prove that he values convenience  
-over security, it has become common for people to put  
-  
-  
-xhost +  
-  
-  
-commands right into their X initialization scripts. This grants X  
-server access to everybody in the world. Now the random outsider can  
-change your root window graphic to something embarrassing while your  
-boss is showing his mother around your office. Alternately, this  
-outsider can quietly monitor every keystroke you issue, and dump the  
-contents of your screen to his desktop. Needless to say, this doesn't  
-bode well for passwords used to log into other sites, or for sensitive  
-documents being edited on screen. The xhost protocol itself is  
-inherently limited, as it is not possible to grant permissions to use  
-the screen on a user basis, only on a machine basis.  
-  
-  
-  
-  
-  
-Enter ''xauth'' authentication. If you have ''xdm'' you  
-probably already are running ''xauth'' authentication, but  
-''xhost'' still works, and might still be what people are using  
-to run X processes between machines. Once again, the goal is to make  
-the security easy enough to use that the users aren't tempted to run  
-the ''xhost'' command anymore.  
-  
-  
-  
-  
-  
-The sshd setup described in section  
-Configuring SSH1, with the ``X11Forwarding'' flag set, is  
-actually simpler to use than the ''xhost'' technique. Once you  
-have logged into your terminal, you can simply rlogin to a remote  
-machine, and run ''netscape'', ''xv'', or whatever you like,  
-without having to set the $DISPLAY variable name or allow  
-explicit permissions. During ''ssh'' login, it configures the  
-system in a way transparent to the end user, and even encrypts all of  
-your X packets before they go over the network.  
-  
-  
-  
-  
-  
-If you are unable to use the sshd X11 forwarding for some reason, you  
-should use ''xauth'' when you want to authorize other machines to have  
-access to your X server. Document this for the users, or create  
-specialized shell scripts to help them out. The relevant command to  
-authorize a particular login, ``jpublic'', on machine ``barney'' to have  
-access to your X server is:  
-  
-  
-/usr/X11/bin/xauth extract - $DISPLAY | rsh -l jpublic barney /usr/X11/bin/xauth merge -  
-  
-  
-This sequence is not necessary to authorize X connections from  
-machines which share a common NFS-mounted home directory. The xauth  
-key will be immediately available to that user on all machines which  
-mount the same home directory.  
-  
-  
-  
-  
-  
-I'd be tempted to delete ''xhost'' from your machines entirely. If it  
-causes problems with any programs, you will at least know that those  
-programs had poorly-designed security. It's simple enough to build a  
-shell script as a drop-in replacement for ''xhost'' which uses the  
-''xauth'' sequence listed above.  
-  
-  
-  
-  
-  
-Note that if ''rsh'' is not the encrypting ssh program, the xauth  
-key is sent plaintext. Anybody who holds the plaintext of the key can  
-access your server, so you do not gain much security if you don't use  
-ssh for these transactions. Note, also, that if the users' home  
-directories are exported via NFS (the Network File System), the xauth  
-key is available in plaintext to anybody able to snoop those NFS  
-packets, regardless of whether you're running ssh on your systems.  
-  
-  
-  
-  
-  
-  
-  
-!!8.4 Configuring Disk Sharing  
-  
-  
-  
-With email coming to a central machine, the read/send from any host  
-setup described here is very convenient, but some care has to be taken  
-to protect against trivial snooping by bored local users. NFS without  
-AUTH_DES implemented is inherently insecure. NFS relies on the client  
-machine to authenticate access, there is no password verification on  
-the server to make sure that the client should be permitted to access  
-the private files of a particular user. A Windows box can be  
-configured to read NFS-exported volumes as any numeric uid, completely  
-bypassing UNIX file permissions. Consequently, NFS exports should  
-only be made to machines which are always Linux (or UNIX) boxes under  
-your direct control, and never ones which can be dual-booted into  
-Windows. If you want to export the mail spool directory, or any other  
-directory, to machines which can sometimes be used as Windows boxes,  
-export them with samba, setting the authentication mode to  
-``security=USER''. Connecting the machines on your network with a  
-switch rather than a hub will also help, as it leaves very little of  
-interest for sniffers on Windows machines. Ultimately, though, it's  
-very difficult to secure any disk sharing over the network at the time  
-of this writing.  
-  
-  
-  
-  
-  
-Why bother, if you can't really secure the network disks? Mostly it's  
-an issue of credible defense. If you leave a sheet of paper on your  
-desk with confidential information, and somebody in the office reads  
-it, he can argue that he didn't realize what the paper was, his  
-natural curiosity just got the better of him when he saw it sitting on  
-the desk. If the sheet of paper were in a filing cabinet or desk  
-drawer, it's an entirely different story. The purpose of taking some  
-basic network security measures internally is to ensure that nobody  
-``accidentally'' compromises security.  
-  
-  
-  
-  
-  
-  
-----  
-  
-!!9. Acknowledgements  
-  
-  
-This document was written as internal documentation for the DYNACAN  
-project, as part of the project's continuing development under the  
-control of the Ministry of Human Resources Development Canada.  
-  
-  
-  
-  
-  
-This document has benefited considerably from the suggestions of  
-  
-  
-*Rod Smith (  
-rodsmith@rodsbooks.com), who suggested I provide details on  
-registering a domain name and on setting up with a dynamic IP, and  
-pointed me at the various dynamic IP hosting services and at Granite  
-Canyon.  
-*  
-  
-*Greg Leblanc (  
-gleblanc@my-deja.com) for useful suggestions on improving  
-the clarity of the document.  
-*  
-  
-*Sami Yousif (  
-syousif@iname.com).  
-*  
-  
-*Marc-Andreacute Dumas (  
-m_a_dumas@hotmail.com), who suggested the  
-section on moving your domain to a new IP number.  
-*  
-  
-*Osamu Aoki (  
-aoki@pacbell.net).  
-*  
-  
-*Joao Ribeiro <(url url="mailto:sena@decoy.ath.cx"  
-name="sena@decoy.ath.cx">).  
-*  
-  
-  
-  
-  
-  
-  
-  
-----  
-  
-!!10. Glossary of Terms  
-  
-  
-This is a list of the meanings of some of the words and acronyms used  
-in this document.  
-  
-  
-  
-  
-; __CGI Script__:  
-  
-A Common Gateway Interface Script. This is a program  
-which is run on demand to generate the content of a web page. If a web  
-page has to do more than simply feed an unchanging text and graphics  
-display to the viewer, you will probably need some sort of dynamic  
-content generation program such as a CGI Script. Examples include  
-discussion boards, feedback forms, e-commerce shopping carts, and  
-more.  
-; __  
- DHCP__:  
-  
-Dynamic Host Configuration  
-Protocol. A standard, defined in RFC 1531, for computers on a TCP/IP  
-network to request from a central server information such as the IP  
-number they should be using, the netmask, the gateway, etc. Rather  
-than an administrator entering this information into the machine  
-configuration, the machine simply requests it from the server as it is  
-preparing to attach to the network.  
-; __  
- DNS__:  
-  
-Domain Name Service. A standard for  
-translating domain names into  
-IP Numbers, or vice versa, by looking up data in centralized databases.  
-; __DSL__:  
-  
-Digital Subscriber Line. A relatively high speed network  
-connection, usually delivered through specialized telephone wiring.  
-; __  
- Dynamic IP Number__:  
-  
-An  
-IP Number which is assigned periodically  
-or on a per-session basis. No guarantee is made that the number will  
-remain constant. A dynamic IP number might change only when your  
-network connection hangs up and reconnects, or it might change  
-periodically under  
-DHCP  
-negotiation. Certain session-based services such as ''telnet''  
-and ''ssh'' will stop working if the IP number of either end of  
-the connection is changed during the session.  
-; __Forward DNS Query__:  
-  
-A  
-DNS query  
-which converts a domain name into an  
-IP Number.  
-; __  
- FTP__:  
-  
-The File Transfer Protocol. A  
-standard system for sending files between machines over the Internet.  
-; __ftpd__:  
-  
-The daemon responsible for providing  
-FTP services on a host. It responds to queries initiated by a  
-remote client.  
-; __Internet Service Provider__:  
-  
-See  
-ISP.  
-; __IP__:  
-  
-See  
-IP Number.  
-; __  
- IP Number__:  
-  
-The ``address'' of a  
-certain network interface. Under the current addressing standard,  
-called ipv4, this number consists of four 8-bit values, generally  
-written as base-10 numbers separated by dots. Communication between  
-computers on the Internet is based on packets of information sent  
-between IP numbers.  
-; __  
- ISP__:  
-  
-Internet Service Provider. The  
-company which provides your network connectivity, including connection  
-hardware, service hosting, and leasing out the IP numbers under their  
-control.  
-; __Masquerading__:  
-  
-A form of filtering in which packets from one  
-machine to the outside world have their headers rewritten so that they  
-appear to come from an intermediate machine. That intermediate machine  
-then passes responses back to the originating machine. The net effect  
-is that an entire network of machines can appear to use a single IP  
-number, that of the masquerading host, for the purpose of outgoing  
-connections.  
-; __named__:  
-  
-The name server daemon. This is the daemon which answers  
-DNS queries, and is distributed as part  
-of the BIND package.  
-; __Network Time Protocol__:  
-  
-See  
-NTP.  
-; __  
- NTP__:  
-  
-Network Time Protocol. A standard  
-for synchronizing your system clock with the ``true time'', defined as  
-the average of many high-accuracy clocks around the world.  
-; __OS__:  
-  
-Operating system. Linux, Windows, FreeBSD, BeOS, HP-UX, etc.  
-; __PHB__:  
-  
-  
-Pointy-Haired Boss. A creation of Scott Adams, of Dilbert  
-fame.  
-; __Provider__:  
-  
-See  
-ISP.  
-; __Reverse DNS Query__:  
-  
-A  
-DNS query  
-which converts a  
-IP Number into a domain name.  
-; __Router__:  
-  
-A specialized hardware device which implements rules for  
-where to send packets based on their  
-IP Numbers, and which bridges between your Ethernet hardware  
-and whatever communications medium connects you to your  
-ISP.  
-; __ssh__:  
-  
-The secure shell. A cryptographically strong replacement for  
-''rlogin'', ''telnet'', ''ftp'', and other programs.  
-Protects against ``spoofing'', man in the middle attacks, and packet  
-sniffing.  
-; __Static IP Number__:  
-  
-An  
-IP Number  
-which has been assigned or leased to you permanently. Barring  
-revocation of the agreement which granted you this number, that IP  
-number will always be available for your use, and no other machine on  
-the Internet is allowed to use that number. Contrast this with  
-Dynamic IP Numbers .  
-  
-  
-  
-  
-----  
+Describe [HowToDomain ] here.