Русский
Русский
English
Статистика
Реклама

Скрипт для создания OpenVPN сервера, или как один админ удаленку облегчал

image
Доброго дня товарищи! Во время пандемии у всех был выбор, что использовать для организации удаленного доступа. Я выбрал OpenVPN. Чтобы помочь другим, (в первую очередь себе, конечно), был написан скрипт для простой установки сервера Ovpn на centos 8 с нуля, без заморочек.
Интересующимся под кат, там скрипт и небольшие пояснения.

Весь скрипт комментирован, а также настроен на общение с пользователем. Это очень облегчает понимание.
Вкратце. Создается пользователь openvpn, нужен в основном для обмена клиентскими конфигами, чтобы не давать лишнего доступа по ssh\ftp тем, кому нужно их скачать.
Проверки на число добавлены для уменьшения ошибок на дурака. Тем, кто захочет сломать точно сломает, но так хоть что-то. Дополнительных утилит самый минимум.
В этом скрипте selinux настраивается, а не отключается. Из настроек пользователя остаются несколько строк файла vars, а также порт, протокол, ip-адрес, и количество пользователей. Ко всем вопросам пользователю, есть пояснение. Остальная установка проходит по стандартной процедуре настройки OpenVPN сервера. Хотел сделать silent режим, но думаю это уже лишнее. Готовые файлы конфигурации складываются в папку /home/openvpn/ ready_conf. Они уже готовы к использованию.
Скрипт здесь, а также есть на github
На centos 7 заменой dnf на yum не проверял. Если есть желание можете попробовать, потом расскажете.
Скрипт установки
#!/bin/bashecho "Этот скрипт создаст OpenVPN сервер с нуля, от вас потребуется указать количество клиентов и минимальные настройки"echo "К каждому пункту будет пояснение"echo "Для начала создадим пользователя openvpn"      #Создадим нового пользователя openvpn с правами администратора      #Проверка на наличие пользователя в системе, для отсутствия ошибок при повторном запускеusername=openvpn #переменная с именем пользователяclient_name=client #имя клиентаanswer=y #ответ пользователяgrep "^$username:" /etc/passwd >/dev/nullif [[ $? -ne 0 ]]; then   adduser openvpn; usermod -aG wheel openvpn; passwd openvpn   echo "Пользователь создан"else   echo "Пользователь уже создан в системе"fi      #Создание клиентов по умолчаниюecho "Укажите количество клиентов по умолчанию. Потом можно добавить еще по необходимости"read quantity_client      #Проверка-значение число, иначе сначалаif [[ $quantity_client =~ ^[0-9]+$ ]]; then   #количество клиентов   echo "Будут создано "$quantity_client" клиентских конфигураций с именами "$client_name"[X].ovpn"else   echo "введённый символ не является числом, попробуйте снова"   echo "Попробовать снова? (y/n/e)"   read answer   case $answer in           "y")              $0              ;;           "n")              echo "bye"              exit              ;;           "e")              exit              ;;            *)              echo "error"              ;;   esacfiecho 'Установим утилиты необходимые для дальнейшей работы'dnf install wget -y; dnf install tar -y; dnf install zip -y      #Начинаем установку. Подключим репозиторий и скачаем сам дистрибутивdnf install epel-release -y; sudo dnf install openvpn -y      #Проверка наличия директории openvpn если есть то удаляем и создаем заново, иначе создаемif [[ -e /etc/openvpn ]]; then   rm -rf /etc/openvpn   mkdir /etc/openvpn; mkdir /etc/openvpn/keys; chown -R openvpn:openvpn /etc/openvpn   echo "Удалена старая директория openvpn, создана новая"else   mkdir /etc/openvpn; mkdir /etc/openvpn/keys; chown -R openvpn:openvpn /etc/openvpn   echo "создана новая дирктория openvpn"fi      #Скачиваем easy-rsawget -P /etc/openvpn https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgztar -xvzf /etc/openvpn/EasyRSA-3.0.8.tgz -C /etc/openvpnrm -rf /etc/openvpn/EasyRSA-3.0.8.tgz      #Создадим файл vars, с настройками пользователяtouch /etc/openvpn/EasyRSA-3.0.8/vars      #Значения переменных для varsecho "Укажите основные настройки создания сертификатов"echo "Для каждого пункта есть настройки по умолчанию, их можно оставить"echo "Страна(по умолчанию RH):"; read countryif [[ -z $country ]]; then   country="RH"fiecho "Размер ключа(по умолчанию 2048):"; read key_sizeif [[ $key_size =~ ^[0-9]+$ ]]; then #проверка на число   echo "Установлен размер ключа:" $key_sizeelse   key_size=2048; echo "Значение ключа установлено по умолчанию"fiecho "Укажите область\край(по умолчанию Tegucigalpa"; read provinceif [[ -z $province ]]; then   province="Tegucigalpa"fiecho "Город(по умолчанию Tegucigalpa)"; read cityif [[ -z $city ]]; then   city="Tegucigalpa"fiecho "email(по умолчанию temp@mass.hn)"; read mailif [[ -z $mail ]]; then   mail="temp@mass.hn"fiecho "срок действия сертификата, дней(по умолчанию 3650/10 лет): "; read expireif [[ $expire =~ ^[0-9]+$ ]]; then   echo "Срок действия сертификата" $expire "дней"else   expire=3650fi      #Набиваем varscat <<EOF > /etc/openvpn/EasyRSA-3.0.8/varsset_var EASYRSA_REQ_COUNTRY $countryset_var EASYRSA_KEY_SIZE $key_sizeset_var EASYRSA_REQ_PROVINCE $provinceset_var EASYRSA_REQ_CITY $cityset_var EASYRSA_REQ_ORG $domain_nameset_var EASYRSA_REQ_EMAIL $mailset_var EASYRSA_REQ_OU $domain_nameset_var EASYRSA_REQ_CN changemeset_var EASYRSA_CERT_EXPIRE $expireset_var EASYRSA_DH_KEY_SIZE $key_sizeEOF      #Теперь инициализируем инфраструктуру публичных ключейcd /etc/openvpn/; /etc/openvpn/EasyRSA-3.0.8/easyrsa init-pki      #Создаем свой ключ/etc/openvpn/EasyRSA-3.0.8/easyrsa build-ca nopass      #Создаем сертификат сервера/etc/openvpn/EasyRSA-3.0.8/easyrsa build-server-full server_cert nopass      #Создаем Диффи Хелмана/etc/openvpn/EasyRSA-3.0.8/easyrsa gen-dh      #crl для информации об активных/отозванных сертификатах/etc/openvpn/EasyRSA-3.0.8/easyrsa gen-crl      #Теперь копируем все что создали в папку keyscp /etc/openvpn/pki/ca.crt /etc/openvpn/pki/crl.pem /etc/openvpn/pki/dh.pem /etc/openvpn/keys/cp /etc/openvpn/pki/issued/server_cert.crt /etc/openvpn/keys/cp /etc/openvpn/pki/private/server_cert.key /etc/openvpn/keys/      #Получим настройки для файла server.confecho "Сейчас соберем информацию для файла конфигурации сервера."echo "Порт(по умолчанию 1194):"; read port_numif [[ $port_num =~ ^[0-9]+$ ]]; then #проверка на число   echo "Установлен порт:" $port_numelse   port_num=1194; echo "Номер порта установлен по умолчанию"echo "Протокол(по умолчанию udp)для установки tcp введите 1"; read protocolfiif [[ $protocol -eq 1 ]]; then   protocol="tcp"   echo "Выбран протокол tcp"else   protocol="udp"   echo "Выбран протокол udp"fi      #Теперь создадим директорию и файлы для логовmkdir /var/log/openvpntouch /var/log/openvpn/{openvpn-status,openvpn}.log; chown -R openvpn:openvpn /var/log/openvpn      #Включаем движение трафикаecho net.ipv4.ip_forward=1 >>/etc/sysctl.confsysctl -p /etc/sysctl.conf      #Настроим selinuxdnf install policycoreutils-python-utils -ydnf install setroubleshoot -ysemanage port -a -t openvpn_port_t -p $protocol $port_num/sbin/restorecon -v /var/log/openvpn/openvpn.log/sbin/restorecon -v /var/log/openvpn/openvpn-status.log      #Настроим firewalldfirewall-cmd --add-port="$port_num"/"$protocol"firewall-cmd --zone=trusted --add-source=172.31.1.0/24firewall-cmd --permanent --add-port="$port_num"/"$protocol"firewall-cmd --permanent --zone=trusted --add-source=172.31.1.0/24firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -s 172.31.1.0/24 -j MASQUERADEfirewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -s 172.31.1.0/24 -j MASQUERADEsystemctl restart firewalld     #Создадим server.confmkdir /etc/openvpn/servertouch /etc/openvpn/server/server.conf#chmod -R a+r /etc/openvpncat <<EOF > /etc/openvpn/server/server.confport $port_numproto $protocoldev tunca /etc/openvpn/keys/ca.crtcert /etc/openvpn/keys/server_cert.crtkey /etc/openvpn/keys/server_cert.keydh /etc/openvpn/keys/dh.pemcrl-verify /etc/openvpn/keys/crl.pemtopology subnetserver 172.31.1.0 255.255.255.0route 172.31.1.0 255.255.255.0push "route 172.31.1.0 255.255.255.0"push "dhcp-option DNS 8.8.8.8"push "dhcp-option DNS 8.8.4.4"keepalive 10 120persist-keypersist-tunstatus /var/log/openvpn/openvpn-status.loglog-append /var/log/openvpn/openvpn.logverb 2mute 20daemonmode serveruser nobodygroup nobodyEOFecho "Добавим сервер в автозагрузку и запустим"sudo systemctl enable openvpn-server@serversudo systemctl start openvpn-server@serversudo systemctl status openvpn-server@server      #Начнем создавать клиентов      #Директория для готовых конфиговmkdir /home/openvpn/ready_confecho "IP к которому необходимо подключаться клиентам в формате 111.111.111.111"; read ip_adress      #Создадим темповый файл конфигурации клиента с настройкамиtouch /home/openvpn/temp_conf_client.txtcat <<EOF > /home/openvpn/temp_conf_client.txtclientdev tunproto $protocolremote $ip_adress $port_numpersist-keypersist-tunverb 3route-method exeroute-delay 2EOF      #теперь функция создания клиентовcreate_client () {   cd /etc/openvpn/   /etc/openvpn/EasyRSA-3.0.8/easyrsa build-client-full "$client_name$quantity_client" nopass   cp /home/openvpn/temp_conf_client.txt /home/openvpn/ready_conf/"$client_name$quantity_client"'.ovpn'{   echo "<ca>"; cat "/etc/openvpn/pki/ca.crt"; echo "</ca>"   echo "<cert>"; awk '/BEGIN/,/END/' "/etc/openvpn/pki/issued/$client_name$quantity_client.crt"; echo "</cert>"   echo "<key>"; cat "/etc/openvpn/pki/private/$client_name$quantity_client.key"; echo "</key>"   echo "<dh>"; cat "/etc/openvpn/pki/dh.pem"; echo "</dh>"} >> "/home/openvpn/ready_conf/"$client_name$quantity_client".ovpn"}       #Запускать функцию создания клиентов, по счетчикуwhile [[ $quantity_client -ne 0 ]]; do   create_client   let "quantity_client=$quantity_client-1"done/etc/openvpn/EasyRSA-3.0.8/easyrsa gen-crl #генерируем crl для информации об активных сертификатахcp /etc/openvpn/pki/crl.pem /etc/openvpn/keys/ #Копируем в директорию с активными сертификатамиsudo systemctl restart openvpn-server@server #перезапускаем сервер, для применения crlcd /home/openvpn/ready_conf/; ls -alh ./echo "сейчас вы в директории с готовыми файлами конфигураций, их уже можно использовать"echo "скрипт завершен успешно"exec bash

Источник: habr.com
К списку статей
Опубликовано: 01.04.2021 16:06:37
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Настройка linux

Системное администрирование

Серверное администрирование

Удалённая работа

Openvpn

Centos 8

Bash-скрипт

Bash-программирование

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru