# IT Security

# iptables setup

Настройка межсетевого экрана iptables

##### <span style="color:rgb(53,152,219);">Установка iptables</span>

```ruby
sudo apt install iptables-persistent -y
```

**Создание файла правил iptables**

```ruby
#!/sbin/iptables-restore
#Таблица filter и её цепочки
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 2202,80,443,587 -j ACCEPT
COMMIT
```

##### <span style="color:rgb(53,152,219);">Команды управления iptables</span>

**Применение правил из файла**

```ruby
sudo sh -c "iptables-restore < /etc/iptables/rules.v4"
```

**Сохранение конфигурации в boot-правила**

```ruby
sudo sh -c 'iptables-save > /etc/iptables/rules.v4'
```

**Добавление новых правил без очистки текущих**

```ruby
sudo iptables-restore -n < /etc/iptables/rules.v4
```

**Очистка всех правил INPUT**

```ruby
sudo iptables -t filter -F INPUT
```

**Просмотр статуса правил iptables**

```ruby
sudo iptables -n -L -v --line-numbers
```

# WireGuard VPN Client/Server

<div class="page-header-headings" id="bkmrk-%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-wireguard-"><div class="headline grey--text text--darken-3">Настройка WireGuard VPN Клиент/Сервер   
</div></div>##### <span style="color:rgb(53,152,219);">Установка VPN клиента</span>

```ruby
sudo apt install resolvconf -y
sudo apt install wireguard -y
sudo touch /etc/wireguard/wg0.conf && sudo chmod 600 -R /etc/wireguard/
```

**Создание конфигурационного файла**

```ruby
sudo tee /etc/wireguard/wg0.conf << 'EOF'
[Interface]
PrivateKey = <>
Address = 10.8.0.3/24
DNS = 1.1.1.1

[Peer]
PublicKey = <>
PresharedKey = <>
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 0
Endpoint = x.x.x.x:51820
EOF
```

<p class="callout info">Значения `PrivateKey`, `PublicKey`, `PresharedKey` берутся из файла конфигурации, созданного средствами VPN сервера.</p>

**Запуск VPN клиента**

```ruby
sudo wg-quick up wg0
```

<p class="callout warning">После запуска VPN клиента активируется сетевой интерфейс и у ВМ изменится IP адрес.  
Мы потеряем текущее SSH подключение и к ВМ и нужно будет подключиться по локальному IP внутри VPN сети.</p>

**Проверка статуса VPN**

```ruby
sudo wg show
```

**Отключение VPN канала**

```ruby
sudo wg-quick down wg0
```

<p class="callout warning">Мы вновь потеряем текущее SSH подключение и к ВМ и нужно будет подключиться по публичному IP.</p>

##### <span style="color:rgb(53,152,219);">Установка wg-easy VPN Server Docker</span>

