У меня есть 2 сервера, один для веб-запросов (я назвал его web), а другой для базы данных (я назвал его db). Оба сервера являются CentOS 7.

Я хочу сделать эти правила в iptables:

  • все запросы к db серверу должны быть заблокированы (все IP на всех портах);
  • только web сервер (y.y.y.y) может получить доступ к серверу db по портам 5432 и 6379 ;
  • просто статический ip (x.x.x.x) может получить доступ к порту 22 .

Поэтому я написал эти правила, но я не уверен, что они верны

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p tcp --dport 5432 -s y.y.y.y -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -s y.y.y.y -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s x.x.x.x -j ACCEPT

1 ответ1

0

Хотя эти правила выглядят правильно (при условии, что они идут на сервер db ), вы упускаете важное правило, а именно:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Без этого правила и с политикой INPUT по умолчанию, такой как DROP , сам ваш db сервер не сможет получить доступ к сети, например, для установки обновлений или проверки доступности ping/traceroute и т.д.

Таким образом, полный набор правил iptables должен быть

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 5432 -s y.y.y.y -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -s y.y.y.y -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s x.x.x.x -j ACCEPT

Пожалуйста, убедитесь, что вы не используете iptables -P INPUT DROP через ssh как это заблокирует вас на вашем сервере.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .