# OpenVPN

Создание сертификата для удалённого подключения

# Создание сертификатов

### **<span style="mso-ansi-language: RU;">Рабочие директории</span>**

```
/etc/openvpn/ccd – директория с конфигурацией пользователей
/etc/openvpn/easy-rsa/pki/issued – директория для подписанных сертификатов пользователей
/etc/openvpn/easy-rsa/pki/private – директоря для приватных ключей пользователей
/etc/openvpn/easy-rsa/easyrsa – утилита для генераци сертфикатов
```

### **<span style="mso-ansi-language: RU;">Генерация сертификатов</span>**

**<span style="mso-ansi-language: RU;">1. Запускаем утилиту easyrsa</span>**

```
cd /etc/openvpn/easy-rsa/ 
./easyrsa gen-req fursov.m nopass
```

![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/hsbimage.png)<span style="mso-ansi-language: RU;">В процессе работы команды, будет задан вопрос о </span><span lang="EN-US">Common</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span lang="EN-US">Name</span><span style="mso-ansi-language: RU;"> (основного имени сертификата).</span>

<span style="mso-ansi-language: RU;">Можно просто оставить пустым и **нажать** </span>**<span lang="EN-US">Enter</span>**<span style="mso-ansi-language: RU;">.</span>

<span style="mso-ansi-language: RU;">После чего будут сгенерированы два файла **\*.**</span>**<span lang="EN-US">req</span>**<span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">– запрос и **\*.**</span>**<span lang="EN-US">key</span>**<span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">– закрытый ключ. Так же будут выведены пути, куда положила их программа.</span>

**<span style="mso-ansi-language: RU;">2. Подписание запроса центром сертификации</span>**

<span style="mso-ansi-language: RU;">Когда запрос сформирован, его необходимо подписать командой</span>

```
./easyrsa sign-req client fursov.m
```

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/zebimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/zebimage.png)

<span style="mso-ansi-language: RU;">У вас уточнят, действительно-ли вы уверены, что вы выпускаете сертификат для данного пользователя.</span>

<span style="mso-ansi-language: RU;">Необходимо напечатать слово </span>**<span lang="EN-US">yes</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span>**<span style="mso-ansi-language: RU;">и нажать </span><span lang="EN-US">Enter</span>

<span style="mso-ansi-language: RU;">После подтверждения, будет запрошен пароль от </span><span lang="EN-US">CA</span><span style="mso-ansi-language: RU;">, для подписания закрытым ключом и выпуска сертификата</span>

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/RlIimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/RlIimage.png)

<span style="mso-ansi-language: RU;">Вбиваем пароль получаем подписанный сертификат.</span>

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/5p3image.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/5p3image.png)

# Сборка файла конфигурации для пользователя

<span style="mso-ansi-language: RU;">У нас на руках есть закрытый и открытый ключи пользователя, теперь из них необходимо собрать файл, при помощи которого пользователь сможет подключаться к сети Центра.</span>

1. <span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;"><span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Открываем блокнот, и кладем в него этот шаблон:</span>

