- Viewing all iptables rules
- 8 Answers 8
- IPTABLES
- 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. Открыть диапазон портов.
- 9. Открыть диапазон адресов.
- 20. Закрыть или открыть стандартные порты.
- 21. Ограничить количество параллельных соединений к серверу для одного адреса.
- Помощь по iptables.
- Проверка правила iptables.
Viewing all iptables rules
Is there a way to view iptables rules in a bit more detail? I recently added masquerade to a range of IPs:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE service iptables save service iptables restart
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
8 Answers 8
When using the -L , —list option to list the current firewall rules, you also need to specify the appropriate Netfilter table (one of filter , nat , mangle , raw or security ). So, if you’ve added a rule for the nat table, you should explicitly specify this table using the -t , —table option:
Or using the options short form:
If you don’t specify a specific table, the filter table is used as the default.
For faster results, it can be useful to also include the -n , —numeric option to print numeric IP addresses instead of hostnames, thus avoiding the need to wait for reverse DNS lookups.
You can get even more information by including the -v , —verbose option.
iptables controls five different tables: filter , nat , mangle , raw and security . On a given call, iptables only displays or modifies one of these tables, specified by the argument to the option -t (defaulting to filter ). To see the complete state of the firewall, you need to call iptables on each of the tables successively.
Additionally, to get an accurate representation of the rules, you need to pass the option -v . Otherwise some important criteria are omitted in the output, such as the interface in filter rules (e.g. a rule that says “accept everything” and a rule that says “accept everything on the loopback interface” can only be distinguished with -v ).
Thus, to get a complete presentation of the netfilter rules, you need
iptables -vL -t filter iptables -vL -t nat iptables -vL -t mangle iptables -vL -t raw iptables -vL -t security
Alternatively, you can call the iptables-save program, which displays all the rules in all tables in a format that can be parsed by iptables-restore . This format is also reasonably readable by humans (it’s pretty much like a series of calls to the iptables command to build the table).
IPTABLES
Thank you for reading this post, don’t forget to subscribe!
Где:
-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 iptables stop
# service iptables 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 < /etc/iptables.rules
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 ©
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 DR
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
Заблокируем доступ на 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
9. Открыть диапазон адресов.
## разрешить подключение к порту 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