Nyob zoo!
Txhua lub lag luam sai lossis tom qab tam sim ntawd xav tau kev nkag mus rau thaj chaw deb.
Yuav luag txhua tus kws tshaj lij IT ntsib qhov xav tau los npaj cov chaw taws teeb nkag mus rau lawv cov tes hauj lwm hauv kev lag luam.
Rau kuv, zoo li ntau lwm tus, qhov no xav tau ntaus kuv zoo li " nag hmo." Tom qab soj ntsuam tag nrho cov zoo thiab cons, nrog rau sifting los ntawm tons ntawm cov ntaub ntawv thiab poking nyob ib ncig ntawm me ntsis nyob rau hauv txoj kev xav, kuv txiav txim siab mus nrog lub installation.
В целях безопасности, был выбрал OpenVPN в следующей реализации: на сервер с операционной системой Windows Server 2012 была установлена виртуальная машина, на ней также, Windows Server 2012, а на нем, в свою очередь, сервер OpenVPN, который выпускал и подписывал сертификаты.
Для удобства обзовем его «сервер сертификации». Далее, взял сертификат сервера, затолкнул его в Mikrotik, а на самом маршрутизаторе Mikrotik поднял OpenVPN с учетными записями, профилями. Для выпуска сертификата клиента также использовал сервер сертификации.
Qhov kev coj ua, tau kawg, yog qhov txaus ntshai, thiab txawm hais tias lub sijhawm ntawd kuv qhov kev paub dhau los hauv cov khoom no, hais, tsis txaus, hauv kev nyab xeeb, nws tsis yog qhov kev txiav txim siab phem tshaj plaws.
Данная связка поработала какое-то время и мне была выдана новая вводная: перенести сервер сертификации на Linux, при этом связь с Mikrotik сохранить — клиенты не должны пострадать.
Мои знания по Linux на тот момент заканчивались на Ubuntu 16.04LTS с графическим интерфейсом, которая использовалась как терминал для подключения по RDP к серверу Windows. То есть, sudo apt-get -f install -y, и ни сантиметра больше.
Изучив вопрос, какая OS из Linux семейства более устойчива и перспективна для моей организации, я остановился на CentOS 7 Minimal.
Pib nrog, kuv txiav txim siab delve me ntsis rau hauv txoj kev xav, kom nkag siab tias nws feem ntau ua haujlwm thiab ua haujlwm li cas. Saib video tshooj lus hauv channel (Tsis yog kev tshaj tawm, lawv tsuas yog thawj tus uas kuv tuaj hla). Ib tug hluas nkauj nrog lub suab qab ntxiag qhia kuv txog cov hauv paus ntawm kev ua haujlwm hauv OS xaiv.
Для начала я запустил на своем компе Hyper-V, установил туда CentOS 7 Minimal, во время установки создал пользователя Admin и полностью закрыл ssh для root. Попрощавшись с красивым разноцветным экраном, погрузился в черно-белый мир терминала.
Kuv xav tias tsis muaj qhov taw tes piav qhia txog cov txheej txheem ntawm kev txhim kho software; nws yog qhov zoo dua los tsom rau cov teeb meem uas tshwm sim thaum lub sijhawm ua haujlwm thiab daws qhov uas kuv yuav tsum tau sau ib tsab ntawv me me (nws yog nyob rau hauv kev txiav. Cov lus piav qhia ntawm txhua qhov ntawm cov khoom siv hluav taws xob tuaj yeem pom hauv Is Taws Nem, tab sis lub sijhawm thaum kuv ua qhov no, tsab ntawv no tseem tsis tau muaj, txhua yam tau ua tiav thawj zaug, los ntawm kev kov thiab random).
В скрипте я постарался автоматизировать установку минимально необходимых утилит для сервера, отключить Selinux, подключить репозиторий Epel, установить OpenVPN, и пр. Ниже сам скрипт, он простой, но его можно использовать. Разбирать его не буду, но если кому-то потребуется, пишите отвечу.
После использования скрипта появиться уже настроенный сервер OpenVPN, подмигивающий зеленым глазом.
#!/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
mkdir /var/log/openvpn
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
chmod 755 /etc/resolv.conf
echo nameserver 8.8.8.8 >>/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 755 /etc/sysctl.conf
echo net.ipv4.ip_forward=1 >>/etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
sudo systemctl enable openvpn@server
sudo systemctl start openvpn@server
sudo systemctl status openvpn@serverchaw OpenVPN прошла не совсем успешно.
Не зная про особенности политики прав на Linux системах, я потратил массу времени на изучение логов и присвоения всем файлам требуемых прав.
Когда кнопка OpenVPN стала зеленой, я очень обрадовался, но как оказалось, это было только начало. По простоте душевной, я рассчитывал подменить корневые сертификаты и файл crl.pem, надеясь, что все заработает. В итоге, мне понадобилось перенести с сервера на Windows cov ntaub ntawv hauv qab no:
Serv.crt — Daim ntawv pov thawj Server
Serv.key — Server key
Ca.crt - Daim ntawv pov thawj hauv paus
Ca.key — Lub hauv paus tseem ceeb
Crl.pem — Daim ntawv pov thawj tshem tawm
Dh.pem - Diffie-Hellman tus yuam sij
Index.txt - Cov ntaub ntawv nrog cov ntaub ntawv hais txog daim ntawv pov thawj tam sim no
Serial - nws kuj yog lub luag haujlwm rau qhov cuam tshuam ntawm daim ntawv pov thawj
Koj kuj xav tau certs_by_serial nplaub tshev, cov ntaub ntawv vars, thiab tag nrho cov neeg siv khoom lag luam thiab daim ntawv pov thawj.
Ntawm Mikrotik, cov ntawv pov thawj tseem nyob hauv qhov chaw, yog li txhua yam ua haujlwm.
Cov teeb meem tshwm sim thaum kuv sim thim daim ntawv pov thawj, nws tsis ua haujlwm tag nrho - cov ntaub ntawv index.txt yuav tsum tau hloov mus rau unix hom, tab sis kuv tsis ua tam sim ntawd. Kuv siv dos2unix utility.
Tam sim no cov ntawv pov thawj raug tshem tawm, tab sis txuas ntxiv ua haujlwm yam tsis muaj teeb meem, vim tias Mikrotik tsis paub tias lawv raug tshem tawm thiab yuav tsum tau ceeb toom txog nws li cas.
Tom qab nyeem cov lus qhia, thiab tseem tham nrog Alexander ERI (ua tsaug ntau!), Kuv tau teeb tsa ib qho yooj yim Apache http server rau ntawm daim ntawv pov thawj server thiab luam tawm cov ntaub ntawv tshem tawm daim ntawv pov thawj ntawm nws. Tag nrho thaiv kev nkag mus rau nws, tsuas yog rau cov ntaub ntawv luam tawm los ntawm ib tus IP.
Hauv Mikrotik davhlau ya nyob twg, nyob rau hauv /System/Certificate/CRL tab, qhia txoj hauv kev rau cov luam tawm crl.pem. Ntawm no nws yuav tsum tau qhia meej tias Mikrotik lees txais tsuas yog http thiab qhov chaw nyob meej rau CRL tab, i.e. Nws yuav tsum tau saib ib yam dab tsi zoo li no:
Txhua yam ua haujlwm, yam tsawg kawg rau versions 6.4.2.x ntawm RouterOS, tab sis cov neeg siv khoom yuav tsum tau tsim manually, thiab qhov no tsis muaj hmoo rau kuv thiab ua rau muaj kev ntxhov siab ntau. Thaum ib lub lim tiam tom qab kuv xav tau los tsim kev teeb tsa rau kwv yees li 50 tus neeg siv khoom, kuv tau txiav txim siab ua kom cov txheej txheem no nrawm dua thiab rau qhov no kuv tau siv ib daim ntawm lwm tus neeg tsab ntawv pom hauv Is Taws Nem.
Tsab ntawv ua haujlwm zoo li no: tom qab tso tawm, peb qhia "tus neeg siv lub npe", teb cov lus nug "kom teeb tus password lossis tsis", tom qab ntawd peb muab cov ntaub ntawv npaj ua tiav "client.ovpn", nrog rau daim ntawv pov thawj thiab kev teeb tsa kev sib xyaw. rau hauv nws. Txhawm rau siv nws, koj yuav tsum nyob hauv /etc/openvpn. Kuv yuav kos npe nrog cov lus pom cov kab uas txoj kev yuav tsum tau hloov nrog koj tus kheej. Nws kuj tseem tsim nyog los tsim cov ntaub ntawv nrog cov neeg siv khoom teeb tsa kom cov ntawv tuaj yeem hloov pauv lawv thaum lub sijhawm tsim cov txheej txheem tsim.
#!/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 "(e.g. 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. Был создан новый сервер OpenVPN, для сотрудников IT-отдела, который теперь работает полностью на CentOS. Но это уже совсем другая история.
Kuv qhia kuv txoj kev ris txiaj rau Ivan thiab Pavel rau lawv txoj kev pab kho cov kab lus.
Tau qhov twg los: www.hab.com