> <span class="MsoIntenseEmphasis"><span lang="EN-US">client</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">dev tun</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">proto udp</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">remote 195.9.131.215 1194</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">resolv-retry infinite</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">nobind</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">persist-key</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">persist-tun</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">comp-lzo</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">verb 3</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">cipher AES-256-CBC</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">key-direction 1</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">&lt;ca&gt;</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">-----BEGIN CERTIFICATE-----</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">MIIDHjCCAgagAwIBAgIJAK/2Z5IR0hJ2MA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">BAMMBHBldHIwHhcNMTgxMTIwMDg0ODU3WhcNMjgxMTE3MDg0ODU3WjAPMQ0wCwYD</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">VQQDDARwZXRyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtAluFx9N</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">2x29m5scKiHZMc7aISZG2pplP1/HgsOcHF+Dynn7QX0om/0bVmXIsYhTM+69zpAz</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">E1+Cz05//WIgkptdsaDN/PZ3jnN3YO5/4pwXmNciBR0sqgxE8Te/1sLxZ3DfYcId</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">cwAARmYraX+1/eADfuBnIXckJT355ec1UCCq9rWOKx4Kcic8NY70dkRWW0YzvW0/</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">O+oSWi1lck3w7d8GY3doLcy1MmGp6JSceJhlpJ0uJY0h47hcra8lmw3BRsZ9P7Wp</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">3e0pOqdUs6EEF9eVw6dRlTz760O+BtsNk1VP03FxnBbhfobdj4VulG1/G2an73G7</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">d1OJyYkhzqu24QIDAQABo30wezAdBgNVHQ4EFgQUMHhGjjVpCKWVMTLaAX3+kXJK</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">h8EwPwYDVR0jBDgwNoAUMHhGjjVpCKWVMTLaAX3+kXJKh8GhE6QRMA8xDTALBgNV</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">BAMMBHBldHKCCQCv9meSEdISdjAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">BgkqhkiG9w0BAQsFAAOCAQEAO0ASfcJszUuqoMYMBl3BC3fBu0yXOZwbKX9hX6T1</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">7hdQAwEqv+VE8w0Ja8fOKm3pKueZtyxWHP7t4lNjk8/sODXxfErhDqI0w+mBBUMs</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">FvNBN2MQpscVpW0AvrbxtMYvywMaMRdmrF9aw6Hb1rrZ9AYxC3KsCOPXyHG7ZnrR</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">R4zt0gCNhOmewbCXcC2hEFbFNvQAfVpB1dcEl9xLd4r2M1vhVwRpGUmnqhnWxhsF</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">RnNl0KjwzPzMybGijP66Ya0EVv+IeiG4ZKQKQzPf0rYz79DDnZHT1zbRFcHCqz7x</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">6+rtSuz8PUxq3B6Ee0DeubJZvTw+jMYesPoywX3hMJo90w==</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">-----END CERTIFICATE-----</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">&lt;/ca&gt;</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US"> </span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">&lt;key&gt;</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">-----BEGIN PRIVATE KEY-----</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US" style="color: red;">Закрытая часть ключа</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">-----END PRIVATE KEY-----</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">&lt;/key&gt;</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US"> </span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">&lt;cert&gt;</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">-----BEGIN CERTIFICATE-----</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US" style="color: red;">Открытая часть ключа</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">-----END CERTIFICATE-----</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">&lt;/cert&gt;</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">&lt;tls-auth&gt;</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">-----BEGIN OpenVPN Static key V1-----</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">38a041d63962b26c49e7f8f8419e23a8</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">b99e62ef7a34001c1a65b4b986195c1b</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">b8ea61c23cf922628ec1d5020babedc1</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">c4390b327aeeba9f06df3a680a2bf3d3</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">f9dc41c83511442073097512c90c27ce</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">c2fbce1708e34fe2ee797d19da83bcfa</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">c1dfa76e89456c3c0a48543bcb27f5a2</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">515b02cc0ea8b994d803c8123f08c2b4</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">7a3aeade557b90b75ca5275d1570033b</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">277621b89581faeabc5e2f81668ada18</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">184dcff965e7fd101147063972ff5062</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">44dc19f5078e535a9aad747c8efc671c</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">73b88e1810f71ac9b1ac2cef1fbdca53</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">cf701498ffa8995a59209f05597f853f</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">c844ecce0bc8ade8d6763fcabfc15a99</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">da7937c25e63c53d13d2b480da3b521d</span></span>
> 
> <span class="MsoIntenseEmphasis"><span lang="EN-US">-----END OpenVPN Static key V1-----</span></span>
> 
> <span class="MsoIntenseEmphasis"><span style="mso-ansi-language: RU;">&lt;/tls-auth&gt;</span></span>

<span style="mso-ansi-language: RU;"> 2. Далее открываем на сервере по очереди сертификат пользователя и его закрытый ключ, и вставляем содержимое в шаблон, вместо полей «**Закрытая часть ключа**» и «**Открытая часть ключа**»</span>

```
cat /etc/openvpn/easy-rsa/pki/private/fursov.m.key
```

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/Dksimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/Dksimage.png)

<span style="mso-ansi-language: RU;">3. Берем ту часть, которая находится между строками </span>**<span lang="EN-US">BEGIN</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span lang="EN-US">PRIVATE</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span lang="EN-US">KEY</span>**<span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">и </span>**<span lang="EN-US">END</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span lang="EN-US">PRIVATE</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span lang="EN-US">KEY</span>**<span style="mso-ansi-language: RU;"> и вставляем ее в конфиг</span>

<span style="mso-ansi-language: RU;">4. Тоже самое и с открытой частью</span>

```
cat /etc/openvpn/easy-rsa/pki/issued/fursov.m.crt
```

<span style="mso-ansi-language: RU;">И не смотря на длинный вывод, так же берем только часть, между </span>**<span lang="EN-US">BEGIN</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span lang="EN-US">CERTIFICATE</span>**<span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">и </span>**<span lang="EN-US">END</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span lang="EN-US">CERTIFICATE</span>**<span style="mso-ansi-language: RU;"> и вставляем в конфиг.</span>

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/L95image.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/L95image.png)

