
Доброго дня, товарищи! Во время пандемии у всех был выбор, что использовать для организации удаленного доступа. Я выбрал OpenVPN. Чтобы помочь другим, (в первую очередь себе, конечно), был написан скрипт для простой установки сервера Ovpn на centos 8 с нуля, без заморочек.
Интересующимся под кат, там скрипт и небольшие пояснения.
Весь скрипт комментирован, а также настроен на общение с пользователем. Это очень облегчает понимание.
Вкратце. Создается пользователь openvpn, нужен в основном для обмена клиентскими конфигами, чтобы не давать лишнего доступа по ssh\ftp тем, кому нужно их скачать.
Проверки на число добавлены для уменьшения ошибок “на дурака”. Дополнительных утилит самый минимум.
В этом скрипте selinux настраивается, а не отключается. Из настроек пользователя остаются несколько строк файла vars, а также порт, протокол, ip-адрес, и количество пользователей. Ко всем вопросам пользователю, есть пояснение. Остальная установка проходит по стандартной процедуре настройки OpenVPN сервера. Хотел сделать silent режим, но думаю это уже лишнее. Готовые файлы конфигурации складываются в папку /home/openvpn/ ready_conf. Они уже готовы к использованию.
Скрипт здесь, а также есть на github
На centos 7 заменой dnf на yum не проверял. Если есть желание можете попробовать, потом расскажете.
Скрипт установки
#!/bin/bash echo "Этот скрипт создаст OpenVPN сервер с нуля, от вас потребуется указать количество клиентов и минимальные настройки" echo "К каждому пункту будет пояснение" echo "Для начала создадим пользователя openvpn" #Создадим нового пользователя openvpn с правами администратора #Проверка на наличие пользователя в системе, для отсутствия ошибок при повторном запуске username=openvpn #переменная с именем пользователя client_name=client #имя клиента answer=y #ответ пользователя grep "^$username:" /etc/passwd >/dev/null if [[ $? -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" ;; esac fi echo 'Установим утилиты необходимые для дальнейшей работы' 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-rsa wget -P /etc/openvpn https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz tar -xvzf /etc/openvpn/EasyRSA-3.0.8.tgz -C /etc/openvpn rm -rf /etc/openvpn/EasyRSA-3.0.8.tgz #Создадим файл vars, с настройками пользователя touch /etc/openvpn/EasyRSA-3.0.8/vars #Значения переменных для vars echo "Укажите основные настройки создания сертификатов" echo "Для каждого пункта есть настройки по умолчанию, их можно оставить" echo "Страна(по умолчанию RH):"; read country if [[ -z $country ]]; then country="RH" fi echo "Размер ключа(по умолчанию 2048):"; read key_size if [[ $key_size =~ ^[0-9]+$ ]]; then #проверка на число echo "Установлен размер ключа:" $key_size else key_size=2048; echo "Значение ключа установлено по умолчанию" fi echo "Укажите область\край(по умолчанию Tegucigalpa"; read province if [[ -z $province ]]; then province="Tegucigalpa" fi echo "Город(по умолчанию Tegucigalpa)"; read city if [[ -z $city ]]; then city="Tegucigalpa" fi echo "email(по умолчанию temp@mass.hn)"; read mail if [[ -z $mail ]]; then mail="temp@mass.hn" fi echo "срок действия сертификата, дней(по умолчанию 3650/10 лет): "; read expire if [[ $expire =~ ^[0-9]+$ ]]; then echo "Срок действия сертификата" $expire "дней" else expire=3650 fi #Набиваем vars cat <<EOF > /etc/openvpn/EasyRSA-3.0.8/vars set_var EASYRSA_REQ_COUNTRY $country set_var EASYRSA_KEY_SIZE $key_size set_var EASYRSA_REQ_PROVINCE $province set_var EASYRSA_REQ_CITY $city set_var EASYRSA_REQ_ORG $domain_name set_var EASYRSA_REQ_EMAIL $mail set_var EASYRSA_REQ_OU $domain_name set_var EASYRSA_REQ_CN changeme set_var EASYRSA_CERT_EXPIRE $expire set_var EASYRSA_DH_KEY_SIZE $key_size EOF #Теперь инициализируем инфраструктуру публичных ключей 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 #Теперь копируем все что создали в папку keys cp /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.conf echo "Сейчас соберем информацию для файла конфигурации сервера." echo "Порт(по умолчанию 1194):"; read port_num if [[ $port_num =~ ^[0-9]+$ ]]; then #проверка на число echo "Установлен порт:" $port_num else port_num=1194; echo "Номер порта установлен по умолчанию" echo "Протокол(по умолчанию udp)для установки tcp введите 1"; read protocol fi if [[ $protocol -eq 1 ]]; then protocol="tcp" echo "Выбран протокол tcp" else protocol="udp" echo "Выбран протокол udp" fi #Теперь создадим директорию и файлы для логов mkdir /var/log/openvpn touch /var/log/openvpn/{openvpn-status,openvpn}.log; chown -R openvpn:openvpn /var/log/openvpn #Включаем движение трафика echo net.ipv4.ip_forward=1 >>/etc/sysctl.conf sysctl -p /etc/sysctl.conf #Настроим selinux dnf install policycoreutils-python-utils -y dnf install setroubleshoot -y semanage 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 #Настроим firewalld firewall-cmd --add-port="$port_num"/"$protocol" firewall-cmd --zone=trusted --add-source=172.31.1.0/24 firewall-cmd --permanent --add-port="$port_num"/"$protocol" firewall-cmd --permanent --zone=trusted --add-source=172.31.1.0/24 firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -s 172.31.1.0/24 -j MASQUERADE firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -s 172.31.1.0/24 -j MASQUERADE systemctl restart firewalld #Создадим server.conf mkdir /etc/openvpn/server touch /etc/openvpn/server/server.conf #chmod -R a+r /etc/openvpn cat <<EOF > /etc/openvpn/server/server.conf port $port_num proto $protocol dev tun ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/server_cert.crt key /etc/openvpn/keys/server_cert.key dh /etc/openvpn/keys/dh.pem crl-verify /etc/openvpn/keys/crl.pem topology subnet server 172.31.1.0 255.255.255.0 route 172.31.1.0 255.255.255.0 push "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 120 persist-key persist-tun status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 2 mute 20 daemon mode server user nobody group nobody EOF echo "Добавим сервер в автозагрузку и запустим" sudo systemctl enable openvpn-server@server sudo systemctl start openvpn-server@server sudo systemctl status openvpn-server@server #Начнем создавать клиентов #Директория для готовых конфигов mkdir /home/openvpn/ready_conf echo "IP к которому необходимо подключаться клиентам в формате 111.111.111.111"; read ip_adress #Создадим темповый файл конфигурации клиента с настройками touch /home/openvpn/temp_conf_client.txt cat <<EOF > /home/openvpn/temp_conf_client.txt client dev tun proto $protocol remote $ip_adress $port_num persist-key persist-tun verb 3 route-method exe route-delay 2 EOF #теперь функция создания клиентов 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 #перезапускаем сервер, для применения crl cd /home/openvpn/ready_conf/; ls -alh ./ echo "сейчас вы в директории с готовыми файлами конфигураций, их уже можно использовать" echo "скрипт завершен успешно" exec bash
ссылка на оригинал статьи https://habr.com/ru/post/550206/
Добавить комментарий