Windows Server和Mikrotik上的一堆OpenVPN,并将这些东西迁移到Linux

好啊

每个企业迟早都会需要远程访问。
实际上,每个IT专家都面临着在企业中组织对其网络进行远程访问的需求。
我和许多人一样,需要在“昨天”盖章。 在分析了所有的利弊之后,挖掘了大量的信息并从理论上进行了一点研究,我决定继续进行安装。

出于安全原因,我在以下实现中选择了OpenVPN:在运行Windows Server 2012的服务器上安装了虚拟机,在其上还安装了Windows Server 2012,然后在其上又是发布和签名证书的OpenVPN服务器。

为了方便起见,我们将其称为“认证服务器”。 此外,他获得了服务器证书,将其推入Mikrotik,然后在路由器上,Mikrotik提出了带有帐户,配置文件的OpenVPN。 我还使用了认证服务器来颁发客户证书。

当然,实现起来很糟糕,尽管当时我在安全方面的经验还不够,但这并不是一个坏决定。

这个捆绑包工作了一段时间,我得到了一个新的介绍:将认证服务器转移到Linux,同时保持与Mikrotik的连接-客户端应该不会受到影响。

我当时对Linux的了解在Ubuntu 16.04LTS上以图形界面结束,该界面用作通过RDP连接到Windows服务器的终端。 也就是说,sudo apt-get -f install -y,而不是一厘米多。

在研究了Linux家族的哪种操作系统对我的组织来说更稳定,更有前途的问题后,我选择了CentOS 7 Minimal。

首先,我决定深入研究该理论,以了解其总体原理和工作原理。 我在www.youtube.com/channel/UCKdRgZWgy42YxoFcTJ30LTA频道上观看了视频教程(通常不是广告,他们只是让我首先获得)。 这个声音柔和的女孩向我介绍了在所选OS中工作的基础知识。

首先,我在计算机上启动了Hyper-V,在该计算机上安装了CentOS 7 Minimal,在安装过程中,我创建了Admin用户并完全关闭了root的ssh。 与美丽的彩色屏幕告别,它已插入终端的黑白世界。

我认为描述软件安装过程没有任何意义,最好集中精力解决过程中出现的问题,并解决我必须编写一个小脚本的问题(这简直就是天方夜谭。每个实用程序的描述都可以在Internet上找到,但是那时我已经全部做到了,这个脚本还不存在,一切都是第一次完成,而且是随意的。

在脚本中,我尝试自动为服务器安装最小必需的实用程序,禁用Selinux,连接Epel存储库,安装OpenVPN等。下面是脚本本身,它很简单,但是可以使用。 我不会分解它,但是如果有人需要它,请写一个答复。

使用该脚本后,将出现一个已经配置好的OpenVPN服务器,眨着眼睛。

UPD:对脚本进行了一些调整,从评论中得出了结论。 他没有开始删除自己的错误,而只是将其注释掉,以免丢失注释线索。 添加了向后推的行以提高可见性。

#!/bin/bash cd /etc/sysconfig/ sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' selinux sudo setenforce 0 cd /home/Admin sudo yum update -y sudo yum install epel-release -y sudo yum install mc -y sudo yum install nano -y sudo cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax sudo yum install chrony -y sudo systemctl start chronyd sudo systemctl enable chronyd sudo yum install net-tools -y sudo yum install iftop -y sudo yum install htop -y sudo yum install lsof -y sudo yum install dos2unix -y sudo yum install wget -y sudo yum install tcpdump -y sudo yum install openvpn -y wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.3/EasyRSA-3.0.3.tgz sudo tar -xvzf EasyRSA-3.0.3.tgz #sudo chown -R Admin:Admin /var/log #sudo chmod 755 /var/log sudo mkdir /var/log/openvpn sudo mkdir /etc/openvpn/ccd sudo chown -R Admin:Admin /etc/openvpn/ccd sudo chown -R Admin:Admin /var/log/openvpn chmod 755 /etc/openvpn/ccd chmod 755 /var/log/openvpn echo >/var/log/openvpn/openvpn-status.log echo >/var/log/openvpn/openvpn.log #sudo chown -R Admin:Admin /etc/resolv.conf sudo chmod 777 /etc/resolv.conf echo nameserver 8.8.8.8 >>/etc/resolv.conf chmod 755 /etc/resolv.conf cd /etc/openvpn/ sudo /home/Admin/EasyRSA-3.0.3/easyrsa init-pki sudo chown -R Admin:Admin /etc/openvpn chmod 755 /etc/openvpn echo set_var EASYRSA_DN "org" >/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_REQ_COUNTRY "RU" >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_KEY_SIZE 4096 >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_REQ_PROVINCE "LIP" >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_REQ_CITY "Lipetsk" >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_REQ_ORG "Cool-Admin" >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_REQ_EMAIL "xxx.ru" >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_REQ_OU "Our_ORG" >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_REQ_CN "changeme" >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_CERT_EXPIRE 3650 >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_DH_KEY_SIZE=2048 >>/home/Admin/EasyRSA-3.0.3/test sudo /home/Admin/EasyRSA-3.0.3/easyrsa build-ca nopass sudo /home/Admin/EasyRSA-3.0.3/easyrsa build-server-full Serv nopass sudo /home/Admin/EasyRSA-3.0.3/easyrsa build-client-full Client1 nopass sudo /home/Admin/EasyRSA-3.0.3/easyrsa --vars=vars gen-dh sudo /home/Admin/EasyRSA-3.0.3/easyrsa --vars=vars gen-crl mkdir keys sudo chown -R Admin:Admin /etc/openvpn/keys chmod 755 /etc/openvpn/keys sudo cp /etc/openvpn/pki/ca.crt /etc/openvpn/keys sudo cp /etc/openvpn/pki/dh.pem /etc/openvpn/keys sudo cp /etc/openvpn/pki/crl.pem /etc/openvpn/keys sudo cp /etc/openvpn/pki/issued/Serv.crt /etc/openvpn/keys sudo cp /etc/openvpn/pki/private/Serv.key /etc/openvpn/keys echo port 443 >/etc/openvpn/server.conf echo proto udp >>/etc/openvpn/server.conf echo dev tun >>/etc/openvpn/server.conf echo ca /etc/openvpn/keys/ca.crt >>/etc/openvpn/server.conf echo cert /etc/openvpn/keys/Serv.crt >>/etc/openvpn/server.conf echo key /etc/openvpn/keys/Serv.key >>/etc/openvpn/server.conf echo dh /etc/openvpn/keys/dh.pem >>/etc/openvpn/server.conf echo crl-verify /etc/openvpn/keys/crl.pem >>/etc/openvpn/server.conf echo client-config-dir /etc/openvpn/ccd >>/etc/openvpn/server.conf echo topology subnet >>/etc/openvpn/server.conf echo server 172.21.0.0 255.255.255.0 >>/etc/openvpn/server.conf echo route 172.21.0.0 255.255.255.0 >>/etc/openvpn/server.conf echo push \"dhcp-option DNS 8.8.8.8\" >>/etc/openvpn/server.conf echo push \"dhcp-option DNS 8.8.4.4\" >>/etc/openvpn/server.conf echo keepalive 10 120 >>/etc/openvpn/server.conf echo persist-key >>/etc/openvpn/server.conf echo persist-tun >>/etc/openvpn/server.conf echo status /var/log/openvpn/openvpn-status.log >>/etc/openvpn/server.conf echo log-append /var/log/openvpn/openvpn.log >>/etc/openvpn/server.conf echo verb 2 >>/etc/openvpn/server.conf echo mute 20 >>/etc/openvpn/server.conf echo daemon >>/etc/openvpn/server.conf echo mode server >>/etc/openvpn/server.conf echo user nobody >>/etc/openvpn/server.conf echo group nobody >>/etc/openvpn/server.conf #sudo chown -R Admin:Admin /etc/sysctl.conf chmod 777 /etc/sysctl.conf echo net.ipv4.ip_forward=1 >>/etc/sysctl.conf chmod 755 /etc/sysctl.conf sudo sysctl -p /etc/sysctl.conf sudo systemctl enable openvpn@server sudo systemctl start openvpn@server sudo systemctl status openvpn@server 

安装OpenVPN并非完全成功。

由于不了解Linux系统上权限策略的功能,我花了很多时间研究日志并为所有文件分配所需的权限。

当OpenVPN按钮变成绿色时,我感到非常高兴,但是事实证明,这仅仅是开始。 为了简单起见,我希望替换根证书和crl.pem文件,希望一切正常。 结果,我需要将以下文件从服务器传输到Windows:

Serv.crt-服务器证书
Serv.key-服务器密钥
Ca.crt-根证书
Ca.key-根密钥
Crl.pem-证书吊销文件
Dh.pem-Diffie-Hellman密钥
Index.txt-包含有关当前证书信息的文件
序列号-它也负责证书的相关性

它还需要certs_by_serial文件夹,vars文件以及所有客户端密钥和证书。
在Mikrotik,证书仍然存在,因此可以正常工作。

当我尝试吊销证书时出现了问题,但从字面上看根本无法正常工作-index.txt文件需要转换为unix格式,但我没有立即执行。 使用了dos2unix实用程序。

现在证书被吊销了,但是继续工作没有任何问题,因为Mikrotik不知道吊销了证书,因此他需要以某种方式告知它。

阅读说明并咨询Alexander ERI(非常感谢!)之后,我在认证服务器上获得了一个简单的Apache http服务器,并在其上发布了一个吊销的证书文件。 完全关闭对它的访问,只有一个ip发布了文件。

在Mikrotik终端的/系统/证书/ CRL选项卡中,指示发布的crl.pem的路径。 这里应该澄清一下,Mikrotik仅接受http和CRL选项卡的绝对地址,即 它看起来应该像这样: 127.0.0.1/crl/1.crl
一切正常,至少对于RouterOS 6.4.2.x版本有效,但是我不得不亲手创建客户端配置,这对我来说很不幸,并且带来了很多不便。 一个星期内,我需要为约50个客户端创建配置时,我决定加快此过程,为此,我使用了Internet上其他人的脚本。

该脚本的工作方式如下:启动后,指定“客户端名称”,回答问题“是否设置密码”,然后我们将现成的配置文件“ client.ovpn”与证书和设置集成到其中。 要使用它,您必须具有/ etc / openvpn。 我将在必须用您自己的路径替换路径的可疑行上签名。 还需要使用客户端设置创建文件,以便脚本在创建配置过程中替换它们。

 #!/bin/bash function newClient () { echo "" echo "Tell me a name for the client." echo "Use one word only, no special characters." until [[ "$CLIENT" =~ ^[a-zA-Z0-9_]+$ ]]; do read -rp "Client name: " -e CLIENT done echo "" echo "Do you want to protect the configuration file with a password?" echo "(eg encrypt the private key with a password)" echo " 1) Add a passwordless client" echo " 2) Use a password for the client" until [[ "$PASS" =~ ^[1-2]$ ]]; do read -rp "Select an option [1-2]: " -e -i 1 PASS done #cd /etc/openvpn/easy-rsa/ || return case $PASS in 1) sudo /home/admin/EasyRSA-3.0.3/easyrsa build-client-full "$CLIENT" nopass ;; 2) echo "You will be asked for the client password below" ./easyrsa build-client-full "$CLIENT" ;; esac # Generates the custom client.ovpn cp /etc/openvpn/client-template.txt "$home/home/admin/IT/Temp/$CLIENT.ovpn" #       . #,      { echo "<ca>" cat "/etc/openvpn/pki/ca.crt" #    echo "</ca>" echo "<cert>" awk '/BEGIN/,/END/' "/etc/openvpn/pki/issued/$CLIENT.crt" #   #  echo "</cert>" echo "<key>" cat "/etc/openvpn/pki/private/$CLIENT.key" #     echo "</key>" } >> "$home/home/admin/IT/Temp/$CLIENT.ovpn" #,     # echo "" echo "Client $CLIENT added, the configuration file is available at $home/admin/IT/OVPN/Temp/$CLIENT.ovpn." echo "Download the .ovpn file and import it in your OpenVPN client." exit 0; } newClient 

一段时间后,新的禁止远程访问的介绍性禁令迫使该服务器和与Mikrotik一起使用的捆绑软件都被杀死。 为IT部门创建了一个新的OpenVPN服务器,该服务器现在可以完全在CentOS上运行。 但这是一个完全不同的故事。

我感谢Ivan和Pavel在撰写本文时所提供的帮助。

Source: https://habr.com/ru/post/zh-CN478526/


All Articles