5\. <span style="mso-ansi-language: RU;">Конфиг готов, сохраняем его себе на компьютер с расширением **\*.**</span>**<span lang="EN-US">ovpn</span>**

# Настройка маршрутов пользователя

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">1.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Нам необходимо определить какой адрес будет у пользователя при подключении и куда ему разрешается ходить.</span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">2.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Для начала найдем свободный </span><span lang="EN-US">ip</span><span style="mso-ansi-language: RU;">-адрес</span>

```
 grep -rn 10.8.0. /etc/openvpn/ccd
```

<span style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">Команда </span><span lang="EN-US">grep</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">пройдет по всем файлам в директории и выведет в консоль все совпадения с **10.8.0.** – адресация </span><span lang="EN-US">openvpn</span>

<span style="mso-ansi-language: RU;"> </span><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">3.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Выбираем любой адрес, которого нет в списке от 2 до 254</span>

<span style="mso-ansi-language: RU;">Проверить что вы не просмотрели свободный адрес, можно той же командой </span><span lang="EN-US">grep</span><span style="mso-ansi-language: RU;">, вбив адрес целиком. К примеру:</span>

```
grep -rn 10.8.0.38 /etc/openvpn/ccd  - найдет в конфиге такой адрес и выведет его в консоль
grep -rn 10.8.0.119 /etc/openvpn/ccd – такого адреса нет, и в консоль ничего не выведет
```

<span style="mso-ansi-language: RU;"> </span>

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/PBEimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/PBEimage.png)

<span style="mso-ansi-language: RU;">4. Создаем конфигурационный файл пользователя</span>

```
touch /etc/openvpn/ccd/fursov.m
```

<span lang="EN-US" style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">5. </span></span><span style="mso-ansi-language: RU;">Прописываем в нем конфигурацию</span>

```
 nano /etc/openvpn/ccd/fursov.m
```

> **<span lang="EN-US">ifconfig-push 10.8.0.111 255.255.255.0</span>**
> 
> **<span lang="EN-US">push "route 10.10.20.105 255.255.255.255"</span>**

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/4fRimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/4fRimage.png)

**<span lang="EN-US">Ifconfig</span><span style="mso-ansi-language: RU;">-</span><span lang="EN-US">push</span>**<span style="mso-ansi-language: RU;"> – какой адрес и какую маску присваивать клиенту</span>

**<span lang="EN-US">push</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span lang="EN-US">route</span>**<span style="mso-ansi-language: RU;"> – какой маршрут ему давать (до какого узла внутри сети можно будет ходить). В данном случае задан один адрес, но при желании можно указать несколько.</span>

<span lang="EN-US">push "route 10.10.20.105 255.255.255.255"</span>

<span lang="EN-US">push "route 10.10.20.106 255.255.255.255"</span>

<span lang="EN-US">push "route 10.10.20.107 255.255.255.255"</span>

<span style="mso-ansi-language: RU;">и</span> <span style="mso-ansi-language: RU;">т.д.</span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">6.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Сохраняем данный конфиг и оставляем в этой директории.</span>

<span style="mso-ansi-language: RU;">Настройка фаервола</span>

<span style="mso-ansi-language: RU;"> </span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;"> 6.1.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">На данном шаге у нас уже имеются сертификаты пользователя, его конфиг и настройка. Осталось добавить разрешающие правила в фаервол, чтобы сервер пропустил клиента к его рабочему месту.</span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;"> 6.2.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">В качестве фаервола на сервере настроен </span><span lang="EN-US">iptables</span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;"> 6.3.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Чтобы посмотреть текущие настройки </span><span lang="EN-US">iptables</span><span style="mso-ansi-language: RU;">, можно ввести команду</span>

```
iptables -vnL
```

<span style="mso-ansi-language: RU;">где ключи </span>

> **<span lang="EN-US">v</span>**<span style="mso-ansi-language: RU;"> – </span><span lang="EN-US">verbose</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">т.е. подробный вывод</span>
> 
> **<span lang="EN-US">n</span>**<span style="mso-ansi-language: RU;"> – </span><span lang="EN-US">numeric</span><span style="mso-ansi-language: RU;">, вывод адресов в цифровом формате. По умолчанию он пытается вместо адресов прописать имена хостов</span>
> 
> **<span lang="EN-US">L</span>**<span style="mso-ansi-language: RU;"> – </span><span lang="EN-US">list</span><span style="mso-ansi-language: RU;">. Собственно, вывести все содержимое</span>

<span style="mso-ansi-language: RU;">В ответ мы получим достаточно большую табличку с правилами.</span>

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/hygimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/hygimage.png)

