مجموعة من OpenVPN على Windows Server و Mikrotik مع ترحيل هذه الأشياء إلى Linux

حسن!

كل مؤسسة ، عاجلاً أم آجلاً ، فجأة ، تحتاج إلى الوصول عن بُعد.
عمليا ، يواجه كل متخصص في تكنولوجيا المعلومات الحاجة إلى تنظيم الوصول عن بعد إلى شبكاتهم في المؤسسة.
أنا مثل كثيرين ، هذه الحاجة مغطاة بختم "البارحة". بعد أن قمت بتحليل جميع إيجابيات وسلبيات ، فضلا عن مجرفة طن من المعلومات والحفر قليلا من الناحية النظرية ، قررت المضي قدما في التثبيت.

لأسباب تتعلق بالأمان ، اخترت 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 (بشكل عام ، وليس الإعلان ، لقد تلقوا لي أولاً). تعرفت الفتاة ذات الصوت اللطيف على أساسيات العمل في نظام التشغيل المختار.

للبدء ، قمت بتشغيل Hyper-V على جهاز الكمبيوتر الخاص بي ، وقمت بتثبيت CentOS 7 Minimal هناك ، أثناء التثبيت ، قمت بإنشاء مستخدم Admin وأغلقت ssh بالكامل للجذر. نقول وداعا لشاشة جميلة متعددة الألوان ، سقطت في العالم بالأبيض والأسود من المحطة.

أعتقد أنه من غير المنطقي وصف عملية تثبيت البرامج ، فمن الأفضل التركيز على المشكلات التي نشأت في العملية والتي اضطررت إلى كتابة نص صغير لها (تحت القط. يمكن العثور على وصف لكل من الأدوات المساعدة على الإنترنت ، ولكن في هذه اللحظة عندما أكون جميعًا فعلت ذلك ، هذا السيناريو لم يكن هناك بعد ، كل شيء تم القيام به لأول مرة ، لمسة وبشكل عشوائي).

في البرنامج النصي ، حاولت أتمتة تثبيت الحد الأدنى من الأدوات المساعدة الضرورية للخادم ، وتعطيل 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 key
Index.txt - ملف به معلومات حول الشهادات الحالية
المسلسل - إنه مسؤول أيضًا عن أهمية الشهادات

كما تطلب أيضًا مجلد certs_by_serial وملف vars وجميع مفاتيح العميل وشهاداته.
في Mikrotik ، ظلت الشهادات في مكانها ، لذلك نجحت.

ظهرت مشاكل عندما حاولت إبطال الشهادة ، لم تنجح هذه الكلمة من الكل على الإطلاق - يجب أن يتم تحويل ملف index.txt إلى تنسيق unix ، لكنني لم أقم بذلك على الفور. استخدام الأداة المساعدة dos2unix.

الآن تم إبطال الشهادات ، لكنها استمرت في العمل دون أي مشاكل ، لأن Mikrotik لم يكن يعلم أنها ألغيت وأنه كان بحاجة لإبلاغه بطريقة أو بأخرى.

بعد قراءة التعليمات ، بالإضافة إلى التشاور مع Alexander ERI (شكرًا جزيلاً لك!) ، التقطت خادم Apache http بسيطًا على خادم الشهادات ونشرت ملفًا للشهادات الملغاة عليه. تم إغلاق الوصول إليه تمامًا ، باستثناء الملف المنشور من عنوان IP واحد.

في محطة Mikrotik ، في علامة التبويب / System / Certificates / CRL ، أشار إلى المسار إلى crl.pem المنشور. هنا يجب توضيح أن Mikrotik يقبل فقط http وعنوان مطلق لعلامة التبويب CRL ، أي يجب أن يبدو مثل هذا: 127.0.0.1/crl/1.crl
كل شيء كان ناجحًا ، على الأقل بالنسبة للإصدارات 6.4.2.x من RouterOS ، لكن كان علي إنشاء تكوينات للعميل بيدي ، وكان هذا مؤسفًا بالنسبة لي وتسبب في كثير من الإزعاج. عندما كنت بحاجة إلى تكوين تكوينات لنحو 50 عميلًا في غضون أسبوع ، قررت تسريع هذه العملية ، ولهذا استخدمت جزءًا من البرنامج النصي الخاص بشخص آخر موجود على الإنترنت.

يعمل البرنامج النصي كالتالي: بعد الإطلاق ، حدد "اسم العميل" ، والإجابة على السؤال "تعيين كلمة مرور أم لا" ، بعد ذلك نأخذ ملف التكوين الجاهز "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. تم إنشاء خادم OpenVPN جديد لقسم تكنولوجيا المعلومات ، والذي يعمل الآن بشكل كامل على CentOS. لكن هذه قصة مختلفة تماما.

أعرب عن امتناني لإيفان وبافيل لمساعدتهما في تحرير المقال.

Source: https://habr.com/ru/post/ar478526/


All Articles