Шпаргалка по iptables с наиболее часто встречающимися способами настройки firewall для защиты сервера от взломщиков.
Справка по определенным командам:
1 |
iptables -j DROP -h |
Остановка, запуск и рестарт файрвола
Через ОС:
1 2 3 |
systemctl enable ufw systemctl start ufw systemctl stop ufw |
Команды iptables для остановки файрвола и удаления правил:
-F удалить все правила.
-X удалить цепочку правил.
-t table_name выбрать таблицу nat или mangle и удалить все правила/цепочку.
-P действие по-умолчанию: DROP, REJECT, или ACCEPT.
1 2 3 4 5 6 7 8 9 10 11 12 |
# iptables -X # iptables -F # iptables -t mangle -F # iptables -t mangle -X # iptables -t nat -F # iptables -t nat -X # iptables -P INPUT ACCEPT # iptables -P OUTPUT ACCEPT # iptables -P FORWARD ACCEPT |
Показать статус.
1 |
iptables -L -n -v |
Показать список правил
1 |
# iptables-save |
Показать список правил с номерами строк
1 |
iptables -n -L -v --line-numbers |
Показать INPUT или OUTPUT цепочки правил.
1 2 |
iptables -L INPUT -n -v iptables -L OUTPUT -n -v --line-numbers |
Показать существующие правила (с нумерацией по строкам)
1 2 3 4 |
# 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.54.1 |
Удаление правил
-D удалить одно или несколько правил из цепочки.
Удалим строку номер 5
1 |
# iptables -D INPUT 5 |
Ищем IP источника 201.53.1.1 и удаляем из правила:
1 |
# iptables -D INPUT -s 201.53.1.1 -j DROP |
Добавить правило в файрвол.
Перед добавлением правил в цепочку следует отобразить список с использованием номеров строк:
1 2 3 4 5 |
[alex123@ih772213 ~]# iptables -L INPUT -n --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 f2b-Exim tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 2 f2b-VSFTPD tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 |
Для добавления правила между строкой 1 и 2 следует ввести:
1 |
iptables -I INPUT 2 -s 202.54.17.1 -j DROP |
и проверить результат …
1 |
[alex123@ih772213 ~]# iptables -L INPUT -n --line-numbers |
Сохранить/восстановить правила файрвола.
Сохранить правила:
1 |
# iptables-save > /etc/iptables.rules |
Восстановить правила:
1 |
# iptables-restore < /etc/iptables.rules |
Установить политику по умолчанию.
Для этого применяется ключ -P, —policy, который задаёт политику по умолчанию для заданной цепочки (действие, которое применитс к пакетам, которые не попали ни под одно правило в цепочке). Допускается использовать DROP и ACCEPT.
1 |
iptables -P INPUT DROP |
Пример сброса всего входящего/исходящего трафика:
1 2 3 |
# iptables -P INPUT DROP # iptables -P OUTPUT DROP # iptables -P FORWARD DROP |
Заблокировать все входящие запросы на порт.
Блокировка всех входящих запросов на 80й порт:
1 2 |
iptables -A INPUT -p tcp --dport 80 -j DROP iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP |
Блокировка всех входящих запросов на 80й порт только для определённого ip адреса/подсети:
1 2 |
iptables -A INPUT -p tcp -s 118.222.113.4 --dport 80 -j DROP iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP |
Заблокировать запросы на исходящий IP адрес
Заблокируем доступ на 92.101.26.166/19:
1 |
iptables -A OUTPUT -p tcp -d 92.101.26.166/19 -j DROP |
Блокировка по домену:
1 2 |
iptables -A OUTPUT -p tcp -d www.vk.com -j DROP iptables -A OUTPUT -p tcp -d vk.com -j DROP |
Блокировка определенного IP адреса или подсети.
1 2 |
iptables -A INPUT -s 1.2.3.4 -j DROP iptables -A INPUT -s 192.168.0.0/24 -j DROP |
Сбросить/разрешить трафик только с определенных MAC адресов.
1 |
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
1 |
iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT |
Блокировка только входящих соединений
Блокировка всех входящих пакетов, кроме инициированных вами + разрешение исходящего трафика:
1 2 3 4 5 |
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 |
Сброс адресов изолированных сетей в публичной сети.
1 2 |
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 (C)
224.0.0.0/4 (MULTICAST D)
240.0.0.0/5 (E)
127.0.0.0/8 (LOOPBACK)
Записать событие и сбросить.
Запись в лог входящих пакетов перед сбросом:
1 2 |
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:
1 2 |
tail -f /var/log/messages grep -i --color 'IP SPOOF' /var/log/messages |
Чтобы не переполнить лог, введём ограничение на количество записей с помощью ключа -m. Например, разрешим записывать каждые 5 минут максимум 5 строк:
1 2 |
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 5 -j LOG --log-prefix "IP_SPOOF A: " iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP |
Разрешить или запретить ICMP Ping запросы.
Запрещаем ping запросы:
1 2 |
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP |
Разрешаем ping только для определённых сетей/хостов:
1 |
iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT |
Разрешаем только часть ICMP запросов:
1 2 3 4 5 |
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 |
Разрешить входящий трафик для диапазона портов.
1 |
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT |
Открыть диапазон адресов.
Разрешить подключение к порту 80 (Apache) если адрес в диапазоне от 192.168.1.100 до 192.168.1.200
1 |
iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT |
Пример для nat:
1 |
iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25 |
Закрыть или открыть стандартные порты.
Заменить ACCEPT на DROP, чтобы заблокировать порт.
ssh tcp port 22
1 2 |
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 для локальной сети
1 2 |
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)
1 |
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT |
tcp port 25 (smtp)
1 |
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT |
dns server ports
1 2 |
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
1 2 |
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)
1 |
iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT |
tcp port 143 (imap)
1 |
iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT |
Samba file server для локальной сети
1 2 3 4 |
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 для локальной сети
1 |
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT |
mysql server для локальной сети
1 |
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT |
Ограничение количества параллельных соединений к серверу для одного ip адреса.
Разрешаем только 2 ssh соединения на одного клиента (используется connlimit модуль):
1 |
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT |
—connlimit-above 2 : правило действует только если количество соединений превышает 2.
Ограничение количества HTTP запросов до 30:
1 |
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 30 --connlimit-mask 24 -j DROP |
—connlimit-mask 24 : маска сети.
Проверка правил iptables.
Проверка открытых / закрытых портов:
1 |
netstat -tulpn |
Проверка открытых / закрытых определенных портов:
1 |
netstat -tulpn | grep :80 |
Проверим, что iptables разрешает соединение с 80 портом:
1 |
iptables -L INPUT -v -n | grep 80 |
В противном случае откроем его для всех:
1 |
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT |
Проверяем с помощью telnet
1 |
telnet yandex.ru 80 |
Свежие комментарии