<span style="mso-ansi-language: RU;">Основными полями являются </span>**<span lang="EN-US">source</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span>**<span style="mso-ansi-language: RU;">(откуда) </span>**<span lang="EN-US">destination</span>**<span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">(куда) ну и комментарий, чтобы каждый раз не искать по конфигам, чей это адрес.</span>

<span style="mso-ansi-language: RU;"> </span><span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">4.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Для того чтобы добавить новое правило, пишем</span>

```
iptables -I FORWARD -i tun0 -o eth0 -s 10.8.0.122/32 -d 10.10.10.96/32 -m conntrack --ctstate NEW -j ACCEPT -m comment --comment "fursov.m– 1C"
```

<span style="mso-ansi-language: RU;">Соответственно **-**</span>**<span lang="EN-US">s</span>**<span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">источник отправления (наш адрес клиента), **-**</span>**<span lang="EN-US">d</span>**<span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">адрес назначения, куда мы ему разрешаем ходить. Ну</span> <span style="mso-ansi-language: RU;">и</span> <span style="mso-ansi-language: RU;">комментарий</span><span lang="EN-US">.</span>

<span lang="EN-US"><span style="mso-ansi-language: RU;"> 5. Если необходимо прописать еще и порт</span></span>

```
iptables -I FORWARD -i tun0 -o eth0 -s 10.8.0.119/32 -d 10.10.21.151/32 -p tcp --destination-port 3389 -m conntrack --ctstate NEW -j ACCEPT -m comment --comment "fursov.m – 1C" 
```

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;"> 6.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Еще раз выведем </span><span lang="EN-US">iptables</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">и удостоверимся, что правило появилось</span>

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/26wimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/26wimage.png)

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;"> 7.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">(Опционально) Перезапуск </span><span lang="EN-US">openvpn</span><span style="mso-ansi-language: RU;">. На случай если при подключении от пользователя, по какой-то причине не применились правила, или что-то работает не корректно. При данном действии, у других пользователей могут порваться сессии, и он отвалятся.</span>

```
 systemctl restart openvpn@server
```

**<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;"> 8.<span style="font-style: normal; font-variant: normal; font-size-adjust: none; font-kerning: auto; font-optical-sizing: auto; font-feature-settings: normal; font-variation-settings: normal; font-stretch: normal; font-size: 7pt; line-height: normal; font-family: 'Times New Roman';"> ОБЯЗАТЕЛЬНО ЗАРЕЗЕРВИРОВАТЬ IP КОМПЬЮТЕРА, ИНАЧЕ ПОСЛЕ СМЕНЫ IP НЕОБХОДИМО БУДЕТ МЕНЯТЬ ПРАВИЛО</span></span></span>**

# Проверка работоспособности конфига

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/Lcoimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/Lcoimage.png)

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/JRrimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/JRrimage.png)

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/FWkimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/FWkimage.png)

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/Gl9image.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/Gl9image.png)

# Удаление правил и отзыв сертификата

##  

1. <span style="mso-ansi-language: RU;">Если случайно добавили не, то правило в </span><span lang="EN-US">iptables</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">или старое просто нужно удалить, то в выводе команды </span><span lang="EN-US">iptables</span><span style="mso-ansi-language: RU;"> необходимо добавить еще один ключик **–-**</span>**<span lang="EN-US">line</span><span style="mso-ansi-language: RU;">-</span><span lang="EN-US">numbers</span><span style="mso-ansi-language: RU;">, </span>**<span style="mso-ansi-language: RU;">который добавит в вывод нумерацию строк.</span>[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/pXHimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/pXHimage.png)

```
iptables -vnL --line-numbers
```

<span style="mso-ansi-language: RU;">Для удаления нужного правила, просто вводим</span>

<span lang="EN-US">iptables</span><span style="mso-ansi-language: RU;"> -</span><span lang="EN-US">D</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span lang="EN-US">FORWARD</span><span style="mso-ansi-language: RU;"> номер</span>

<span style="mso-ansi-language: RU;">номер – собственно номер правила.</span>

```
iptables -D FORWARD 1 – удалит наше правило.
```

## <span style="mso-ansi-language: RU;">Отзыв сертификата</span>

<span style="mso-ansi-language: RU;">Для отзыва сертификата, мы используем ту же самую утилиту easyrsa</span>

```
./easyrsa revoke fursov.m
```

<span style="mso-ansi-language: RU;">В процессе отзыва будет задан вопрос «уверены-ли вы», на который отвечаем </span>**<span lang="EN-US">yes</span>**

<span style="mso-ansi-language: RU;">А так же будет запрошен пароль </span><span lang="EN-US">CA</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">для отзыва сертификата</span>

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/kF6image.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/kF6image.png)

