Новые информационные технологии и программное обеспечение
  RSS    

20231229 200x300 0d249f2d3676e05c1a28a375dff09c2a



Интефейс управления брендмауэра - iptables

iptables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) netfilter. С ее помощью администраторы создают и модифицируют правила, управляющие фильтрацией, перенаправлением (NAT) и модификацией пакетов. Для использования утилиты iptables требуются привилегии суперпользователя (root).
Иногда под словом iptables имеется в виду и сам межсетевой экран netfilter.

В комплект поставки любого современного дистрибутива Linux (с версией ядра 2.4.x и 2.6.x) входит система сетевой защиты netfilter/iptables. Основная часть кода этих программных продуктов непосредственно включена в код ядра, а часть - исполняемые файлы, библиотеки, устанавливается в виде обычных файлов. Если вы используете достаточно современный дистрибутив, не собираетесь использовать экзотического программного обеспечения и не предъявляете жесткиx требований к безопасности, то скорее всего вы сможете ограничиться возможностями rpm-пакетов, входящих в комплект поставки дистрибутива. Проверьте, установлен ли пакет iptables:
[root@homerouter root]# rpm -qa | grep iptables
iptables-1.2.6a-1.asp
Если пакет не установлен, то установите его:
[root@homerouter root]# rpm -ihv iptables-version.rpm
Если у поставщика дистрибутива или сторонних производителей имеется более свежая версия пакета, то обновите его:
[root@homerouter root]# rpm -Uhv iptables-version.rpm
При этом может потребоваться установка пакетов, удовлетворяющих зависимости, например, пакетов, содержащих исходные коды ядра.
 

 

 

Сайт Netfilter 

Форум технической поддержки


 

Примеры настройки:

Допустим ваш компьютер смотрит одним сетевым интерфейсом (eth0, с IP адресом 10.10.10.10) в интернет, а вторым (eth1, с IP 101.101.101.101) в локальную сеть.

1. Защищаемся от "интернет"

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable

-A FORWARD -o eth0 -p tcp -j DROP

Т.е. всё логируем и блокируем. Со стороны интернета (по входу) всё заблокировано. FORWARD по выходу с eth0 заперт.

На этом можно остановиться, если вам не нужно открывать порты для доступа из интернет. (доступ к портам вашего копьютера со стороны "Интернет"). 

2. Допустим, что у Вас почтовый сервер (открываем доступ к вашему копьютеру со стороны интернет):

-A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable

-A FORWARD -o eth0 -p tcp -j DROP

Заметьте, что 110 порт остаётся запертым. (запрет получения почты со стороны интернет)

Соответственно, если нужно получать почту со стороны интернет с вашего почтового сервера, то:

-A INPUT -i eth0 -p tcp --dport 110 -j ACCEPT

-A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable

-A FORWARD -o eth0 -p tcp -j DROP

Теперь будьте внимательны, вы открыли 110 порт для всех IP адресов со стороны интернета.

Можно ограничить доступ IP адресов на ваш 110 порт. Допустим, что вы точно знаете, что доступ для получения почты (на 110 порт) со стороны интернет будут IP адресов с 100.100.100.110, то:

-A INPUT -s 100.100.100.110 -i eth0 -p tcp --dport 110 -j ACCEPT

-A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable

-A FORWARD -o eth0 -p tcp -j DROP

 

Теперь допустим, что нужен доступ с ещё одного IP, к примеру с 88.88.88.88, то:

-A INPUT -s 88.88.88.88 -i eth0 -p tcp --dport 110 -j ACCEPT

-A INPUT -s 100.100.100.110 -i eth0 -p tcp --dport 110 -j ACCEPT

-A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable

-A FORWARD -o eth0 -p tcp -j DROP

 

Если необходимо осуществить доступ с диапазоном IP адресов, к примеру с 88.88.88.0 по 88.88.88.255, то:

-A INPUT -s 88.88.88.0/24 -i eth0 -p tcp --dport 110 -j ACCEPT

-A INPUT -s 100.100.100.110 -i eth0 -p tcp --dport 110 -j ACCEPT

-A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable

-A FORWARD -o eth0 -p tcp -j DROP

 

Если необходимо осуществить  доступ кроме диапазона IP адресов, к примеру кроме с 88.88.88.0 по 88.88.88.255, то:

-A INPUT -s ! 88.88.88.0/24 -i eth0 -p tcp --dport 110 -j ACCEPT

