《Linux系统安全:纵深防御、安全扫描与入侵检测 》 —3.8 OpenVPN的排错步骤

华章计算机 发表于 2019/11/14 12:30:34 2019/11/14
【摘要】 本节书摘来自华章计算机《Linux系统安全:纵深防御、安全扫描与入侵检测》一书中第3章,第3.8节,作者是胥峰。

3.8 OpenVPN的排错步骤

在实践中,运维工程师们经常需要搭建一套OpenVPN的系统或者运维一套已经在线上生产环境中使用的OpenVPN系统。在配置或者维护OpenVPN虚拟专用网络的过程中,根据不同的需求,我们可能会遇到各种各样不同的问题。

在此,我们总结了对于OpenVPN系统最佳的排错步骤。在遇到问题时,可以按照下面的步骤进行排查。

1)认真查看与分析服务器端和客户端的OpenVPN日志。

在服务器上,我们使用如下指令配置OpenVPN的日志:

log-append  /var/log/openvpn/openvpn.log

verb 4

那么在出现异常时,我们首先需要分析这个文件。

该文件分以下几个部分:

OpenVPN实际运行时读取的配置文件位置和配置项。

以如下的格式开始。

Fri Dec 18 13:25:44 2015 us=656293 Current Parameter Settings:

Fri Dec 18 13:25:44 2015 us=656383   config = '/etc/openvpn/server.conf'

OpenVPN的版本和OpenSSL版本。

Fri Dec 18 13:25:44 2015 us=660554 OpenVPN 2.3.8 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Aug  4 2015

Fri Dec 18 13:25:44 2015 us=660566 library versions: OpenSSL 1.0.1e-fips 11 Feb 2013, LZO 2.03

Fri Dec 18 13:25:44 2015 us=663615 Diffie-Hellman initialized with 1024 bit key

OpenVPN本地添加的路由信息。

Fri Dec 18 13:25:44 2015 us=665243 /sbin/ip link set dev tun0 up mtu 1500

Fri Dec 18 13:25:44 2015 us=668536 /sbin/ip addr add dev tun0 local 172.16.100.1 peer 172.16.100.2

Fri Dec 18 13:25:44 2015 us=670061 /sbin/ip route add 10.128.119.0/24 via 172.16.100.2

Fri Dec 18 13:25:44 2015 us=671212 /sbin/ip route add 192.168.20.0/24 via 172.16.100.2

Fri Dec 18 13:25:44 2015 us=672122 /sbin/ip route add 172.16.100.0/24 via 172.16.100.2

观察需要增加的路由是否完整,同时注意配置项的输出是否与配置文件中一致。如果不一致,则可能是修改了配置文件而没有重启OpenVPN进程。

客户端连接时的信息。

Fri Dec 18 13:25:54 2015 us=348333 x.y.z.28:58937 Re-using SSL/TLS context

#压缩启用成功

Fri Dec 18 13:25:54 2015 us=348369 x.y.z.28:58937 LZO compression initialized

Fri Dec 18 13:25:54 2015 us=348505 x.y.z.28:58937 Control Channel MTU parms [ L:1542 D:166 EF:66 EB:0 ET:0 EL:3 ]

Fri Dec 18 13:25:54 2015 us=348537 x.y.z.28:58937 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:143 ET:0 EL:3 AF:3/1 ]

#和客户端建立连接时,本地的配置项

Fri Dec 18 13:25:54 2015 us=348679 x.y.z.28:58937 Local Options String: 'V4,dev-type tun,link-mtu 1542,tun-mtu 1500,proto UDPv4,comp-lzo,keydir 0,cipher BF-CBC,auth SHA1,keysize 128,tls-auth,key-method 2,tls-server'

#和客户端建立连接时,对客户端配置项的要求

Fri Dec 18 13:25:54 2015 us=348706 x.y.z.28:58937 Expected Remote Options String: 'V4,dev-type tun,link-mtu 1542,tun-mtu 1500,proto UDPv4,comp-lzo,keydir 1,cipher BF-CBC,auth SHA1,keysize 128,tls-auth,key-method 2,tls-client'

Fri Dec 18 13:25:54 2015 us=348743 x.y.z.28:58937 Local Options hash (VER=V4): '14168603'

Fri Dec 18 13:25:54 2015 us=348766 x.y.z.28:58937 Expected Remote Options hash (VER=V4): '504e774e'

Fri Dec 18 13:25:54 2015 us=348824 x.y.z.28:58937 TLS: Initial packet from [AF_INET]x.y.z.28:58937, sid=5e66e4eb b8382cc8

#CA证书信息

Fri Dec 18 13:25:54 2015 us=652935 x.y.z.28:58937 VERIFY OK: depth=1, C=CN, ST=SH, L=SH, O=XUFENG-INFO, OU=DEVOPS, CN=cert.xufeng.info, emailAddress=xufengnju@163.com

#客户端证书,注意VERIFY的后面必须是OK