[**Github Repo**](https://github.com/WeeJeWel/wg-easy?tab=readme-ov-file#2-run-wireguard-easy)

**Остановка/Удаление старых контейнеров/образов**

```ruby
docker stop wg-easy docker rm wg-easy docker pull ghcr.io/wg-easy/wg-easy docker rmi 
```

**Генерация bcrypt hash для создания пароля к Web Интерфейсу**

```ruby
docker run -it ghcr.io/wg-easy/wg-easy wgpw Password
```

```ruby
PASSWORD_HASH='<pass>'
```

**Первичный запуск и преднастройка нового VPN сервера**

```ruby
docker run -d \
  --name=wg-easy \
  -e LANG=en \
  -e WG_HOST=x.x.x.x \
  -e PASSWORD_HASH='<pass>' \
  -e PORT=51821 \
  -e WG_PORT=51820 \
  -v ~/.wg-easy:/etc/wireguard \
  -p 51820:51820/udp \
  -p 51821:51821/tcp \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE \
  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
  --sysctl="net.ipv4.ip_forward=1" \
  --restart unless-stopped \
  ghcr.io/wg-easy/wg-easy
```

**Проверка корректности отправки docker скрипта и HASH-а пароля**

```ruby
docker inspect \
 --format "$(curl -s https://gist.githubusercontent.com/efrecon/8ce9c75d518b6eb863f667442d7bc679/raw/run.tpl)" \
 wg-easy
```

**Расположение конфигурации клиентов**

```ruby
/home/xeon/.wg-easy/wg0.conf
```

# RSA Keys Setup

<div class="page-header-headings" id="bkmrk-%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-rsa-%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B9"><div class="headline grey--text text--darken-3">Настройка RSA ключей </div></div>#### <span style="color:rgb(22,145,121);">**Генерация RSA ключей (клиент)**</span>

##### <span style="color:rgb(53,152,219);">RSA ключи (nix/mac)</span>

[**git-scm.com Guide**](https://git-scm.com/book/ru/v2/Git-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-%D0%93%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D0%BE%D0%B3%D0%BE-SSH-%D0%BA%D0%BB%D1%8E%D1%87%D0%B0)

```ruby
ssh-keygen -o -t rsa -b 4096 -C xeonmp22@gmail.com
```

```ruby
Generating public/private rsa key pair.
Enter file in which to save the key (/home/xeon/.ssh/id_rsa): home
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in home
Your public key has been saved in home.pub
```

**Сгенерируется 2 файла:**

- Приватный ключ `~/.ssh/home`
- Публичный ключ `~/.ssh/home.pub`

<p class="callout warning">Необходимо скопировать (в буфер обмена) текст файла публичного ключа - **home.pub**  
На клиенте достаточно оставить только приватный ключ - **home**</p>

##### <span style="color:rgb(53,152,219);">RSA ключи (win)</span>

**[learn.microsoft.com Guide](https://docs.microsoft.com/ru-ru/azure/virtual-machines/linux/ssh-from-windows#create-an-ssh-key-pair)**

Запустите `C:\Windows\System32\cmd.exe` от имени Администратора

```ruby
mkdir C:\Users\%USERNAME%\.ssh cd C:\Users\%USERNAME%\.ssh
```

```ruby
ssh-keygen -m PEM -t rsa -b 4096
```

```ruby
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\xeon/.ssh/id_rsa): home
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in home.
Your public key has been saved in home.pub.
```

<p class="callout warning">Необходимо скопировать (в буфер обмена) текст файла публичного ключа - **home.pub**  
На клиенте достаточно оставить только приватный ключ - **home**</p>

#### <span style="color:rgb(22,145,121);">**Настройка публичных ключей (сервер)**</span>

##### <span style="color:rgb(53,152,219);">Публичный ключ (nix/mac)</span>

```ruby
mkdir ~/.ssh chmod 0700 ~/.ssh
```

**Создание файла публичного ключа**

```ruby
sudo tee ~/.ssh/my_key1.pub << 'EOF'
***
Вставить код публичного ключа - home.pub (из буфера обмена)
***
EOF
```

```ruby
chmod 0600 ~/.ssh/my_key1.pub
```

**Изменение конфигурации службы SSH**

```ruby
sudo tee /etc/ssh/sshd_config << 'EOF'
# Путь до публичных ключей  
AuthorizedKeysFile      .ssh/my_key1.pub
# Разрешить аутентификацию по ключу
RSAAuthentication yes
PubkeyAuthentication yes
# Запрет подключатся к SSH серверу по паролю  
PasswordAuthentication no
EOF
```

```ruby
sudo service sshd restart
```

##### <span style="color:rgb(53,152,219);">Доп. публичный ключ (nix/mac)</span>

<p class="callout warning">Необходимо скопировать (в буфер обмена) текст **НОВОГО** файла публичного ключа</p>

```ruby
sudo tee ~/.ssh/my_key2.pub << 'EOF'
***
Вставить код публичного ключа - home2.pub (из буфера обмена)
***
EOF
```

**Изменение конфигурации службы SSH**

```ruby
chmod 0600 ~/.ssh/my_key2.pub
```

```ruby
sudo tee /etc/ssh/sshd_config << 'EOF'
# Путь до публичных ключей
# Можно указывать несколько ключей через пробел
AuthorizedKeysFile      .ssh/my_key1.pub .ssh/my_key2.pub
EOF
```

```ruby
sudo service sshd restart
```

#### **<span style="color:rgb(22,145,121);">Подключение по SSH (к серверу)</span>**

##### <span style="color:rgb(53,152,219);">SSH (nix/mac)</span>

```ruby
ssh user@server-ip
# Ввести парольную фразу
```

**Получение fingerprint ключа из body ключа**

```ruby
ssh-keygen -E md5 -lf ~/.ssh/.pub | awk '{print $2}'
```

##### <span style="color:rgb(53,152,219);">SSH (win)</span>

**Загрузка и Установка пакета PuTTY**

- [Putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) (файл \*installer.msi)
- Либо установить ПО генерации ключей: [puttygen (64-bit)](https://the.earth.li/~sgtatham/putty/latest/w64/puttygen.exe)

**Настройка подключения к серверу в PuTTY**

- Необходимо запустить PuTTY.
- Находясь в категории Session ввести данные нового сервера:
- `Host Name (or IP address)` - указываем IP (либо домен сайта)
- `Saved Sessions` - Указываем удобное вам имя сервера (может совпадать с Host Name)
- Нажимаем кнопку `Save`
- Переходим в категорию `SSH/Auth` и указываем путь до нашего приватного ключа:

[![putty.jpg](https://wiki-docs.ru/uploads/images/gallery/2026-07/scaled-1680-/putty.jpg)](https://book.wiki-docs.ru/uploads/images/gallery/2026-07/putty.jpg)

- Возвращаемся в категорию `Session` и нажимаем кнопку `Save` (важно чтоб был выделен наш новый сервер)
- Нажимаем кнопку `Open`
- В открывшемся окне консоли вводим логин и нашу `парольную фразу`