-A INPUT -s 100.100.100.110 -i eth0 -p tcp --dport 110 -j ACCEPT

-A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable

-A FORWARD -o eth0 -p tcp -j DROP

 

Этого вполне достаточно для почтового сервера. Если нужен доступ к вашему копьютеру со стороны интернет по другим портам, соответственно просто добавляем соответствующий порт путём добавления строки:

-A INPUT -i eth0 -p tcp --dport порт -j ACCEPT

где порт - это номер порта который вы открываете. Но есть условия, открываем порты (добавляем строки input) по входу только перед двумя строками:

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable

 

3. Теперь добавим подмену IP адресов (маскарадинг). Таблица NAT.

Допустим, что со стороны локальной сети (eth1) вам нужно пустить своих пользователей в интернет (по всем портам), т.е. пропустить от eth1 на eth0 c IP адресом 10.10.10.10, что соответствует IP адресу на интерфейсе eth0. Это будет совершаться в обход кэшируюших служб, к примеру прокси-сервера. Далее:

-A POSTROUTING -o eth0 -j SNAT --to-source 10.10.10.10

итог:

*nat

-A POSTROUTING -o eth0 -j SNAT --to-source 10.10.10.10

COMMIT

*filter

-A INPUT -s 88.88.88.88 -i eth0 -p tcp --dport 110 -j ACCEPT

-A INPUT -s 100.100.100.110 -i eth0 -p tcp --dport 110 -j ACCEPT

-A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options

-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable

-A FORWARD -o eth0 -p tcp -j DROP

COMMIT

Но пока подмена локальных IP на внешний пока происходить не будет, т.к. цепочка FORWARD закрыта (-A FORWARD -o eth0 -p tcp -j DROP)

Что же мы получили POSTROUTING - по выходу с интерфейса eth0 все локальные IP адреса преобразуются в один внешний IP-адрес 10.10.10.10. Т.е. все компьютеры в локальной сети, как бы, объединяются в один компьютер с одним внешним IP адресом, соответственно получают доступ в интернет по всем портам. (при условии если по цепочке FORWARD будет открыт доступ)

 

А Если у Вас динамический IP от провайдера (подлючении по протоколу PPPoE), то маскарадинг делается так:

*nat

-A POSTROUTING -o ppp0 -j MASQUERADE

 

4. Цепочка FORWARD в таблице filter

FORWARD - это то, что мы пропускаем мимо локальных служб (серверов), т.е. организуем шлюз локальной сети во внешнию сеть.

К примеру:

-A FORWARD -o eth0 -p tcp -j DROP

Мы запретили FORWARD по выходу с интерфейса eth0 для всех портов tcp.

Что мы из этого получили:

Мы не пустим пакеты tcp из интернета в нашу локальную сеть и наоборот из локали в интернет. Т.е. из интернета к нам в локалку никто не попадёт и наоборот из локальной сети, напрямую в интернет никто не попадёт.

Можно сделать в обратном порядке, т.е. что то пропустить, к примеру, определенному пользователю (ip: 88.88.88.88) из интернет (eth0) нужно попасть в Вашу локальную сеть по порту 139:

-A FORWARD -p tcp -d 88.88.88.88 -m tcp --dport 139 -o eth0 -j ACCEPT

-A FORWARD -o eth0 -p tcp -j DROP

А если нужен диапазон, то всё так же, -d 88.88.88.0/24 или исключение диапазона -d ! 88.88.88.0/24

-A FORWARD -p tcp -d ! 88.88.88.0/24 -o eth0 -p tcp -j DROP

Диапазон можно ещё указать так:

-A FORWARD -m iprange --src-range 88.88.88.5-88.88.88.124 -j ACCEPT

-A FORWARD -m iprange --dst-range 10.0.0.0-10.255.255.255 -j ACCEPT

Пример 1. Шлюзование всех внутренних IP на все внешние IP

Допустим, что диапозон локальных IP адресов 168.192.1.1-168.192.1.254, что можно записать так: 168.192.1.0/24

К сетевому интерфейсу eth1 подключена локальная сеть (с диапозоном IP адресов 168.192.1.2-168.192.1.254) и имеет IP 168.192.1.1 с маской подсети 255.255.255.0

В локальной сети компьютеры в свойствах сети, протокола TCP/IP имеют IP адреса в диапозоне 168.192.1.2-168.192.1.254 с маской подсети 255.255.255.0, шлюзом 168.192.1.1 и первичным DNS указан IP адрес DNS вашего провайдера.

