<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Гайд для новичков: Firewall (ufw, iptables) — правила, порты, фильтрация трафика]]></title><description><![CDATA[<p dir="auto">Firewall (брандмауэр) — это охранник на входе вашего сервера. Его задача — пропускать только нужный трафик и блокировать всё остальное. Представьте, что ваш сервер — это офис:</p>
<ul>
<li><strong>Без firewall</strong>: двери открыты всем. Заходит кто угодно, включая злоумышленников.</li>
<li><strong>С firewall</strong>: охранник на входе проверяет каждого. Допускает только тех, у кого правильные документы (разрешённые подключения).</li>
</ul>
<p dir="auto">По умолчанию в Linux установлена система <strong>iptables</strong> — это мощный инструмент фильтрации трафика на уровне ядра. Но iptables имеет сложный синтаксис. Поэтому появился <strong>ufw</strong> (Uncomplicated Firewall) — упрощённый интерфейс над iptables, который переводит простые команды в сложные iptables-правила.</p>
<h2>Важные концепции</h2>
<h3>Что такое портЭто канал связи. Каждое приложение слушает трафик на своём порту.</h3>
<p dir="auto"><strong>Типы портов:</strong></p>
<ul>
<li><strong>0–1023</strong> — системные (зарезервированные) порты. Требуют прав администратора.
<ul>
<li><strong>22</strong> — SSH (удалённое управление)</li>
<li><strong>80</strong> — HTTP (веб-сайты без шифрования)</li>
<li><strong>443</strong> — HTTPS (веб-сайты с шифрованием)</li>
<li><strong>21</strong> — FTP (передача файлов, устаревший)</li>
<li><strong>25, 587</strong> — SMTP (отправка почты)</li>
<li><strong>110, 143</strong> — POP3, IMAP (получение почты)</li>
<li><strong>53</strong> — DNS (переводит имена в IP-адреса)</li>
</ul>
</li>
<li><strong>1024–49151</strong> — зарегистрированные порты. Используют приложения.</li>
<li><strong>49152–65535</strong> — динамические (ephemeral) порты. Система назначает их временно.</li>
</ul>
<h3>TCP и UDP — разница</h3>
<p dir="auto">Трафик по сети может идти двумя протоколами:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Характеристика</th>
<th>TCP</th>
<th>UDP</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Надёжность</strong></td>
<td>Гарантирует доставку всех пакетов в правильном порядке</td>
<td>Пакеты могут потеряться, но быстро</td>
</tr>
<tr>
<td><strong>Скорость</strong></td>
<td>Медленнее (из-за проверок)</td>
<td>Быстрее</td>
</tr>
<tr>
<td><strong>Когда использовать</strong></td>
<td>SSH, HTTP, HTTPS, FTP, Email — где важна целостность данных</td>
<td>Онлайн-игры, видеозвонки, DNS — где важна скорость</td>
</tr>
<tr>
<td><strong>Пример</strong></td>
<td>Вы отправляете письмо — оно должно дойти полностью</td>
<td>Вы смотрите видео — потеря пары кадров некритична</td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>Важно:</strong> TCP-порт 22 отличается от UDP-порта 22. Это разные каналы!</p>
<h3>Stateful firewall (с отслеживанием состояния)</h3>
<p dir="auto">UFW и iptables работают как <strong>stateful firewalls</strong>. Это означает, что они запоминают установленные соединения и разрешают ответные пакеты без дополнительных правил.</p>
<p dir="auto"><strong>Пример:</strong> Вы подключаетесь к серверу SSH (порт 22). После проверки первого пакета firewall запоминает это соединение. Ответный трафик от сервера пропускается автоматически, даже если нет явного разрешающего правила для него.</p>
<p dir="auto">Это значит, что вам не нужно писать два правила — одно для входящего, одно для исходящего трафика для каждого соединения.</p>
<h2>Архитектура iptables</h2>
<p dir="auto">UFW работает над iptables, поэтому важно понимать его структуру.</p>
<pre><code>iptables
  ├── Таблицы (tables)
  │   ├── filter (фильтрация трафика) — **используется в 99% случаев**
  │   ├── nat (преобразование адресов)
  │   ├── mangle (изменение пакетов)
  │   ├── raw (исключения из отслеживания)
  │   └── security (правила безопасности)
  │
  └── Цепи (chains) — последовательности правил
      ├── INPUT (входящий трафик)
      ├── OUTPUT (исходящий трафик)
      └── FORWARD (форвардинг через машину, как роутер)
</code></pre>
<h3>Таблица filter</h3>
<p dir="auto">Таблица <strong>filter</strong> — это то, где вы выполняете классическую фильтрацию:</p>
<p dir="auto"><strong>INPUT</strong> — пакеты, пришедшие на ваш сервер</p>
<pre><code>Внешний хост → [Твой сервер] (INPUT правила применяются здесь)
</code></pre>
<p dir="auto">Используется для блокировки/разрешения входящих подключений (SSH, HTTP, HTTPS).</p>
<p dir="auto"><strong>OUTPUT</strong> — пакеты, отправляемые вашим сервером</p>
<pre><code>[Твой сервер] → (OUTPUT правила применяются здесь) → Внешний хост
</code></pre>
<p dir="auto">По умолчанию разрешены все исходящие пакеты. Можно запретить, если нужна максимальная безопасность.</p>
<p dir="auto"><strong>FORWARD</strong> — пакеты, которые проходят через вашу машину (используется только если вы настраиваете маршрутизацию)</p>
<pre><code>Сеть A → [Твой сервер как роутер] → (FORWARD правила) → Сеть B
</code></pre>
<p dir="auto">Для обычного сервера FORWARD не используется.</p>
<h3>Порядок применения правил</h3>
<p dir="auto">Правила проверяются <strong>сверху вниз</strong> до первого совпадения. Как только найдено правило, применяется его действие и дальше проверок не идёт.</p>
<p dir="auto"><strong>Важно:</strong> порядок правил критичен!</p>
<pre><code>Правило 1: DENY из 10.0.0.37
Правило 2: ALLOW из сети 10.0.0.0/24
</code></pre>
<p dir="auto">Если 10.0.0.37 подключится, сработает правило 1 и соединение заблокируется. Правило 2 никогда не сработает для этого IP.</p>
<p dir="auto">Если поменять местами:</p>
<pre><code>Правило 1: ALLOW из сети 10.0.0.0/24
Правило 2: DENY из 10.0.0.37
</code></pre>
<p dir="auto">Тогда 10.0.0.37 будет разрешен по правилу 1, правило 2 игнорируется.</p>
<h2>UFW — интерфейс для новичков</h2>
<h3>Начало работы с UFW</h3>
<p dir="auto">UFW по умолчанию отключен. Перед включением <strong>обязательно</strong> добавьте правило для SSH (иначе заблокируете себя!):</p>
<pre><code class="language-bash">sudo ufw allow 22
sudo ufw enable
</code></pre>
<p dir="auto">Проверить статус:</p>
<pre><code class="language-bash">sudo ufw status verbose
</code></pre>
<p dir="auto">Вывод будет примерно такой:</p>
<pre><code>Status: active
Default: deny incoming, allow outgoing, disabled routed
</code></pre>
<p dir="auto">Это означает:</p>
<ul>
<li><strong>deny incoming</strong> — по умолчанию все входящие пакеты блокируются</li>
<li><strong>allow outgoing</strong> — исходящий трафик разрешён</li>
<li><strong>disabled routed</strong> — форвардинг отключен</li>
</ul>
<h3>Основной синтаксис UFW</h3>
<pre><code class="language-bash">sudo ufw allow &lt;PORT&gt;[/&lt;PROTOCOL&gt;] [from &lt;IP|NETWORK&gt;] [to &lt;IP&gt;] [comment "КОММЕНТАРИЙ"]
sudo ufw deny &lt;PORT&gt;[/&lt;PROTOCOL&gt;] [from &lt;IP|NETWORK&gt;] [to &lt;IP&gt;] [comment "КОММЕНТАРИЙ"]
sudo ufw delete allow &lt;PORT&gt;[/&lt;PROTOCOL&gt;] [from &lt;IP|NETWORK&gt;]
</code></pre>
<p dir="auto">где:</p>
<ul>
<li><code>&lt;PORT&gt;</code> — номер порта (22, 80, 443)</li>
<li><code>&lt;PROTOCOL&gt;</code> — tcp или udp (если не указать, применяется к обоим)</li>
<li><code>&lt;IP|NETWORK&gt;</code> — конкретный IP или подсеть (192.168.1.0/24)</li>
<li><code>comment</code> — описание правила (очень полезно!)</li>
</ul>
<h3>Примеры правил UFW</h3>
<p dir="auto"><strong>Разрешить входящий SSH со всех IP:</strong></p>
<pre><code class="language-bash">sudo ufw allow 22/tcp comment "SSH access"
</code></pre>
<p dir="auto">или просто:</p>
<pre><code class="language-bash">sudo ufw allow ssh
</code></pre>
<p dir="auto">UFW знает имена популярных сервисов (ssh, http, https, ftp).</p>
<p dir="auto"><strong>Разрешить HTTP и HTTPS (веб-сервер):</strong></p>
<pre><code class="language-bash">sudo ufw allow 80/tcp comment "HTTP"
sudo ufw allow 443/tcp comment "HTTPS"
</code></pre>
<p dir="auto">или за раз (в версиях поновее):</p>
<pre><code class="language-bash">sudo ufw allow 80,443/tcp
</code></pre>
<p dir="auto"><strong>Запретить трафик на порт 23 (старый Telnet — небезопасен):</strong></p>
<pre><code class="language-bash">sudo ufw deny 23/tcp comment "Block Telnet"
</code></pre>
<p dir="auto"><strong>Разрешить SSH только с конкретного IP:</strong></p>
<pre><code class="language-bash">sudo ufw allow from 192.168.1.100 to any port 22 comment "SSH from office"
</code></pre>
<p dir="auto"><strong>Разрешить SSH с целой подсети:</strong></p>
<pre><code class="language-bash">sudo ufw allow from 192.168.1.0/24 to any port 22 comment "SSH from internal network"
</code></pre>
<p dir="auto"><strong>Запретить конкретный IP, но разрешить остальных из подсети:</strong></p>
<pre><code class="language-bash">sudo ufw allow from 192.168.1.0/24 to any port 22 comment "Allow network"
sudo ufw insert 1 deny from 192.168.1.50 to any port 22 comment "Block one host"
</code></pre>
<p dir="auto">Вставляем правило блокировки в позицию 1 (самое начало), чтобы оно проверилось первым.</p>
<p dir="auto"><strong>Ограничить количество подключений (защита от brute-force SSH):</strong></p>
<pre><code class="language-bash">sudo ufw limit 22/tcp comment "Rate limit SSH"
</code></pre>
<p dir="auto">Это ограничит соединения: максимум 6 подключений за 30 секунд. После превышения есть пауза перед следующей попыткой.</p>
<p dir="auto"><strong>Разрешить трафик на диапазон портов (пассивный FTP):</strong></p>
<pre><code class="language-bash">sudo ufw allow 40000:50000/tcp comment "Passive FTP"
</code></pre>
<p dir="auto"><strong>Разрешить входящие соединения только на интерфейс eth0:</strong></p>
<pre><code class="language-bash">sudo ufw allow in on eth0 from 10.0.0.0/24 to any port 22
</code></pre>
<p dir="auto">Используется, если на машине несколько сетевых интерфейсов.</p>
<p dir="auto"><strong>Блокировать исходящий трафик на конкретный IP (продвинутое правило):</strong></p>
<pre><code class="language-bash">sudo ufw deny out on eth0 to 8.8.8.8 comment "Block outgoing to Google DNS"
</code></pre>
<h3>Просмотр правил</h3>
<p dir="auto"><strong>Список правил в неупорядоченном виде:</strong></p>
<pre><code class="language-bash">sudo ufw status
</code></pre>
<p dir="auto">Вывод:</p>
<pre><code>Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                     ALLOW IN    Anywhere
</code></pre>
<p dir="auto"><strong>Список с номерами (нужно для удаления):</strong></p>
<pre><code class="language-bash">sudo ufw status numbered
</code></pre>
<p dir="auto">Вывод:</p>
<pre><code>     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 443/tcp                     ALLOW IN    Anywhere
</code></pre>
<p dir="auto"><strong>Подробный список с информацией о логировании:</strong></p>
<pre><code class="language-bash">sudo ufw status verbose
</code></pre>
<h3>Удаление правил</h3>
<p dir="auto"><strong>По номеру (проще):</strong></p>
<pre><code class="language-bash">sudo ufw status numbered
sudo ufw delete 2
</code></pre>
<p dir="auto">После удаления номера остальных правил сдвигаются вверх!</p>
<p dir="auto"><strong>По полной спецификации:</strong></p>
<pre><code class="language-bash">sudo ufw delete allow 80/tcp
</code></pre>
<p dir="auto">Спецификация должна <strong>точно совпадать</strong> с исходным правилом.</p>
<p dir="auto"><strong>Очистить все правила и отключить firewall:</strong></p>
<pre><code class="language-bash">sudo ufw reset
</code></pre>
<p dir="auto">Подтвердите. Внимание — все правила удалятся!</p>
<h3>Логирование UFW</h3>
<p dir="auto"><strong>Включить логирование:</strong></p>
<pre><code class="language-bash">sudo ufw logging on
</code></pre>
<p dir="auto"><strong>Отключить:</strong></p>
<pre><code class="language-bash">sudo ufw logging off
</code></pre>
<p dir="auto"><strong>Просмотреть логи:</strong></p>
<pre><code class="language-bash">sudo tail -f /var/log/ufw.log
</code></pre>
<p dir="auto">Логи обновляются в реальном времени.</p>
<h2>Практический сценарий: настройка веб-сервера</h2>
<p dir="auto">Представим, вам нужен веб-сервер с SSH-доступом. Вот как его настроить:</p>
<pre><code class="language-bash"># Добавляем правило для SSH (ОБЯЗАТЕЛЬНО ПЕРВЫМ!)
sudo ufw allow 22/tcp comment "SSH access"

# Включаем firewall
sudo ufw enable

# Добавляем HTTP
sudo ufw allow 80/tcp comment "HTTP"

# Добавляем HTTPS
sudo ufw allow 443/tcp comment "HTTPS"

# Проверяем результат
sudo ufw status numbered
</code></pre>
<p dir="auto">Вывод:</p>
<pre><code>     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 443/tcp                     ALLOW IN    Anywhere
</code></pre>
<p dir="auto">Всё остальное блокируется автоматически!</p>
<p dir="auto"><strong>Хотим запретить HTTP (оставить только HTTPS):</strong></p>
<pre><code class="language-bash">sudo ufw delete allow 80/tcp
</code></pre>
<p dir="auto"><strong>Результат:</strong></p>
<pre><code>     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 443/tcp                     ALLOW IN    Anywhere
</code></pre>
<h2>iptables — мощь и сложность</h2>
<p dir="auto">Если UFW не справляется — нужен iptables. Это база под UFW.</p>
<h3>Просмотр iptables-правил</h3>
<p dir="auto"><strong>Список всех правил в filter-таблице:</strong></p>
<pre><code class="language-bash">sudo iptables -L -v -n
</code></pre>
<p dir="auto">Флаги:</p>
<ul>
<li><code>-L</code> — list (показать)</li>
<li><code>-v</code> — verbose (подробно)</li>
<li><code>-n</code> — numeric (показывать IP вместо имён хостов, быстрее)</li>
</ul>
<p dir="auto">Вывод:</p>
<pre><code>Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80

Chain FORWARD (policy ACCEPT)
...

Chain OUTPUT (policy ACCEPT)
...
</code></pre>
<p dir="auto"><strong>Список с номерами строк (для удаления):</strong></p>
<pre><code class="language-bash">sudo iptables -L -v -n --line-numbers
</code></pre>
<p dir="auto"><strong>Просмотреть таблицу NAT:</strong></p>
<pre><code class="language-bash">sudo iptables -t nat -L -v -n
</code></pre>
<p dir="auto"><strong>Просмотреть таблицу mangle:</strong></p>
<pre><code class="language-bash">sudo iptables -t mangle -L -v -n
</code></pre>
<h3>Добавление правил в iptables</h3>
<p dir="auto"><strong>Синтаксис:</strong></p>
<pre><code class="language-bash">sudo iptables -A CHAIN -p PROTOCOL --dport PORT -j ACTION
</code></pre>
<p dir="auto">где:</p>
<ul>
<li><code>-A CHAIN</code> — добавить в цепь (INPUT, OUTPUT, FORWARD)</li>
<li><code>-p PROTOCOL</code> — протокол (tcp, udp, icmp)</li>
<li><code>--dport PORT</code> — дестинационный порт (куда идёт пакет)</li>
<li><code>-j ACTION</code> — действие (ACCEPT, DROP, REJECT)</li>
</ul>
<p dir="auto"><strong>Разрешить входящий SSH (порт 22):</strong></p>
<pre><code class="language-bash">sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
</code></pre>
<p dir="auto"><strong>Разрешить входящий HTTP (порт 80):</strong></p>
<pre><code class="language-bash">sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
</code></pre>
<p dir="auto"><strong>Запретить входящий telnet (порт 23):</strong></p>
<pre><code class="language-bash">sudo iptables -A INPUT -p tcp --dport 23 -j DROP
</code></pre>
<p dir="auto"><strong>Разрешить входящий трафик только с конкретного IP:</strong></p>
<pre><code class="language-bash">sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
</code></pre>
<p dir="auto">флаг <code>-s</code> — source (источник)</p>
<p dir="auto"><strong>Разрешить входящий трафик из подсети:</strong></p>
<pre><code class="language-bash">sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
</code></pre>
<p dir="auto"><strong>Разрешить исходящий DNS (используется везде для преводл URL в IP):</strong></p>
<pre><code class="language-bash">sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
</code></pre>
<p dir="auto"><strong>Разрешить ответные пакеты для уже установленных соединений:</strong></p>
<pre><code class="language-bash">sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
</code></pre>
<p dir="auto">флаг <code>-m conntrack</code> — модуль отслеживания соединений<br />
<code>--ctstate ESTABLISHED,RELATED</code> — пакеты из установленного соединения или связанные с ним</p>
<p dir="auto">Это <strong>критичное</strong> правило для stateful firewall!</p>
<h3>Практическое правило: начальная безопасная конфигурация</h3>
<pre><code class="language-bash"># Разрешить loopback (сам с собой)
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

# Разрешить ответные пакеты установленных соединений
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Разрешить SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Разрешить HTTP и HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Разрешить DNS (и входящий, и исходящий)
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT

# Заблокировать всё остальное (по умолчанию)
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
</code></pre>
<p dir="auto">Последние три строки — <strong>политики по умолчанию</strong>. <code>-P</code> — set policy.</p>
<h3>Вставка и удаление правил в iptables</h3>
<p dir="auto"><strong>Вставить в начало цепи (проверится первым):</strong></p>
<pre><code class="language-bash">sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
</code></pre>
<p dir="auto">флаг <code>-I</code> вместо <code>-A</code>; <code>1</code> — позиция</p>
<p dir="auto"><strong>Удалить правило по номеру:</strong></p>
<pre><code class="language-bash">sudo iptables -L -v -n --line-numbers  # сначала смотрим номера
sudo iptables -D INPUT 3  # удаляем 3-е правило из INPUT
</code></pre>
<p dir="auto">флаг <code>-D</code> — delete</p>
<p dir="auto"><strong>Удалить правило по полной спецификации:</strong></p>
<pre><code class="language-bash">sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT
</code></pre>
<h3>Сохранение iptables-правил</h3>
<p dir="auto"><strong>Важно!</strong> Правила iptables хранятся в памяти. При перезагрузке они теряются!</p>
<p dir="auto"><strong>Сохранить текущие правила:</strong></p>
<pre><code class="language-bash">sudo iptables-save &gt; /etc/iptables/rules.v4
</code></pre>
<p dir="auto"><strong>Загрузить правила при загрузке (Ubuntu/Debian):</strong><br />
Установите пакет iptables-persistent:</p>
<pre><code class="language-bash">sudo apt-get install iptables-persistent
</code></pre>
<p dir="auto">Во время установки вас спросят, сохранять ли текущие правила. Выберите “Yes”.</p>
<p dir="auto">Правила автоматически загружатся при загрузке.</p>
<p dir="auto"><strong>Вручную загрузить правила:</strong></p>
<pre><code class="language-bash">sudo iptables-restore &lt; /etc/iptables/rules.v4
</code></pre>
<h2>UFW vs iptables — что выбрать?</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Задача</th>
<th>UFW</th>
<th>iptables</th>
</tr>
</thead>
<tbody>
<tr>
<td>Базовая фильтрация на сервере</td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Используй это</td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /> Слишком сложно</td>
</tr>
<tr>
<td>Простые правила для SSH, HTTP, HTTPS</td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Идеально</td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /> Много букв</td>
</tr>
<tr>
<td>Нужна максимальная гибкость</td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /> Ограничено</td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Полный контроль</td>
</tr>
<tr>
<td>Сложное преобразование адресов (NAT)</td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /> Нет</td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Да</td>
</tr>
<tr>
<td>Вы новичок</td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Начни с этого</td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /> Страшно</td>
</tr>
<tr>
<td>Вы опытный администратор</td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Можно</td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Предпочтительно</td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>Практический совет:</strong> Начните с UFW. Если потребуется что-то специфичное — UFW позволяет добавлять кастомные iptables-правила параллельно.</p>
<h2>Типичные ошибки и как их избежать</h2>
<p dir="auto"><strong><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /> Ошибка 1: Включить firewall, забыв добавить SSH</strong></p>
<pre><code class="language-bash">sudo ufw enable  # ОЙ! SSH не открыт!
# Теперь не сможете подключиться удалённо...
</code></pre>
<p dir="auto"><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> <strong>Решение:</strong> Всегда первым правилом добавляйте SSH:</p>
<pre><code class="language-bash">sudo ufw allow 22
sudo ufw enable
</code></pre>
<p dir="auto"><strong><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /> Ошибка 2: Неправильный порядок правил</strong></p>
<pre><code class="language-bash">sudo ufw allow from 192.168.1.0/24 to any port 22
sudo ufw deny from 192.168.1.50 to any port 22
</code></pre>
<p dir="auto">IP 192.168.1.50 будет разрешен (первое правило срабатывает).</p>
<p dir="auto"><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> <strong>Решение:</strong> Вставляйте более специфичные правила в начало:</p>
<pre><code class="language-bash">sudo ufw insert 1 deny from 192.168.1.50 to any port 22
</code></pre>
<p dir="auto"><strong><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /> Ошибка 3: Забыть указать протокол</strong></p>
<pre><code class="language-bash">sudo ufw allow 22  # Разрешит ТАК И ДРУГОЙ, и UDP и TCP
</code></pre>
<p dir="auto">Иногда нужен конкретный:</p>
<pre><code class="language-bash">sudo ufw allow 22/tcp
</code></pre>
<p dir="auto"><strong><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/274c.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--x" style="height:23px;width:auto;vertical-align:middle" title="❌" alt="❌" /> Ошибка 4: Забыть о IPv6</strong></p>
<p dir="auto">UFW автоматически добавляет правила для IPv6 (v6), но если отключите IPv6 в системе, сообщите UFW:</p>
<pre><code class="language-bash">sudo nano /etc/default/ufw
# Найдите строку IPV6=yes, измените на no
sudo ufw reload
</code></pre>
<h2>Полезные команды</h2>
<p dir="auto"><strong>Проверить, какие приложения слушают какие порты:</strong></p>
<pre><code class="language-bash">sudo netstat -tlnp
# или более современно:
sudo ss -tlnp
</code></pre>
<p dir="auto">Вывод покажет:</p>
<pre><code>LISTEN     0      128                    0.0.0.0:22                 0.0.0.0:*                   users:(("sshd",pid=1234,fd=3))
LISTEN     0      128                    0.0.0.0:80                 0.0.0.0:*                   users:(("nginx",pid=5678,fd=4))
</code></pre>
<p dir="auto"><strong>Проверить логи UFW:</strong></p>
<pre><code class="language-bash">sudo tail -50 /var/log/ufw.log
</code></pre>
<p dir="auto"><strong>Проверить статус сервиса UFW:</strong></p>
<pre><code class="language-bash">sudo systemctl status ufw
</code></pre>
<p dir="auto"><strong>Перезагрузить правила UFW (без перезагрузки):</strong></p>
<pre><code class="language-bash">sudo ufw reload
</code></pre>
<h2>Итого: пошаговая инструкция для новичка</h2>
<h3>Шаг 1: Добавить SSH (ОБЯЗАТЕЛЬНО!)</h3>
<pre><code class="language-bash">sudo ufw allow 22/tcp comment "SSH"
</code></pre>
<h3>Шаг 2: Включить firewall</h3>
<pre><code class="language-bash">sudo ufw enable
</code></pre>
<h3>Шаг 3: Добавить остальные правила по мере надобности</h3>
<pre><code class="language-bash">sudo ufw allow 80/tcp comment "HTTP"
sudo ufw allow 443/tcp comment "HTTPS"
</code></pre>
<h3>Шаг 4: Проверить статус</h3>
<pre><code class="language-bash">sudo ufw status verbose
</code></pre>
<h3>Шаг 5: Просмотреть логи, если что-то работает неправильно</h3>
<pre><code class="language-bash">sudo tail -f /var/log/ufw.log
</code></pre>
<h3>Шаг 6: Если что-то сломалось — отключить</h3>
<pre><code class="language-bash">sudo ufw disable
</code></pre>
<p dir="auto">После разбора проблемы включить обратно.</p>
<h2>Полезные источники для дальшейшего изучения</h2>
<ul>
<li>Официальная документация UFW: <a href="https://help.ubuntu.com/community/UFW" target="_blank" rel="noopener noreferrer">https://help.ubuntu.com/community/UFW</a></li>
<li>ArchWiki про iptables: <a href="https://wiki.archlinux.org/title/Iptables" target="_blank" rel="noopener noreferrer">https://wiki.archlinux.org/title/Iptables</a></li>
<li>man-страницы (в терминале): <code>man ufw</code>, <code>man iptables</code></li>
</ul>
]]></description><link>https://forum.exlends.ru/topic/384/gajd-dlya-novichkov-firewall-ufw-iptables-pravila-porty-filtraciya-trafika</link><generator>RSS for Node</generator><lastBuildDate>Wed, 20 May 2026 10:01:49 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/384.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Jan 2026 20:03:02 GMT</pubDate><ttl>60</ttl></channel></rss>