<span style="mso-ansi-language: RU;">После отзыва сертификата, утилита в консоли напомнит, что необходимо будет обновить файлик </span><span lang="EN-US">crl</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">– файл, в котором содержится список всех отозванных сертификатов.</span>

<span style="mso-ansi-language: RU;">Делается это в пару команд:</span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">1.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Генерация нового файла </span><span lang="EN-US">CRL:</span>

```
/etc/openvpn/easy-rsa/easyrsa gen-crl
```

**<span lang="EN-US" style="mso-ansi-language: RU;"> </span>**<span style="mso-ansi-language: RU;">(запросит пароль </span><span lang="EN-US">CA</span><span style="mso-ansi-language: RU;">)</span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">2.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Копирование его в нужную директорию:</span>

```
cp /etc/openvpn/easy-rsa/pki/crl/pem /etc/openvpn/keys/crl.pem
```

<span style="mso-ansi-language: RU;">Система спросит, перезаписать-ли файл, вводим – </span>**<span lang="EN-US">y</span>**

[![image.png](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/scaled-1680-/j2Nimage.png)](http://BookStack.serbsky.ru/uploads/images/gallery/2025-03/j2Nimage.png)

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">3.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Перезапускаем сервер </span><span lang="EN-US">openvpn</span><span style="mso-ansi-language: RU;">, чтобы настройки применились.</span>

```
systemctl restart openvpn@server
```

# Список выданных и отозванных сертификатов

<span style="mso-ansi-language: RU;">Можно посмотреть в файле</span>

```
cat /etc/openvpn/easy-rsa/pki/index.txt
```

**<span lang="EN-US">R</span>**<span style="mso-ansi-language: RU;"> – </span><span lang="EN-US">Revoke</span><span style="mso-ansi-language: RU;">, отозванный сертификат</span>

**<span lang="EN-US">V</span>**<span style="mso-ansi-language: RU;"> – </span><span lang="EN-US">Valid</span><span style="mso-ansi-language: RU;">, действующий сертификат</span>

# Сохранение правил iptables

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">1.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Если после внесения изменений в </span><span lang="EN-US">iptables</span><span style="mso-ansi-language: RU;">, сервер перезагрузится, то те правила, которые были добавлены последние, не сохранятся.</span>

<span style="mso-ansi-language: RU;">Для сохранения правил используется команда </span>

```
iptables-save > /etc/sysconfig/iptables_04_02_2025
```

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">2.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Последняя часть в сохраняемом файле, просто дата сохранения, чтобы потом можно было понять в какой момент, какие изменения были внесены</span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">3.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Для восстановления правил, используем </span>

```
iptables-restore < /etc/sysconfig/ iptables_28_01_2025
```

# Отправление файлов пользователю

<span style="font-size: 11.0pt; line-height: 150%; font-family: 'Calibri',sans-serif; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; letter-spacing: 0pt; mso-font-kerning: 0pt; mso-ansi-language: RU;">Если пользователю необходим доступ до своего компьютера</span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">1.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Не забываем добавить в </span><span lang="EN-US">dhcp</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">резервирование его </span><span lang="EN-US">ip</span><span style="mso-ansi-language: RU;"> адреса, чтобы он не менялся, и пользователь всегда мог подключиться к своему компьютеру. </span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">2.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Не забываем положить сам клиент </span><span lang="EN-US">openvpn</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">в архив, иначе пользователь может самостоятельно скачать что-нибудь не то.</span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">3.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Если пользователь будет подключаться по </span><span lang="EN-US">RDP</span><span style="mso-ansi-language: RU;">, желательно так же сохранить ему в архив уже настроенный </span><span lang="EN-US">RDP</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">файлик с его логином и адресом подключения.</span>

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-ansi-language: RU;"><span style="mso-list: Ignore;">4.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span style="mso-ansi-language: RU;">Архив очень желательно запаролить.</span>

<span lang="EN-US">P</span><span style="mso-ansi-language: RU;">.</span><span lang="EN-US">S</span><span style="mso-ansi-language: RU;">. Как альтернатива резервированию в </span><span lang="EN-US">dhcp</span><span style="mso-ansi-language: RU;">, можно указать имя компьютера </span><span lang="EN-US">KP</span><span style="mso-ansi-language: RU;">-</span><span lang="EN-US">WS</span><span style="mso-ansi-language: RU;">-0001 к примеру. ДНС имя всегда актуально и обновляется вместе с </span><span lang="EN-US">ip</span><span lang="EN-US" style="mso-ansi-language: RU;"> </span><span style="mso-ansi-language: RU;">адресом.</span>