В первой статье мы разбирались с теорией iptables. Теперь продолжим изучение на примерах. Стандартные правила для любого сервера выглядят так:
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack —ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp —dport 22 -j ACCEPT
iptables -P INPUT DROP
Собственно мы разрешаем весь изходящий трафик OUTPUT ACCEPT, запрещаем проходящий трафик FORWARD DROP и запрещаем весь входящий трафик кроме 22 порта SSH INPUT -p tcp —dport 22 -j ACCEPT. Про conntrack я писал в предыдущей статье. Собственно это базовая настройка iptables для сервера. Далее мы открываем нужный нам порты дополнительно , например 21 для FTP сервера.
iptables -I INPUT -p tcp —dport 21 -j ACCEPT
Может ограничить число запросов на пинг до 4 в секунду )))
iptables -A INPUT -p icmp —icmp-type 8 -m limit —limit 4/s -j ACCEPT
-m подключение модулей. В iptables много разных модулей. Модуль limit предназначен для ограничения нагрузки.
—limit (/second /minute /hour /day)Пакеты в пределах этого количества считаются удовлетворяющими критерию, сверх этого количества — не удовлетворяющими.
–-limit-burst количество — задает длину очереди, то есть максимальную пропускную способность.
Кстати таким правилом можно бороться с ICMP-flood. Суть данной атаки в том, что ICMP-пакет при небольшом размере самого запроса требует от сетевого оборудования значительно большего объёма работы. Таким образом, при отправлении сравнительно небольшого объёма
ICMP-запросов возникает перегрузка сетевого оборудования и значительная часть легитимных запросов теряется, не пройдя обработку.
Типы ICMP-сообщений:
- 0 — echo reply (echo-ответ, пинг)
- 3 — destination unreachable (адресат недосягаем)
- 4 — source quench (подавление источника, просьба посылать пакеты медленнее)
- 5 — redirect (редирект)
- 8 — echo request (echo-запрос, пинг)
- 9 — router advertisement (объявление маршрутизатора)
- 10 — router solicitation (ходатайство маршрутизатора)
- 11 — time-to-live exceeded (истечение срока жизни пакета)
- 12 — IP header bad (неправильный IPзаголовок пакета)
- 13 — timestamp request (запрос значения счетчика времени)
- 14 — timestamp reply (ответ на запрос значения счетчика времени)
- 15 — information request (запрос информации)
- 16 — information reply (ответ на запрос информации)
- 17 — address mask request (запрос маски сети)
- 18 — address mask reply (ответ на запрос маски сети)
Обычно выход во внешний мир разрешают ICMP-сообщениям 0, 3, 4, 11 и 12, в то время как на вход принимают только 3, 8 и 12.
Можно ограничить трафик не только по IP но и по MAC адресу.
iptables -I INPUT -m mac —mac-source 00:00:00:00:00:01 -j DROP
Можем ограничить число одновременных подключений по SSH до двух с одного IP.
iptables -p tcp —syn —dport 22 -m connlimit —connlimit-above 2 -j REJECT
—syn флаг пакета с запросом на соединение.
Тоже самое можно сделать и по другому.
iptables -I INPUT -p tcp —syn —dport 22 -m iplimit —iplimit-above 2 -j DROP
Так же мы можем делать свои цепочки правил.
iptables -N syn_flood
iptables -A INPUT -p tcp —syn -j syn_flood
iptables -A syn_flood -m limit —limit 500/s —limit-burst 1500 -j RETURN
iptables -A syn_flood -j DROP
Число новых SYN пакетов — максимум 500 в секунду, при превышении порога в 1500 — новые пакеты блокируются.
iptables -N syn_flood Создание цепочки с именем syn_flood.
iptables -A INPUT -p tcp —syn -j syn_flood Пакеты с флагом syn отправляем в цепочку syn_flood.
iptables -A syn_flood -m limit —limit 500/s —limit-burst 1500 -j RETURN Если запросов не больше 1500 в секунду выйти из цепочки правил(RETURN).
iptables -A syn_flood -j DROP Заблокировать пакеты с флагом syn.
SYN-flood очень популярная DoS атака заключается в посылке большого числа SYN пакетов на ваш сервер. При этом установка TCP связи не доводится до конца.
Очередь полуоткрытых запросов соединений быстро заполняется, что мешает установке нормальных соединений. Так как соединение не должно быть обязательно завершено.Такая атака не требует больших ресурсов от атакующей машины, поэтому её легко реализовать и контролировать.