Вопрос Iptables

Я пытаюсь настроить общие правила iptables, которые я могу распространить на мой маленький кластер из 4 узлов.

Я хочу, чтобы все серверы:

  1. принимать любой трафик через порты 22,80,443

  2. или весь трафик, если источником является 127.0.0.1

  3. или весь трафик является источником является одним из серверов в моем кластере

  4. все остальное, что я хочу, упало


iptables -F
iptables -A INPUT -p all -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p all -s <SERVER-A> -j ACCEPT
iptables -A INPUT -p all -s <SERVER-B> -j ACCEPT
iptables -A INPUT -p all -s <SERVER-C> -j ACCEPT
iptables -A INPUT -p all -s <SERVER-D> -j ACCEPT
iptables -A INPUT -j DROP

Это выглядит правильно?

3 ответа

Решение
  1. Избавиться от окончательного правила и сделать политику по умолчанию DROP (iptables -P INPUT DROP)
  2. Этот набор правил не будет обрабатывать возврат пакетов от исходящих соединений; добавлять iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT at the top (unless you want to not allow outgoing connections, in which case some OUTPUT rules would make that clearer).
  3. Сделать FORWARD chain policy DROP, just in case someone fat-fingers /proc/sys/net/ipv4/ip_forward,

За ваше последнее правило. Было бы более удобным для Интернета, чтобы отвергнуть пакет, а не отбросить. Нечто подобное...

iptables -A INPUT -j REJECT --reject-with icmp-host-запрещено

Я бы искренне рекомендовал использовать обертку вокруг IPtables. Само по себе это безобразно проходит мимо простых правил, которые вам нужны.

Мы используем FireHOL с хорошими результатами - в дистрибутиве по умолчанию есть пакеты Debian/Ubuntu и пакеты RHEL/CentOS через RPMForge (iirc).

Конфигурация firehol для описываемых вами правил будет выглядеть следующим образом:

my_ips = "<ваш список серверов>"
интерфейс любой мир 
        защита сильная 100/ сек 50
        падение политики
        отклонение идентификатора сервера с помощью tcp-reset
        сервер ssh принять
        сервер http принимаю
        сервер https принять
        сервер все принимают src "$my_ips"

Также не сложно создать полные правила маршрутизатора - приведенный выше пример относится к локальному (не маршрутизирующему) брандмауэру, как вы описали в своем вопросе.

FireHOL и другие оболочки IPtables также имеют тенденцию добавлять (или упростить добавление) разумные значения по умолчанию к правилам вашего брандмауэра, которые будут фильтровать пакеты с известными ошибками - например, строка "защиты" выше, которая приводит к созданию множества (10+).) полезные правила iptables.

Еще одна причина, по которой я предпочитаю FireHOL, заключается в том, что файл конфигурации по-прежнему является скриптом bash, что обеспечивает полную гибкость любого сценария оболочки IPtables, который в противном случае вы бы написали.

Другие вопросы по тегам