IPSec操作手册
第一部分: OpenSSL生成证书
首先需要一个根证书,然后用这个根证书来下发“子证书”。
1,找一台Linux PC, 首先切换目录,到/etc/pki/tls/misc,openssl的脚本在这里。
2,生成根证书:
./CA -newca
输入pass phrase,后面签发的时候会用到,类似一个密码
CA证书的路径在/etc/pki/CA/cacert.pem
3,生成server私有密钥:
openssl genrsa -out server.key 2048
4,生成服务器证书请求:
openssl req -new -key server.key -out server.csr
5,把server.crt文件改名成newreq.pem,然后用CA来签证就可以了
mv server.csr newreq.pem
./CA –sign
6,把newcert.pem改名成server.pem
mv newcert.pem server.pem
这就是server的证书。
7,重复3-6步,生成client的证书和私钥。
8,将server.key 和server.pem 和cacert.pem复制到FC1080,其中server.key和server.pem import到Local Certificates中,cacert.pem import到Trusted CA 中(只需导入证书部分,描述部分不用导入)
在Linux PC上,新建/var/cert 目录,将client.pem, client.key, cacert.pem复制到
/var/cert/目录下。
9,在Linux PC的/var/cert/目录下执行下列命令:
ln -s cacert.pem $(openssl x509 -noout -hash -in cacert.pem).0
这个命令是生成一个hash link,如果没有此hash link,后面将无法建立IPSec通道
至此两台主机的证书分发工作已经完成。
下面开始配置setkey和racoon的工作。
第二部分:配置racoon.conf和setkey.conf.
PC1的setkey.conf
flush;
spdflush;
spdadd 172.16.12.164/32 172.16.12.169/32 any -P out ipsec esp/transport/172.16.12.164-172.16.12.169/require;
spdadd 172.16.12.169/32 172.16.12.164/32 any -P in ipsec esp/transport/172.16.12.169-172.16.12.164/require;
PC1的racoon.conf
path pre_shared_key "/var/psk.txt";
path certificate "/var/cert";
remote 172.16.12.169 {
exchange_mode main;
lifetime time 3600 sec;
proposal_check obey;
verify_cert on;
my_identifier asn1dn;
peers_identifier asn1dn;
certificate_type x509 "server.cert" "server.priv";
proposal {
encryption_algorithm 3des;
hash_algorithm md5;
authentication_method rsasig;
dh_group modp1024;
}
}
sainfo address 172.16.12.164/32 any address 172.16.12.169/32 any {
lifetime time 3600 sec;
encryption_algorithm 3des;
authentication_algorithm hmac_md5;
compression_algorithm deflate;
}
PC2的setkey.conf
flush;
spdflush;
spdadd 172.16.12.169/32 172.16.12.164/32 any -P out ipsec esp/transport/172.16.12.169-172.16.12.164/require;
spdadd 172.16.12.164/32 172.16.12.169/32 any -P in ipsec esp/transport/172.16.12.164-172.16.12.169/require;
PC2的racoon.conf
path pre_shared_key "/var/psk.txt";
path certificate "/var/cert";
remote 172.16.12.169 {
exchange_mode main;
lifetime time 3600 sec;
proposal_check obey;
verify_cert on;
my_identifier asn1dn;
peers_identifier asn1dn;
certificate_type x509 "client.pem" "client.key";
proposal {
encryption_algorithm 3des;
hash_algorithm md5;
authentication_method rsasig;
dh_group modp1024;
}
}
sainfo address 172.16.12.164/32 any address 172.16.12.169/32 any {
lifetime time 3600 sec;
encryption_algorithm 3des;
authentication_algorithm hmac_md5;
compression_algorithm deflate;
}
第三部分:防火墙规则,这里指的是tunnel方式需要的防火墙规则(上面两部分是点对点方式的配置),其中tunnel的local subnet为192.168.1.0/24, remote subnet为192.168.2.0/24 iptables –I INPUT -p esp -j ACCEPT #接受ESP包
iptables –I INPUT -p udp --dport 500 -j ACCEPT #接受racoon的listening port进包
iptables –I INPUT -p udp --dport 4500 -j ACCEPT #接受racoon的listening port进包iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -d 192.168.2.0/24 -j ACCEPT #进入tunnel的数据不进行NAT转换
iptables –I FORWARD -s 192.168.2.0/24 -d 192.168.1.0/24 -j ACCEPT #tunnel中的回包需要ACCEPT
FAQ
1. 17 (modp6144), or 18 (modp8192) 会失败的原因
Timing is Everything
ISAKMP errors like "phase2 negotiation failed due to time up waiting for phase1" or "phase1 negotiation failed due to time up" could be caused by long cipher initialization times, especially on older hardware.
2. pre-shared-key 会失败的原因
很大可能是key文件的权限不是600造成的。
可以用racoon –F –f raccoon.conf前台运行看看原因
3.其他会失败的原因
注意设备的当前时间,如果时间不对,很可能会导致证书失效。