Является ли это хорошей отправной точкой для iptables в Linux?

Является ли это хорошей отправной точкой для 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

решение1

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

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

решение2

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

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

решение3

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

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

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

решение4

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

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

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

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

Связанный контент