Cyberbe Notes from Blackcat

21 пример использования iptables для администраторов

Feb 082016

1. Чтобы показать статус нужно:
iptables -L -n -v
Рассмотрим где и что применяется:
-L : — Эта опция нужна для показа списка правил.
-v : — Этот ключ отобразит дополнительную инфу. Этот ключик покажет интерфейс (его имя), опции, разные TOS маски, отобразит также суффиксы ‘K’, ‘M’ или ‘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 198.158.234.134
Как увидеть список IP-шников. Нужно посмотреть слева на нумерацию и я могу удалить строки которые уже присутствуют. Например для номера 4:
iptables -D INPUT 4
Или поищем IP-шник источника (192.168.244.134) и после чего удалим его из наших правил:
iptables -D INPUT -s 192.168.244.134 -j DROP
Пояснение по ключу:
-D : служит для удаления 1 или пары правил из цепи.

6. Если Вы хотите прописать новое правило в фаервол, выполните:

Если необходимо добавить одно или парочку правил в одну цепочку, то для начала выведем список с нумерацией строк:
iptables -L INPUT -n --line-numbers
Допустим Вам нужно вставить правило между первой и второй строкой, то нужно выполнить:
iptables -I INPUT 2 -s 132.178.244.134-j DROP
Убедимся, обновилось ли наше правило:
iptables -L INPUT -n —line-numbers
7. Что бы сохранить правило (а) в фаерволе нужно.
Можно это сделать с помощью следующей команды:
iptables-save > /etc/iptables.rules
8. Чтобы восстановить правило (а) в фаерволе нужно.

Можно это сделать с помощью следующей команды:
iptables-restore < /etc/iptables.rules
9. Чтобы вернуть как все и было (Установить все как было по дефолту).

Чтобы вернуть как было весь трафик нужно выполнить:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#iptables -L -v -n
После того как вы выполните команды что выше, то ни 1 из пакетов не покинет прописанный хост.
ping linux-notes.org
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 linux-notes.org
11. Как сбросить адрес изолированных сетей в публичной сети?
iptables -A INPUT -i eth1 -s 192.168.244.0/24 -j DROP
iptables -A INPUT -i eth1 -s 11.11.11.0/8 -j DROP
Список айпишников для всей изолированной сети ( изолированных сетей):
11.11.11.0/8 -j (A)
172.16.15.0/12 (B)
192.168.244.0/16 (C)
225.0.0.0/4 (MULTICAST D)
144.0.0.0/5 (E)
127.0.0.0/8 (LOOPBACK)

12. Чтобы заблокировать определенный IP адрес нужно:
iptables -A INPUT -s 192.168.244.144 -j DROP
iptables -A INPUT -s 192.168.0.0/24 -j DROP
192.168.244.144 — Это айпишник надоедливого человека, допустим мы его захотели забанить.

13. Как сделать блокировку входящего запроса с порта?

Если вам нужно например сделать блокировку всех входящих запросов с порта 80, то выполните:
iptables -A INPUT -p tcp —dport 80 -j DROP
iptables -A INPUT -i eth1 -p tcp —dport 80 -j DROP
Чтобы сделать блокировку запроса на порту 80 с ИП-адреса 192.168.244.144 нужно:
iptables -A INPUT -p tcp -s 192.168.244.144 —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 linux-notes.org
Вывод: linux-notes.org has address 65.178.248.45

Найдем CIDR для 65.178.248.45:
whois 65.178.248.45 | grep CIDR
Вывод: CIDR: 65.178.2145.0/18

Сделаем блокировку на 65.178.2145.0/18:
iptables -A OUTPUT -p tcp -d 65.178.2145.0/18 -j DROP
Можно кат же заблокировать сам домен:
iptables -A OUTPUT -p tcp -d www.linux-notes.org -j DROP
iptables -A OUTPUT -p tcp -d linux-notes.org -j DROP
15. Как записать события или сбросить их?

Чтобы сделать запись в ЛОГ движение пакетов перед сбросом, добавим некоторое правило:
iptables -A INPUT -i eth1 -s 11.11.11.0/8 -j LOG —log-prefix «IP_SPOOF A: «
iptables -A INPUT -i eth1 -s 11.11.11.0/8 -j DROP
Посмотрим лог (по умолчанию /var/log/messages):
tail -f /var/log/messages
grep -i —color ‘IP SPOOF’ /var/log/messages
16. Записать некоторое событие и сбросить (с ограничениями по количеству записей).

Чтобы не заполнить какой то раздел большим журналом, можно сделать ограничение на количество записей с использованием опции «-m». Например, чтобы записывать каждые 4 минуты и максимум 6 строк выполните:
iptables -A INPUT -i eth1 -s 10.10.10.0/8 -m limit —limit 4/m —limit-burst 6 -j LOG —log-prefix «IP_SPOOF A: «
iptables -A INPUT -i eth1 -s 10.10.10.0/8 -j DROP
16. Как сбросить или разрешить прохождения трафика с некоторого мак-адреса?
iptables -A INPUT -m mac —mac-source AA:0F:EA:81:03:18 -j DROP
Чтобы разрешить только для TCP по порту 8080 с некоторого мак-адреса, допустим с AA:0F:EA:81:03:19 выполните:
iptables -A INPUT -p tcp —destination-port 22 -m mac —mac-source AA:0F:EA:81:03:19 -j ACCEPT
17. Как разрешить или запретить запросы ICMP 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.244.0/25 -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. Как можно открыть диапазон определенных портов?

