Ответы пользователя по тегу Linux
  • Как настроить доступ к клиенту VPN извне?

    @younghacker
    Я бы поставил на статическом IP в интернете OpenVPN сервер. На Raspberry Pi OpenVPN клиент. Вернее настроил бы как клиента. Настроил бы iptables на нужные пробросы portforwarding или же включил бы маршрутизацию и анонсировал бы адрес Raspberry Pi на VPN сервер, а оттуда на клиентов которые будут к нему подключаться чтобы получить доступ к Raspberry Pi. Или http прямо на публичный интерфейс как у Вас нарисовано на схеме.
    Ответ написан
    Комментировать
  • Почему systemd запускает OpenVPN раньше готовности интерфейсов определенных в /etc/network/interfaces?

    @younghacker
    Проверьте файл (это федора на убунте может быть в другом месте) /lib/systemd/system/openvpn@.service

    [Unit]
    Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
    After=network.target

    [Service]
    PrivateTmp=true
    Type=forking
    PIDFile=/var/run/openvpn/%i.pid
    ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf

    [Install]
    WantedBy=multi-user.target
    Ответ написан
    7 комментариев
  • Распределенный cron с ожиданием выполнения?

    @younghacker
    Если Вам бэкапить то поставьте специальный инструмент для бэкапа например bacula/bareos. Сходу кажется многоголовой гидрой, но после освоения очень даже приятный и вполне автономный инструмент.

    А если Вам нужно сделать систему верёвочек чтобы через месяц не помнить почему что-то не работает или ещё лучше подарить это "ацкое" наследие следующему админу то нужно написать самому. Вариантов масса.
    Ответ написан
    2 комментария
  • Возможно ли создать TripleVPN имея учетные записи разных компаний предоставляющих OpenVPN?

    @younghacker
    Если у вас нет рутового доступа к серверам, то это будет вложенный VPN.

    Вам нужен роут через внешний интерфейс от вас до первого VPN1.
    Затем внутр полученного TUN1 нужно положить роут до второго VPN2 поднимем и получим TUN2. В него нужно отправить роут до третьего VPN3. Поднять VPN3 и в полученный TUN3 отправить Default route.

    Не забыть про DNS leak
    Законопатить на клиенте Firewall так чтобы пакет ни один пакет не прошмыгнул через ваш WAN интерфейс. Через WAN вам позволяется только один путь IP VPN1:PORT. Всё остальное DROP.

    Но логичнее взять три виртуалки и поднять свой нормальный трипл VPN с DNS.
    Ответ написан
    Комментировать
  • Как проверить трафик на обход VPN'a?

    @younghacker
    Отключите IPv6. Для вашей анонимности он опасен.

    Вот эта опция железобетонная!
    iptables -A OUTPUT -o eth0 -j DROP
    Вы уверены что у вас VPN работает? А если работает то через какой интерфейс? eth1, wlan? Куда смотрит default gate в ip route ?

    Перед дропом нужно было поставить акцепт для пакетов в адрес сервера. Ну и дропать нужно на всех интерфейсах кроме TUN... Зачем же вам TAP интерфейс ???
    Ответ написан
    Комментировать
  • Как быстро поднять vpn?

    @younghacker
    Можно!
    Хотите я вам скину сертификаты и конфиги? :)
    дальше будет пару команд:
    1) поставить openvpn
    2) скопировать конфиги и сертификаты клиента и сервера
    3) запустить сервис на сервере и на клиенте.
    И всё.

    Но сертификаты генерируются на раз-два. Главное разобраться что и как.
    Ответ написан
    Комментировать
  • Как построить цепочку vpn?

    @younghacker
    Кроме того чтобы настроить это два или три раза, нужно пробросить Default Gate таким макаром чтобы пакет прошёл как нужно. И я так подозреваю что топикстартеру нужно добиться и того чтобы пакет случайно не вывалился в паблик, когда инженер связи рвёт VPN коннект. :)

    T_y_l_e_r как с вами связаться? Что-то тостеровцы два года назад обещали личные сообщения, а воз и ныне там.
    Ответ написан
    Комментировать
  • Есть ли ограничение на время выполнения программы по крону?

    @younghacker
    Если сервер принадежит Вам то ограничения нет. Важно чтобы ваша программа не попала в зацикливание когда первая ещё не закончилась, а вторая уже началась.

    Для shared хостинга хостеры вынуждены ограничивать время работы крон-задания потому что они жрут память и зачастую процессор и сетевые сокеты. Но я сомневаюсь, что там кто-то позволит запустить JAVA тем более в кроне! :)
    Ответ написан
    Комментировать
  • Как подключиться к VNC?

    @younghacker
    Конкретика:
    на сервере:
    --------------------------------------------------------
    # netstat -nlp -A inet
    и проверяем что слушает сервер vnc (адрес и порт). (0.0.0.0 5900)

    # iptables -nvL
    и проверяем то что открыты порты 5900
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 5900 -j ACCEPT

    SELinux
    $ getenforce
    Permissive
    если стоит Enforced то на время проверки сделать
    # setenforce 0

    на клиенте
    --------------------------------------------------------
    $ vncviewer 172.16.82.242:0

    :0 означает индекс порта который слушает сервер относительно стандартного 5900
    :1 - 5901

    Если после этого не будет работать тогда будем ковырять дальше.
    Ответ написан
  • Как сменить ключи OpenVPN?

    @younghacker
    В инсталяционном пакете идут скрипты.
    build-ca
    build-dh
    build-inter
    build-key
    build-key-pass
    build-key-pkcs12
    build-key-server
    build-req
    build-req-pass
    clean-all
    inherit-inter
    list-crl
    Makefile
    openssl-0.9.6.cnf
    openssl.cnf
    pkitool
    README
    revoke-full
    sign-req
    vars
    whichopensslcnf

    Для всех действий права рута не нужны.
    Скопируйте скрипты в какой-то рабочий каталог.
    отредактируйте файл vars
    установите дату истечения сертификатов имя организации емейл
    export KEY_SIZE=2048
    export CA_EXPIRE=3650
    export KEY_EXPIRE=3650
    export KEY_COUNTRY="DE"
    export KEY_PROVINCE="none"
    export KEY_CITY="Berlin"
    export KEY_ORG="vpn01 v.p.n.."
    export KEY_EMAIL="vpn01@gate1.common.vpn"

    выйдите в чистый shell
    запустите
    . vars
    после этого не выходя из шела запускайте по очереди.
    ./build-ca ${NAME}
    ./build-dh
    ./build-key-server ${NAME}-server
    "${OPENVPN}" --genkey --secret "./keys/${NAME}-ta.key"

    И потом для каждого клиента
    ./build-key ${NAME}-client${i}
    Где OPENVPN=`which openvpn`
    NAME="vpn01.gw01.common.vpn" - общая часть имени ключей
    i - номер клиента

    Далее вы получите файлы.
    ca.crt - клиентам и серверу (публичный)
    ca.key - только на машине которая подписывает (не храните на сервере!!!)
    ta.key - для клиентов и для сервера (секретный)
    dh2048.pem - (для сервера)
    vpn01.gw01.common.vpn.server.crt - для сервера (публичный)
    vpn01.gw01.common.vpn.server.key - для сервера (секретный)
    vpn01.gw01.common.vpn.client1.crt - для клиента (публичный)
    vpn01.gw01.common.vpn.client1.key - для клиента (секретный)

    Весь каталог со скриптами включая созданную папку (keys) сохраните в секретное место и удалите с сервера.
    Если понадобится догенерировать или отозвать сертификаты.
    Ответ написан
    Комментировать
  • Почему в коде скрипта на sh не везде срабатывает exit 1?

    @younghacker
    Прежде всего я бы перевенул цикл while чтобы он не запускался в subshell
    И выведите результат работы команды в файл чтобы потом можно было проанализировать ожидаемо ли содержимое.

    SVNRESULT=`$SVNLOOK changed -t $TXN $REPOS`
    echo -e"`date '+%F %T'`\n${SVNRESULT}" >> ~/debug-svn.log
    while read status file; do
    ....
    done <<<"${SVNRESULT}"


    И возьмите все переменные в двойные кавычки в именах файлов могут быть пробелы.
    Ответ написан
    Комментировать
  • Как работать с вводом данных от пользователя и if else в bash?

    @younghacker
    Олег, это вопрос из разряда исправьте ошибки в моём скрипте. :)

    Виталий,
    Для начала вставьте пробел после открывающей скобки
    if [$
    Перед закрывающими скобками то Вы зачем-то его поставили. Где же красота симметрии? :)
    Затем найдите в документации отличия между одинарными скобками [ ] и двойными [[ ]]
    Вам нужны двойные. Так как внутри регулярное выражение. А также после = поставьте тильду и разберитесь с регуляными выражениями.
    if [[ $doport =~ y|Y ]]; then
    Этот код сработает на любой "y" в любой строке. например ответьте nnnooooyes. :)
    Думаю так будет лучше:
    if [[ $doport =~ ^[Yy]$ ]]; then
    можете добавить ключик -n 1 в оператор read
    обработайте ситуацию с отрицательным или неверным ответом (например кириллица).
    и потом разберитесь с командой cut
    зачем там touch ? зачем >> ? вам файл нужно дополнять? Что будет после двух запусков скрипта? Думаю это может выглядеть так:
    `cat > myjson.json <<EOF
            {
            "host" : "$host",
            "port" : "$port"
            }
            EOF`

    Для редактирования файла конфигурации из скрипта изучите sed.
    Ну и наконец переделайте алгоритм :)
    По ходу разберитесь с оформлением и отступами читая чужие хорошие скрипты.
    Ответ написан
    Комментировать
  • Как в Bash обратиться к AD?

    @younghacker
    Живой пример для mydomain.com (домен выдуман):
    ldapsearch -xLLL -D "uid=nss,ou=People,dc=mydomain,dc=com" -w `</etc/1sEcretNfOlder/ldap.secret` -H  ldap://ldap-master.mydomain.com/ -Z -b "dc=mydomain,dc=com" "*" "+" | sed -e ':a;N;$!ba;s/\n //g'


    Тут лежит пароль к LDAP /etc/1sEcretNfOlder/ldap.secret
    Атрибуты на файл с паролем нужно поставить так чтобы кроме пользователя от которого запущен скрипт никто не прочитал его. Да и паролю дать право только читать LDAP.

    sed удаляет переводы строки перед строками начинающимися с пробела чтобы потом из файла можно было в скрипте парсить нужные данные. В моих версиях ldapsearch эта проблема не решается ключами.
    Ответ написан
    Комментировать
  • Почему не меняется IP после подключения к VPN?

    @younghacker
    Речь идёт о сети интернет?
    Тогда что это????
    server 93.189.42.0 255.255.255.0

    Разве адрес который сервер использует для построения своей локальной сети не должен быть из local диапазонов? 10.x.x.x, 172.16.x.x 192.168.x.x
    выберите любой каких нет у вашего компьютера-клиента в "локалках".
    Например
    server 10.22.44.0 255.255.255.0
    Когда произоёдет подключение у клиента должен появиться один роут
    0.0.0.0/0 --> tunX с лёгким весом (легче чем у оригинального через ваш локальный сетевой интерфейс)
    и второй роут на сервер 93.189.42.##

    А в iptables добавьте вот это правило:
    iptables -t nat -A POSTROUTING -o tun+ -j MASQUERADE

    Это правило гласит: любой пакет в через любой tun интерфейс "замаскарадить"

    И ещё. Проверьте что DNS на клиенте изменился на 8.8.8.8. (хотя я бы рекомендовал поднять DNS на сервере и не сливать гуглу свои похождения по интернетам)
    К тому же я обычно даже блокирую любой DNS трафик через интерфейс отличный от tun чтобы избежать DNS leak когда VPN отваливается.

    После этого можете войти браузером на сервис по определению IP.
    Ответ написан
    Комментировать
  • Как узнать какой скрипт PHP создал файл?

    @younghacker
    Стандартных возможностей я не знаю.

    Чтобы быстро "заткнуть" вопрос, поставьте на все файлы и каталоги которые не должны изменяться атрибут immutable при помощи chattr. Это ликвидирует возможность создать или изменить файл на диске до тех пор пока не будут повышены привилегии до рута. В каталогах куда пишутся временные файлы установите .htaccess с запретом инерпретации любых файлов как исполняемые.
    php_flag engine 0
    AddType "text/html" .php .cgi .pl .fcgi .fpl .phtml .shtml .php2 .php3 .php4 .php5 .asp .jsp
    и сам файл запретите изменять при помощи immutable:
    chattr +i .htaccess

    Можете сделать bash-python-php скрипт запускаемый по крону который будет бегать по указанному каталогу и подкаталогам и сверять список файлов с эталонным и обнаружив "левые" файлы или каталоги будет переносить их в специальный каталог-карантин недоступный снаружи и сразу создавать дамп системных журналов с момента своего последнего запуска. Это позволит получить франменты логов непосредственно предшествующих внесению изменений на диск.
    Скрипт запускать ежеминутно, но отслеживать файлы именно по списку по критериям имя размер времена атрибуты. Не искать ничего внутри файлов чтобы не нагружать сервер. Обнаруживаете чужеродный файл — переносите в карантин. В конце часа шлёте себе оповещение. После этого у Вас будет материал для анализа проблемного места.

    Скрипты рассылающие спам отлавливаются и другим способом. Для этого в iptables добавляете правила которые блокируют SMTP трафик и пишут лог. Например:

    -A OUTPUT -o br0 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A OUTPUT -o br0 -m state --state NEW -p tcp -m tcp --dport 25 -d 127.0.0.1 -j ACCEPT
    -A OUTPUT -o br0 -m state --state NEW -p tcp -m tcp --dport 25 -m owner --gid-owner mail -j ACCEPT
    -A OUTPUT -o br0 -m state --state NEW -p tcp -m tcp --dport 25 -m owner --uid-owner root -j ACCEPT
    -A OUTPUT -o br0 -m state --state NEW -p tcp -m tcp --dport 25 -m owner --uid-owner smfs -j ACCEPT
    -A OUTPUT -o br0 -m state --state NEW -p tcp -m tcp --dport 25 -j LOG --log-uid --log-prefix "Reject outgoing SMTP "
    -A OUTPUT -o br0 -m state --state NEW -p tcp -m tcp --dport 25 -j REJECT --reject-with icmp-admin-prohibited


    После этого настраиваете свой rsyslog или что там у Вас, можно и zabbix, таким образом чтобы он слал оповещение когда в логе появляются записи "Reject outgoing SMTP ". В этих правилах вы видите разрешение работать почтовику поэтому стандартным мейлером скрипт-спамер сможет рассылать спам. Сделайте для него временно́е окно, ваша задача состоит в том чтобы отловить спамер-скрипт и проанализировать логи. Особенно http что там вызывали и с какими параметрами. Если можете поступить круче то вообще запретите вещание со всех портов кроме разрешённых 22, 80, и 443 (только очень аккуратно: — не лишите себя удалённого управления сервером).

    Есть также возможность поставить утилиту которая будет мониторить изменения в каталоге и его вложениях. Например, incron : Inotify cron system. Она будет следить за указанными каталогами и как-только произойдут выбранные вами события выполнит скрипт. А в скрипте анализировать проблема это или легальная операция.

    Из перспективных возможностей, пропатчить php так чтобы он при операциях и диском (создание и изменение файлов), он писал в специальный журнал. Это вполне реально, но разрабочики php не считают это важным и нужным. Хотя допускаю, что я плохо информирован и они уже работают или сделали эту фичу.
    Ответ написан
    Комментировать
  • Гипервизор на локальной машине?

    @younghacker
    athacker
    Я думаю, речь идёт о возможности быстро развернуть некий образ на любой машине. А ставить дистрибутив линукса слишком долгая процедура.

    По существу вопроса:
    Дистрибутивов таких не знаю, но я бы попробовал сделать его при помощи kickstart-а. И разместил бы его на флешке. Таким способом я создаю виртуальные машины. Разбивает ся диск, прописываются настройки сети, ставятся нужные репозитории и т д. Получается довольно быстро и удобно.
    Можно также подтянуть из сети или загрузить с флешки и образы виртуалки и настроить VNC на весь экран.
    Ответ написан
    Комментировать
  • Как правильно разметить Centos 7 Server для виртуальных машин и контейнеров?

    @younghacker
    Правильно/неправильно это относительная оценка.

    Я делаю так.
    до 500 мег под /boot
    далее создаю LVM на котором ставлю
    /
    /home
    /log
    swap

    Но важным является то, что я не выделяю всё свободное место, а только необходимое плюс небольшой запас. С таким подходом пока имеется свободное место на LVM имеется возможность сделать lvresize и resize2fs прямо на ходу не перегружая систему.
    Диски для виртуалон же выделяю прямо в LVM.

    Для виртуализации использую KVM.
    Ответ написан
    Комментировать
  • Centos 7, почему не запускается openvpn клиент?

    @younghacker
    Всё необходимое было сказано выше я лишь добавлю немного практики.
    В сессии рута:
    отключить SELinux
    setenforce 0
    проверить что отключился
    getenforce

    Настройте логи /etc/openvpn/ваш-vpn.conf
    log-append  /var/log/openvpn.log
    verb 5


    затем запустить openvpn и посмотреть что получилось в логе

    cat /var/log/openvpn.log

    также ошибки указывающие на проблему могут быть и в /var/log/messages

    Если проблема в SELinux то разрешите открывать порты (для конфига который породит сервер), читать конфиги и писать лог и status файлы.

    Показать права SELinux для файлов:
    semanage fcontext -l | grep openvpn
    и для портов (требуется для сервера)
    semanage port -l | grep openvpn_port_t

    Добавление исключений для файлов:
    semanage fcontext -t openvpn_etc_t -a '/etc/openvpn(/.*)?'
    semanage fcontext -t openvpn_etc_rw_t -a '/etc/openvpn/ipp.txt'
    semanage fcontext -t openvpn_var_log_t -a '/var/log/openvpn.*'
    restorecon -v /etc/openvpn/
    restorecon -v /var/log/


    Добавление исключений для портов:
    semanage port -a -t openvpn_port_t -p tcp ПОРТ
    semanage port -a -t openvpn_port_t -p udp ПОРТ


    semanage находится в пакете libsemanage-python
    Ответ написан
    Комментировать
  • Как решить проблему с DNS при подключении OpenVPN в Fedora 21?

    @younghacker
    Для поиска проблемы я бы поступал следующим образом:

    Посмотрите со стороны клиента куда уходят запросы к DNS
    В одном окне терминала (на стороне OpenVPN клиента) запустите:
    # tcpdump -i any port 53

    В другом окне терминала (на стороне OpenVPN клиента) выполните два запроса:
    первый запрос с автовыбором NS сервера
    $ nslookup домен

    второй запрос адресный прямо на сервер
    $ nslookup домен XXX.XXX.XXX.XXX
    где XXX.XXX.XXX.XXX адрес NS сервера который через VPN.
    Посмотрите какие сервера перебирает первый запрос
    и через какой интерфейс и куда улетает второй.
    И если проходимость есть (маршрутизация работает верно, firewall пропускает, dns сервер отвечает) то для второго запроса должны получить правильный ответ: IP адрес.

    Если же ответа нет то посмотрите не закрыт ли Firewall как на клиенте так и на сервере
    # iptables -nvL

    Включите более подробные логи для OpenVPN на клиенте и на сервере и проанализируйте их
    log /var/log/openvpn.vpn-client1.log
    verb 5
    mute 20


    DNS прописывать руками нет нужды. Вам верно сказали, что со стороны сервера его нужно затолкнуть на клиента
    push "dhcp-option DOMAIN domain.local"


    Но вы сначала определитесь будете ресолвить все имена с того сервера который вам даёт VPN или только те что внутри домена.

    Посмотрите запускается или нет dnsmasq из NetworkManager
    # cat /etc/NetworkManager/NetworkManager.conf 
    [main]
    plugins=ifcfg-rh
    #dns=dnsmasq
    dns=none


    Не забывайте про SELinux. Временно отключите:
    # setenforce 0

    По своему опыту скажу, что в Fedora20, на которой я сижу в данный момент, я отказался от использования OpenVPN, iptables и dnsmasq через Network Manager по причине неадекватного поведения. Мой "VPN зоопарк" оказалось проще настроить по старинке.
    Ответ написан
    Комментировать
  • Как поднять VPN сервер на linux mint?

    @younghacker
    Прежде всего уясните себе что машина с easy-rsa это машина которая только подписывает ключи. И по логике безопасности должна быть отдельной машиной. Не стоит хранить генератор ключей и в особенности приватный CA на самом VPN сервере.

    1) ставим openvpn на VPN сервере
    # apt-get install openvpn
    2) ставим easy-rsa на станции подписей
    # apt-get install easy-rsa
    3) создаём каталог куда скопируем easy-rsa и там будем изменять настройки, создавать и подписывать сертификаты
    # mkdir -p /root/sign-host/easy-rsa
    # cd /root/sign-host/easy-rsa
    # cp /usr/share/easy-rsa/* ./

    4) проверяем что скопировалось
    # ls -1
    build-ca
    build-dh
    build-inter
    build-key
    build-key-pass
    build-key-pkcs12
    build-key-server
    build-req
    build-req-pass
    clean-all
    inherit-inter
    list-crl
    openssl-0.9.6.cnf
    openssl-0.9.8.cnf
    openssl-1.0.0.cnf
    pkitool
    revoke-full
    sign-req
    vars
    whichopensslcnf

    5) меняем переменные в конце файла vars. Размер ключики. Если параноя входит в ваши должностные обязанности то нужно побольше ставить. :)
    # mcedit vars
    .......
    export KEY_SIZE=1024
    .......
    export KEY_COUNTRY="US"
    export KEY_PROVINCE="CA"
    export KEY_CITY="SanFrancisco"
    export KEY_ORG="Fort-Funston"
    export KEY_EMAIL="me@myhost.mydomain"
    export KEY_EMAIL=mail@host.domain
    export KEY_CN=changeme
    export KEY_NAME=changeme
    export KEY_OU=changeme
    export PKCS11_MODULE_PATH=changeme
    export PKCS11_PIN=1234

    changeme - замените на свои значения. Остальные также можно изменить если хотите. На работоспособность это никак не влияет.

    Затем генерируем ключи. Команда vars запускается из шела. перед ней через пробел точка.
    После её запуска нужно запускать остальные.
    # . vars
    NOTE: If you run ./clean-all, I will be doing a rm -rf on /root/easy-rsa/keys
    # ./clean-all 
    # ./build-ca myvpn-ca
    Generating a 1024 bit RSA private key
    .....++++++
    .................++++++
    writing new private key to 'ca.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [US]:
    State or Province Name (full name) [CA]:
    Locality Name (eg, city) [SanFrancisco]:
    Organization Name (eg, company) [Fort-Funston]:
    Organizational Unit Name (eg, section) [my-organization]:
    Common Name (eg, your name or your server's hostname) [myvpn-server]:
    Name [myvpn-key]:
    Email Address [mail@host.domain]:

    Получили ключик центра сертификации. Публичный и приватный.
    ca.crt
    ca.key


    Следом создадим ключик Diffie Hellman
    # ./build-dh
    Он может довольно долго работать и создавать ключ. Для 1024-х бит получим файл ./keys/dh1024.pem
    Теперь генерируем и подписываем ключ сервера.
    ./build-key-server myvpn-server-key
    Generating a 1024 bit RSA private key
    ............++++++
    .......++++++
    writing new private key to 'myvpn-server-key.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [US]:
    State or Province Name (full name) [CA]:
    Locality Name (eg, city) [SanFrancisco]:
    Organization Name (eg, company) [Fort-Funston]:
    Organizational Unit Name (eg, section) [my-organization]:
    Common Name (eg, your name or your server's hostname) [myvpn-server-key]:
    Name [myvpn-key]:
    Email Address [mail@host.domain]:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    Using configuration from /root/easy-rsa/openssl-1.0.0.cnf
    Check that the request matches the signature
    Signature ok
    The Subject's Distinguished Name is as follows
    countryName           :PRINTABLE:'US'
    stateOrProvinceName   :PRINTABLE:'CA'
    localityName          :PRINTABLE:'SanFrancisco'
    organizationName      :PRINTABLE:'Fort-Funston'
    organizationalUnitName:PRINTABLE:'my-organization'
    commonName            :PRINTABLE:'myvpn-server-key'
    name                  :PRINTABLE:'myvpn-key'
    emailAddress          :IA5STRING:'mail@host.domain'
    Certificate is to be certified until May 17 13:58:59 2024 GMT (3650 days)
    Sign the certificate? [y/n]:y
    
    
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated

    Это добавило ещё 3 файла в каталог ./keys/
    myvpn-server-key.crt
    myvpn-server-key.csr
    myvpn-server-key.key

    Ну и теперь генерируем ключи для клиентов. Если клиенты будут иметь разные ключи то сколько клиентов столько раз и запускать. Не забывайте каждый раз менять (номер) ключа. Ну или можете назвать по именам реальных клиентов vasya-key, roma-key и т д.
    ./build-key myvpn-client1-key
    Generating a 1024 bit RSA private key
    ...................++++++
    ................++++++
    writing new private key to 'myvpn-client1-key.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [US]:
    State or Province Name (full name) [CA]:
    Locality Name (eg, city) [SanFrancisco]:
    Organization Name (eg, company) [Fort-Funston]:
    Organizational Unit Name (eg, section) [my-organization]:
    Common Name (eg, your name or your server's hostname) [myvpn-client1-key]:
    Name [myvpn-key]:
    Email Address [mail@host.domain]:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    Using configuration from /root/easy-rsa/openssl-1.0.0.cnf
    Check that the request matches the signature
    Signature ok
    The Subject's Distinguished Name is as follows
    countryName           :PRINTABLE:'US'
    stateOrProvinceName   :PRINTABLE:'CA'
    localityName          :PRINTABLE:'SanFrancisco'
    organizationName      :PRINTABLE:'Fort-Funston'
    organizationalUnitName:PRINTABLE:'my-organization'
    commonName            :PRINTABLE:'myvpn-client1-key'
    name                  :PRINTABLE:'myvpn-key'
    emailAddress          :IA5STRING:'mail@host.domain'
    Certificate is to be certified until May 17 14:03:29 2024 GMT (3650 days)
    Sign the certificate? [y/n]:y
    
    
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated

    Получили три файла на каждого клиента
    myvpn-client1-key.crt
    myvpn-client1-key.csr
    myvpn-client1-key.key

    Ну и для комплекта сгенерим ещё и TA ключ.
    openvpn --genkey --secret "$EASY_RSA/keys/myvpn-server-ta.key"

    В результате добавится ключик ./keys/myvpn-server-ta.key
    Поздравляю! С ключами закончили.

    Теперь берите пять (5) ключей:
    dh1024.pem
    ca.crt
    myvpn-server-ta.key
    myvpn-server-key.crt
    myvpn-server-key.key

    и копируете на сервер в каталог /etc/openvpn/
    Копируете по закрытому соединению. scp например. или флешкой перенесите.
    Затем берёте четыре (4) ключа:
    ca.crt
    myvpn-server-ta.key
    myvpn-client1-key.crt
    myvpn-client1-key.key

    и копируете их на клиента в каталог /etc/openvpn/ или в соответствующий каталог на windows
    Аналогично копируете соблюдая меры безопасности.
    Теперь осталось сделать конфиги.
    Сервер /etc/openvpn/myvpn-server.conf
    port 443
    proto udp
    dev tun1
    
    user nobody
    group nogroup
    
    dh       /etc/openvpn/dh1024.pem
    ca       /etc/openvpn/ca.crt
    cert     /etc/openvpn/myvpn-server-key.crt
    key      /etc/openvpn/myvpn-server-key.key
    tls-auth /etc/openvpn/myvpn-server-ta.key 0
    
    server 10.10.0.0 255.255.255.0
    push "redirect-gateway"
    push "dhcp-option DNS 10.10.0.1"
    push "explicit-exit-notify 3"
    
    client-config-dir ccd
    keepalive 10 60
    
    #duplicate-cn
    
    auth SHA1
    cipher AES-256-CBC   # AES
    comp-lzo
    
    max-clients 128
    persist-key
    persist-tun
    
    ifconfig-pool-persist /var/log/openvpn-ipp-udp443.txt
    status                /var/log/openvpn-status-udp443.log
    log                   /var/log/openvpn-udp443.log
    verb 3


    Клиенты /etc/openvpn/myvpn-client.conf
    client
    dev tun1
    proto udp
    remote xxx.xxx.xxx.xxx 443
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    
    ns-cert-type server
    
    ca       /etc/openvpn/ca.crt
    cert     /etc/openvpn/myvpn-client1-key.crt
    key      /etc/openvpn/myvpn-client1-key.key
    tls-auth /etc/openvpn/myvpn-server-ta.key 1
    
    # разрешаем запускать скрипты
    script-security 2
    # на поднятие и опускание vpn запускаем скрипт обновления файла resolv.conf
    up /etc/openvpn/update-resolv-conf
    down /etc/openvpn/update-resolv-conf
    
    cipher AES-256-CBC
    log /var/log/openvpn.log
    comp-lzo
    verb 3

    Готово.
    Заускаем
    # service openvpn start
    Проверяем что запустился
    # netstat -nlp -A inet | grep openvpn
    udp        0      0 0.0.0.0:443             0.0.0.0:*                           2075/openvpn

    Теперь важно открыть на Firewall UDP 443 на нужном интерфейсе.
    # ufw allow 443/udp
    И не забыть проверить и настроить SELinux если он установлен и включён.
    Если вдруг openvpn не запустился временно отключить SELinux можно так:
    # setenforce 0
    Дальше нужно включить автозапуск как на сервере так и на клиентах если это нужно.
    Для этого раскомментируем или добавим опцию AUTOSTART
    # mcedit /etc/default/openvpn
    ...
    AUTOSTART=all
    ...
    Ответ написан
    2 комментария