iptables для чайников: 12 примеров iptables


Ну а сегодня хочу написать заметку по использованию iptables. Когда только начинался знакомство с Linux, iptables вызывали у меня чувство тревоги и непонимания. В данной заметку опишу несколько основных подходов к использованию iptables

1. Отображение статуса вашего файервола

# iptables -L -n -v
Вывод примерно следующий:
 Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 
В данном случае наш файервол не запущен, при запущеном файерволе вывод будет следующим:
 Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID
  394 43586 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
   93 17292 ACCEPT     all  --  br0    *       0.0.0.0/0            0.0.0.0/0
    1   142 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  br0    br0     0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID
    0     0 TCPMSS     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    0     0 wanin      all  --  vlan2  *       0.0.0.0/0            0.0.0.0/0
    0     0 wanout     all  --  *      vlan2   0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  br0    *       0.0.0.0/0            0.0.0.0/0
Chain OUTPUT (policy ACCEPT 425 packets, 113K bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain wanin (1 references)
 pkts bytes target     prot opt in     out     source               destination
Chain wanout (1 references)
 pkts bytes target     prot opt in     out     source               destination
 
Где: -L : Отобразить список правил. -v : Показать дополнительную информацию, имя интерфейса, опции, TOS маски. -n : Отображать ip адрес и порт числами

2. Запускаем и останавливаем правила

Если вы используете дистрибутив на основе RHEL (Fedora, CentOS), то можете использовать сервис
# service iptables stop
# service iptables start
# service iptables restart
Но также можно это сделать и командами самого 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 : Удаление всех правил. -X : Удаление цепочки правил. -t table_name : Выбрать таблицу и удалить все правила. -P : Выбрать действия по умолчанию (такие, как DROP, REJECT, или ACCEPT).

3. Добавляем правило iptables

# iptables -L INPUT -n --line-numbers
имеет вот такой вывод:
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    DROP       all  --  202.54.1.1           0.0.0.0/0
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state NEW,ESTABLISHED 

4. Удаляем правило Iptables

# 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
Получаем список всех правил, чтобы удалить правило под каким либо номером, к примеру 5, пишем:
# iptables -D INPUT 5

5. Сохраняем правила iptables

Аналогично предыдущему комментарию, если RHEL-based дисмтрибутив, используем сервис
service iptables save
Или же просто:
# iptables-save > /root/my.active.firewall.rules
# cat /root/my.active.firewall.rules

6. Восстанавливаем правила Iptables из файла

# iptables-restore < /root/moi.pravila
Потом просто рестартим файервол

7. Блокируем все соединения

# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
# iptables -L -v -n

8. Блокируем только входящие соединения

# 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

9. Блокируем соединения из азолированых сетей публичной сети

# 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

10. Блокируем определенный Ip адрес или блок ip адресов

# iptables -A INPUT -s 1.2.3.4 -j DROP
# iptables -A INPUT -s 192.168.0.0/24 -j DROP
Где, 1.2.3.4 это частный ip адрес, а 192.168.0.0/24 блокируемая подсеть

11. Блокируем запросы на определенный порт

# iptables -A INPUT -p tcp --dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP
Данная команда заблокируем все входящие запросу на 80-ый порт, чтобы заблокировать запросы с определенного адреса, используем:
# 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

12. Фильтруем определенные mac адреса

# iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP
Тут мы блокируем определенный mac адрес. Чтобы разрешить доступ лишь с опредленного mac адреса, пишем:
# iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT

Популярные сообщения