- Программа для поиска драйверов на любое устройство
- Как технология OCR снижает нагрузку на офис
- Как настроить локальную сеть через Wi-Fi
- Как операционная система Windows стала такой популярной
- Продвижение товаров на Wildberries с привлечением внешнего трафика
- Простая программа для управления проектами «Планамайзер»
- Автоматизация и оптимизация работы предприятий общепита: обзор решений
- Лучшие графические карты 2022 года
Интефейс управления брендмауэра - iptables |
iptables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) netfilter. С ее помощью администраторы создают и модифицируют правила, управляющие фильтрацией, перенаправлением (NAT) и модификацией пакетов. Для использования утилиты iptables требуются привилегии суперпользователя (root). В комплект поставки любого современного дистрибутива Linux (с версией ядра 2.4.x и 2.6.x) входит система сетевой защиты netfilter/iptables. Основная часть кода этих программных продуктов непосредственно включена в код ядра, а часть - исполняемые файлы, библиотеки, устанавливается в виде обычных файлов. Если вы используете достаточно современный дистрибутив, не собираетесь использовать экзотического программного обеспечения и не предъявляете жесткиx требований к безопасности, то скорее всего вы сможете ограничиться возможностями rpm-пакетов, входящих в комплект поставки дистрибутива. Проверьте, установлен ли пакет iptables:
Примеры настройки:Допустим ваш компьютер смотрит одним сетевым интерфейсом (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 в таблице filterFORWARD - это то, что мы пропускаем мимо локальных служб (серверов), т.е. организуем шлюз локальной сети во внешнию сеть. К примеру: -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
Оставьте свой комментарий!
Похожие статьи: |