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

iptables блокирует nginx как обратный прокси для node.js

Возникли проблемы с моей очень ограничительной настройкой iptables. У меня nginx (порт 80) настроен как обратный прокси перед node.js (порт 8080). Когда служба iptables остановлена, все отлично работает. Когда он снова включается, я получаю ошибки тайм-аута прокси от nginx.

Часть, которая не работает, - это Блок «HTTP (node.js)» в «ВХОДЯЩИЙ» раздел; см. ниже фактическое содержимое файла конфигурации. Это довольно сбивает с толку, поскольку я описываю только два «адаптера» Ethernet в моей системе: eth0 и вот. Связана ли эта проблема с тем, что nginx разговаривает с node.js ни на eth0, ни на lo?

Вот моя конфигурация iptables:

# Remove all existing rules
iptables -F


# Set default chain policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP



##### BEGIN: INCOMING #####

# HTTP (nginx)
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT


# HTTP (node.js)
iptables -A INPUT -i eth0 -p tcp --dport 8080 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 8080 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -p tcp --dport 8080 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o lo -p tcp --sport 8080 -m state --state ESTABLISHED -j ACCEPT


# Samba
iptables -A INPUT -i eth0 -p tcp --source 10.1.1.0/24 --dport 445 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --destination 10.1.1.0/24 --sport 445 -m state --state ESTABLISHED -j ACCEPT


# SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

##### END: INCOMING #####





##### BEGIN: OUTGOING #####
# DNS
iptables -A OUTPUT -o eth0 -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT


# E-Mail to Gmail
iptables -A OUTPUT -o eth0 -p tcp --dport 587 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 587 -m state --state ESTABLISHED -j ACCEPT


# HTTP
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT


# HTTPS
iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT


# Ping
iptables -A OUTPUT -o eth0 -p icmp --icmp-type echo-request -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-reply -m state --state ESTABLISHED -j ACCEPT

##### END: OUTGOING #####



# Make these rules permanent
service iptables save
service iptables restart

Нет никакого смысла использовать чрезвычайно строгие правила в интерфейсе обратной связи. Все это будет сделано для того, чтобы ваши местные службы не разговаривали друг с другом странным образом, что у вас возникнут проблемы с диагностикой (вот почему вы здесь). Просто откажитесь от этого:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT