Назад | Перейти на главную страницу

Это хорошая отправная точка для iptables в Linux?

Я новичок в iptables, и я пытался собрать брандмауэр, цель которого - защитить веб-сервер. Приведенные ниже правила - это те, которые я собрал до сих пор, и я хотел бы услышать, имеют ли они смысл - и не упустил ли я что-нибудь существенное?

В дополнение к порту 80 мне также нужно открыть порт 3306 (mysql) и 22 (ssh) для внешних подключений.

Любые отзывы приветствуются!

#!/bin/sh

# Clear all existing rules.
iptables -F

# ACCEPT connections for loopback network connection, 127.0.0.1.
iptables -A INPUT -i lo -j ACCEPT

# ALLOW established traffic
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# DROP packets that are NEW but does not have the SYN but set.
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# DROP fragmented packets, as there is no way to tell the source and destination ports of such a packet.
iptables -A INPUT -f -j DROP

# DROP packets with all tcp flags set (XMAS packets).
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# DROP packets with no tcp flags set (NULL packets).
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# ALLOW ssh traffic (and prevent against DoS attacks)
iptables -A INPUT -p tcp --dport ssh -m limit --limit 1/s  -j ACCEPT

# ALLOW http traffic (and prevent against DoS attacks)
iptables -A INPUT -p tcp --dport http -m limit --limit 5/s -j ACCEPT

# ALLOW mysql traffic (and prevent against DoS attacks)
iptables -A INPUT -p tcp --dport mysql -m limit --limit 25/s -j ACCEPT

# DROP any other traffic.
iptables -A INPUT -j DROP

Попробуйте Shorewall, который обеспечивает разумный брандмауэр из коробки. Разрешите доступ из сети для нужных вам услуг. Есть примеры наборов правил для одного, двух и трех интерфейсов. Документация хорошая и активно поддерживается.

Я думаю, вы захотите ограничить количество адресов, которые могут получить доступ к MySQL, что легко сделать. Вы также можете защитить SSH с помощью блокировки порта, если порт закрыт, если вы недавно не исследовали другой порт.

  1. Вы действительно хотите разрешить ICMP.
  2. 5 / сек, вероятно, недостаточно для HTTP
  3. Я не вижу смысла в правилах для пакетов XMAS / NULL
  4. Также не вижу причин для специального правила НОВЫХ пакетов

ETA: 5. Наличие такого рода ограничений скорости делает DoS-атаки очень простыми. Мне просто нужно отправлять 1 пакет SYN в секунду на ваш сервер, чтобы отказать ВАМ в доступе по ssh.

Я бы подумал об использовании чего-то вроде NARC для настройки ваших правил iptables:

http://www.knowplace.org/pages/howtos/firewalling_with_netfilter_iptables/netfilter_automatic_rule_configurator.php

В этом пакете уже есть несколько разумных настроек по умолчанию, которым вы можете доверять.

Я использую Webmin, у него хороший стартовый набор правил.

http://www.webmin.com/

Фильтр исходящей связи с сервера в Интернет также важен. Особенно рекомендуется разрешить SMTP только для одного сервера.

Я управляю межсетевыми экранами Mikrotik, и я, например, привык:

  • Отбрасывать входящие пакеты из Интернета с адресом назначения из частного диапазона
  • Отбросить сканирование портов (более 5 проверок портов в секунду)
  • SSH на другой порт (безвестность, я знаю, но он работает! :-)) и ограничение исходных IP-адресов
  • Отбросить трансляции для роутера
  • Отбросить TCP RST

И еще несколько. Я бы порекомендовал прочитать это: http://wiki.mikrotik.com/wiki/Dmitry_on_firewalling Синтаксис Mikrotik прост и содержит полезные советы для новичков.

Что касается пакета XMAS.

Разные сканеры отправляют разные ароматы XMAS. Ваше правило ALL ALL, хотя оно ДОЛЖНО соответствовать каноническому определению фразы XMAS packet, на самом деле не улавливает их, когда NMAP их отправляет.

http://techhelplist.com/index.php/tech-tutorials/43-linux-adventures/120-nmap-linux-iptables-xmas-packets

nmap -sX, который должен быть сканированием XMAS, не будет обнаружен ВСЕМИ.

ALL ALL соответствует FIN, SYN, RST, PSH, ACK, URG FIN, SYN, RST, PSH, ACK, URG То, что отправляет NMAP, приравнивается к FIN, SYN, RST, PSH, ACK, URG FIN, PSH, URG