- 21 пример использования iptables для администраторов.
- 1. Показать статус.
- 2. Отобразить список правил с номерами строк.
- 3. Отобразить INPUT или OUTPUT цепочки правил.
- 4. Остановить, запустить, перезапустить файрвол.
- 5. Удалить правила файрвола.
- 6. Добавить правило в файрвол.
- 7. Сохраняем правила файрвола.
- 8. Восстанавливаем правила.
- 9. Устанавливаем политики по умолчанию.
- 10. Блокировать только входящие соединения.
- 11. Сбрасывать адреса изолированных сетей в публичной сети.
- 12. Блокировка определенного IP адреса.
- 13. Заблокировать входящие запросы порта.
- 14. Заблокировать запросы на исходящий IP адрес.
- 15. Записать событие и сбросить.
- 16. Записать событие и сбросить (с ограничением на количество записей).
- 16. Сбрасывать или разрешить трафик с определенных MAC адресов.
- 17. Разрешить или запретить ICMP Ping запросы.
- 18. Открыть диапазон портов.
- 19. Открыть диапазон адресов.
- 20. Закрыть или открыть стандартные порты.
- 21. Ограничить количество параллельных соединений к серверу для одного адреса.
- Помощь по iptables.
- Проверка правила iptables.
- Настройка netfilter с помощью iptables
- Принцип настройки
- Ключи iptables и примеры их использования
- Для работы с таблицами (iptables -t)
- Команды
- Условия
- Действия
- Примеры часто используемых команд iptables
- Общие команды
21 пример использования iptables для администраторов.
Файрвол в системе 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 ещё более защищённой поможет видеоматериал.
Источник
Настройка netfilter с помощью iptables
Утилита командной строки 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. |
Команды
Нижеперечисленные ключи определяют действия, которые выполняет утилита 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
Для каждой таблицы смотреть правила нужно отдельно:
Источник