Сетевой интерфейс eth0 подключен к внешней сети (интернет), если к интернет другой интерфейс, к примеру ppp0, то в конфиге вместо eth0 указать интерфейс ppp0 (можно ppp+, что означает все интерфейсы ppp).

1. по всем портам будет так:

Код:

-A FORWARD -s 168.192.1.0/24 -i eth1 -j ACCEPT

-A FORWARD -d 168.192.1.0/24 -o eth1 -j ACCEPT

-A FORWARD -o eth0 -p tcp -j DROP

-A FORWARD -o eth1 -p tcp -j DROP

2. по определённому порту (80 порт TCP) так:

Код:

-A FORWARD -s 168.192.1.0/24 -p tcp -m tcp --dport 80 -i eth1 -j ACCEPT

-A FORWARD -d 168.192.1.0/24 -p tcp -m tcp --sport 80 -o eth1 -j ACCEPT

-A FORWARD -o eth0 -p tcp -j DROP

-A FORWARD -o eth1 -p tcp -j DROP

3. А по нескольким определённым TCP портах, так:

Код:

-A FORWARD -s 168.192.1.0/24 -p tcp -m multiport --dports 20,21,25,110 -i eth1 -j ACCEPT

-A FORWARD -d 168.192.1.0/24 -p tcp -m multiport --sports 20,21,25,110 -o eth1 -j ACCEPT

-A FORWARD -o eth0 -p tcp -j DROP

-A FORWARD -o eth1 -p tcp -j DROP

4. Получаем конфигурацию для IPTABLES:

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -s 168.192.1.0/24 -p icmp -i eth1 -j ACCEPT
-A FORWARD -d 168.192.1.0/24 -p icmp -o eth1 -j ACCEPT
-A FORWARD -s 168.192.1.0/24 -p udp -m udp --dport 53 -i eth1 -j ACCEPT
-A FORWARD -d 168.192.1.0/24 -p udp -m udp --sport 53 -o eth1 -j ACCEPT
-A FORWARD -s 168.192.1.0/24 -p tcp -m multiport --dports 20,21,25,80,110,8080 -i eth1 -j ACCEPT
-A FORWARD -d 168.192.1.0/24 -p tcp -m multiport --sports 20,21,25,80,110,8080 -o eth1 -j ACCEPT
-A FORWARD -s 168.192.1.0/24 -p ! icmp -m state --state INVALID -i eth1 -j DROP
-A FORWARD -d 168.192.1.0/24 -p ! icmp -m state --state INVALID -o eth1 -j DROP
-A FORWARD -o eth0 -j DROP
-A FORWARD -o eth1 -j DROP
COMMIT

Пояснения:

1. Маскарадинг локальных IP адресов в один внешний.

2. Закрыть доступ для внешних IP адресов (из интернет) на все локальные службы сервера (шлюза).

3. Разрешить, по умолчанию, локальным службам сервера (шлюза) доступ к внешней сети (интернет).

4. Разрешить шлюзование диапозона локальных IP адресов (168.192.1.1-168.192.1.254) на все внешние IP, но только по TCP портам: 20,21,25,80,110,8080 (для транзита HTTP, FTP и Mail протоколов)

5. Разрешить шлюзование диапозона локальных IP адресов (168.192.1.1-168.192.1.254) на все внешние IP, для служебных запросов (для транзита UDP 53 и icmp из локальной сети)

6. Запрет на все прочее 

 Пример 2 "Переадресация портов"

Допустим Вам нужно переадресовать с одного порта на другой, к примеру вы хотите сделать редирект с 80 порта на 8080:

*nat

-I PREROUTING -d 10.1.0.20 -p tcp --dport 80 -J DNAT --to-destination 10.1.0.20:8080

-I POSTROUTING -s 10.1.0.20 -o eth0 -p tcp -j SNAT --to-source 10.1.0.20:8080

COMMIT

где 10.1.0.20 ip-адрес web-сервера.

Или просто редирект с одного порта на другой.

*nat

-A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

 

Оставьте свой комментарий!

Добавить комментарий


 

Самое читаемое:

Быстрый поиск

Инструкции к программам

Инструкции к программам

Сайт "Новые Информационные Технологии" содержит лишь справочные данные из открытых источников. Мы НЕ Рекламируем и НЕ Рекомендуем покупать или использовать ВСЕ упомянутые на сайте программы, оборудование и технологии