Iptables открыть порт для определенного ip

Содержание
  1. 1. Показать статус.
  2. 2. Отобразить список правил с номерами строк.
  3. 3. Отобразить INPUT или OUTPUT цепочки правил.
  4. 4. Остановить, запустить, перезапустить файрвол.
  5. 5. Удалить правила файрвола.
  6. 6. Добавить правило в файрвол.
  7. 7. Сохраняем правила файрвола.
  8. 8. Восстанавливаем правила.
  9. 9. Устанавливаем политики по умолчанию.
  10. 10. Блокировать только входящие соединения.
  11. 11. Сбрасывать адреса изолированных сетей в публичной сети.
  12. 12. Блокировка определенного IP адреса.
  13. 13. Заблокировать входящие запросы порта.
  14. 14. Заблокировать запросы на исходящий IP адрес.
  15. 15. Записать событие и сбросить.
  16. 16. Записать событие и сбросить (с ограничением на количество записей).
  17. 16. Сбрасывать или разрешить трафик с определенных MAC адресов.
  18. 17. Разрешить или запретить ICMP Ping запросы.
  19. 18. Открыть диапазон портов.
  20. 19. Открыть диапазон адресов.
  21. 20. Закрыть или открыть стандартные порты.
  22. 21. Ограничить количество параллельных соединений к серверу для одного адреса.
  23. Помощь по iptables.
  24. Проверка правила iptables.
  25. Принцип настройки
  26. Ключи iptables и примеры их использования
  27. Для работы с таблицами (iptables -t)
  28. Команды
  29. Условия
  30. Действия
  31. Примеры часто используемых команд iptables
  32. Общие команды
  33. 2 ответа 2

Файрвол в системе linux контролируется программой iptables (для ipv4) и ip6tables (для ipv6). В данной шпаргалке рассмотрены самые распространённые способы использования iptables для тех, кто хочет защитить свою систему от взломщиков или просто разобраться в настройке.

Знак # означает, что команда выполняется от root. Откройте заранее консоль с рутовыми правами — sudo -i в Debian-based системах или su в остальных.

1. Показать статус.

Примерный вывод команды для неактивного файрвола:

Для активного файрвола:

Где:
-L : Показать список правил.
-v : Отображать дополнительную информацию. Эта опция показывает имя интерфейса, опции, TOS маски. Также отображает суффиксы ‘K’, ‘M’ or ‘G’.
-n : Отображать IP адрес и порт числами (не используя DNS сервера для определения имен. Это ускорит отображение).

2. Отобразить список правил с номерами строк.

# iptables -n -L -v —line-numbers

Вы можете использовать номера строк для того, чтобы добавлять новые правила.

3. Отобразить INPUT или OUTPUT цепочки правил.

# iptables -L INPUT -n -v
# iptables -L OUTPUT -n -v —line-numbers

4. Остановить, запустить, перезапустить файрвол.

Силами самой системы:
# service ufw stop
# service ufw start

Можно также использовать команды iptables для того, чтобы остановить файрвол и удалить все правила:
# iptables -F
# iptables -X
# iptables -t nat -F
# iptables -t nat -X
# iptables -t mangle -F
# iptables -t mangle -X
# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD ACCEPT

Где:
-F : Удалить (flush) все правила.
-X : Удалить цепочку.
-t table_name : Выбрать таблицу (nat или mangle) и удалить все правила.
-P : Выбрать действия по умолчанию (такие, как DROP, REJECT, или ACCEPT).

5. Удалить правила файрвола.

Чтобы отобразить номер строки с существующими правилами:
# iptables -L INPUT -n —line-numbers
# iptables -L OUTPUT -n —line-numbers
# iptables -L OUTPUT -n —line-numbers | less
# iptables -L OUTPUT -n —line-numbers | grep 202.54.1.1

Получим список IP адресов. Просто посмотрим на номер слева и удалим соответствующую строку. К примеру для номера 3:
# iptables -D INPUT 3

Или найдем IP адрес источника (202.54.1.1) и удалим из правила:
# iptables -D INPUT -s 202.54.1.1 -j DROP

Где:
-D : Удалить одно или несколько правил из цепочки.

