Differences between version 3 and previous revision of HowToISPSetupRedHatHOWTO.
Other diffs: Previous Major Revision, Previous Author, or view the Annotated Edit History
Newer page: | version 3 | Last edited on Tuesday, October 26, 2004 10:13:29 am | by AristotlePagaltzis | Revert |
Older page: | version 2 | Last edited on Friday, June 7, 2002 1:06:47 am | by perry | Revert |
@@ -1,2630 +1 @@
-
-
-
-"Pocket" ISP based on !RedHat Linux HOWTO
-
-
-
-----
-
-!!!"Pocket" ISP based on !RedHat Linux HOWTO
-
-!!Anton Chuvakin,
-anton@chuvakin
.orgv2..0 10 January 2001
-
-
-----
-'' This document outlines the setup of a single !RedHat box for dialins, virtual
-web hosting, virtual email, POP3 and ftp servers. Why anybody might need
-this in one box is beyond the scope of this document. The idea is a complete
-ISP solution based on !RedHat Linux. Any part of this setup can be
-implemented separately though. I will try to emphasize all the commands so
-one can just paste them to configure his own box. The list of documents
-that I borrowed from and some further reading is provided below (see References section).
-I will keep security in mind on all stages of the setup and will make
-clear all the security limitations of this setup, that I am aware of.
-I should add that assets that are to be
-protected in this case are considered not very valuable (e.g. personal pages etc) thus
-efforts spent on securing the setup are allowed to be limited.''
-----
-
-
-
-
-!!1. Introduction
-
-
-
-
-!!2. Changes
-
-
-
-
-!!3. TODO Tue Jan 9 13:14:15 EST 2001
-
-
-*3.1 New versions of this document
-
-*3.2 Feedback
-
-*3.3 Standard disclaimer
-
-*3.4 Support
-
-*3.5 Copyright information
-
-
-
-
-
-!!4. Step by step guide
-
-
-*4.1 Get RH
-
-*4.2 Install RH
-
-*4.3 Some install tips
-
-*4.4 Some preliminary security configuration
-
-*4.5 Remove unnecessary services
-
-*4.6 Enable multiple IP addresses
-
-*4.7 Configure DNS
-
-*4.8 Configure httpd
-
-*4.9 Configure sendmail
-
-*4.10 Configure POP3
-
-*4.11 Configure FTP server
-
-*4.12 Configure dialin
-
-*4.13 Open access
-
-
-
-
-
-!!5. Conclusion
-
-
-
-
-!!6. References
-----
-
-!!1. Introduction
-
-
-The guide assumes some familiarity with Linux functionality and general
-Linux/UNIX setup procedure (although not very detailed). Fully functional
-brain is also required for some stages of the procedure. All setup would
-be done manually (without the use of
-linuxconf,
-Webmin or other
-tools). Not that those are bad or that there is anything wrong with them. The
-reasons for that are: 1) it is comparatively hard to give step by step directions
-that produce predictable results as these tools pretend they are intelligent
-and "know better" (also known as "Windows syndrome") 2) layout of tools changes with time and is different
-in some distributions 3) manual setup gives better understanding of system works
-(not that it is always required though) 4)some tools allow only limited
-configuration of Linux system or do not keep up with updated features of
-services they try to configure.
-
-
-I should add, that another solution seems to be very promising. It is
-virtfs
-developed by
-Afra Ahmad. Its main part is a
-perl script so it does not suffer from being a "black box". It will
-automatically configure all virtual services in a highly customizable fashion.
-
-
-It is based on taking
-advantage of the chroot environment. A separate and smaller filesystem is
-created for each virtual server, and when a service is requested, the main
-server will chroot to the desired virtual server.
-
-
-This method may take up more disk space, but it is much more flexible,
-especially when dealing with the services. For example, it is possible to have
-two different email accounts bob@vdomain1.com and bob@vdomain2.com (as you are
-dealing with two different passwd files). It might be essential for a bigger
-hosting site.
-
-
-For more information please visit the Virtfs page at
-http://www.prongs.org/virtfs.
-
-
-While many improvements are possible to the setup described in this HOWTO they might be
-described in later editions of this document - I just outline one possible
-way (accidentally, the one I used). The writeup is aimed at !RedHat Linux,
-but with trivial changes can be used on any modern Linux distribution.
-The resulting configuration loosely follows
-the setup of some particular machines built by the author.
-
-
-
-----
-
-!!2. Changes
-
-
-__from 1.1.1 to 2..__
-
-
-
-
-
-*References updated (single IP hosting)
-*
-
-*!RedHat 7.0 based
-*
-
-*
-*
-
-
-
-__from 1.1.0 to 1.1.1__
-
-
-
-
-
-*Partitioning scheme described
-*
-
-*Some comments to dialin server setup added (based on user feedback)
-*
-
-*Some comments to ftp server setup added (based on user feedback)
-*
-
-
-
-__from 1..3 to 1.1.__
-
-
-
-
-
-*Description of virtfs added
-*
-
-*Qpopper and WUftpd bugs described
-
-*
-
-*Double connections issue mentioned as requested by one of the readers
-*
-
-*POP-only accounts described
-*
-
-*References added
-*
-
-
-
-__from 1..2 to 1..3__
-
-
-
-
-
-*Some spelling errors corrected (thanks to Eugene Shishkin for that)
-*
-
-
-
-__from 1..1 to 1..2__
-
-
-
-
-
-*''Some'' errors corrected (spelling)
-*
-
-*Method to chroot non-anonymous ftp users ("guest" users; those with password
-and usernames, but with access only to their home directories;
-used for ''easy'' web updates)
-*
-
-*References section updated
-*
-
-*Troubleshooting subsections added to two sections
-*
-
-*Qpopper update
-*
-
-
-
-__from 1..0 to 1..1__
-
-
-
-
-
-*''Many'' errors corrected (both spelling and factual)
-*
-
-*References section updated
-*
-
-*Minor changes in wording and syntax to improve clarity
-*
-
-*More security info added to several sections
-*
-
-*Windows configuration for dialup added
-*
-
-
-
-__Next update planned at:__ upon request or when new program versions are released
-
-
-
-----
-
-!!3. TODO Tue Jan 9 13:14:15 EST 2001
-
-
-
-
-
-*How to test each service section added! (including maybe strace:
-(mkdir /tmp/strace; mv .../in.ftpd .../in.ftpd.binary, create
-a two line shell script named in.ftpd with: #!/bin/sh and
-'strace -o /tmp/strace/ftpd.out .../in.ftpd.binary' ---
-I've described strace wrappers and reading strace output
-in past LG articles; search for some hints))
-
-*
-
-*More on security of all the services we install (clear text password, DoS by
-overflowing partition in mail and ftp, http access configs etc), including
-maybe the very basic ipchains setup (ipchains as safer alternative to tcp wrappers)
-*
-
-*Add info on POP3 and ftp tunneling via ssh (just for fun) or refer to other HOWTOs
-*
-
-*Add troubleshooting subsections to various sections
-*
-
-*Add SSL-enabled Apache install and basic configuration
-*
-
-*Add news server setup - who needs it?
-*
-
-*User accounting setup (acc, acua)
-*
-
-*
-Description of mail-only users (playing with proxyarp and restricting their
-access only to the local machine)
-*
-
-
-
-
-
-
-
-
-!!3.1 New versions of this document
-
-
-
-New versions of this document can be found at
-
-
-
-http://www.chuvakin.org/ispdoc
-
-
-
-
-!!3.2 Feedback
-
-
-
-All comments, error reports, additional information (very much appreciated!!!) and criticism
-of all sorts should be directed to:
-
-anton@chuvakin.org
-
-
-
-http://www.chuvakin.org/
-
-
-My PGP key is located at
-http://www.chuvakin.org/pgpkey
-
-
-Please direct spelling error comments to your friendly local spell checker.
-
-
-If you plan to ask for __help__, see support section first.
-
-
-
-
-!!3.3 Standard disclaimer
-
-
-
-No liability for the contents of this document can be accepted.
-Use the concepts, examples and other content at your own risk.
-Additionally, this is an early version, with many possibilities
-for inaccuracies and errors.
-
-
-One of many possible setups will be described. In the Linux
-world, there is usually a number of ways in which to accomplish
-things.
-
-
-As far as I know, only programs that under certain terms may be
-used or evaluated for personal purposes will be described. Most
-of the programs will be available complete with source under
-GNU-like terms.
-
-
-
-
-!!3.4 Support
-
-
-
-This is ridiculous, right? Who may ask for support after seeing such a
-comprehensive doc ;-) ?
-
-
-Anyhow, if you are curious about some particular aspect of this setup or some
-of my writing is unclear, just drop me an email and I ''might'' answer it
-(at least, be assured that I will read it).
-
-
-Now, if you require a phone, hand-holding style support or __my__ work on
-__your__ system, I ''might'' be able to provide it on certain terms
-(if I have time and your case seems interesting enough ;-) )
-
-
-
-
-
-
-
-!!3.5 Copyright information
-
-
-
-This document is copyrighted (c) 2000,2001 Anton Chuvakin and
-distributed under the following terms:
-
-
-
-
-
-* Linux HOWTO documents may be reproduced and distributed in
-whole or in part, in any medium physical or electronic, as long
-as this copyright notice is retained on all copies. Commercial
-redistribution is allowed and encouraged; however, the author
-would like to be notified of any such distributions.
-*
-
-* All translations, derivative works, or aggregate works
-incorporating any Linux HOWTO documents must be covered under
-this copyright notice. That is, you may not produce a derivative
-work from a HOWTO and impose additional restrictions on its
-distribution. Exceptions to these rules may be granted under
-certain conditions; please contact the Linux HOWTO coordinator at
-the address given below.
-*
-
-* If you have questions, please contact Greg Hankins, the
-Linux HOWTO coordinator, at
-*
-
-
-gregh@sunsite.unc.edu
-
-
-
-----
-
-!!4. Step by step guide
-
-
-
-
-
-Ingredients needed:
-
-
-*!RedHat Linux distribution (the instructions are exactly applicable to !RedHat
-6.x or 7.x and, I think, with some minor changes to 5.x))
-*
-
-*
-compatible hardware (also known as a PC), that includes
-network card and modem (at least one)
-*
-
-*3-256 IP addresses (as the machine will give out some IP addresses for modem
-callers and use others for virtual hosting more than 1 is needed, the upper
-number is the maximum number of IP-based virtual hosts allowed without
-recompiling the stock !RedHat kernel, lower is one real IP, one modem and one virtual
-IP - see reference for sinlge IP virtual hosting below).
-*
-
-*some sort of permanent network connection (using some modems for dialin while
-providing the Internet access via another modem is considered ''totally weird''
-and not recommended)
-*
-
-
-
-Here follows the procedure:
-
-
-
-
-!!4.1 Get RH
-
-
-
-Purchase or otherwise procure the !RedHat 7.0 (further referred as RH,
-latest version number is 7.0 at the time of updating) distribution and
-compatible hardware. One can get a full RH CDROM for about
-$3.00 including shipping and handling at
-http://www.cheapbytes.com. This version will not contain such luxuries
-as secure web server and extra software. For those you should turn to
-!RedHat website.
-Or probably buying the PC with Linux RH pre-installed is an option for some.
-
-
-
-
-!!4.2 Install RH
-
-
-
-Install the RH following the *instructions on the package* (might be
-added here later). CDROM install is very easy to perform. I suggest
-using text-mode setup, in my case their graphical one failed
-miserably. When asked about the installation type
-(Server/Workstation/Custom) choose Server or Custom (if you know what
-you are doing)-you can always add software later. Some other important
-installation decisions are outlined further. For RH 6.0 and 6.1 you
-might be able to add packages to Workstation setup as well, but in RH 6.2 and
-later (7.) all
-the server services are disabled and significant amount of tweaking is
-required-so only Server or Custom is strongly recommended.
-
-
-
-
-!!4.3 Some install tips
-
-
-
-If your hardware really is
-compatible the installation
-process will detect and configure it correctly. Otherwise, refer to
-corresponding documentation for troubleshooting network card, modem,
-video card, etc problems
-(mostly HOWTOs and mini-HOWTOs, some are in References section below).
-
-
-Here are some ideas on disk space partitioning. Read
-Linux Partitions HOWTO (a bit outdated)
-to get some general hints on functions of partitions and their sizes for
-different kinds of server setups.
-
-
-Lest assume we are setting up a server for under one hundred users. We will
-need separate /tmp, /var and /home partititons (and swap, of course).
-If you hard drive is around 4 GB than roughly 300 MB is /tmp, 100MB swap, 1 GB /var (you
-want ample logging) and 1GB /home.
-The remaining 1.6GB will be root partition (no separate /usr). The split between
-/home and / might depend upon the amount of web pages you plan to host - the
-more pages the more space goes to /home. To enhance security it is nice to put
-some restricions (in /etc/fstab) to /tmp, /var and /home partitions (similar to those
-described in my
-Public Browser Station HOWTO .
-
-
-If your network card is detected properly you will be asked for an IP
-address of your machine, gateway address and network mask and the
-address of the DNS server (might be your own machine if you plan to
-set it up this way). Have all this info handy.
-Also you will be asked for a machine name and domain name.
-We will use a sample domain name __you.com__ and the machine will be
-named __ns__ (that gives us a fully qualified domain name (FQDN)
-__ns.you.com__). You should use whatever domain you registered (see
-Setting Up Your New Domain Mini-HOWTO, link in References section below)
-and intend to use as your primary domain (not a virtual).
-For the gateway address we will use a sample 111.222.333.111 address. Gateway
-is likely the router that connects your machine (or your LAN) to the outside world.
-
-
-Enable __shadow__ and __MD5__ passwords for greater security.
-First of those makes the file that contains encrypted
-passwords readable only to root user
-and the second allows longer and harder to crack passwords.
-As it will be a standalone machine do not enable NIS/NFS.
-
-
-After installation finishes and machine reboots you will see the login
-prompt.
-Enter login and password (for the root account) and start configuring you
-new Linux station.
-
-
-
-
-!!4.4 Some preliminary security configuration
-
-
-
-First (and fast), add a line:
-ALL:ALL
-to your ''/etc/hosts.deny'' file. That would (to some known extent)
-prevent other people from accessing your machine while you are doing the
-configuration. That will also prevent you from doing the same. For
-further configuration efforts (that can be done remotely, by the way)
-secure shell is
-recommended. Download the RPM package for RH from one of the many sites
-and install it (as root) using: __ rpm -U ssh*rpm__ or similar
-command (depends upon the version). You will have to get both client and
-server packages (if you want to ssh from this machines as well as to
-this machine). Upon installation all necessary post-installation commands
-(like server key generation)
-are run automatically by the RPM package. You will have to start server
-manually using command __/etc/rc.d/init.d/sshd start__.Some early
-versions of ssh1 and also all versions of ssh1 compiled with RSAREF library
-contain a buffer-overflow bug. Use ssh2 or the latest version of ssh1
-without RSAREF. If you do this you will have to allow access using ssh
-from some trusted machine (described later) in
-''/etc/hosts.allow'' file. !RedHat 7.0 now includes OpenSSH clone that
-supports both ssh1 and ssh2 protocols. Its configuration is almost the same
-as ssh. It has some minor configuration advantages over ssh (for instance, no X11 forwarding
-by default) and is otherwise the same. Sshd (when run as daemon) will also
-refer to ''/etc/hosts.deny'' and ''/etc/hosts.allow'' for access control.
-
-
-If you want to be really rigorous in you configuration pursuits go to single
-use mode by giving the command __init 1__, in this case all work is to
-be done locally and you would not be able to test you network-related
-configuration as network is not available in this mode.
-
-
-To further enhance your security __ipchains__ software (that is
-usually part of your Linux distribution) can be
-used (for that refer to IPCHAINS HOWTO, link in References).
-It takes quite a bit more efforts to configure it than TCP wrappers,
-although some automated tools are available for that too.
-
-
-
-
-!!4.5 Remove unnecessary services
-
-
-
-Now lets deal with unnecessary services. Please note that my idea of
-"unnecessary" might not be 100% same as yours. Also, telnet is now considered
-by many to be not only unnecessary, but really utterly undesirable. __Use ssh__, and
-forget telnet once and for all!
-
-
-#Services started from ''/etc/inetd.conf'' (!RedHat 7.
-introduced the more advanced ''/etc/xinetd.conf'' which uses somewhat
-different syntax, see below):
-
-comment out all the lines, but those
-
-
-ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -L -l -i -a
-telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
-
-
-Check this by using the command: __grep -v '\#' /etc/inetd.conf__
-
-
-If you will be using the secure shell (ssh), telnet is also not necessary and can
-be removed. Secure shell can either be started as a daemon on system startup
-or as a service from ''/etc/inetd.conf''. Default configuration (used by
-the RPM package) is to start is as a daemon. Sshd can be compiled to refer to
-''/etc/hosts.allow'' file for access control. In this case, while you
-will not have it in your ''/etc/inetd.conf'', it will still use the
-settings from ''/etc/hosts.allow'' and ''/etc/hosts.deny''. The
-advantages of this method is faster connection as the sshd will not have to
-regenerate server key every time somebody connects. On the other hand, if you
-start it from ''/etc/inetd.conf'' it will be more isolated from the
-outside world.
-More lines will be added to ''/etc/inetd.conf'' as necessary (POP3 is one
-of those).
-
-
-Here goes the note for !RedHat 7.0 users. Inetd daemon (while still present
-in the distribution) is now replaced with xinetd. Its configuration file
-format is as follows:
-
-
-#
-# Simple configuration file for xinetd
-#
-# Some defaults, and include /etc/xinetd.d/
-defaults
-{
-instances = 60
-log_type = SYSLOG authpriv
-log_on_success = HOST PID
-log_on_failure = HOST RECORD
-}
-includedir /etc/xinetd.d
-
-
-where ''/etc/xinetd.d'' directory looks like (with probably more file in
-your case):
-
-
--rw-r--r-- 1 root root 498 Aug 23 00:17 tftp
--rw-r--r-- 1 root root 414 Jul 21 08:43 rsh
--rw-r--r-- 1 root root 362 Jul 21 08:43 rexec
--rw-r--r-- 1 root root 361 Jul 21 08:43 rlogin
--rw-r--r-- 1 root root 347 Aug 9 05:55 wu-ftpd
-
-
-
-
-Files in the directory configure individual services like finger, telnet or
-ftp. There format is (this service, ftp, defaults to __on__ on stock
-!RedHat 7.)
-
-
-# default: on
-# description: The wu-ftpd FTP server serves FTP connections. It uses \
-# normal, unencrypted usernames and passwords for authentication.
-service ftp
-{
-socket_type = stream
-wait = no
-user = root
-server = /usr/sbin/in.ftpd
-server_args = -l -a
-log_on_success += DURATION USERID
-log_on_failure += USERID
-nice = 10
-}
-
-
-
-
-Or (this service, tftp, defaults to __off__ on stock
-!RedHat 7.)
-
-
-# default: off
-# description: The tftp server serves files using the trivial file transfer \
-# protocol. The tftp protocol is often used to boot diskless \
-# workstations, download configuration files to network-aware printers, \
-# and to start the installation process for some operating systems.
-service tftp
-{
-socket_type = dgram
-wait = yes
-user = nobody
-log_on_success += USERID
-log_on_failure += USERID
-server = /usr/sbin/in.tftpd
-server_args = /tftpboot
-disable = yes
-}
-
-
-
-
-So, to disable services add "disable= yes" to the end of correspondent file or just remove the file.
-
-
-
-
-#
-
-#Services started on system startup from ''/etc/rc.d'' directory:
-
-Check what services are running by using: __ps ax__. You will
-get something similar to the sample output below:
-
-
-PID TTY STAT TIME COMMAND
-1 ? S :04 init
-2 ? SW :30 [[kflushd]
-3 ? SW :32 [[kupdate]
-4 ? SW :00 [[kpiod]
-5 ? SW :03 [[kswapd]
-6 ? SW< :00 [[mdrecoveryd]
-296 ? SW :00 [[apmd]
-349 ? S :00 syslogd -m
-360 ? S :00 klogd
-376 ? S :00 /usr/sbin/atd
-392 ? S :00 crond
-412 ? S :00 inetd
-454 ttyS0 S :00 gpm -t ms
-533 tty2 SW :00 [[mingetty]
-534 tty3 SW :00 [[mingetty]
-535 tty4 SW :00 [[mingetty]
-536 tty5 SW :00 [[mingetty]
-537 tty6 SW :00 [[mingetty]
-667 tty1 SW :00 [[mingetty]
-4540 ? S :00 httpd
-5176 ? S :00 httpd
-5177 ? S :00 httpd
-5178 ? S :00 httpd
-5179 ? S :00 httpd
-5180 ? S :00 httpd
-5181 ? S :00 httpd
-5182 ? S :00 httpd
-5183 ? S :00 httpd
-7321 ? S :00 /usr/sbin/sshd <<< only after you installed sshd to run on startup
-7323 pts/0 S :00 -bash
-7336 pts/0 R :00 ps ax
-
-
-
-
-Lets concentrate on processes that listen to network, such as
-lpd. Since we do not plan to use our server for printing (we sure
-might, I just don't describe it here), I suggest we remove the
-printer daemon by: __rpm -e lpd __. If rpm complains about any
-dependencies (like, in my case, printfilter and rhprinttool), add
-them to your __rpm -e__ command and repeat it. Other services
-that should be removed are NFS, NIS, samba etc, if they got installed
-by mistake. Make sure you remove NFS/NIS (if you are not using
-them) as bugs are often found in them. Again, these are useful things, I am just following the
-*golden rule* __"remove the software you don't currently use"__. And,
-with RH RPM it is really easy to add it any time in the future.
-
-#
-
-
-
-Some more basic security settings can be obtained from
-Armoring Linux
-paper. As suggested there, lets make a wheel group with trusted users
-(in our case, only user youwill be able to do /bin/su and to
-run cron jobs (together with root).
-
-
-*wheel group for sensitive commands:
-
-
-
-
-*#vi /etc/group, add a line (if it doesn't exist):
-
-wheel:x:10:root,you
-
-If line exists, just add you in the end
-as shown.
-You don't have to use vi (and somehow I understand it very well ;-)), just use your favorite editor
-(for a nice reasonably user-friendly non-X editor try pico, distributed
-together with mail program pine, the latter is part of most Linux distributions)
-*#
-
-*#
-
-/bin/chgrp wheel /bin/su
-
-change group ownership to
-wheel group on /bin/su
-*#
-
-*#
-
-/bin/chmod 4750 /bin/su
-
-change mode on /bin/su
-*#
-
-
-*
-
-*restrict cron:
-
-To only allow root and you to submit cron jobs create a
-file called ''/etc/cron.allow'' that contains usernames that you want to
-be able to run cron jobs. This file might look like this:
-
-
-root
-you
-
-
-Why should one restrict cron jobs? Local exploits to elevate privileges to root
-from, say, nobody, exist for some versions of cron.
-
-*
-
-
-
-I suggest you do not install X Windows as it will bring new concern that
-you might not be prepared to deal with.
-
-
-
-
-!!4.6 Enable multiple IP addresses
-
-
-
-Now we are ready to enable our machine to handle multiple IP addresses for
-virtual hosting. At that point, the IP Aliasing HOWTO might come
-handy (see link in References).
-For several reasons, IP-based virtual hosting is better (if you have
-enough IP addresses, that is). For instance, reverse lookups would succeed, if
-done from the browser side. It might also be needed for hosting
-cryptographically enabled websites (commonly known as "secure websites").
-Older browsers (not supporting HTTP 1.1) will get unhappy too.
-
-
-The changes would be concentrated in ''/etc/rc.d/'' directory.
-To enable multiple IP addresses your kernel should support this. On a freshly
-installed RH Linux it does. To verify it one should look into the config file
-that was used to compile the kernel. In my case, it was
-''/usr/src/linux/configs/kernel-2.2.17-i686.config'' since the machine
-has Pentium III processor. This file exists, if the kernel-source RPM
-package was installed. If line CONFIG_IP_ALIAS=y is present in the
-file than you are OK. While we are here, we can also confirm the ability to
-forward IP packets (needed for dialup users PPP). This ability is present, but
-not turned on by default (to turn it on do execute the following command
-echo 1 > /proc/sys/net/ipv4/ip_forward or add a line into ''/etc/sysctl.conf''). Also needed is the support for PPP protocol (line
-CONFIG_PPP=m, this means PPP support is compiled as a kernel loadable
-module, CONFIG_PPP=y is also OK)
-
-
-The examples will use the ridiculous IP addresses
-111.222.333.444-111.222.333.777 from C block 111.222.333.. 111.222.333.444 is
-a real host IP (that is configured during RH installation),
-111.222.333.555-777 are virtual addresses and 111.222.333.888 is a dialin user address
-(can be more of those).
-
-
-
-
-
- Lets assume we want to configure 3 virtual hosts.
-
-
-Two sets of commands will be used:
-
-
-#
-
-
-/sbin/ifconfig eth0:0 111.222.333.555
-/sbin/ifconfig eth0:1 111.222.333.666
-/sbin/ifconfig eth0:2 111.222.333.777
-
-
-
-
-These will bind the IP addresses to (virtual) interfaces
-eth0:-eth0:2.
-
-
-
-
-#
-
-#
-
-
-/sbin/route add -host 111.222.333.555 dev eth0
-/sbin/route add -host 111.222.333.666 dev eth0
-/sbin/route add -host 111.222.333.777 dev eth0
-
-
-
-
-These commands will add routes for those addresses and connect those to real
-interface eth0 (ethernet card).
-
-#
-
-After doing them the ifconfig command output (ifconfig) will look
-like this:
-
-
-eth0 Link encap:Ethernet HWaddr 02:60:8C:4D:24:CE
-inet addr:111.222.333.444 Bcast:255.255.255.255 Mask:255.255.255.
-UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
-RX packets:901597 errors:33 dropped:0 overruns:0 frame:823
-TX packets:433589 errors:0 dropped:0 overruns:0 carrier:
-collisions:128327 txqueuelen:100
-Interrupt:5 Base address:0x280
-eth0:0 Link encap:Ethernet HWaddr 02:60:8C:4D:24:CE
-inet addr:111.222.333.555 Bcast:111.222.333.255 Mask:255.255.255.
-UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
-Interrupt:5 Base address:0x280
-eth0:1 Link encap:Ethernet HWaddr 02:60:8C:4D:24:CE
-inet addr:111.222.333.666 Bcast:111.222.333.255 Mask:255.255.255.
-UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
-Interrupt:5 Base address:0x280
-eth0:2 Link encap:Ethernet HWaddr 02:60:8C:4D:24:CE
-inet addr:111.222.333.777 Bcast:111.222.333.255 Mask:255.255.255.
-UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
-Interrupt:5 Base address:0x280
-lo Link encap:Local Loopback
-inet addr:127...1 Mask:255...
-UP LOOPBACK RUNNING MTU:3924 Metric:1
-RX packets:26232 errors:0 dropped:0 overruns:0 frame:
-TX packets:26232 errors:0 dropped:0 overruns:0 carrier:
-collisions:0 txqueuelen:
-
-
-All commands can be added to the bottom of ''/etc/rc.d/rc.local'' so that
-the changes are saved after reboot. Strictly speaking, rebooting machine is
-not required for adding new IP addresses. Please, do document all changes
-you do to your machines. Many a good sysadmin (or, should I say not-so-good?)
-were burned on that at some point in their careers.
-
-
-__TO TEST THE CHANGES__
-
-
-Do: ping virtual addresses as
-
-ping 111.222.333.555
-ping 111.222.333.666
-ping 111.222.333.777
-
-
-
-Should get:
-interfaces should be up
-
-
-
-
-!!4.7 Configure DNS
-
-
-
-Now we are ready to configure DNS.
-The easiest way would be to add the hostnames (real and all the virtual) that
-we want to be seen by the world to the configuration of some machine that
-already has bind (DNS daemon) running. But, since we are setting up
-ISP-in-a-box we might not be able to avoid "DNS fun".
-
-
-Now, let me
-also try to defend the (well, questionable) choice of "outdated" version of bind 4.9.7
-(last of the pre-8 series). I know that my arguments can be beaten, now that
-even bind 9 is out, but
-I consider bind 4.9.7 much more time-tested and stable. The arguments for
-upgrading to 8.x
-(provided
-http://www.acmebw.com/askmrdns/00444.htm
-and
-http://www.dns.net/dnsrd/servers.html
-and, I guess, at many other places. Here is a
-message
-from Theo de Raadt
-himself (the head of OpenBSD development) where he justifies the choice of
-bind 4 as part of OpenBSD-the most secure UNIX OS around. He also shudders at
-the amount of bugs the OpenBSD auditing team saw in BIND 8 source code)
-still didn't seem to convince many people. And, lets not forget the "exploit of 1999" -
-ADMROCKS, that gives remote root access to almost any Linux machine running bind prior to
-8.1.2 patch 3. Judging by the INCIDENTS mailing list, this is still a very
-popular way to attack RH versions 5.-6.1 if no recommended upgrades are
-installed.
-It is claimed that named (whatever version) should always be run in a chroot jail.
-
-
-Here are the instructions, loosely following the DNS book from O'Reilly (a good
-one, highly recommended to all, but very casual DNS user).
-
-
-
-
-
-#Find and install bind 4.9.7 either from RPM package (RH 4.2, if I am not
-mistaken - for that you can use
-RPMFIND.net,
-personally I didn't try this and so I am somewhat skeptical
-about installing RH 4.2 package on RH 6.1 system, but it might work)
-or from source (
-bind 4.9.7,
-compiling it is a bit troublesome, but reading all the README files
-in the archive will definitely help).
-#
-
-#Create files and directories needed for bind:
-
-
-#*''/etc/named.boot''
-#*
-
-#*''/etc/namedb''
-#*
-
-#*''/etc/namedb/db.you''
-#*
-
-#*''/etc/namedb/db.111.222.333''
-#*
-
-#*''/etc/namedb/db.127..''
-#*
-
-#*''/etc/namedb/db.yoursite1''
-#*
-
-#*''/etc/namedb/db.yoursite2''
-#*
-
-#*''/etc/namedb/db.yoursite3''
-#*
-
-This will be used for 3 virtual domains: __yoursite1.com__,__yoursite2.com__ and
-__yoursite3.com__. One more important comment refers to secondary DNS issue.
-As all your domains and all their services will be hosted on the same machine,
-DNS backup in the form of secondary server doesn't make much sense:
-if your primary DNS is down everything else (mail, www, ftp, pop, etc)
-is down as well. But you do have to have a secondary DNS to register a domain.
-Try to convince somebody to put you in as a secondary or use a free DNS service
-(link is in Setting Up Your New Domain Mini-HOWTO).
-
-#
-
-#
-
-That is how they look like (if you are unfamiliar with bind 4.x configuration
-file format, please, do read either the O'Reilly DNS book or any
-of the HOWTOs or documents at
-bind pages, or, better, all of the above.
-You also have an option of using them without understanding, but this is a bad idea in general):
-
-
-''/etc/named.boot''
-
-
-This is the main config file for bind 4.9.x.
-
-
-directory /etc/namedb
-;cache-obtained from internic, usually
-cache . db.cache
-;main config files
-primary you.com db.you
-;reverse lookups
-primary 333.222.111.in-addr.arpa db.111.222.333
-;localhost.localnet configs
-primary ..127.in-addr.arpa db.127..
-;virtual Domains
-primary yoursite1.net db.yoursite1
-primary yoursite2.net db.yoursite2
-primary yoursite3.net db.yoursite3
-
-
-
-#
-
-#
-
-''/etc/namedb/db.you''
-
-
-
-
-
-; defines our local hosts at you.com, just one in our case, and its aliases
-@ IN SOA ns.you.com. root.ns.you.com. (
-2000012190 7200 1800 3600000 7200 )
-;name servers and mail servers
-IN NS ns.you.com.
-IN MX 10 ns.you.com.
-IN A 111.222.333.444
-ns IN A 111.222.333.444
-;address of the canonical names
-localhost IN A 127...1
-gateway IN A 111.222.333.111
-;aliases (to use in ftp: ftp ftp.you.com etc, for clarity)
-www CNAME ns
-mail CNAME ns
-ftp CNAME ns
-pop3 CNAME ns
-
-
-
-#
-
-#
-
-''/etc/namedb/db.111.222.333''
-
-
-
-
-
-;reverse mapping of our IP addresses
-.
-;origin is 333.222.111.in-addr.arpa
-333.222.111.in-addr.arpa. IN SOA ns.you.com. root.ns.you.com. (
-1999121501 7200 1800 3600000 7200 )
-;name Servers
-IN NS ns.you.com.
-;addresses point to canonical name
-444.333.222.111.in-addr.arpa. IN PTR ns.you.com.
-;dialins
-888 IN PTR dialup.you.com.
-;virtual hosts
-555 IN PTR yoursite1.com.
-666 IN PTR yoursite2.com.
-777 IN PTR yoursite3.com.
-
-
-
-#
-
-#''/etc/namedb/db.127..''
-
-
-
-
-;local loop config file
-..127.in-addr.arpa. IN SOA ns.you.com. root.ns.you.com. (
-1997072200 7200 1800 3600000 7200 )
-IN NS ns.you.com.
-1 IN PTR localhost.
-
-
-
-#
-
-#''/etc/namedb/db.yoursite1''
-
-
-
-
-; yoursite1.com
-@ IN SOA virtual root.virtual (
-1999092201 ; Serial: update each time the file is changed
-7200 ; refresh, sec
-1800 ; retry, sec
-3600000 ; expire, sec
-7200 ) ; minimum TTL
-;name servers
-IN NS ns.you.com.
-IN MX 10 virtual
-IN A 111.222.333.555
-;address of the canonical names
-localhost IN A 127...1
-gateway IN A 111.222.333.111
-virtual IN A 111.222.333.555
-IN MX 10 virtual
-;aliases
-www CNAME virtual
-mail CNAME virtual
-ftp CNAME virtual
-pop3 CNAME virtual
-
-
-
-#
-
-#''/etc/namedb/db.yoursite2''
-
-
-
-
-; yoursite2.com
-@ IN SOA virtual root.virtual (
-1999092201 ; Serial: update each time the file is changed
-7200 ; refresh, sec
-1800 ; retry, sec
-3600000 ; expire, sec
-7200 ) ; minimum TTL
-;name servers
-IN NS ns.you.com.
-IN MX 10 virtual
-IN A 111.222.333.666
-;address of the canonical names
-localhost IN A 127...1
-gateway IN A 111.222.333.111
-virtual IN A 111.222.333.666
-IN MX 10 virtual
-;aliases
-www CNAME virtual
-mail CNAME virtual
-ftp CNAME virtual
-pop3 CNAME virtual
-
-
-
-#
-
-#''/etc/namedb/db.yoursite3''
-
-
-
-
-; yoursite3.com
-@ IN SOA virtual root.virtual (
-1999092201 ; Serial: update each time the file is changed
-7200 ; refresh, sec
-1800 ; retry, sec
-3600000 ; expire, sec
-7200 ) ; minimum TTL
-;name servers
-IN NS ns.you.com.
-IN MX 10 virtual
-IN A 111.222.333.777
-;address of the canonical names
-localhost IN A 127...1
-gateway IN A 111.222.333.111
-virtual IN A 111.222.333.777
-IN MX 10 virtual
-;aliases
-www CNAME virtual
-mail CNAME virtual
-ftp CNAME virtual
-pop3 CNAME virtual
-
-
-
-#
-
-These configuration files will allow you to host these three virtual domains
-and your real domain __you.com__.
-
-
-__TO TEST THE CHANGES__
-
-
-Do: check address resolution
-
-nslookup www.you.com
-nslookup www.yoursite1.com
-nslookup www.yoursite2.com
-nslookup www.yoursite3.com
-
-
-
-Should get:
-nslookup returns the correct IP addresses for all hostnames
-
-
-
-
-!!4.8 Configure httpd
-
-
-
-To server html pages httpd daemon is used. RH 7.0 comes with Apache
-1.3.12 (latest version is currently 1.3.14 and the alpha of the upcoming 2.0 is
-released).
-At that point it is wise to check RH site or its mirrors
-(
-RH Mirrors) for updates.
-
-
-Most changes that we are about to make
-concentrate in ''/etc/httpd/httpd.conf'' (RH standard
-location for Apache configuration). Default location for html pages (shown
-when you go to __www.you.com__) is ''/home/httpd/html''. You can
-allocate directories for virtual hosts within the same ''/home/httpd'',
-shown below are the following locations for them:
-''/home/httpd/yoursite1'',
-''/home/httpd/yoursite2'' and
-''/home/httpd/yoursite3''.
-
-
-Below I provide the minimum necessary changes for your
-''/etc/httpd/httpd.conf'' file:
-
-
-
-
-
-<!VirtualHost 111.222.333.555>
-!ServerAdmin webmaster@you.com
-!DocumentRoot /home/httpd/yoursite1
-!ServerName www.yoursite1.com
-!ErrorLog yoursite1-error_log
-!TransferLog yoursite1-access_log
-</!VirtualHost>
-<!VirtualHost 111.222.333.666>
-!ServerAdmin webmaster@you.com
-!DocumentRoot /home/httpd/yoursite2
-!ServerName www.yoursite2.com
-!ErrorLog yoursite2-error_log
-!TransferLog yoursite2-access_log
-</!VirtualHost>
-<!VirtualHost 111.222.333.777>
-!ServerAdmin webmaster@you.com
-!DocumentRoot /home/httpd/yoursite3
-!ServerName www.yoursite3.com
-!ErrorLog yoursite3-error_log
-!TransferLog yoursite3-access_log
-</!VirtualHost>
-
-
-
-
-That configuration will cause all logs to be stored in one directory (whatever
-is specified as such) for all sites. If that is not desired the __!ErrorLog__ and
-__!TransferLog__ directives can be changed to point to the proper
-location separately for each virtual host. The pages for the "real"
-__www.you.com__ will be stored in default location ''/home/httpd/html''.
-
-
-
-
-
-For more information, look at
-http://www.apache.org, Apache http server homepage. They have a lot of
-support pages, including those for virtual hosting setup (both IP-based and
-name-based [[uses just 1 IP address]). Also useful is Linux WWW HOWTO (link in
-References section), section on virtual hosting.
-
-
-__TO TEST THE CHANGES__
-
-
-Do: access the test pages via Lynx browser or telnet to port 80
-
-lynx http://www.you.com
-lynx http://www.yoursite1.com
-lynx http://www.yoursite2.com
-lynx http://www.yoursite3.com
-
-
-
-Should get:
-Test pages will be returned (if you put them in the proper directories)
-
-
-
-
-!!4.9 Configure sendmail
-
-
-
-
-
-!Setup
-
-
-Now we will deal with sendmail. Again, proposed are the minimum necessary
-changes to the stock RH ''/etc/sendmail.cf'' and ''/etc/sendmail.cw''.
-
-
-#look for the lines that starts from Dj$w.foo.com and change it to
-point to your main ("real", not virtual) server name (__you.com__, so it
-will looks like this Dj$w.you.com).
-#
-
-#locate file ''/etc/sendmail.cw'' and make it look like this
-
-
-# sendmail.cw - include all aliases for your machine here.
-you.com
-ns.you.com
-mail.you.com
-yoursite1.com
-mail.yoursite1.com
-yoursite2.com
-mail.yoursite2.com
-yoursite3.com
-mail.yoursite3.com
-
-
-These are necessary so that sendmail accepts mail for these domains.
-#
-
-
-
-This __does not__ address the issue of user@yoursite1.com and
-user@yoursite2.com mail getting to different mailboxes. For that
-look into /etc/mail/virtusertable functionality
-(appropriate line in ''/etc/sendmail.cw'' is Kvirtuser hash -o
-/etc/mail/virtusertable, detailed info may be added here later).
-Excellent documentation on that is on
-http://www.sendmail.org/virtual, sendmail reference on virtual
-hosting.
-
-
-It is worthwhile to add that linuxconf proposes a somewhat different
-scheme for virtual email with separate spool directories for all domains (that
-cleanly solves the above "name-conflict" issue"), but
-that requires a special virtual-aware POP/IMAP server (included with RH) and
-is somewhat more complicated. It is recommended for bigger email volume sites
-with many users within each domain.
-
-
-A few words about sendmail, it is a good idea (good from the security
-standpoint) to have sendmail run from
-''inetd.conf'' and not as a standalone daemon. For that we need to add it
-to ''/etc/inetd.conf'', remove it from ''/etc/rc.d/init.d'', add the
-sendmail queue processing to cron. Here is what you have to do:
-
-
-#Add the following line to ''/etc/inetd.conf'':
-
-smtp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/sendmail -bs
-
-
-
-Or, if using xinetd create a file ''sendmail'' in
-''/etc/xinetd.d/''
-similar to
-
-
-# default: on
-service sendmail
-{
-socket_type = stream
-wait = no
-user = root
-server = /usr/bin/sendmail -bs
-}
-
-
-
-#
-
-#
-Edit ''/etc/rc.d/init.d/sendmail'' to have exit 0 somewhere in
-the very beginning (might not be the best way, be sure to document the changes
-you do to these files) so that this file does nothing instead of starting sendmail
-
-#
-
-#
-By editing your (root's) crontab (to edit do __crontab -e__) add a line like this
-
-*/20 * * * * /usr/sbin/sendmail -q
-
-That would process sendmail queue every 20 min (if it exists).
-The described steps will simplify sendmail access control and will let you
-regulate who can talk to your 25 port, not just who can send email through you.
-The lines in ''/etc/hosts.allow''
-that let all machines from .com and .org domains send you email are as follows
-
-sendmail: .com .org
-
-Please, note, that the daemon name, not protocol name is used here (sendmail,
-NOT smtp).
-
-#
-
-
-
-That would allow your system to handle email for all those domains.
-
-
-
-
-!Troubleshooting
-
-
-__PROBLEM:__ mail that you are trying to send is denied with a message
-Relaying denied
-
-
-__SOLUTION:__Look into your ''/etc/sendmail.cw''. Are you sure all
-possible variations of your hostname and of your virtual hostnames are here?
-Look in the message headers and see from what machine it was rejected from: does it
-look like another name of yours that you missed?
-
-
-__TO TEST THE CHANGES__
-
-
-Do: access the SMTP port 25 via telnet
-
-telnet www.you.com 25
-telnet www.yoursite1.com 25
-telnet www.yoursite2.com 25
-telnet www.yoursite3.com 25
-
-
-
-Should get:
-Sendmail should respond with prompt and version number! Type QUIT to get out
-of the prompt.
-
-
-
-
-!!4.10 Configure POP3
-
-
-
-
-
-!Setup
-
-
-POP3 configuration is easy (no "virtualization" is required for this setup). RH comes
-equipped with imapd IMAP server. If you do not want to use IMAP functionality
-or do not like this particular implementation (buffer overflow bugs were discovered in it at
-some point) the good idea is to use
-qpopper, free POP3 daemon from Eudora
-http://www.eudora.com/freeware/qpop.html. At the time of writing the
-released version is qpopper 3..2.
-It is important to note that versions earlier than 2.5 contain a
-buffer overflow error that allows remote root exploit to be executed. Same
-problem plagues "public betas" up to 3.0 release 21. Use either 2.53 or the
-latest 3.0 (the former is better audited and the latter is better suited
-for RH - seamlessly works with PAM authentication). I suggest using 3., so
-the instructions below apply to that case. As of April 13, Qpopper 3.0 is no
-longer beta, but a regular software. As of recently, the bug was discovered
-even in Qpopper 2.53 that allows the attacker to
-obtain a shell with group-id 'mail', potentially allowing read/write
-access to all mail.
-
-
-
-
-
-
-
-
-#wget ftp://ftp.qualcomm.com/eudora/servers/unix/popper/qpopper3..tar.Z
-
-
-Retrieve the archive from Eudora site.
-
-#
-
-#tar zxvf qpopper3..tar.Z
-
-
-Uncompress and untar the contents.
-
-#
-
-#cd qpopper
-
-
-If you need explanation for this step, please, discontinue reading the document.
-
-#
-
-#./configure --enable-specialauth --with-pam --enable-log-login --enable-shy
-
-
-The options here are:
-
-
---enable-specialauth : allows MD5 and shadow passwords
-
-
---with-pam: allows the use of RH Pluggable Authentication Modules (PAM) technology
-
-
---enable-log-login: log successful logins, not only failures (not really that
-useful as it will use tcpd wrappers logging anyway)
-
-
---enable-shy: conceal version number (yeah, a little pesky
-manifestation of "security through obscurity")
-
-#
-
-#make
-
-
-That compiles the popper
-
-#
-
-#
-
-/bin/cp popper/popper /usr/local/bin
-
-
-
-Copies the binary to ''/usr/local/bin''
-
-#
-
-#Now set the mode to
-
--rwx------ 1 root root 297008 Feb 16 15:41 /usr/local/bin/popper
-
-by using the command:
-
-chmod 700 /usr/local/bin/popper
-
-
-#
-
-#Add a line to ''/etc/inetd.conf''
-
-pop3 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/popper -s
-
-That would cause the tcpd wrapper to control access to popper.
-The lines to add in ''/etc/hosts.allow'' are
-
-popper: .good.com .nice.org
-
-That will allow people from domains good.com and nice.org
-to read email via POP3 client from your machine.
-
-
-To cause qpopper to use PAM authentication one must create a file for POP3
-service in /etc/pam.d/ directory. File should be named "pop3" (same as line in
-/etc/services and qpopper compile-time option). The file looks like
-this:
-
-
-
-
-
-auth required /lib/security/pam_pwdb.so shadow
-account required /lib/security/pam_pwdb.so
-password required /lib/security/pam_cracklib.so
-password required /lib/security/pam_pwdb.so nullok use_authtok md5 shadow
-session required /lib/security/pam_pwdb.so
-
-
-
-
-
-
-#
-
-#For whatever reason stock RH lists line in ''/etc/services''
-file for POP3 protocol as "pop-3". And since qpopper prefers to see "pop3",
-it should be edited to be:
-
-pop3 110/tcp # pop3 service
-
-
-#
-
-That would allow all user to get their email via any reasonable mail client.
-
-
-
-
-!Troubleshooting
-
-
-__PROBLEM:__ you are connecting to your POP server with valid password
-and username and they are rejected with a message Password incorrect.
-
-
-__SOLUTION:__ PAM doesn't like your setup. This message is common for
-qpopper 2.53, use 3.0 and it should disappear. Otherwise, look into
-/etc/pam.d/pop3 that you created. Is it OK?
-
-
-__TO TEST THE CHANGES__
-
-
-Do: access the POP3 port 110 via telnet
-
-telnet www.you.com 110
-
-
-
-Should get:
-Qpopper should respond with prompt and version number! Type QUIT to get out
-of the prompt.
-
-
-
-
-!!4.11 Configure FTP server
-
-
-
-
-
-!Anonymous FTP setup
-
-
-We will use only anonymous ftp and will not allow any non-anonymous user any
-access. Here we describe the anonymous ftp server setup that allows anonymous
-uploads. Any self-respecting guide on the subject will tell you that "this is
-a bad thing". But how is it worse than allowing users to ftp from untrusted
-location and transfer their passwords in clear text? Not everybody
-(especially, using Windows) can easily setup an ftp tunnel via ssh. But you
-definitely should restrict access via tcp wrappers and watch for "warez
-puppies" (people who will try to exchange stolen software via your ftp site if
-you allow unlimited downloads!).
-
-
-I suggest using the stock RH wu-ftpd (version 2.6.1 at the time of
-writing). While it is rumored that there are "more secure" ftp daemons
-(Pro-ftpd), wu-ftp appears to be one most commonly used. Recently a series of
-bugs was again discovered in wu-ftp (even in 2.6.x versions) and its reputation as the most popular ftp
-daemon seem to be dwindling. CERT has issued an advisory concerning WU-FTPD and all ftp daemons derived
-from BSD's final release.
-
-
-RH installs the wu-ftpd (package wu-ftpd-2.6.1-1) by default in server
-configuration. You are encouraged to check for updates as running ftp is an important
-security concern. There is also a separate rpm package that creates a separate
-directory structure for anonymous ftp home (anonftp-2.8-1).
-As anonymous ftp always does a chroot()
-system call (puts the user in the restricted file system) all necessary
-binaries and libraries are required. The typical directory looks like this
-(output of __ls -lRa__ in ''/home/ftp''):
-
-
-
-
-
-.:
-total 20
-d--x--x--x 2 root root 4096 Feb 15 06:22 bin
-d--x--x--x 2 root root 4096 Feb 15 06:22 etc
-drwxrws-wt 2 root wheel 4096 Feb 18 19:51 incoming
-drwxr-xr-x 2 root root 4096 Feb 15 06:22 lib
-drwxr-sr-x 3 root ftp 4096 Feb 15 23:34 pub
-bin:
-total 344
----x--x--x 1 root root 15204 Mar 21 1999 compress
----x--x--x 1 root root 52388 Mar 21 1999 cpio
----x--x--x 1 root root 50384 Mar 21 1999 gzip
----x--x--x 1 root root 29308 Mar 21 1999 ls
----------- 1 root root 62660 Mar 21 1999 sh
----x--x--x 1 root root 110668 Mar 21 1999 tar
-lrwxrwxrwx 1 root root 4 Feb 15 06:22 zcat -> gzip
-etc:
-total 40
--r--r--r-- 1 root root 53 Mar 21 1999 group
--rw-r--r-- 1 root root 31940 Mar 21 1999 ld.so.cache
--r--r--r-- 1 root root 79 Mar 21 1999 passwd
-incoming:
-total
-lib:
-total 1212
--rwxr-xr-x 1 root root 77968 Mar 21 1999 ld-2.1.1.so
-lrwxrwxrwx 1 root root 11 Feb 15 06:22 ld-linux.so.2 -> ld-2.1.1.so
--rwxr-xr-x 1 root root 1031004 Mar 21 1999 libc-2.1.1.so
-lrwxrwxrwx 1 root root 13 Feb 15 06:22 libc.so.6 -> libc-2.1.1.so
--rwxr-xr-x 1 root root 77196 Mar 21 1999 libnsl-2.1.1.so
-lrwxrwxrwx 1 root root 15 Feb 15 06:22 libnsl.so.1 -> libnsl-2.1.1.so
--rwxr-xr-x 1 root root 33596 Mar 21 1999 libnss_files-2.1.1.so
-lrwxrwxrwx 1 root root 21 Feb 15 06:22 libnss_files.so.2 -> libnss_fi
-les-2.1.1.so
-pub:
-total
-
-
-
-
-Notice though, that for whatever reason, RH puts a copy of ''/bin/sh'' in
-''/home/ftp/bin''.
-I do not feel good about having it there, so it is chmoded to 0 by
-__chmod 0 sh__ (can also be removed completely, but RPM might be slightly
-unhappy if you attempt to remove the package afterwards).
-
-
-Permissions on ''/home/ftp'' directories and files should be carefully
-considered. In the above example, all of the system files are owned by root
-and are only readable (executable where necessary) by all. Files in
-''bin'' are only executable (as is the directory itself to prevent
-listing of its contents).
-
-
-The interesting part is permissions on ''pub'' and ''incoming''.
-
-
-
-
-
-Below follows the configuration file for ftp daemon
-(''/etc/ftpaccess''). It is well commented to the degree of being self-explanatory:
-
-
-#ideas from <htmlurl url="ftp://ftp.wu-ftpd.org/pub/wu-ftpd/upload.configuration.HOWTO" name="ftp://ftp.wu-ftpd.org/pub/wu-ftpd/upload.configuration.HOWTO">
-#only allow anonymous users-no other classes defined
-class anonftp anonymous *
-#number of users restriction with message shown when too many
-limit remote 10 Any /toomany.msg
-#prevent uploads everywhere (for now)
-upload /home/ftp * no
-#display the contents of some files upon login/cd
-readme README* login
-readme README* cwd=*
-message /welcome.msg login
-message .message cwd=*
-#log all file transfers DISABLED
-#log transfers anonymous
-#prevent these file operations for anon users
-delete no anonymous
-overwrite no anonymous
-#fast cd and aliasing for the same reason (not really necessary, but convenient)
-alias inc: /incoming
-cdpath /incoming
-cdpath /pub
-cdpath /
-#what is allowed in paths
-path-filter anonymous /etc/pathmsg ^[[-A-Za-z0-9_\.]*$ ^\. ^-
-#prevent the retrieval of some file
-noretrieve .notar
-#allow upload with NO subdirectory creation by anon users
-upload /home/ftp /incoming yes root wheel 0400 nodirs
-#allow upload with subdirectory creation by anon users DISABLED
-#upload /home/ftp /incoming yes root wheel 0400 dirs
-#prevent anon users to GET files from incoming (you might not like it, but it
-#is a good idea-to prevent some people from using your ftp server to store
-#their own stuff, pics, warez etc)
-noretrieve /home/ftp/incoming
-
-
-That would allow only anonymous users to do downloads and uploads in somewhat (__!__)
-controlled manner. Make sure you update the permissions on files that you
-changed after you upgrade the RPM packages next time.
-
-
-
-
-!Guest FTP setup
-
-
-Guest FTP users are those that have valid usernames and passwords (unlike
-anonymous), but do not have access to the whole directory structure (unlike
-real ones). So they are chrooted after authentication. Guest users can do
-uploads in this configuration.
-
-
-Easy __21-step__ directions for that are provided below ;-)
-
-
-Software used: wu-ftpd-2.6.1
-
-
-Sample username will be created: __ftpguy__, user ID=505.
-
-
-Her group will be: __lusers__, group ID=701.
-
-
-If you want more users of the same sort, they should be the members of the
-same group. For that it might be good to change the directory structure
-somewhat so that all of them use the same ''passwd'' file and the same
-static ls. But, for better separation you can give each of them their
-own files.
-
-
-
-
-
-#adduser ftpguy
-
-
-creates an entry in ''/etc/passwd''
-
-#
-
-#passwd ftpguy
-change password to whatever
-#
-
-#Edit file ''/etc/passwd'', last line (that contains our new user)
-should look like this
-
-ftpguy:x:505:701::/home/ftpguy/./:/etc/ftponly
-
-yes, that is "slash"-"dot"-"slash" after his home directory.
-#
-
-#Edit file ''/etc/shells'', add line, below
-
-/etc/ftponly
-
-This file has to exist in some newer Linux distributions (contrary to what is
-claimed at
-Guest FTP HOWTO).
-Sometimes one can put ''/bin/true'' in its place.
-#
-
-#Edit file ''/etc/group'', add line, below
-
-lusers:x:701:ftpguy
-
-
-#
-
-#cd /home
-#
-
-#
-
-chown ftpguy.lusers ftpguy
-
-this directory is created by adduser command
-#
-
-#
-
-cd ftpguy; mkdir etc bin ; chown root.daemon etc bin
-
-this creates a directory tree for chroot
-#
-
-#
-
-chmod 111 etc bin
-
-this sets __very__ conservative permissions on directories within the
-chrooted tree
-#
-
-#
-
-cp ~/static_ls /home/ftpguy/bin/ls
-
-obtaining static (not calling any libraries) version of ''/bin/ls'':
-this directory
-(
-http://www.stanford.edu/group/itss-ccs/security/binaries/linux/redhat/)
-contains static version of many RH 6.x/7.x-compatible utilities, including ls
-(local copy is
-http://www.chuvakin.org/ispdoc/ls.gz here, gunzip ls.gz to run)
-#
-
-#
-
-cd bin ; chown root.bin ls
-
-
-#
-
-#
-
-chmod 111 ls
-
-this sets __very__ conservative permissions on binaries within chroot
-#
-
-#
-
-cd ../etc
-
-
-#
-
-#Create file ''/home/ftpguy/etc/passwd'' as follows
-
-
-root:*::::/:/etc/ftponly
-ftpguy:*:505:701::/home/ftpguy/./:/etc/ftponly
-
-
-
-#
-
-#Create file ''/home/ftpguy/etc/group'', contents follow
-
-
-root:::root
-lusers::701:ftpguy
-
-
-
-#
-
-#
-
-chown root.daemon passwd group
-
-this sets proper ownership of these files
-#
-
-#
-
-chmod 444 passwd group
-
-this sets minimum necessary permission on that file
-#
-
-#
-
-cd ~ftpguy; touch .forward
-
-this creates ''.forward'' file
-#
-
-#
-
-chown root.root .forward ; chmod 400 .forward
-
-and locks it for security reasons
-#
-
-#
-
-cd /etc
-
-
-#
-
-#Add the facilities for handling guest users into ''/etc/ftpaccess''
-
-
-#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-class anonftp guest,anonymous *
-delete no anonymous,guest # delete permission?
-overwrite no anonymous,guest # overwrite permission?
-rename no anonymous,guest # rename permission?
-chmod no anonymous,guest # chmod permission?
-umask no anonymous,guest # umask permission?
-guestgroup lusers
-limit remote 10 Any /toomany.msg
-upload /home/ftp * no
-readme README* login
-readme README* cwd=*
-message /welcome.msg login
-message .message cwd=*
-alias inc: /incoming
-cdpath /incoming
-cdpath /pub
-cdpath /
-path-filter anonymous /etc/pathmsg ^[[-A-Za-z0-9_\.]*$ ^\. ^-
-noretrieve .notar
-upload /home/ftp /incoming yes root wheel 0400 nodirs
-noretrieve /home/ftp/incoming
-
-
-
-#
-
-
-
-Lets test this beast:
-
-
-
-
-
-localhost[[anton]#1008: ftp localhost
-Connected to anton.
-220 anton FTP server (Version wu-2.6.1(1) Mon Feb 28 10:30:36 EST 2000) ready.
-Name (localhost:anton): ftpguy
-331 Password required for ftpguy.
-Password:
-230 User ftpguy logged in. Access restrictions apply.
-Remote system type is UNIX.
-Using binary mode to transfer files.
-ftp> ls -la
-200 PORT command successful.
-150 Opening ASCII mode data connection for /bin/ls.
-total 4
-drwx------ 4 505 701 1024 Apr 8 02:16 .
-drwx------ 4 505 701 1024 Apr 8 02:16 ..
--r-------- 1 0 0 0 Apr 8 02:16 .forward
-d--x--x--x 2 0 2 1024 Apr 8 02:09 bin
-d--x--x--x 2 0 2 1024 Apr 8 02:15 etc
-226 Transfer complete.
-ftp> mkdir TEST
-257 "/TEST" new directory created.
-ftp> ls -l
-200 PORT command successful.
-150 Opening ASCII mode data connection for /bin/ls.
-total 3
--r-------- 1 0 0 0 Apr 8 02:16 .forward
-drwxr-xr-x 2 505 701 1024 Apr 8 02:32 TEST
-d--x--x--x 2 0 2 1024 Apr 8 02:09 bin
-d--x--x--x 2 0 2 1024 Apr 8 02:15 etc
-226 Transfer complete.
-ftp>
-
-
-
-
-and so on.
-
-
-__TO TEST THE CHANGES__
-
-
-Do: access the ftp server using ftp client
-
-ftp www.you.com
-
-
-
-Should get:
-ftp daemon should respond with prompt and version number!
-
-
-
-
-!!4.12 Configure dialin
-
-
-
-Now the fun part starts. We want the machine to allow dial-in access via
-attached (inserted?) modem or modems. It will provide either regular shell or
-restricted shell (that only executes pppd daemon). Windows 95/98 users should be
-able to effortlessly dial in using all default settings of their computers.
-
-
-
-
-!Linux setup
-
-
-To handle login via serial line some version of getty program is
-needed. This program monitors the serial line (''/dev/ttyS1'' will be used
-throughout the document, see serial HOWTO for details) and upon connection
-shown the login prompt or starts a program.
-
-
-I suggest using the mgetty program (as it has more features and is easier to
-setup than some of the competitors).
-
-
-RH comes with mgetty-1.1.21-2, that also has extensions to receive
-faxes and voice mail (if the modem supports this). Check whether mgetty is
-installed by doing: __rpm -qa | grep mgetty__.
-
-
-After installing mgetty some reconfiguration is necessary.
-The files that should be changed and the details follow:
-
-
-
-
-
-#''/etc/inittab''
-
-That enables mgetty to start when system is booted and be respawned accordingly.
-These lines should be added in the end.
-
-
-
-
-
-#for dialins use mgetty
-#note this S1 in the beginning of the line and ttyS1 in the end
-S1:2345:respawn:/sbin/mgetty ttyS1
-
-
-
-
-
-
-#
-
-#''/etc/ppp/options''
-
-This file controls the pppd daemon whenever it is started.
-Some of the options here are optional (hey, that why they are called options, right?).
-
-
-
-
-
-auth -chap +pap login modem crtscts debug proxyarp lock
-ms-dns 111.222.333.444
-
-
-
-
-Here is their brief meaning:
-
-
-
-
-
-#*__auth __: use some sort of authentication for dialin clients
-#*
-
-#*__-chap__: not CHAP
-#*
-
-#*__ +pap__: use PAP
-#*
-
-#*__ login __: use the system password file for authenticating the client
-using PAP and record the user in the system wtmp file, ''/etc/ppp/pap-secrets'' should
-still be present (see below)
-#*
-
-#*__modem __: use the modem control lines (for carrier detection and other stuff)
-#*
-
-#*__ crtscts __: use hardware flow control
-#*
-
-#*__debug __: log extra info (might be removed after everything is fine)
-#*
-
-#*__ proxyarp __: this is needed to connect from the client to the
-Internet, not just to the LAN you dialed into
-#*
-
-#*__lock__: pppd should create a lock file for the serial device
-#*
-
-#*__ms-dns 111.222.333.444__: this info is provided to Windows box as a default
-DNS server
-#*
-
-Look at pppd man page for all the juicy details (parts of the above info is
-adapted from there)
-
-
-Another note is appropriate here. Some people reported that they had more
-success with __+chap -pap__ in authenticating both Windows and Linux
-dial-up clients. If you are having problems, try changing
-/etc/ppp/options to have __+chap -pap__. In this case the new
-file ''/etc/ppp/chap-secrets'' should be created (same contents as
-recommended ''/etc/ppp/pap-secrets'').
-
-
-Some other people reported that
-having default line from ''/etc/mgetty+sendfax/login.config'' works
-fine. I am very happy to hear that, and I never claimed that my way to set
-things up is the only true way.
-
-#
-
-#''/etc/ppp/options.ttyS1''
-
-This file serves purpose similar to the previous one, but only applies to
-particular modem line. It specifies the IP address given to the remote machine
-(dynamic, in some sense, if you have more than one line) and the local IP as well.
-
-
-
-
-
-111.222.333.444:111.222.333.888
-
-
-
-
-
-
-#
-
-#''/etc/mgetty+sendfax/login.config''
-
-
-
-
-This file is the main mgetty control file. Mgetty is Windows-PPP-aware, so it
-has provisions to start pppd automatically upon receiving connect from the Windows machine.
-
-
-These lines should be present:
-
-
-
-
-
-/AutoPPP/ - - /usr/sbin/pppd
-
-
-
-
-Before adding them, check that some other version of similar command is absent
-there (commented out by default).
-
-
-
-
-#
-
-#''/etc/ppp/pap-secrets''
-
-This is similar to ''/etc/password'' file, but only used for dialins and
-contains __plain text passwords__ (apparently, only visible to root). All users
-that you want to be able to dialin must have their usernames and password
-listed in this file. They should enter the same username and password into
-Windows Dial Up Networking configuration.
-
-
-
-
-
-# Secrets for authentication using PAP
-# these two users below can use dialin
-# client server secret pword remote IP addresses
-dialinuser1 * b1ab1a!? 111.222.333.888
-dialinuser2 * p8sSw0rD 111.222.333.888
-
-
-
-#
-
-
-
-
-
-
-
-
-
-Check that mgetty is running by looking for similar line in the output of
-ps ax command.
-
-
-
-
-
-4625 ? S :00 /sbin/mgetty ttyS1
-
-
-
-
-Now this machine will allow modem calls from any Windows 95/98 box.
-
-
-As was noted by one of the readers some steps are to be taken to prevent users
-from sharing their dialin password with others. A simple perl/shell script
-will do the job by killing and logging connections that use the same
-username.
-
-
-Also, if it is desirable to prevent users from using dialing in their
-usernames should not be put into ''/etc/ppp/pap-secrets ''.
-
-!Windows setup
-
-
-This is __really__ straightforward.
-
-
-#Click on __My Computer__
-#
-
-#Click on __Dial Up networking__
-#
-
-#Click on __Make New Connection__
-#
-
-#Proceed according to directions, enter the phone number etc
-#
-
-#After a new connection is created click on it and enter the username and
-password (same as mentioned in ''/etc/passwd'' and
-''/etc/ppp/pap-secrets'')
-#
-
-#Click __Connect__ and it should work (it did in my case ;-) )
-#
-
-
-
-
-
-
-__TO TEST THE CHANGES__
-
-
-Do: try to dial in using terminal program (UNIX:minicom
-/Windows:terminal or other)
-
-
-Should get:
-Mgetty should respond with prompt and you Linux distribution version!
-
-!!4.13 Open access
-
-
-
-
-
-
-Now, after testing all the services, we are ready to open the access to this
-machine. The main access control facility in our case is TCP wrappers
-(tcpd). In case of RH 7 the xinetd will check the same access control files
-itself without any need to wrap services with /usr/sbin/tcpd.
-These facilities are controlled by 2 files ''/etc/hosts.allow'' and
-''/etc/hosts.deny'', as was mentioned in the sections devoted to various
-network services. TCP wrappers configuration can be done in 2 distinct
-ways and we will employ the simplest.
-
-
-Let our ''/etc/hosts.deny'' contain ALL:ALL clause, thus
-denying the access to all services (started from ''/etc/inetd.conf'' ) for
-all hosts and all users on them. Now we can allow what we need explicitly in
-''/etc/hosts.allow'', thus following the philosophy __"what is not
-expressly allowed is denied"__.
-
-
-Lets assume we want to allow people to read and send email, we want some
-trusted hosts to update contents of the web pages and we want admin
-workstation to have full access. So we arrive at the following
-''/etc/hosts.allow'':
-
-
-#
-# hosts.allow This file describes the names of the hosts which are
-# allowed to use the local INET services, as decided
-# by the '/usr/sbin/tcpd' server.
-#
-ALL: 127...1 adminbox.some.net
-#we rely on anti-relaying features of sendmail 8.9+ to fight spam
-#and also restrict some sites that we don't want to see email from
-sendmail: ALL EXCEPT .kr .cn
-popper: .com .edu .gov .mil
-#these people can upload/download stuff, make it restrictive to avoid warez!
-in.ftpd: .this.net .that.net
-
-
-
-
-
-----
-
-!!5. Conclusion
-
-
-There must be the conclusion, right?
-
-
-
-----
-
-!!6. References
-
-
-Useful LDP HOWTOs (well, actually, all others are useful too)
-
-
-#
-Setting Up Your New Domain Mini-HOWTO., really good guide of DNS setup and general network setup (recommended reading)
-#
-
-#
-Linux WWW HOWTO, provides more details on Apache setup, including virtual hosting
-#
-
-#
-Red Hat Linux 6.X as an Internet Gateway for a Home Network, some hints on network setup
-#
-
-#
-IP Aliasing On A Linux Machine, used for multiple IP on the same interface
-#
-
-#
-Ethernet HOWTO, look here in case of network card trouble
-#
-
-#
-IPCHAINS HOWTO, turn to this if more security is desired
-#
-
-#
-Serial HOWTO, serial ports, lines, modems and related stuff
-#
-
-#
-PPP HOWTO,some notes on PPP server setup
-#
-
-
-
-Software (used or mentioned) websites
-
-
-
-
-
-#
-Eudora POP3 server
-#
-
-#
-WU-FPTD ftp server
-#
-
-#
-Sendmail MTA
-#
-
-#
-Mgetty pages
-#
-
-#
-Apache httpd server
-#
-
-
-
-Other documents
-
-
-#
-Armoring Linux
-#
-
-#
-Setting Up POP/PPP server
-#
-
-#
-Mgetty and Windows dialin info
-#
-
-#
-Using !RedHat 5.1 to Start an ISP, the short article on how to start an
-ISP if all you have is a Linux RH ;-)
-#
-
-#
-Guest FTP server setup
-#
-
-#
-Linux Dialin Server Setup Guide Yet Another Guide about that
-#
-
-#
-virtfs a nice automatic
-tool for configuring virtual services based on Perl script
-#
-
-#
-Linux Public Access HOWTOan old and not updated for 5 years document
-describing Linux-based ISP, some nice hints on equipment (serial boards) and performance
-#
-
-#
-Sinlge IP virtual hosting, nice doc describing how to host everything on a single IP.
-#
-
-
-
-Resources, not related to the topic of the document ;-)
-
-
-
-
-
-#I also maintain a list of computer/network security related books with
-(where available) reviews and online availability. It is posted at
-http://www.chuvakin.org/books.
-If you have a book that I don't list please use the form on the page and I will add it to the list and maybe review
-it later.
-#
-
-#
-Public Browser Station HOWTO, my mini-HOWTO on web-access terminal based on !RedHat Linux
-#
-
-#
-Access the Web Anywhere, my article in Linux Journal about Internet Kiosks
-#
-
-
-
-
-----
+Deleted
.