Как принять два разных типа сетевых подключений с использованием iptables

Мне нужно настроить iptables для сервера базы данных mongodb, чтобы он допускал только два типа соединений INPUT:

  1. одно соединение с портом 27017, портом по умолчанию для monogdb, из нашего основного веб-приложения
  2. одно соединение SSH из моей основной сети, IP-адрес которого отличается от нашего веб-приложения

Проблема в том, что эти правила должны быть связаны.

Вот что я попробовал:

iptables -A INPUT -p tcp --dport ssh -j ACCEPT # allows all connections via ssh (port 22)

iptables -A INPUT -s web-app-IP -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -d web-app-IP -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

iptables -P INPUT DROP
iptables -P OUTPUT DROP

Первая строка разрешает все входящие подключения через порт 22, а вторая и третья строки разрешают все подключения только через thw web-app-IP и с сервера mongodb.

Кажется, что первая строка блокируется второй и третьей строкой. Есть ли логический оператор ИЛИ для iptables? Если нет, то как мне настроить правила для обоих типов соединений?

1 ответ

Решение

Вы не позволяете УСТАНОВЛЕННЫМ соединениям из SSH. Я бы пошел с немного проще:

iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp -s web-app-IP -p tcp --destination-port 27017 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
Другие вопросы по тегам