IPsec can be configured to connect one desktop or workstation to
another by way of a host-to-host connection. This type of connection
uses the network to which each host is connected to create the secure
tunnel to each other. The requirements of a host-to-host connection are
minimal, as is the configuration of IPsec on each host. The hosts need
only a dedicated connection to a carrier network (such as the Internet)
and Red Hat Enterprise Linux to create the IPsec connection.
The first step in creating a connection is to gather system and
network information from each workstation. For a host-to-host connection,
you need the following information:
The IP address for both hosts
A unique name to identify the IPsec connection and distinguish
it from other devices or connections (for example,
ipsec0)
A fixed encryption key or one automatically generated by
racoon
A pre-shared authentication key that is used to initiate the
connection and exchange encryption keys during the session
For example, suppose Workstation A and Workstation B want to connect
to each other through an IPsec tunnel. They want to connect using a
pre-shared key with the value of
foobarbaz and the users agree to let
racoon automatically generate and share an
authentication key between each host. Both host users decide to name their
connections ipsec0.
The following is the ifcfg file for Workstation
A for a host-to-host IPsec connection with Workstation B (the unique name
to identify the connection in this example is
ipsec0, so the resulting file is named
/etc/sysconfig/network-scripts/ifcfg-ipsec0):
DST=X.X.X.X
TYPE=IPSEC
ONBOOT=yes
IKE_METHOD=PSK |
Workstation A would replace X.X.X.X with
the IP address of Workstation B, while Workstation B replaces
X.X.X.X with the IP address of Workstation A.
The connection is set to initiate upon boot-up
(ONBOOT=yes) and uses the pre-shared
key method of authentication
(IKE_METHOD=PSK).
The following is the content of the pre-shared key file (called
/etc/sysconfig/network-scripts/keys-ipsec0) that
both workstations need to authenticate each other. The contents of this
file should be identical on both workstations and only the root user
should be able to read or write this file.
| Important |
---|
| To change the keys-ipsec0 file so that only
the root user can read or edit the file, perform the following command
after creating the file: chmod 600 /etc/sysconfig/network-scripts/keys-ipsec0 |
|
To change the authentication key at any time, edit the
keys-ipsec0 file on both
workstations. Both keys must be identical for proper
connectivity.
The next example shows the specific configuration for the phase 1
connection to the remote host. The file is named
X.X.X.X.conf
(X.X.X.X is replaced with the IP address of
the remote IPsec router). Note that this file is automatically generated
once the IPsec tunnel is activated and should not be edited directly.
;
remote X.X.X.X
{
exchange_mode aggressive, main;
my_identifier address;
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group 2 ;
}
} |
The default phase 1 configuration file created when an IPsec
connection is initialized contains the following statements used by the
Red Hat Enterprise Linux implementation of IPsec:
- remote
X.X.X.X
Specifies that the subsequent stanzas of this configuration
file applies only to the remote node identified by the
X.X.X.X IP address.
- exchange_mode aggressive
The default configuration for IPsec on Red Hat Enterprise Linux uses an aggressive
authentication mode, which lowers the connection overhead while allowing
configuration of several IPsec connections with multiple hosts.
- my_identifier address
Defines the identification method to be used when
authenticating nodes. Red Hat Enterprise Linux uses IP addresses to identify nodes.
- encryption_algorithm 3des
Defines the encryption cipher used during authentication. By
default, Triple Data Encryption Standard
(3DES) is used.
- hash_algorithm sha1;
Specifies the hash algorithm used during phase 1 negotiation
between nodes. By default, Secure Hash Algorithm version 1 is
used.
- authentication_method
pre_shared_key
Defines the authentication method used during node
negotiation. Red Hat Enterprise Linux by default uses pre-shared keys for
authentication.
- dh_group 2
Specifies the Diffie-Hellman group number for establishing
dynamically-generated session keys. By default, the 1024-bit group
is used.
The /etc/racoon/racoon.conf files should be
identical on all IPsec nodes except for the
include
"/etc/racoon/X.X.X.X.conf"
statement. This statement (and the file it references) is generated when
the IPsec tunnel is activated. For Workstation A, the
X.X.X.X in the include
statement is Workstation B's IP address. The opposite is true of
Workstation B. The following shows a typical
racoon.conf file when IPsec connection is
activated.
# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.
path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";
sainfo anonymous
{
pfs_group 2;
lifetime time 1 hour ;
encryption_algorithm 3des, blowfish 448, rijndael ;
authentication_algorithm hmac_sha1, hmac_md5 ;
compression_algorithm deflate ;
}
include "/etc/racoon/X.X.X.X.conf" |
This default racoon.conf file includes defined
paths for IPsec configuration, pre-shard key files, and certificates.
The fields in sainfo anonymous describe
the phase 2 SA between the IPsec nodes — the nature of the IPsec
connection (including the supported encryption algorithms used) and the
method of exchanging keys. The following list defines the fields of
phase 2:
- sainfo anonymous
Denotes that SA can anonymously initialize with any peer
insofar as the IPsec credentials match.
- pfs_group 2
Defines the Diffie-Hellman key exchange protocol, which
determines the method in which the IPsec nodes establish a mutual
temporary session key for the second phase of IPsec
connectivity. By default, the Red Hat Enterprise Linux implementation of IPsec uses
group 2 (or modp1024) of the
Diffie-Hellman cryptographic key exchange groups. Group 2 uses a
1024-bit modular exponentiation that prevents attackers from
decrypting previous IPsec transmissions even if a private key is
compromised.
- lifetime time 1 hour
This parameter specifies the life cycle of an SA and can be
quantified either by time or by bytes of data. The Red Hat Enterprise Linux
implementation of IPsec specifies a one hour lifetime.
- encryption_algorithm 3des, blowfish 448,
rijndael
Specifies the supported encryption ciphers for phase 2. Red Hat Enterprise Linux
supports 3DES, 448-bit Blowfish, and Rijndael (the cipher used in
the Advanced Encryption Standard, or
AES).
- authentication_algorithm hmac_sha1,
hmac_md5
Lists the supported hash algorithms for
authentication. Supported modes are sha1 and md5 hashed message
authentication codes (HMAC).
- compression_algorithm deflate
Defines the Deflate compression algorithm for IP Payload
Compression (IPCOMP) support, which allows for potentially faster
transmission of IP datagrams over slow connections.
To start the connection, either reboot the workstation or execute
the following command as root on each host:
To test the IPsec connection, run the tcpdump
utility to view the network packets being transfered between the hosts
(or networks) and verify that they are encrypted via IPsec. The packet
should include an AH header and should be shown as ESP packets. ESP
means it is encrypted. For example:
17:13:20.617872 pinky.example.com > ijin.example.com: \
AH(spi=0x0aaa749f,seq=0x335): ESP(spi=0x0ec0441e,seq=0x335) (DF) |