bb1834c327fca37f671cc3d4ea4b23cac8104dc7
howto/IPsecWithPublicKeys/OpenBSDExample.md
... | ... | @@ -0,0 +1,63 @@ |
1 | +# Introduction |
|
2 | +Here be dragons. This section should cover the basics: |
|
3 | +* IKEv1 |
|
4 | +* Three stages: Key distribution, IPSec setup, GRE setup |
|
5 | +* In theory, BGPd can set up IPSec flows itself, but we're not using that here because that prevents you from using another BGP daemon such as bird |
|
6 | +* Debugging |
|
7 | + |
|
8 | +# Key generation and distribution |
|
9 | +## Using pre-generated keys |
|
10 | +OpenBSD generates keys suitables for IPSec usage during the installation. The public key can be found in `/etc/isakmpd/local.pub` |
|
11 | + |
|
12 | +## Generating your own keys |
|
13 | +If you don't want to use a pre-generated key, refer to the isakmpd(8) manpage under the section `X.509 AUTHENTICATION`. |
|
14 | + |
|
15 | +## Distributing keys |
|
16 | +Send your public key to your peer, preferrably digitally signed. A signature can be created with `gpg -sb -a local.pub` and checked with `gpg --verify local.pub.asc`. Since the key is not private, it can be transmitted in the open and on a public forum, such as a Pastebin service. |
|
17 | + |
|
18 | +Once your peer sent you their public key, it under `/etc/isakmpd/pubkeys/ipv4` or `/etc/isakmpd/ipv6`, depending on the address family the peer is using. The key file should be named after the peers address. For example, if your peer is `1.3.3.7`, you place their public key under `/etc/isakmpd/pubkeys/ipv4/1.3.3.7`. |
|
19 | + |
|
20 | +If your peers public key is not in PEM format, you can use [pubkey-converter](https://github.com/ryanriske/pubkey-converter) to convert between key formats. |
|
21 | + |
|
22 | +# IPSec Setup |
|
23 | +Change the value of the `isakmpd_flags` variable in `/etc/rc.conf.local` to `"-K"`, or add the `"-K"` flag if you already have flags in there. This disables keystone(4) authentication, which is okay because we are using `ipsecctl`. |
|
24 | + |
|
25 | +Next, add the right flow parameters to `/etc/ipsec.conf`. We are using the following parameters in this example: |
|
26 | + |
|
27 | +* Encryption: AES-128 |
|
28 | +* Authentication hash: HMAC-SHA1 |
|
29 | +* DH Group: `modp1536` |
|
30 | +* Phase 1 lifetime: 28800 seconds |
|
31 | +* Phase 2 lifetime: 3600 seconds |
|
32 | +* Peer address: 1.3.3.7 |
|
33 | +* Local address: 3.4.5.6 |
|
34 | + |
|
35 | +The configuration file should look like this: |
|
36 | + |
|
37 | + mymachine = "3.4.5.6" |
|
38 | + mypeer = "1.3.3.7" |
|
39 | + ike esp transport proto gre from $mymachine to $mypeer \ |
|
40 | + main auth hmac-sha1 enc aes-128 group modp1536 lifetime 28800 \ |
|
41 | + quick auth hmac-sha1 enc aes-128 group modp1536 lifetime 3600 |
|
42 | + |
|
43 | +Load the configuration file into isakmpd: `ipsecctl -f /etc/ipsec.conf`. Once the connection is established, the IPSec flows can be listed with `ipsecctl -sa`: |
|
44 | + |
|
45 | + # ipsecctl -sa |
|
46 | + FLOWS: |
|
47 | + flow esp in proto gre from 1.3.3.7 to 3.4.5.6 peer 1.3.3.7 srcid 3.4.5.6/32 dstid 1.3.3.7/32 type use |
|
48 | + flow esp out proto gre from 3.4.5.6 to 1.3.3.7 peer 1.3.3.7 srcid 3.4.5.6/32 dstid 1.3.3.7/32 type require |
|
49 | + |
|
50 | + SAD: |
|
51 | + esp transport from 1.3.3.7 to 3.4.5.6 spi 0xdeadbeef auth hmac-sha1 enc aes |
|
52 | + esp transport from 3.4.5.6 to 1.3.3.7 spi 0xf00df00d auth hmac-sha1 enc aes |
|
53 | + |
|
54 | +# GRE Setup |
|
55 | +Next, we will set up the GRE device. The GRE device encapsulates IPv4 and IPv6 traffic, which allows you to speak both address families over one tunnel and if you only have native connectivity for one address family. The addresses configured onto the GRE device should come from a private address range that is not used anywhere in DN42, or a registered transfer net. For IPv6, you should use either ULAs or Link-Local addresses. In this example, we assume you are using 10.20.30.0/31 as the IPv4 transfer "net" (it has only two addresses, so calling it a network is a bit of an overstatement) and Link-Local addresses for IPv6. |
|
56 | + |
|
57 | + # ifconfig gre0 create |
|
58 | + # ifconfig gre0 inet 10.20.30.0 10.20.30.1 # reverse these on your peer's side |
|
59 | + # # on older releases of OpenBSD, a Link-Local address is generated automatically |
|
60 | + # ifconfig gre0 inet6 eui64 |
|
61 | + # ifconfig gre0 up |
|
62 | + |
|
63 | +These settings should also be added to `/etc/hostname.gre0`. |
|
... | ... | \ No newline at end of file |