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

Как принять два разных типа сетевых подключений с помощью 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, а вторая и третья строки разрешают все подключения только от IP-адреса веб-приложения к серверу mongodb и от него.

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

Вы не разрешаете УСТАНОВЛЕННЫЕ соединения из 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