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