09
2023
01
10:25:19

openVPN服务器配置的31个关键点

前面我们比较详细的介绍了H3C的SSL VPN的配置一篇能解决90%以上SSL VPN问题的武林秘籍我来帮着更新一下Linux连接SSL VPN的操作指导,官网手册过时了!),H3C的V7版本路由器和防火墙等设备默认支持SSL VPN功能,并且默认提供了15个并发授权。但是也有小伙伴反馈不够用,哪有什么其他解决方案呢?

试试开源的openVPN?

以部署在CentOS7系统为例,部署非常简单。仅需一条命令:

当然,从H3C的配置VSR白送的的SSL VPN功能,你要不要?中我们就能看出,证书是非常关键的配置。所以部署openVPN时一般需要配套安装easy-rsa来生成证书。

然后就是最关键的服务器配置文件server.conf了,默认位于/usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf,我们需要把它拷贝到/etc/openvpn/下。

然后我们一起看一下这个配置文件的31个关键配置项。

1、配置OpenVPN监听的本地IP地址。

    格式:local a.b.c.d
    示例:local 192.168.1.76

    2、配置OpenVPN监听的TCP/UDP端口号。

    配置openVPN服务器使用TCP协议还是UDP协议。

      格式:proto tcp
      示例:proto udp

      3、配置openVPN端口号。

      如果您想在同一台机器上运行多个OpenVPN实例,请配置每个实例使用不同的端口号。同时,您需要在防火墙上放行此端口。

        格式:port <0-65535>
        示例:port 1194

        4、配置隧道接口类型。

        配置"dev tun"将创建一个IP路由隧道,配置"dev tap"将创建一个以太网隧道。如果您是以太网桥接并预先创建了一个tap0虚接口,并将其与您的以太网接口桥接,请使用“dev tap0”。如果要通过VPN控制访问策略,则必须为TUN/TAP接口创建防火墙规则。

        在非Windows系统上,您可以给出明确的接口编号,例如tun0;在Windows系统上,可以使用“dev-node”。在大多数系统上,除非您部分或完全禁用TUN/TAP接口的防火墙,否则VPN将无法运行。

          格式:dev tap0
          示例:dev tun

          5、多网卡配置。

          如果您有多个网卡,Windows需要网络连接面板中的TAP-Win32适配器名称。在Windows XP SP2或更高版本上,您可能需要有选择地禁用TAP适配器的Windows防火墙;非Windows系统通常不需要这个。

            格式:dev-node MyTap
            示例:dev-node Tap

            6、配置SSL/TLS根证书(ca)、证书(cert)和私钥(key)。

            每个客户端和服务器都必须有自己的证书和密钥文件。服务器和所有客户端将使用相同的ca文件。生成RSA证书和私钥的一系列脚本在/usr/share/easy-rsa/目录下,请记住为服务器和每个客户端证书使用唯一的通用名称。

            任何X509密钥管理系统都可以使用。OpenVPN还可以使用PKCS #12格式的密钥文件(参见手册页中的“pkcs12”指令)。

              示例: ca ca.crt
                   cert server.crt
                   key server.key  #此文件应注意保密

              7、配置Diffie hellman参数。

              可以通过以下命令生成您自己的文件:

                openssl dhparam -out dh2048.pem 2048

                示例:dh dh2048.pem

                8、网络拓扑结构配置。

                推荐使用子网(通过IP寻址),除非必须支持Windows客户端v2.0.9和更低版本(然后是30为掩码,即为每个客户端分配一个/30地址)。

                默认为30为掩码(不推荐)。

                  示例:topology subnet

                  9、配置服务器地址池。

                  配置主机为服务器模式,并为OpenVPN提供一个VPN子网以为客户端分配地址。服务器将自己占用第一个地址(如:10.8.0.1),其余的将提供给客户端。每个客户端都可以访问10.8.0.1上的服务器。

                  如果您是以太网桥接,请将此行注释掉。(有关更多信息,请参见手册页。)

                    示例:server 10.8.0.0 255.255.255.0

                    10、配置客户端IP地址记录文件。

                    在此文件中维护客户端和虚拟IP地址关联的记录。如果OpenVPN出现故障或重新启动,重新连接的客户端可以从之前分配的池中分配相同的虚拟 IP 地址。

                      示例:ifconfig-pool-persist ipp.txt

                      11、配置以太网桥接的服务器模式。

                      您必须首先使用操作系统的桥接功能将TAP接口与以太网NIC接口桥接,然后必须手动设置网桥接口的IP地址和网络掩码,这里我们假设配置为10.8.0.4/255.255.255.0。最后,我们必须在这个子网中留出一个IP范围(start=10.8.0.50 end=10.8.0.100)来分配给连接的客户端。除非您是以太网桥接,否则请将此行注释掉。

                        示例:server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100

                        12、配置DHCP代理服务器模式。

                        使用以太网桥接的DHCP代理服务器模式,客户端与OpenVPN服务器端DHCP服务器通信以接收其IP地址分配和DNS服务器地址。您必须首先使用操作系统的桥接功能将TAP接口与以太网NIC接口桥接。

                        注意:此模式仅适用于客户端(如Windows),客户端TAP适配器绑定到DHCP客户端。

                          示例:server-bridge

                          13、为客户端下发私网路由。

                          将路由推送到客户端,使其能够到达服务器后面的其他私网。注意,这些私网还需要知道将OpenVPN客户端地址池(10.8.0.0/255.255.255.0)路由回OpenVPN服务器,即需要网络可达。

                            示例:push "route 192.168.10.0 255.255.255.0"

                            14、配置客户端获取固定IP地址。

                            要将特定的IP地址分配给特定的客户端,或者如果连接的客户端后面有一个私网,它也应该具有VPN访问权限,请使用子目录“ccd”获取特定于客户端的配置文件(有关更多信息,请参见手册页)。

                            示例:假设具有证书通用名称“Thelonious”的客户端在其连接机器后面也有一个小子网,例如192.168.40.128/255.255.255.248。首先,需要将以下行取消注释:

                              ;client-config-dir ccd
                              ;route 192.168.40.128 255.255.255.248

                              然后使用如下配置创建一个文件ccd/Thelonious:

                                iroute 192.168.40.128 255.255.255.248

                                这将允许Thelonious的私网访问VPN。此示例仅在您正在路由而不是桥接时才有效,即您正在使用“dev tun”和“server”指令。

                                示例:假设您想给Thelonious一个固定的VPN IP地址10.9.0.1。

                                首先需要取消以下行的注释:

                                  ;client-config-dir ccd
                                  ;route 10.9.0.0 255.255.255.252

                                  然后将这一行添加到ccd/Thelonious:

                                    ifconfig-push 10.9.0.1 10.9.0.2

                                    15、配置访问策略。

                                    假设您要为不同的客户端组启用不同的防火墙访问策略。有两种方法:

                                    (1)运行多个OpenVPN守护进程,每个组一个,并适当地为每个组/守护进程的TUN/TAP接口设置防火墙。

                                    (2)(高级)创建脚本以动态修改防火墙以响应来自不同客户端的访问。(有关learn-address脚本的更多信息,请参见手册页。)

                                      示例:learn-address ./script

                                      16、配置下发默认路由。

                                      如果启用,此指令将配置所有客户端的默认网关到VPN中,导致所有IP流量,例如Web浏览和DNS查找等流量经VPN转发。(OpenVPN服务器机器可能需要NAT或桥接TUN TAP连接到Internet的接口,以使其正常工作)。

                                        示例:push "redirect-gateway def1 bypass-dhcp"

                                        17、推送DNS服务器。

                                        某些特定于Windows的网络设置可以推送到客户端,例如DNS或WINS服务器地址。注意事项:http://openvpn.net/faq.html#dhcpcaveats

                                        以下地址是指opendns.com提供的公共DNS服务器。

                                          示例:push "dhcp-option DNS 208.67.222.222"

                                          18、配置主机隔离。

                                          取消此指令的注释,以允许不同的客户端能够互相访问。默认情况下,客户端只会看到服务器。要强制客户端只能看到服务器,您还需要适当地为服务器的TUN/TAP接口设置防火墙。

                                            示例:client-to-client

                                            19、配置证书复用。

                                            如果多个客户端可能使用相同的证书/密钥文件或通用名称连接,请取消注释此指令。(建议仅用于测试目的。)对于生产用途,每个客户端都应该有自己的证书/密钥对。

                                            如果您没有为每个客户生成单独的证书/密钥对,每个客户都有自己唯一的“通用名称”,请取消注释此行。

                                              示例:duplicate-cn

                                              20、配置隧道保活。

                                              keepalive命令可以生成类似ping的消息通过链路来回发送,以便每一方都知道另一方何时关闭。默认每10秒ping一次,如果在120秒的时间段内没有收到ping报文,则认为远程对等体已关闭。

                                                示例:keepalive 10 120

                                                21、配置HMAC防火墙。

                                                对于SSL/TLS提供的额外安全性,创建“HMAC防火墙”以帮助阻止DoS攻击和UDP端口泛滥。

                                                生成方式:

                                                  openvpn --genkey --secret ta.key

                                                  服务器和每个客户端都必须有这个密钥的副本。第二个参数在服务器上应该是“0”,在客户端上应该是“1”。

                                                    示例:tls-auth ta.key 0       #这个是密钥文件
                                                        tls-crypt myvpn.tlsauth  #这个是加密文件

                                                    22、选择加密密码。

                                                    此配置项也必须复制到客户端配置文件中。请注意,v2.4版本的客户端/服务器将在TLS模式下自动协商AES-256-GCM。(另请参见手册页中的ncp-cipher选项)

                                                      示例:cipher AES-256-CBC

                                                      23、启用压缩。

                                                      在VPN链路上启用压缩并将选项推送到客户端(仅限2.4以上版本,早期版本的配置见下文)。

                                                        示例:compress lz4-v2
                                                             push "compress lz4-v2"

                                                        对于2.4以下的版本,要启用旧客户端兼容的压缩,请使用comp-lzo。如果你在服务器端配置启用,还必须在客户端配置文件中启用它。

                                                          示例:comp-lzo

                                                          24、配置最大并发数。

                                                          配置我们希望允许的最大并发连接的客户端数。

                                                            示例:max-clients 100

                                                            25、降低OpenVPN守护进程的权限。

                                                            在初始化后降低OpenVPN守护进程的权限是个好主意。你可以在非Windows系统上取消注释。

                                                              示例:user nobody
                                                                    group nobody

                                                              26、固化配置。

                                                              persist选项将尝试避免在重新启动时访问某些由于权限降级而可能不再可访问的资源。

                                                                示例:persist-key
                                                                    persist-tun

                                                                27、记录状态日志。

                                                                输出一个显示当前连接的简短状态文件,每分钟被截断和重写。

                                                                  示例:status openvpn-status.log

                                                                  28、记录消息日志。

                                                                  默认情况下,日志消息将进入系统日志(如果作为Windows服务运行,它们将进入“\Program Files\OpenVPN\log”目录)。

                                                                  使用log或log-append覆盖此默认值。"log"将在OpenVPN启动时截断日志文件,而"log-append"将附加到它。使用其中一种即可(不能同时使用)。

                                                                    示例:  log         openvpn.log
                                                                    或使用:log-append  openvpn.log

                                                                    29、设置日志级别。

                                                                    设置适当的日志文件详细级别。

                                                                    0:静默状态,只记录致命错误。

                                                                    4:对于一般用法来说是合理的。

                                                                    5-6:可以帮助调试连接问题。

                                                                    9:详细日志。

                                                                      示例:verb 5

                                                                      30、重复消息过滤。

                                                                      最多20条相同消息类别的连续消息将输出到日志中。

                                                                        示例:mute 20

                                                                        31、自动重连。

                                                                        通知客户端,当服务器重新启动时,它可以自动重新连接。

                                                                          示例:explicit-exit-notify 1




                                                                          推荐本站淘宝优惠价购买喜欢的宝贝:

                                                                          image.png

                                                                          本文链接:https://hqyman.cn/post/3471.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

                                                                          分享到:
                                                                          打赏





                                                                          休息一下~~


                                                                          « 上一篇 下一篇 »

                                                                          发表评论:

                                                                          ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

                                                                          请先 登录 再评论,若不是会员请先 注册

                                                                          您的IP地址是: