Управление iptables
service iptables stop
- Остановка
service iptables start - Запуск
service iptables restart - Перезагрузка
service iptables save - Сохранить правила брандмауэра (CentOS / RHEL / Fedora Linux)
iptables-save - Сохранить правила
iptables-save > /root/my.active.firewall.rules - Сохранить правила (в других дистрибутивах)
Включение ip forward (трафик меджу интерфейсами)
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -p
tools
iptables -L - вывести список правил iptables -S - вывести список правил iptables -L -n -v - вывести список правил (-n не резолвить IP) (-v Отображение подробной информации) iptables -L -n -v --line-numbers - просмотр правил с номером строки iptables -L INPUT -n -v - просмотра INPUT iptables -L OUTPUT -n -v --line-numbers - просмотра OUTPUT iptables -L INPUT -n --line-numbers - просмотр правил с номером строки в INPUT iptables -L OUTPUT -n --line-numbers - просмотр правил с номером строки в OUTPUT iptables -L OUTPUT -n --line-numbers | less - просмотр правил с номером строки в OUTPUT перенаправив вывод в less iptables -L OUTPUT -n --line-numbers | grep 8.8.8.8 - просмотр правил с номером строки в OUTPUT грепаем 8.8.8.8
Очистка таблицы filter:
iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD
Очистка таблицы nat:
iptables -t nat -F PREROUTING iptables -t nat -F POSTROUTING
Очистка таблицы mangle:
iptables -t mangle -F PREROUTING
iptables -F - Удаление всех правил (flushing) 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 - Установить политику по умолчанию
Очистка правил подробно:
Чистим ветки логов:
iptables -F undef_in iptables -F undef_out iptables -F undef_fw iptables -X undef_in iptables -X undef_out iptables -X undef_fw
Закрываем всё:
iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
Включаем NAT:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Разрешаем принимать трафик на loopback-интерфейсе:
iptables -A INPUT eth2 -j ACCEPT iptables -A INPUT -i eth1 -j ACCEPT iptables -A FORWARD -i lo -o eth1 -j ACCEPT$IPT -A FORWARD -i eth2 -o lo -j ACCEPT iptables -A FORWARD -i lo -o eth2 -j ACCEPT$IPT -A FORWARD -i eth1 -o lo -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT
Разрешение исходящего трафика:
iptables -A OUTPUT -o eth0 -j ACCEPT iptables -A OUTPUT -o eth1 -j ACCEPT iptables -A OUTPUT -o eth2 -j ACCEPT
Разрешить соединения, которые инициированы изнутри:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
Следующими правилами разрешаем коннекты на наш сервер из вне:
iptables -A INPUT -p udp --dport 33434:33523 -j ACCEPT - Разрешить traceroute iptables -A INPUT -p tcp --dport 22 -j ACCEPT - Разрешаем SSH iptables -A INPUT -p tcp --dport 10000 -j ACCEPT - Разрешаем webmin iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT - Доступ на http
Проброс RDP на сервер терминалов:
iptables -t nat -A PREROUTING -p tcp --dport 3389 -i eth0 -j DNAT --to 192.168.0.100 iptables -A FORWARD -i eth0 -d 192.168.0.100 -p tcp --dport 3389 -j ACCEPT
Выход из локалки на почтовые сервера:
iptables -A FORWARD -d smtp.mail.ru -o eth0 -p tcp -m tcp --dport 25 -j ACCEPT iptables -A FORWARD -d smtp.masterhost.ru -o eth0 -p tcp -m tcp --dport 25 -j ACCEPT
Заворачиваем трафик на порт сквида:
iptables -t nat -A PREROUTING -p tcp -m multiport --dport 80,81,82,83,88,8000,8001,8002,8080,8081,3128,9090 -s 0/0 -d 0/0 -j REDIRECT --to-port 3128 iptables -t nat -A PREROUTING -p udp -m multiport --dport 80,81,82,83,88,8000,8001,8002,8080,8081,3128,9090 -s 0/0 -d 0/0 -j REDIRECT --to-port 3128
Если прокси не установлена, либо нет нужды в использовании SQUID, то просто форвардим нужные порты:
iptables -A FORWARD -o eth0 -p tcp -m multiport --dport 80,81,82,83,88,8000,8001,8002,8080,8081,3128,9090 -j ACCEPT
Прячем NAT:
iptables -t mangle -A PREROUTING -j TTL --ttl-set 64 iptables -t mangle -A PREROUTING -j RETURN
Все что не разрешено, но ломится отправим в цепочку undef:
iptables -N undef_in iptables -N undef_out iptables -N undef_fw iptables -A INPUT -i vlan2 -j undef_in iptables -A OUTPUT -j undef_out iptables -A FORWARD -j undef_fw
Логировать все из цепочки undef:
iptables -A undef_in -j LOG --log-level info --log-prefix "--- IN --- DROP " iptables -A undef_in -j DROP iptables -A undef_out -j LOG --log-level info --log-prefix " --- OUT --- DROP " iptables -A undef_out -j DROP iptables -A undef_fw -j LOG --log-level info --log-prefix "--- FW --- DROP " iptables -A undef_fw -j DROP
Антибрут ssh:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT После этого хосты, пытающиеся перебирать пароль, будут блокироваться: все IP из черного списка будут фиксироваться в файле /proc/net/ipt_recent/SSH
Разрешаем некоторые ICMP-сообщения:
https://ru.wikipedia.org/wiki/ICMP - icmp-type iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 3 -j ACCEPT iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 11 -j ACCEPT iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 12 -j ACCEPT
open firewall:
iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT # Небольшая защита от DoS iptables -A INPUT -p all -m state --state RELATED,ESTABLISHED -j ACCEPT # Разрешаем уже установленные соединения iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT # Разрешаем 22 порт iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT # Разрешаем 80 порт iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 3 -j ACCEPT # Разрешаем некоторые ICMP-сообщения iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 11 -j ACCEPT # Разрешаем некоторые ICMP-сообщения iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 12 -j ACCEPT # Разрешаем некоторые ICMP-сообщения iptables -A INPUT DROP
Еще несколько полезных команд
# iptables -t filter -L
Вывести список всех цепочек правил
# iptables -t nat -L
Вывести все цепочки из NAT таблицы
# iptables -t nat -F
Очистить все цепочки правил в таблице NAT
# iptables -t filter -X
Очистить все пользовательские цепочки правил в таблице filter
# iptables -t filter -F
Очистить все цепочки правил в таблице filter
# iptables -t filter -A INPUT -p tcp --dport telnet -j ACCEPT
Разрешить входящие соединения с telnet
# iptables -t filter -A OUTPUT -p tcp --dport http -j DROP
Запретить исходящие HTTP соединения
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
включить NAT (Network Address Translate) исходящих пакетов на интерфейс eth0. Допустимо при использовании с динамически выделяемыми ip-адресами.
# iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp -m tcp --dport 22 -j DNAT --to-destination 10.0.0.2:22
Пересылка пакетов, адресованных одному хосту, на другой хост
# iptables -t filter -A INPUT -j LOG --log-prefix
Включить логгирование пакетов, проходящих через цепочку INPUT, и добавлением к сообщению префикса «DROP INPUT»
# iptables -t filter -A FORWARD -p tcp --dport pop3 -j ACCEPT
Разрешить форвардинг POP3 соединений