6. Добавить правило в файрвол.

Чтобы добавить одно или несколько правил в цепочку, для начала отобразим список с использованием номеров строк:
# iptables -L INPUT -n —line-numbers

Чтобы вставить правило между 1 и 2 строкой:
# iptables -I INPUT 2 -s 202.54.1.2 -j DROP

Проверим, обновилось ли правило:
# iptables -L INPUT -n —line-numbers

Вывод станет таким:

7. Сохраняем правила файрвола.

Через iptables-save:
# iptables-save > /etc/iptables.rules

8. Восстанавливаем правила.

Через iptables-restore
# iptables-restore

9. Устанавливаем политики по умолчанию.

Чтобы сбрасывать весь трафик:
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
# iptables -L -v -n

После вышеперечисленных команд ни один пакет не покинет данный хост.
# ping google.com

10. Блокировать только входящие соединения.

Чтобы сбрасывать все не инициированные вами входящие пакеты, но разрешить исходящий трафик:
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
# iptables -A INPUT -m state —state NEW,ESTABLISHED -j ACCEPT
# iptables -L -v -n

Пакеты исходящие и те, которые были запомнены в рамках установленных сессий — разрешены.
# ping google.com

11. Сбрасывать адреса изолированных сетей в публичной сети.

# iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Читайте также:  Что означают значки на авито

Список IP адресов для изолированных сетей:
10.0.0.0/8 -j (A)
172.16.0.0/12 (B)
192.168.0.0/16 (C)
224.0.0.0/4 (MULTICAST D)
240.0.0.0/5 (E)
127.0.0.0/8 (LOOPBACK)

12. Блокировка определенного IP адреса.

Чтобы заблокировать адрес взломщика 1.2.3.4:
# iptables -A INPUT -s 1.2.3.4 -j DROP
# iptables -A INPUT -s 192.168.0.0/24 -j DROP

13. Заблокировать входящие запросы порта.

Чтобы заблокировать все входящие запросы порта 80:
# iptables -A INPUT -p tcp —dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp —dport 80 -j DROP

Чтобы заблокировать запрос порта 80 с адреса 1.2.3.4:
# iptables -A INPUT -p tcp -s 1.2.3.4 —dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 —dport 80 -j DROP

14. Заблокировать запросы на исходящий IP адрес.

Чтобы заблокировать определенный домен, узнаем его адрес:
# host -t a facebook.com

Вывод: facebook.com has address 69.171.228.40

Найдем CIDR для 69.171.228.40:
# whois 69.171.228.40 | grep CIDR

Вывод:
CIDR: 69.171.224.0/19

Заблокируем доступ на 69.171.224.0/19:
# iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP

Также можно использовать домен для блокировки:
# iptables -A OUTPUT -p tcp -d www.fаcebook.com -j DROP
# iptables -A OUTPUT -p tcp -d fаcebook.com -j DROP

15. Записать событие и сбросить.

Чтобы записать в журнал движение пакетов перед сбросом, добавим правило:

# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG —log-prefix "IP_SPOOF A: "
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Проверим журнал (по умолчанию /var/log/messages):
# tail -f /var/log/messages
# grep -i —color ‘IP SPOOF’ /var/log/messages

16. Записать событие и сбросить (с ограничением на количество записей).

Чтобы не переполнить раздел раздутым журналом, ограничим количество записей с помощью -m. К примеру, чтобы записывать каждые 5 минут максимум 7 строк:
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit —limit 5/m —limit-burst 7 -j LOG —log-prefix "IP_SPOOF A: "
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

16. Сбрасывать или разрешить трафик с определенных MAC адресов.

# iptables -A INPUT -m mac —mac-source 00:0F:EA:91:04:08 -j DROP
## *разрешить только для TCP port # 8080 с mac адреса 00:0F:EA:91:04:07 * ##
# iptables -A INPUT -p tcp —destination-port 22 -m mac —mac-source 00:0F:EA:91:04:07 -j ACCEPT

17. Разрешить или запретить ICMP Ping запросы.

Чтобы запретить ping:
# iptables -A INPUT -p icmp —icmp-type echo-request -j DROP
# iptables -A INPUT -i eth1 -p icmp —icmp-type echo-request -j DROP

