Вопрос Iptables
Я пытаюсь настроить общие правила iptables, которые я могу распространить на мой маленький кластер из 4 узлов.
Я хочу, чтобы все серверы:
принимать любой трафик через порты 22,80,443
или весь трафик, если источником является 127.0.0.1
или весь трафик является источником является одним из серверов в моем кластере
все остальное, что я хочу, упало
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 ответа
- Избавиться от окончательного правила и сделать политику по умолчанию
DROP
(iptables -P INPUT DROP
) - Этот набор правил не будет обрабатывать возврат пакетов от исходящих соединений; добавлять
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
at the top (unless you want to not allow outgoing connections, in which case someOUTPUT
rules would make that clearer). - Сделать
FORWARD
chain policyDROP
, 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, который в противном случае вы бы написали.