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

CentOS - IPTables - разрешить узлам в подсети полный доступ

Я использую linode.com, и они предоставляют возможность назначать частный IP-адрес каждому vps. Я пытаюсь настроить брандмауэр каждого узла, чтобы разрешить доступ с других узлов в сети, но, похоже, у меня нет особого успеха.

Например, я пытаюсь разрешить доступ к server1: 1337 с server2, оба настроены следующим образом:

server1:
   ifcfg-eth0:
     DEVICE="eth0"
     IPADDR="1.1.1.1"
     NETMASK="255.255.255.0"

   ifcfg-eth0:0:
     DEVICE="eth0:0"
     IPADDR="192.168.132.96"
     NETMASK="255.255.128.0"

server2:
   ifcfg-eth0:
     DEVICE="eth0"
     IPADDR="1.1.1.2"
     NETMASK="255.255.255.0"

   ifcfg-eth0:0:
     DEVICE="eth0:0"
     IPADDR="192.168.132.97"
     NETMASK="255.255.128.0"

И набор правил IPTables на server1:

#-----
# Flush all current rules from iptables#
#-----
iptables -F
iptables -F -t nat
#-----

#-----
# Set access for localhost
#-----
iptables -A INPUT -i lo -j ACCEPT

# !! Tried to allow all nodes on the subnet access to everything, but still didn't work !!
iptables -A INPUT -s 192.168.132.0/17 -j ACCEPT
#-----

#-----
# Accept packets belonging to established and related connections
#-----
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#-----

# !! Tried to allow access to the port directly !!
iptables -A INPUT -i eth0:0 -p tcp -s 192.168.132.0/17 --dport 1337 -j ACCEPT 

#-----
# Lock everything down
#-----
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#-----

Я наткнулся на пару старых форумов, в которых говорилось, что iptables не может использовать -i eth0:0 позвоните, поскольку виртуальные настройки имеют общие родительские настройки, но я не смог полностью подтвердить это.

--Редактировать--

Я также добавил частную подсеть (192.168.132.0/17) к server2, но все еще не могу заставить ее подключиться.

Благодаря предложениям из комментариев и некоторой информации от техподдержки linode мне удалось решить проблему с подключением.

Чтобы решить эту проблему, мне нужно было убедиться, что и server1, и server2 имеют правильные записи частной подсети для iptables:

iptables -A INPUT -s 192.168.132.0/17 -j ACCEPT

Сделав эту запись на обоих серверах, я мог затем telnet на server2: 1337 (с server1) и контролировать байты / пакеты через iptables и видеть, что действительно пакеты принимаются:

$ -> telnet 192.168.132.97 1337
Trying 192.168.132.97...
Connected to 192.168.132.97.
Escape character is '^]'.

$ -> iptables -L -vn
Chain INPUT (policy DROP 337 packets, 18695 bytes)
pkts bytes target     prot opt in     out     source               destination
56 30019 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
53 40539 ACCEPT     all  --  *      *       192.168.128.0/17     0.0.0.0/0

Теперь проблема в том, что я использую nginx в качестве балансировщика нагрузки, и он использовал запись dns server2, которая, как я предполагаю, по умолчанию является общедоступным IP-адресом, который не является частью набора правил iptables и не должен быть, иначе мне нужно ввести в каждом IP-адресе частной сети, чтобы разрешить доступ к порту 1337. Однако эта проблема является другим вопросом, так как OP был решен.

-- Обновить --

Обновление этого ответа на случай, если кто-то еще наткнется на него в будущем. Я выбрал это решение; DNS Stealth. Добавив возможность DNS к одному из моих VPS, я могу добавить все внутренние IP-адреса и внешние IP-адреса, поэтому все мои внутренние конфигурации iptable должны работать должным образом, при этом разрешая удаленный доступ к любому из vps через их общедоступный IP-адрес.