Разрешить для определенных сетей / хостов:
# iptables -A INPUT -s 192.168.1.0/24 -p icmp —icmp-type echo-request -j ACCEPT

Разрешить только часть ICMP запросов:
### ** предполагается, что политики по умолчанию для входящих установлены в DROP ** ###
# iptables -A INPUT -p icmp —icmp-type echo-reply -j ACCEPT
# iptables -A INPUT -p icmp —icmp-type destination-unreachable -j ACCEPT
# iptables -A INPUT -p icmp —icmp-type time-exceeded -j ACCEPT
## ** разрешим отвечать на запрос ** ##
# iptables -A INPUT -p icmp —icmp-type echo-request -j ACCEPT

18. Открыть диапазон портов.

# iptables -A INPUT -m state —state NEW -m tcp -p tcp —dport 7000:7010 -j ACCEPT

19. Открыть диапазон адресов.

## разрешить подключение к порту 80 (Apache) если адрес в диапазоне от 192.168.1.100 до 192.168.1.200 ##
# iptables -A INPUT -p tcp —destination-port 80 -m iprange —src-range 192.168.1.100-192.168.1.200 -j ACCEPT

## пример для nat ##
# iptables -t nat -A POSTROUTING -j SNAT —to-source 192.168.1.20-192.168.1.25

20. Закрыть или открыть стандартные порты.

Заменить ACCEPT на DROP, чтобы заблокировать порт.

## ssh tcp port 22 ##
iptables -A INPUT -m state —state NEW -m tcp -p tcp —dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state —state NEW -p tcp —dport 22 -j ACCEPT

## cups (printing service) udp/tcp port 631 для локальной сети ##
iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp —dport 631 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp —dport 631 -j ACCEPT

## time sync via NTP для локальной сети (udp port 123) ##
iptables -A INPUT -s 192.168.1.0/24 -m state —state NEW -p udp —dport 123 -j ACCEPT

## tcp port 25 (smtp) ##
iptables -A INPUT -m state —state NEW -p tcp —dport 25 -j ACCEPT

Читайте также:  Как закрепить колпаки чтобы не украли

# dns server ports ##
iptables -A INPUT -m state —state NEW -p udp —dport 53 -j ACCEPT
iptables -A INPUT -m state —state NEW -p tcp —dport 53 -j ACCEPT

## http/https www server port ##
iptables -A INPUT -m state —state NEW -p tcp —dport 80 -j ACCEPT
iptables -A INPUT -m state —state NEW -p tcp —dport 443 -j ACCEPT

## tcp port 110 (pop3) ##
iptables -A INPUT -m state —state NEW -p tcp —dport 110 -j ACCEPT

## tcp port 143 (imap) ##
iptables -A INPUT -m state —state NEW -p tcp —dport 143 -j ACCEPT

## Samba file server для локальной сети ##
iptables -A INPUT -s 192.168.1.0/24 -m state —state NEW -p tcp —dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state —state NEW -p tcp —dport 138 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state —state NEW -p tcp —dport 139 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state —state NEW -p tcp —dport 445 -j ACCEPT

## proxy server для локальной сети ##
iptables -A INPUT -s 192.168.1.0/24 -m state —state NEW -p tcp —dport 3128 -j ACCEPT

## mysql server для локальной сети ##
iptables -I INPUT -p tcp —dport 3306 -j ACCEPT

21. Ограничить количество параллельных соединений к серверу для одного адреса.

Для ограничений используется connlimit модуль. Чтобы разрешить только 3 ssh соединения на одного клиента:
# iptables -A INPUT -p tcp —syn —dport 22 -m connlimit —connlimit-above 3 -j REJECT

Установить количество запросов HTTP до 20:
# iptables -p tcp —syn —dport 80 -m connlimit —connlimit-above 20 —connlimit-mask 24 -j DROP

Где:
—connlimit-above 3 : Указывает, что правило действует только если количество соединений превышает 3.
—connlimit-mask 24 : Указывает маску сети.

Помощь по iptables.

Для поиска помощи по iptables, воспользуемся man:
$ man iptables

