Настройка межсетевого экрана в Linux: различия между версиями

− <pre />; →‎См. также: Iptables; переименован (был: «Ссылки».)
({{Темы|Linux|Компьютерные сети}})
(− <pre />; →‎См. также: Iptables; переименован (был: «Ссылки».))
=== Проверим состояние ===
==== Вариант 1 (рекомендуется в целях безопасности) ====
 
<pre>
sudo iptables-save
</pre>
 
При отсутствии правил вывод будет примерно таким:
 
*filter
<pre>
:OUTPUTINPUT ACCEPT [0:0]
*filter
:INPUTFORWARD ACCEPT [0:0]
:FORWARDOUTPUT ACCEPT [0:0]
COMMIT
:OUTPUT ACCEPT [0:0]
 
COMMIT
</pre>
Если вывод отличается, то сброс настроек можно сделать командой
sudo iptables-restore < empty.rules
<pre>
sudo iptables-restore < empty.rules
</pre>
 
где empty.rules - текстовый файл, содержащий 5 строк, как в выводе выше.
 
==== Вариант 2 ====
 
<pre>
sudo iptables -nvL
</pre>
 
При отсутствии правил вывод будет примерно таким:
</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.}}
sudo iptables -P OUTPUTINPUT ACCEPTDROP
<pre>
sudo iptables -P INPUTFORWARD DROP
sudo iptables -P FORWARDOUTPUT DROPACCEPT
sudo iptables -P OUTPUT ACCEPT
</pre>
 
=== Исключения (для входящих соединений) ===
1. Разрешим трафик, принадлежащий установленным соединениям
 
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
<pre>
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
</pre>
 
2. Разрешим локальный интерфейс
 
sudo iptables -A INPUT -i lo -j ACCEPT
<pre>
sudo iptables -A INPUT -i lo -j ACCEPT
</pre>
 
3. Запретим "неправильный" трафик (не открывающий новое соединение и не принадлежащий никакому установленному соединению).
 
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
<pre>
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
</pre>
 
4. Разрешим новые ICMP запросы (ping). Остальные запросы ping будут обработаны первым правилом.
 
sudo iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
<pre>
sudo iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
</pre>
 
5. Разрешим новые входные соединения по портам
Если установлен веб-сервер
 
sudo iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW --dport 80 -j ACCEPT
<pre>
sudo iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW --dport 80 -j ACCEPT
</pre>
 
Если необходима связь по SSH
 
sudo iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW --dport 22 -j ACCEPT
<pre>
sudo iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW --dport 22 -j ACCEPT
</pre>
 
Если установлен DNS-сервер
 
sudo iptables -A INPUT -p udp -m conntrack --ctstate NEW --dport 53 -j ACCEPT
<pre>
sudo iptables -A INPUT -p udp -m conntrack --ctstate NEW --dport 53 -j ACCEPT
</pre>
 
есть возможность объединить несколько правил (для увеличения производительности):
 
sudo iptables -A INPUT -p tcp -m multiport --dports 21,22,6881:6882 -j ACCEPT
<pre>
sudo iptables -A INPUT -p tcp -m multiport --dports 21,22,6881:6882 -j ACCEPT
</pre>
 
6. Все новые входящие соединения, не обработанные предыдущими цепочками, запретим.
 
sudo iptables -A INPUT -p tcp -j REJECT --reject-with icmptcp-proto-unreachreset
<pre>
sudo iptables -A INPUT -p tcpudp -j REJECT --reject-with tcpicmp-reset port-unreachable
sudo iptables -A INPUT -p udp -j REJECT --reject-with icmp-portproto-unreachableunreach
sudo iptables -A INPUT -j REJECT --reject-with icmp-proto-unreach
</pre>
 
=== Сохраним правила ===
 
==== Arch Linux ====
 
<pre>
sudo /etc/rc.d/iptables save
 
</pre>
==== RedHat Linux ====
 
<pre>
sudo /sbin/service iptables save
</pre>
 
добавим демон для применения правил при загрузке компьютера
 
DAEMONS=(... iptables network ...)
<pre>
DAEMONS=(... iptables network ...)
</pre>
 
=== Итоговый список правил ===
</pre>
 
== СсылкиСм. также ==
 
* [[Iptables]]
* [https://wiki.archlinux.org/index.php/Simple_stateful_firewall_HOWTO Simple stateful firewall HOWTO - Arch Linux]
 
{{Темы|Linux|Компьютерные сети}}
3891

правка