Ну а сегодня хочу написать заметку по использованию 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