Чтобы посмотреть помощь по определенным командам и целям:
# iptables -j DROP -h

Проверка правила iptables.

Проверяем открытость / закрытость портов:
# netstat -tulpn

Проверяем открытость / закрытость определенного порта:
# netstat -tulpn | grep :80

Проверим, что iptables разрешает соединение с 80 портом:
# iptables -L INPUT -v -n | grep 80

В противном случае откроем его для всех:
# iptables -A INPUT -m state —state NEW -p tcp —dport 80 -j ACCEPT

Проверяем с помощью telnet
$ telnet ya.ru 80

Можно использовать nmap для проверки:
$ nmap -sS -p 80 ya.ru

Автор статьи Platon Puhlechev aka iFalkorr разрешает печатать данный текст.

Iptables отличный инструмент в руках администратора. Если нужно легко и просто защититься в десктопной Ubuntu, то стоит знать, что есть удобная консольная надстройка над iptables под названием UFW, а к ней есть графическая программа GUFW. Сделать свою Ubuntu ещё более защищённой поможет видеоматериал.

Утилита командной строки iptables используется для настройки брандмауэра netfilter, встроенного в систему на базе ядра Linux.

Данная инструкция подходит как для чайников, которые хотят разбираться в аспектах защиты сети, так и опытных специалистов в качестве шпаргалки.

Принцип настройки

Общий синтаксис использования iptables:

iptables -t [номер]

Правила netfilter распределены по 4-м таблицам, каждая из которых имеет свое назначение (подробнее ниже). Она указывается ключом -t, но если данный параметр не указан, действие будет выполняться для таблицы по умолчанию — filter.

Команды указывают, какое именно действие мы совершаем над netfilter, например, создаем или удаляем правило.

В каждой таблице есть цепочки, для каждой из которых создаются сами правила. Например, для вышеупомянутой таблицы filter есть три предопределенные цепочки — INPUT (входящие пакеты), OUTPUT (исходящие) и FORWARD (транзитные).

[номер]

Некоторые команды требуют указания номера правила, например, на удаление или редактирование.

Условие описывает критерии отработки того или иного правила.

Ну и, собственно, что делаем с пакетом, если он подходит под критерии условия.

* справедливости ради, стоит отметить, что ключ с действием не обязан идти в конце. Просто данный формат чаще всего встречается в инструкциях и упрощает чтение правил.

Ключи iptables и примеры их использования

Для работы с таблицами (iptables -t)

Напоминаю, все правила в netfilter распределены по таблицам. Чтобы работать с конкретной таблицей, необходимо использовать ключ -t.

Ключ Описание
-t filter Таблица по умолчанию. С ней работаем, если упускаем ключ -t. Встроены три цепочки — INPUT (входящие), OUTPUT (исходящие) и FORWARD (проходящие пакеты)
-t nat Для пакетов, устанавливающий новое соединение. По умолчанию, встроены три цепочки — PREROUTING (изменение входящих), OUTPUT (изменение локальных пакетов перед отправкой) и POSTROUTING (изменение всех исходящих).
-t mangle Для изменения пакетов. Цепочки — INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING.
-t raw Для создания исключений в слежении за соединениями. Цепочки: PREROUTING, OUTPUT.
Читайте также:  Драйвер вай фай для ноутбука асер aspire

Команды

Нижеперечисленные ключи определяют действия, которые выполняет утилита iptables.

Ключ Описание и примеры
-A Добавление правила в конец списка:
iptables -A INPUT -s 192.168.0.15 -j DROP
запретить входящие с 192.168.0.15.
-D Удаление правила:
iptables -D INPUT 10
удалить правило в цепочке INPUT с номером 10.
-I Вставка правила в определенную часть списка:
iptables -I INPUT 5 -s 192.168.0.15 -j DROP
вставить правило 5-м по списку.
-R Замена правила.
iptables -R OUTPUT 5 -s 192.168.0.15 -j ACCEPT
заменить наше 5-е правило с запрещающего на разрешающее.
-F Сброс правил в цепочке.
iptables -F INPUT
-Z Обнуление статистики.
iptables -Z INPUT
-N Создание цепочки.
iptables -N CHAINNEW
-X Удаление цепочки.
iptables -X CHAINNEW
-P Определение правила по умолчанию.
iptables -P INPUT DROP
-E Переименовывание цепочки.
iptables -E CHAINNEW CHAINOLD

