Comments 11
Почти всё тоже самое, только лучше, одним скриптом и для центос:
Переменные, которые доступны для изменения при создании впн сервера:
${STAND}
${VPN_PORT:-1194}
${VPN_PROTO:-udp}
${VPN_SUBNET:-10.254.250.0}
${VPN_DOMAIN:-vpn.alexgluck.ru}
Как поднять опенвпн сервер:
Установить OS: centos 7 minimal
Запустить на нём скрипт
Создать конфигурации для клиентов /etc/openvpn/create_new_client.sh <ИМЯ_ПОЛЬЗОВАТЕЛЯ>
Отправить конфигурации из папки /etc/openvpn/client/ пользователям
Пользоваться
Когда истечёт сертификат сервера, перевыпустить его:
export EASYRSA_VARS_FILE="/etc/openvpn/vars"
/usr/share/easy-rsa/3/easyrsa --batch renew "$KEY_NAME"
systemctl restart openvpn-server@${VPN_PROTO:-udp}
Когда истечёт СА сертификат, пересоздать впн. (Есть получше механизм, но описывать пока некогда)
#!/usr/bin/env bash
yum install epel-release -y ; yum install htop nano bash-completion-extras openvpn easy-rsa -y
export EASYRSA_VARS_FILE="/etc/openvpn/vars"
cat << EOF > $EASYRSA_VARS_FILE
export EASYRSA_PKI="/etc/openvpn/pki"
export KEY_COUNTRY="RU"
export KEY_PROVINCE="Moscow"
export KEY_CITY="Moscow"
export KEY_ORG="Home"
export KEY_EMAIL="blackhole@alexgluck.ru"
export KEY_CN="${STAND}${VPN_DOMAIN:-vpn.alexgluck.ru}"
export KEY_OU="bedroom"
export KEY_NAME="${VPN_DOMAIN:-vpn.alexgluck.ru}"
export KEY_ALTNAMES="openvpn.${VPN_DOMAIN:-vpn.alexgluck.ru}"
EOF
# shellcheck disable=SC1090
source "$EASYRSA_VARS_FILE"
/usr/share/easy-rsa/3/easyrsa --batch init-pki
/usr/share/easy-rsa/3/easyrsa --batch build-ca nopass
/usr/share/easy-rsa/3/easyrsa gen-dh
/usr/share/easy-rsa/3/easyrsa --batch gen-req --req-cn="$KEY_NAME" "$KEY_NAME" nopass
/usr/share/easy-rsa/3/easyrsa --batch sign-req server "$KEY_NAME"
openvpn --genkey --secret "$EASYRSA_PKI"/ta.key
cat << EOF > /etc/openvpn/server/"${VPN_PROTO:-udp}".conf
local ${VPN_BIND:-0.0.0.0}
port ${VPN_PORT:-1194}
proto ${VPN_PROTO:-udp}
dev tun
ca $EASYRSA_PKI/ca.crt
cert $EASYRSA_PKI/issued/${KEY_NAME}.crt
key $EASYRSA_PKI/private/${KEY_NAME}.key
dh $EASYRSA_PKI/dh.pem
tls-auth $EASYRSA_PKI/ta.key 0
topology subnet
server ${VPN_SUBNET:-10.254.250.0} 255.255.255.0
ifconfig-pool-persist ipp-${VPN_PROTO:-udp}.txt
keepalive 10 120
persist-key
persist-tun
# log-append /var/log/openvpn/openvpn-${VPN_PROTO:-udp}.log
verb 3
mode server
tls-server
comp-lzo yes
cipher BF-CBC
EOF
echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
sysctl -p
mkdir -p /var/log/openvpn
firewall-cmd --permanent --add-port=${VPN_PORT:-1194}/${VPN_PROTO:-udp}
firewall-cmd --direct --permanent --add-rule ipv4 nat POSTROUTING 0 -s ${VPN_SUBNET:-10.254.250.0}/24 -j MASQUERADE
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -s ${VPN_SUBNET:-10.254.250.0}/24 -j ACCEPT
firewall-cmd --reload
cat << EOF > "$EASYRSA_PKI"/ovpn.template
client
resolv-retry 15
nobind
remote ${KEY_NAME} ${VPN_PORT:-1194}
proto ${VPN_PROTO:-udp}
dev tun
comp-lzo yes
tls-client
key-direction 1
keepalive 10 120
persist-key
persist-tun
auth-nocache
remote-cert-tls server
verb 3
cipher BF-CBC
EOF
cat << EOF > /etc/openvpn/create_new_client.sh
#!/bin/bash
export EASYRSA_VARS_FILE="/etc/openvpn/vars"
source "${EASYRSA_VARS_FILE}"
# каталог в котором будет создан файл *.ovpn
OUTPUT_DIR=/etc/openvpn/client/
BASE_CONFIG=${EASYRSA_PKI}/ovpn.template
/usr/share/easy-rsa/3/easyrsa --batch gen-req --req-cn="\${1}" \${1} nopass
/usr/share/easy-rsa/3/easyrsa --batch sign-req client \${1}
cat \${BASE_CONFIG} \
<(echo ) \
<(echo -e '<ca>') \
\${EASYRSA_PKI}/ca.crt \
<(echo -e '</ca>\n<cert>') \
\${EASYRSA_PKI}/issued/\${1}.crt \
<(echo -e '</cert>\n<key>') \
\${EASYRSA_PKI}/private/\${1}.key \
<(echo -e '</key>\n<tls-auth>') \
\${EASYRSA_PKI}/ta.key \
<(echo -e '</tls-auth>') \
> \${OUTPUT_DIR}/\${1}.ovpn
EOF
chmod 740 /etc/openvpn/create_new_client.sh
systemctl enable --now openvpn-server@${VPN_PROTO:-udp}
Переменные, которые доступны для изменения при создании впн сервера:
${STAND}
${VPN_PORT:-1194}
${VPN_PROTO:-udp}
${VPN_SUBNET:-10.254.250.0}
${VPN_DOMAIN:-vpn.alexgluck.ru}
Как поднять опенвпн сервер:
Установить OS: centos 7 minimal
Запустить на нём скрипт
Создать конфигурации для клиентов /etc/openvpn/create_new_client.sh <ИМЯ_ПОЛЬЗОВАТЕЛЯ>
Отправить конфигурации из папки /etc/openvpn/client/ пользователям
Пользоваться
Когда истечёт сертификат сервера, перевыпустить его:
export EASYRSA_VARS_FILE="/etc/openvpn/vars"
/usr/share/easy-rsa/3/easyrsa --batch renew "$KEY_NAME"
systemctl restart openvpn-server@${VPN_PROTO:-udp}
Когда истечёт СА сертификат, пересоздать впн. (Есть получше механизм, но описывать пока некогда)
0
А где в этом скрипте второй ЦС и защита закрытого ключа?
0
Механизм «получше» это тупо создать новые корневой сертификат с другой датой, подписанный тем же приватным ключём, что и старый? Интересно, что это этом многие не знают — всё упорно обновляют корневые сертификаты у сотен клиентов.
0
Автоматизация — это конечно хорошо, сам за нее топлю, но этот скрипт написан под один сервер на котором и openvpn и ЦС. Даже не меняются права доступа, в плане безопасности это совсем печально. Но соглашусь, что этот скрипт отлично подойдет для частного использования.
0
Он был сделан для бастион хоста, как инструкция, что делать, для понимания как в общих чертах настраивать openvpn. На работе мы просто добавили авторизацию через АД и второй фактор, помимо сертификатов. Я сейчас продвигаю иной механизм выдачи впн конфигов, сотрудники сами в веб интерфейсе должны получать свой впн конфиг. Сотрудник авторизуется на веб интерфейсе с помощью АД учётки и двухфакторки, если сотруднику разрешено пользоваться впн, ему показывает БОЛЬШУЮ кнопку скачать и инструкцию как установить и настроить впн.
0
- Автор убери копирование скриптов easyrsa в /etc/openvpn.
- Убери копирование dh,ta,ca,server сертификатов и ключа (при обновлении этих файлов придётся делать лишние движения, которые не нужны).
- Храни pki каталог отдельно от openvpn.
- Опиши нормальную настройку фаервола, таблица форвард может иметь свои правила.
0
Отвечу по пунктам:
1. Не понимаю, о копировании каких скриптов говорится.
2. Тут уж дело вкуса каждого, где хранить готовые сертификаты и ключи. Их конечно можно положить и в пользовательскую директорию с указанием пути к ним в конфиге или оставить в самой директории pki, но при перевыпуске сертификатов их все равно придется переносить с одного сервера на другой, так какая разница, куда переносить?
3. Тут и так два pki на двух разных серверах, которые в обычное время выключены. А pki, который на сервере OpenVPN выпускает запросы и ключи ta.key и dh.pem, не такая большая прореха в безопасности, но соглашусь, если ее закрыть, то будет лучше.
4. В статье я указал, что упор делаю на двухуровневую иерархию ЦС, а не на OpenVPN и привел ufw и правило пересылки пакетов для примера, как это работает.
1. Не понимаю, о копировании каких скриптов говорится.
2. Тут уж дело вкуса каждого, где хранить готовые сертификаты и ключи. Их конечно можно положить и в пользовательскую директорию с указанием пути к ним в конфиге или оставить в самой директории pki, но при перевыпуске сертификатов их все равно придется переносить с одного сервера на другой, так какая разница, куда переносить?
3. Тут и так два pki на двух разных серверах, которые в обычное время выключены. А pki, который на сервере OpenVPN выпускает запросы и ключи ta.key и dh.pem, не такая большая прореха в безопасности, но соглашусь, если ее закрыть, то будет лучше.
4. В статье я указал, что упор делаю на двухуровневую иерархию ЦС, а не на OpenVPN и привел ufw и правило пересылки пакетов для примера, как это работает.
0
Sign up to leave a comment.
OpenVPN с двухуровневой иерархией ЦС