Saturday, August 10, 2013

Getting Libreswan to connect to Cisco ASA 5500

Here are some notes about problems I had while trying to make Libreswan connect to Cisco ASA. Note that I'm using certificate based aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication in a roadwarrior configuration. The setup is done on Fedora 19.

The procedure, at least in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ory, is quite simple. Edit, /etc/ipsec.conf file, modify /etc/ipsec.d/ipsec.secrets file, import certificates into NSS database and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n start libreswan daemon. Finally, activate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 connection. Well, it turned out that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ory is very far from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 practice. So, here we go.

Preparation steps

First, I used cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following ipsec.conf file when I started to test connection to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ASA:
version 2.0     # conforms to second version of ipsec.conf specification
# basic configuration
config setup
    nat_traversal=yes
    nhelpers=1
    protostack=netkey
    interfaces=%defaultroute

conn VPN
    # Left side is RoadWarrior
    left=%defaultroute
    leftrsasigkey=%cert
    leftcert=SGROS
    leftca=ROOTCA
    leftid=%fromcert
    leftsendcert=always
    # Right side is Cisco
    right=1.1.1.1 # IP address of Cisco VPN
    rightrsasigkey=%cert
    rightcert=CISCO
    rightca=%same
    rightid=%fromcert
    # config
    type=tunnel
    keyingtries=2
    disablearrivalcheck=no
    authby=rsasig
    auth=esp
    keyexchange=ike
    auto=route
    remote_peer_type=cisco
    pfs=no
Note few things about this configuration. First, my client machine (roadwarrior) is a left node, while Cisco is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 right one. Next, I didn't arrive to this configuration immediately, I had to experiment with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value of interfaces and left statements. The reason was that I'm assigned dynamic NATed address. So, those settings will cause openswan to automatically select appropriate values (interface and IP address) at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time I'm connecting to VPN. Also, certificate related stuff also took me some time to figure it out.

Into ipsec.secrets file I added cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following line:
: RSA SGROS
this will cause openswan to use RSA key for aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication. Finally, I had to import certificates and keys into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 NSS database. Note that NSS database is already precreated in /etc/ipsec.d directory. More specifically, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 database consists of files cert8.db, key3.db and secmod.db. To see imported certificates (if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are any), use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command:
# certutil -L -d /etc/ipsec.d/
Certificate Nickname               Trust Attributes
                                   SSL,S/MIME,JAR/XPI
ROOTCA                             CT,C,C
SGROS                              u,u,u
CISCO                              P,P,P
In my case cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are three certificates in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 database. Mine (SGROS), VPN's (CISCO) and CA that signed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m (ROOTCA). Note that I'm referencing those certificates in ipsec.conf file. If you are configuring this database for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first time, it will be empty and you'll have to import all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certificates.

To import CA into your database, use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command:
certutil -A -i rootca.pem -n ROOTCA -t "TC,TC,TC" -d /etc/ipsec.d/
Note that I'm assuming you have PEM version of certificate stored in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 current directory (argument to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 -i option). For cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rest options, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir meaning, please consult man page.

To import your certificate, with a private key, use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command:
certutil -A -i certkey.pfx -n SGROS -t "u,u,u" -d /etc/ipsec.d/
Note that this time certificate and private key are stored in PKCS#12 file (named certkey.pfx).

Finally, to import certificate of Cisco ASA, use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command:
certutil -A -i rootca.pem -n ROOTCA -t "P,P,P" -d /etc/ipsec.d/
Note that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command is very similar to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one used to import ROOTCA, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trust attributes (option -t) are different. Namely, you don't want ASA's certificate to be CA, i.e. to be able to issue new certificates.

Starting and debugging

To start Libreswan daemon, I used cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command:
ipsec pluto --stderrlog --config /etc/ipsec.conf --nofork
That way I was forcing it not to go to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 background (--nofork) and to log to stderr (--stderrlog). Then in anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r terminal I would trigger VPN establishment using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command:
ipsec auto --up VPN
The first problem was that Libreswan said it can not determine which end of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 connection it is, i.e. I was receiving cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following error message.
022 "VPN": We cannot identify ourselves with eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r end of this connection.
That error message took me some time to resolve. I tried everything possible to let Libreswan knows if it is left or right part in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 configuration, which included changing roles several times, changing different parameters and ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r stuff. In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end, it turned out that that has nothing to do with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 configuration file, namely cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem actually was missing kernel module!? NETKEY wasn't loaded, and libreswan couldn't access IPsec stack within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel. To be honest, it could be inferred from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 log by nothing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following lines:
No Kernel XFRM/NETKEY interface detected
No Kernel KLIPS interface detected
No Kernel MASTKLIPS interface detected
Using 'no_kernel' interface code on 3.10.4-300.fc19.x86_64
But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n again, some more informative error message would actually help a lot! In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command solved that problem:
modprobe af_key
and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n, in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 logs I saw cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following line:
Using Linux XFRM/NETKEY IPsec interface code on 3.10.4-300.fc19.x86_64
that confirmed NETKEY was now accessible, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 error message about not knowing which end of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 connection it is, disappeared.