Условия

Данные ключи определяют условия правила.

Ключ Описание и примеры
-p Сетевой протокол. Допустимые варианты — TCP, UDP, ICMP или ALL.
iptables -A INPUT -p tcp -j ACCEPT
разрешить все входящие tcp-соединения.
-s Адрес источника — имя хоста, IP-адрес или подсеть в нотации CIDR.
iptables -A INPUT -s 192.168.0.50 -j DROP
запретить входящие с узла 192.168.0.50
-d Адрес назначения. Принцип использования аналогичен предыдущему ключу -s.
iptables -A OUTPUT -d 192.168.0.50 -j DROP
запретить исходящие на узел 192.168.0.50
-i Сетевой адаптер, через который приходят пакеты (INPUT).
iptables -A INPUT -i eth2 -j DROP
запретить входящие для Ethernet-интерфейса eth2.
-o Сетевой адаптер, с которого уходят пакеты (OUTPUT).
iptables -A OUTPUT -o eth3 -j ACCEPT
разрешить исходящие с Ethernet-интерфейса eth3.
—dport Порт назначения.
iptables -A INPUT -p tcp —dport 80 -j ACCEPT
разрешить входящие на порт 80.
—sport Порт источника.
iptables -A INPUT -p tcp —sport 1023 -j DROP
запретить входящие с порта 1023.

Перечисленные ключи также поддерживают конструкцию с использованием знака !. Он инвертирует условие, например,
iptables -A INPUT -s ! 192.168.0.50 -j DROP
запретит соединение всем хостам, кроме 192.168.0.50.

Действия

Действия, которые будут выполняться над пакетом, подходящим под критерии условия. Для каждой таблицы есть свой набор допустимых действий. Указываются с использованием ключа -j.

Таблица Действие Описание
filter ACCEPT Разрешает пакет.
DROP Запрещает пакет.
REJECT Запрещает с отправкой сообщения источнику.
nat MASQUERADE Для исходящих пакетов заменяет IP-адрес источника на адрес интерфейса, с которого уходит пакет.
SNAT Аналогично MASQUERADE, но с указанием конкретного сетевого интерфейса, чей адрес будет использоваться для подмены.
DNAT Подмена адреса для входящих пакетов.
REDIRECT Перенаправляет запрос на другой порт той же самой системы.
mangle TOS Видоизменение поля TOS (приоритезация трафика).
DSCP Изменение DSCP (тоже приоритезация трафика).
TTL Изменение TTL (время жизни пакета).
HL Аналогично TTL, но для IPv6.
MARK Маркировка пакета. Используется для последующей фильтрации или шейпинга.
CONNMARK Маркировка соединения.
TCPMSS Изменение значения MTU.

Примеры часто используемых команд iptables

Общие команды

Просмотр правил с их номерами:

iptables -L —line-numbers

Для каждой таблицы смотреть правила нужно отдельно:

Как разрешить доступ к базе данных с фиксированного IP с помощью программы iptables?

Текущее состояние таблицы filter:

2 ответа 2

если для таблицы filter установлена политика ACCEPT (строка :INPUT ACCEPT в выводе iptables-save ) и в таблице отсутствуют другие правила, то примерно так:

т.е., отклонить все пакеты, приходящие по протоколу tcp не с указанного ip-адреса на указанный порт .

но в вашем конкретном случае, учитывая, что цепочка INPUT заканчивается правилом с директивой REJECT (строка -A INPUT -j REJECT . в выводе iptables-save ), добавлять это правило netfilter-а (изменив его логику на противоположную) надо не в конец цепочки INPUT (что делает команда -A ), а где-нибудь выше финального правила. например, в самое начало цепочки (с помощью команды -I без аргумента):

т.е., разрешить все пакеты, приходящие по протоколу tcp с указанного ip-адреса на указанный порт .

Оцените статью
Добавить комментарий