Сделать это можно очень просто, стоит указать в каких пределах можно открыть порты, в данном примере я открою с 666-6666:
iptables -A INPUT -m state —state NEW -m tcp -p tcp —dport 666:6666 -j ACCEPT
19. Как можно открыть диапазон определенных ИП адресов?

Например нужно разрешить подключение Apache по порту 80 если адреса в диапазоне от 192.168.244.66 до 192.168.244.244, а сделать это можно следующим образом:
iptables -A INPUT -p tcp —destination-port 80 -m iprange —src-range 192.168.244.66-192.168.244.244 -j ACCEPT
Приведу пример еще и для nat-а:
iptables -t nat -A POSTROUTING -j SNAT —to-source 192.168.244.22-192.168.244.24
20. Покажу как можно открыть или закрыть стандартные порты.

Делается это следующим образом, нужно заменить ACCEPT на DROP, чтобы заблокировать какой то порт. Для службы ssh tcp по порту 22:
iptables -A INPUT -m state —state NEW -m tcp -p tcp —dport 22 -j ACCEPT
iptables -A INPUT -s 132.148.244.0/26 -m state —state NEW -p tcp —dport 22 -j ACCEPT
Для службы cups (printing service) или udp/tcp по порту 631 в локальной сети:
iptables -A INPUT -s 132.168.244.0/26 -p udp -m udp —dport 631 -j ACCEPT
iptables -A INPUT -s 132.168.244.0/26 -p tcp -m tcp —dport 631 -j ACCEPT
Синхронизация времени (time sync) через службу NTP в локальной сети (udp по порту 123):
iptables -A INPUT -s 132.168.244.0/26 -m state —state NEW -p udp —dport 123 -j ACCEPT
Для службы tcp по порту 25 (smtp):
iptables -A INPUT -m state —state NEW -p tcp —dport 25 -j ACCEPT
Для службы dns server-а по порту 53:
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 по порту 80 и 443:
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 по порту 110 (pop3):
iptables -A INPUT -m state —state NEW -p tcp —dport 110 -j ACCEPT
Для tcp по порту 143 (imap):
iptables -A INPUT -m state —state NEW -p tcp —dport 143 -j ACCEPT
Для службы Samba file server в локальной сети по портам: 137, 138, 139, 445:
iptables -A INPUT -s 132.168.244.0/26 -m state —state NEW -p tcp —dport 137 -j ACCEPT
iptables -A INPUT -s 132.168.244.0/26 -m state —state NEW -p tcp —dport 138 -j ACCEPT
iptables -A INPUT -s 132.168.244.0/26 -m state —state NEW -p tcp —dport 139 -j ACCEPT
iptables -A INPUT -s 132.168.244.0/26 -m state —state NEW -p tcp —dport 445 -j ACCEPT
Для proxy server-а в локальной сети по порту 3128:
iptables -A INPUT -s 132.168.244.0/26 -m state —state NEW -p tcp —dport 3128 -j ACCEPT
Для mysql server-а для локальной сети по порту 3306:
iptables -I INPUT -p tcp —dport 3306 -j ACCEPT
21. Если нужно как то ограничить количество одновременных соединений на сервер для конкретного ИП-адреса.

Если это нужно сделать, то нам нужно использовать connlimit модуль. для того чтобы разрешить только 4 ssh соединения для одного клиента выполните:
iptables -A INPUT -p tcp —syn —dport 22 -m connlimit —connlimit-above 4 -j REJECT
Если нужно установить количество запросов для HTTP например до 23 с маской 24:
iptables -p tcp —syn —dport 80 -m connlimit —connlimit-above 23 —connlimit-mask 24 -j DROP
Пояснения по ключикам:
—connlimit-above 23 : Говорит, что данное правило выполняется когда количество соединений больше 23.
—connlimit-mask 24 : Говорит какую маску нужно использовать, у меня это 24.

Как получить помощь по iptables?

Чтобы найти помощь по iptables,используйте мануал (man):
man iptables
Если нужно просмотреть только по конкретным командам и целям, используйте:
iptables -j DROP -h
Чтобы выполнить проверку правил iptables на открытые и закрытые порты:
netstat -tulpn
Чтобы выполнить проверку правил iptables на открытые и закрытые определенные порты, допустим по порту 80:
netstat -tulpn | grep :80
Посмотрим разрешает ли соединение с 80 портом в iptables:
iptables -L INPUT -v -n | grep 80
Или можно его открыть для всех:
iptables -A INPUT -m state —state NEW -p tcp —dport 80 -j ACCEPT
Так же можно это проверить и с использованием телнет (telnet):
telnet linux-notes.org 80
Можете заюзать nmap для такой же проверки:
nmap -sS -p 80 linux-notes.org