Next, I had problem with peer's public key. The error message I received was:
003 "VPN" #1: no RSA public key known for 'C=HR, L=Zagreb, O=Some ORG, CN=Cisco ASA'
Again, I lost a lot of time trying to figure out why it can not access public key even though it is in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 certificate. I also tried to extract public key and write it directly into configuration file. Nothing helped. Then, when I turned on debugging of x509 in ipsec.conf, I found some suspicious messages, like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following one:
added connection description "VPN"
| processing connection VPN
|   trusted_ca called with a=CN=ROOTCA b=
|   trusted_ca returning with failed
|   trusted_ca called with a=CN=ROOTCA b=\001\200\255\373
|   trusted_ca returning with failed
Note cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 garbage as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second argument of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 function trusted_ca!? Googling around for something about this didn't reveal anything useful. But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n, out of desperation I tried removing leftca and rightca parameters from ipsec.conf, and guess what! Everything started to work. Checking again at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 logging output I saw that now b parameter has cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same value as a.

Yet, it still didn't work and after some tinkering I suspected that on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Cisco side XAuth is enabled and required. This I concluded based on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 log output where Libreswan says what it received from Cisco:
"VPN" #1: received Vendor ID payload [Cisco-Unity]
"VPN" #1: received Vendor ID payload [XAUTH]
"VPN" #1: ignoring unknown Vendor ID payload [...]
"VPN" #1: ignoring Vendor ID payload [Cisco VPN 3000 Series]
At first, I thought that Libreswan will support XAuth, but obviously, if it is not configured Libreswan can not use it. Also, looking into manual page it says cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re that Xauth is disabled by default. So, after adding cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following statements into ipsec.conf file:
leftxauthclient=yes
leftxauthusername=sgros
and adding appropriate line into ipsec.secrets file:
@sgros : XAUTH "mypassword"
I managed to get furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r. Yet, it still didn't work. Looking again in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 log output I realised that something was wrong with client configuration. Also, I got segfaults cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re that I didn't report to upstream for a simple fear that I might send some secret information. But, after adding cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following statements into ipsec.conf segmentation fault was solved:
modecfgpull=yes
leftmodecfgclient=yes
In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 logging output of Libreswan I saw that configuration parameters were properly obtained, i.e.:
"VPN" #1: modecfg: Sending IP request (MODECFG_I1)
"VPN" #1: received mode cfg reply
"VPN" #1: setting client address to 192.168.2.33/32
"VPN" #1: setting ip source address to 192.168.2.33/32
"VPN" #1: Received subnet 192.168.0.0/16, maskbits 16
"VPN" #1: transition from state STATE_MODE_CFG_I1 to state STATE_MAIN_I4
Now, it seemed like everything was connected, but ICMP probes were not going through. Using setkey command I checked that policies and associations are correctly installed into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 kernel, which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y were. I quickly realised that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem was that Libreswan didn't assign IP address to my local interface, nor did it assign routes. That was easy to check by just listing interface's IP addresses. To see if this is really problem, I manually assigned address and route:
# ip addr add 192.168.2.33/32 dev wlp3s0
# ip ro add 192.168.0.0/22 src 192.168.2.33 via 192.168.1.1
and after that I was able to reach addresses within a destination network. Note that IP address given as argument to via keyword (in my case 192.168.1.1) isn't important since XFRM will change it anyway. So, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem was why this address isn't added in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first place.

After some poking around I found that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script /usr/libexec/ipsec/_updown.netkey is called to setup all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 parameters, and also, looking into that script, I found that it didn't do anything when pluto calls it using up-client parameter! So, no wonder nothing happened. I also found on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Internet post about that problem. The fix is simple, as shown in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 post I linked, but it messes something with routes. After some furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r investigation I discovered that when adding locally assigned IP address, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script messes up netmask. To cut cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 story, I changed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following line:
-it="ip addr add ${PLUTO_MY_SOURCEIP%/*}/${PLUTO_PEER_CLIENT##*/} dev ${PLUTO_INTERFACE%:*}"
+it="ip addr add ${PLUTO_MY_CLIENT} dev ${PLUTO_INTERFACE%:*}"
and also, I changed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following lines for IP address removal:
-it="ip addr del ${PLUTO_MY_SOURCEIP%/*}/${PLUTO_PEER_CLIENT##*/} dev ${PLUTO_INTERFACE%:*}"
+it="ip addr del ${PLUTO_MY_CLIENT} dev ${PLUTO_INTERFACE%:*}"
You can get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 complete patch here.

Some random notes

It might happen that Libreswan suddenly stops working and that you can not access network, i.e. you can only ping you local address, but not local router. In that case try to clear XFRM policy using setkey command:
setkey -FP
you can also check if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is anything with:
setkey -DP

1 comment:

knox2 said...

Hi,
Would you know cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process of connecting via a preshared key

About Me

scientist, consultant, security specialist, networking guy, system administrator, philosopher ;)

Blog Archive