Настройка межсетевого экрана в Linux: различия между версиями
Содержимое удалено Содержимое добавлено
Coolmans (обсуждение | вклад) Нет описания правки |
JenVan (обсуждение | вклад) |
||
Строка 1:
{{Внимание|Это руководство нужно применять только войдя в систему локально. Если же Вы войдете в систему удалённо (по SSH, например), то скорее всего потеряете соединение с удалённой системой.}}
== Немного теории ==
=== Принцип работы ===
Все пакеты пропускаются через определенные для них последовательности цепочек
=== Встроенные действия===
ACCEPT, DROP и REJECT — базовые операции фильтрации
==== Таблица mangle ====
Данная таблица предназначена для операций по классификации и маркировке пакетов и соединений, а также модификации заголовков пакетов (поля TTL и TOS).
==== Таблица nat ====
Предназначена для операций stateful-преобразования сетевых адресов и портов обрабатываемых пакетов.
==== Таблица filter ====
Предназначена для фильтрации трафика, то есть разрешения и запрещения пакетов и соединений.
Таблица filter содержит следующие цепочки:
* INPUT — эта цепочка обрабатывает трафик, поступающий непосредственно самому хосту.
* FORWARD — позволяет фильтровать транзитный трафик.
* OUTPUT — эта цепочка позволяет фильтровать трафик, исходящий от самого хоста.
{{info|Правила стоит располагать по возможности в порядке от наиболее частых попаданий к наиболее редким.}}
== Персональный межсетевой экран рабочей станции ==
=== Проверим состояние ===
==== Вариант 1 (рекомендуется в целях безопасности) ====
<pre>
sudo iptables-save
</pre>
При отсутствии правил вывод будет примерно таким:
<pre>
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
</pre>
Если вывод отличается, то сброс настроек можно сделать командой
<pre>
sudo iptables-restore < empty.rules
</pre>
где empty.rules - текстовый файл, содержащий 5 строк, как в выводе выше.
====
<pre>
sudo iptables -nvL
</pre>
При отсутствии правил вывод будет примерно таким:
<pre>
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0K packets, 0 bytes)
pkts bytes target prot opt in out source destination
</pre>
чтобы сбросить:
<pre>
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F
sudo iptables -X
</pre>
=== Установим политики по умолчанию ===
Для цепочки "проходящая" устанавливаем блокировку, для цепочки "выходная" устанавливаем разрешение, для цепочки "входная" устанавливаем блокировку. Далее будут правила, определяющие исключения для этих политик.
{{Внимание|На этом этапе произойдёт отключение, если связь производилась по SSH.}}
<pre>
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
</pre>
=== Исключения (для входящих соединений) ===
1. Разрешим трафик, принадлежащий установленным соединениям
<pre>
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
</pre>
2. Разрешим локальный интерфейс
<pre>
sudo iptables -A INPUT -i lo -j ACCEPT
</pre>
3. Запретим "неправильный" трафик (не открывающий новое соединение и не принадлежащий никакому установленному соединению).
<pre>
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
</pre>
4. Разрешим новые ICMP запросы (ping). Остальные запросы ping будут обработаны первым правилом.
<pre>
sudo iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
</pre>
5. Разрешим новые входные соединения по портам
Если установлен веб-сервер
<pre>
sudo iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW --dport 80 -j ACCEPT
</pre>
Если необходима связь по SSH
<pre>
sudo iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW --dport 22 -j ACCEPT
</pre>
Если установлен DNS-сервер
<pre>
sudo iptables -A INPUT -p udp -m conntrack --ctstate NEW --dport 53 -j ACCEPT
</pre>
есть возможность объединить несколько правил (для увеличения производительности):
<pre>
sudo iptables -A INPUT -p tcp -m multiport --dports 21,22,6881:6882 -j ACCEPT
</pre>
6. Все новые входящие соединения, не обработанные предыдущими цепочками, запретим.
<pre>
sudo iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
sudo iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
sudo iptables -A INPUT -j REJECT --reject-with icmp-proto-unreach
</pre>
=== Сохраним правила ===
==== Arch Linux ====
<pre>
sudo /etc/rc.d/iptables save
</pre>
добавим демон для применения правил при загрузке компьютера
<pre>
DAEMONS=(... iptables network ...)
</pre>
=== Итоговый список правил ===
<pre>
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
sudo iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
sudo iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
sudo iptables -A INPUT -j REJECT --reject-with icmp-proto-unreach
</pre>
== Ссылки ==
* [https://wiki.archlinux.org/index.php/Simple_stateful_firewall_HOWTO Simple stateful firewall HOWTO - Arch Linux]
[[Категория:Компьютерные сети]]
[[Категория: GNU/Linux]]
|