Fri Dec 18 13:25:54 2015 us=653140 x.y.z.28:58937 VERIFY OK: depth=0, C=CN, ST=SH, O=XUFENG-INFO, OU=VPN, CN=vpnclient1.xufeng.info, emailAddress=xufengnju@163.com

Fri Dec 18 13:25:54 2015 us=704318 x.y.z.28:58937 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key #加密算法

Fri Dec 18 13:25:54 2015 us=704352 x.y.z.28:58937 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication #HMAC算法

Fri Dec 18 13:25:54 2015 us=704436 x.y.z.28:58937 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key

Fri Dec 18 13:25:54 2015 us=704453 x.y.z.28:58937 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication

Fri Dec 18 13:25:54 2015 us=729243 x.y.z.28:58937 Control Channel: TLSv1.2, cipher TLSv1/SSLv3 DHE-RSA-AES256-GCM-SHA384, 1024 bit RSA

Fri Dec 18 13:25:54 2015 us=729287 x.y.z.28:58937 [vpnclient1.xufeng.info] Peer Connection Initiated with [AF_INET]x.y.z.28:58937

Fri Dec 18 13:25:54 2015 us=729344 vpnclient1.xufeng.info/x.y.z.28:58937 OPTIONS IMPORT: reading client specific options from: /etc/openvpn/ccd/vpnclient1.xufeng.info #确认服务器上读到了客户端的专用配置文件

Fri Dec 18 13:25:54 2015 us=729586 vpnclient1.xufeng.info/x.y.z.28:58937 MULTI: Learn: 172.16.100.5 -> vpnclient1.xufeng.info/x.y.z.28:58937

Fri Dec 18 13:25:54 2015 us=729610 vpnclient1.xufeng.info/x.y.z.28:58937 MULTI: primary virtual IP for vpnclient1.xufeng.info/x.y.z.28:58937: 172.16.100.5

Fri Dec 18 13:25:54 2015 us=729628 vpnclient1.xufeng.info/x.y.z.28:58937 MULTI: internal route 10.128.119.0/24 -> vpnclient1.xufeng.info/x.y.z.28:58937

Fri Dec 18 13:25:54 2015 us=729648 vpnclient1.xufeng.info/x.y.z.28:58937 MULTI: Learn: 10.128.119.0/24 -> vpnclient1.xufeng.info/x.y.z.28:58937

Fri Dec 18 13:25:56 2015 us=789781 vpnclient1.xufeng.info/x.y.z.28:58937 PUSH: Received control message: 'PUSH_REQUEST'

Fri Dec 18 13:25:56 2015 us=789819 vpnclient1.xufeng.info/x.y.z.28:58937 send_push_reply(): safe_cap=940

Fri Dec 18 13:25:56 2015 us=789862 vpnclient1.xufeng.info/x.y.z.28:58937 SENT CONTROL [vpnclient1.xufeng.info]: 'PUSH_REPLY,route 172.16.100.0 255.255.255.0,topology net30,ping 10,ping-restart 120,route 10.168.103.0 255.255.255.0,route 192.168.20.0 255.255.255.0,ifconfig 172.16.100.5 172.16.100.6' (status=1) #向客户端发送的PUSH内容

2)对比分析服务器端和客户端的配置文件,确保相关配置项一致。

这里提供一个简单有效的方法。首先把服务器配置文件和客户端配置文件都下载下来,对二者内容使用Linux中的diff或者Windows中的Beyond Compare进行对比。使用diff命令时操作如下:

sort server.conf > server.conf.1

sort vpnclient.conf > vpnclient.conf.1

diff server.conf.1 vpnclient.conf.1

这样对比下来,以下项目必须保证一致:cipher、ca、dev、proto、comp-lzo。

另外,在服务器端tls-auth /etc/openvpn/ta.key 0 和客户端上tls-auth /etc/openvpn/ta.key 1匹配。

3)检查服务器是否打开转发并被防火墙允许。

使用如下的命令,确认值是1。

# sysctl net.ipv4.ip_forward

net.ipv4.ip_forward = 1

使用如下的命令,确认chain FORWARD为ACCEPT,或者显式地指定了tun0的FORWARD为ACCEPT。

iptables -L -n

4)检查服务器上网络地址转换的设置。

如下是一个正确使用iptables-save之后的网络地址转换配置内容:

*nat

:PREROUTING ACCEPT [176:15277]

:POSTROUTING ACCEPT [44:2480]

:OUTPUT ACCEPT [36:2160]

-A POSTROUTING -o eth1 -j MASQUERADE #虚拟专用网络服务器内网口启用网络地址转换

-A POSTROUTING -o tun0 -j MASQUERADE #虚拟专用网络服务器隧道口启用网络地址转换

COMMIT

5)检查主机的路由表。在所有参与网络通信的服务器上,按照网络数据流的路径,依次使用route或者traceroute命令检查下一跳是否正确。如指向不正确,则修正。

6)使用tcpdump进行分析。

如以上步骤依然无法排除问题,可以使用tcpdump进行抓包分析。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。