Setting up the master and slave Linux systems

133 needs. Dont augment the kernel with unnecessary capabilities, such as multimedia sound card drivers.

8.4.2.2 Setting up the PPP daemon

The PPP daemon is also required on both systems. After youve extracted the source hierarchy, look at the README file appropriate to your system. On a Linux system, run the configure program to copy the Makefiles into place. Next, run make kernel, which will install the updated PPP drivers into your kernel source tree. Youll then have to build a new kernel with these drivers, install it, and reboot. If youve never built a new kernel before, carefully read the README file in the kernel source tree—typically usrsrclinux. The book Running Linux by Matt Welsh and Lar Kaufman OReilly Associates also describes in detail how to build a kernel. On Linux, the PPP drivers can also be built as a kernel module. Modules are typically used to keep the kernel trim, as it doesnt have to load driver modules until they are needed. For this example, since weve already got a small kernel that only needs to do a few things, we just compiled PPP in directly. If the reboot was successful, return to the PPP daemon source tree and run make to build pppd, auxiliary programs, and the manpages, then run make install to put them into place. In the version of pppd we used, 2.3.5, there was a bug in the Linux kernel driver updates that caused compilation to fail for 2.0.x kernels. While we expect that the authors will have this fixed in future releases, we thought that we would mention it here. If compilation of ppp.c fails with complaints about too few arguments in dev_kfree_skb, edit line 3079 in ppp.c, make VERSION equal to your version of the kernel e.g., change 2,1,86 to 2,0,33. A good place to go for help on these types of problems is the USENET group comp.os.linux.networking or linux.dev.ppp. Once everything is in place, try running pppd from the command line on both the master and slave. On the slave, put a file called .ppprc in vpn1s home directory containing only the word passive. You should see a bunch of garbage characters start to scroll across your terminal screen. It should time out after thirty seconds or so, or you can escape from it by pressing Enter, then ~, then Control-Z. Then kill the process with kill 1 . If you didnt see garbage, something is probably wrong with the PPP daemon itself. On a Linux system, check the varadmmessages and varadmsyslog files for clues or check etcsyslog.conf to see where your files reside. Typically, the messages file will tell you if the daemon started successfully, and syslog will give you protocol-specific errors. If the daemon doesnt believe that the PPP drivers are compiled into the kernel, it will give you a message stating so right away. Use the dmesg command to see if the PPP drivers were loaded.

8.4.2.3 Creating a user account on the slave

Because were going to launch the VPN script on the master from startup it will run as root, so theres no need to create a separate VPN account on that box. On the slave, however, its better to create a separate account for the VPN connection rather than logging in as root. This will 134 also allow you to create several accounts for several different VPNs, if different masters are all logging into the same slave. You might have this situation when there are several branch office masters setting up VPNs with one central office slave. For our purposes, well call the user account vpn1. Give it a password thats hard to crack, and it doesnt need to be easy to remember—were going to be using RSA authentication for the SSH login.

8.4.2.4 Setting up SSH authentication

Weve already gone through how to set up SSH on a system. Once you set up the SSH daemon to launch at startup, follow these steps to set up SSH authentication: 1. On the master host, set up a key pair for the root account using the ssh-keygen program. If one already exists, check to make sure no existing services are using it. If not, you might want to go ahead and set one up again in order to make sure the keys are not compromised. This process will create the HOME.sshidentity and HOME.sshidentity.pub files for root. When youre prompted for a passphrase, leave it blank and press Enter. Because the VPN script might start up while the machine is unattended such as after a remote reboot, we dont want it to have to enter the passphrase in order to connect with the SSH client. 2. Log into the slave as vpn1 or su to that user. Run ssh-keygen for that user. In that users home directory, create a .rhosts file with the hostname of the master master- gw and the account that the master is going to be logging in as—in this case its vpn1. 3. Next you want to add the slaves public host key to the roots known_hosts file on the master. The easiest way to do this is to run ssh to connect to the slave, and ssh will automatically ask you if you wish to add the slaves public key to the file, to which you respond yes. To add the masters public host key to vpn1s known_hosts file, you can either try to connect to it using the SSH client, or copy the key from etcssh_host_key.pub. 4. Next, copy roots public key from identity.pub on the master and put it in vpn1s authorized_keys file. At this point, we have .rhosts, RSA host, and RSA user authentication all enabled for this connection, providing maximum security. To further tighten security, we can edit the etcsshd_config file on both hosts and modify or verify the following entries: PermitRootLogin no StrictModes yes RhostsAuthentication no RhostsRSAAuthentication no RSAAuthentication yes PasswordAuthentication no AllowHosts master-gw.ora-vpn.com slave-gw.ora-vpn.com admin.ora-vpn.com The PermitRootLogin setting of no will prevent root from logging in to either system using SSH. A StrictModes of yes means that the SSH daemon will complain if a users home directory is world-writable. The next few entries control the types of authentication permitted: • Setting RhostsAuthentication to no which is the default means that rhosts authentication alone is not enough to allow a user to make an SSH connection.