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

Настройка порта в iptables для веб-сокетов

Я реализую Пример толчка Ratchet на моем сервере (веб-сокеты) на порту 9090. Это текущие политики iptables:

[root@myserver ~]# iptables -L -n -v
Chain INPUT (policy ACCEPT 309 packets, 22420 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    6   380 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:9090 flags:0x17/0x02 
 1765 79738 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:3306 state NEW,ESTABLISHED 
  831 80329 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80 
   37  2866 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:443 
1657K   67M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
   57  4891 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
1645K   99M ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
  763 44632 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
    7   348 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:21 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:21 state NEW,RELATED,ESTABLISHED 
    6   384 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:1337 
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:11211 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 3204K packets, 162M bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1881  129K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp spt:3306 state ESTABLISHED 

По какой-то причине я не могу получить доступ к порту 9090 ни с клиента, ни через telnet.

Консоль браузера возвращает это:

WebSocket connection to 'ws://XX.XX.XX.XX:9090/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED autobahn.min.js:62

(XX.XX.XX.XX - IP моего сервера)

telnet localhost возвращает это:

[root@myserver html]# telnet localhost 9090
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused

Обновить

Я побежал ss -tnlp и вот результат:

[root@myserver ~]# ss -tnlp
State      Recv-Q Send-Q                                            Local Address:Port                                              Peer Address:Port 
LISTEN     0      50                                                            *:3306                                                         *:*      users:(("mysqld",1317,10))
LISTEN     0      128                                                          :::11211                                                       :::*      users:(("memcached",1361,27))
LISTEN     0      128                                                           *:11211                                                        *:*      users:(("memcached",1361,26))
LISTEN     0      128                                                          :::80                                                          :::*      users:(("httpd",6378,4),("httpd",6381,4),("httpd",6382,4),("httpd",6383,4),("httpd",6384,4),("httpd",6385,4),("httpd",6386,4),("httpd",6387,4),("httpd",6388,4))
LISTEN     0      32                                                            *:21                                                           *:*      users:(("vsftpd",1073,3))
LISTEN     0      128                                                          :::22                                                          :::*      users:(("sshd",2661,4))
LISTEN     0      128                                                           *:22                                                           *:*      users:(("sshd",2661,3))
LISTEN     0      100                                                         ::1:25                                                          :::*      users:(("master",1442,13))
LISTEN     0      100                                                   127.0.0.1:25                                                           *:*      users:(("master",1442,12))
LISTEN     0      128                                                          :::443                                                         :::*      users:(("httpd",6378,6),("httpd",6381,6),("httpd",6382,6),("httpd",6383,6),("httpd",6384,6),("httpd",6385,6),("httpd",6386,6),("httpd",6387,6),("httpd",6388,6))

Чтобы проверить, прослушивает ли процесс / использует ли сокет, попробуйте lsof -i:9090.

Как сказал fukawi2, возможно, ваш процесс его не слушает. Или, может быть, есть другой, который мешает вашему использовать его.

Вы можете видеть из своего iptables -nvL выведите, что ваше правило выполняется (6 совпадений в вашем выводе).

Ваш ss -tnlp показывает, что нет процессов, привязанных к порту 9090 (Local Address:Port столбец), поэтому приходящих пакетов до 9090 являются передача iptables, но ядро ​​не имеет к ним никакого отношения (нет привязки к процессу), поэтому ядро ​​отправляет обратно пакет TCP RST, что приводит к ошибке отказа в соединении.

Короче говоря, ваша проблема не в iptables, а в том, что ваш процесс либо не работает, либо не привязан к порту 9090 правильно / успешно.