Проверьте, открыт или закрыт порт на сервере Linux?
Как проверить, прослушивает ли порт на сервере Linux?
6 ответов
Вы можете проверить, прослушивает ли процесс на TCP или UDP-порту с помощью netstat -tuplen
.
Чтобы проверить, доступны ли некоторые порты снаружи (это, вероятно, вы хотите), вы можете использовать сканер портов, например Nmap , из < em> еще . Запуск Nmap на том же хосте, который вы хотите проверить, совершенно бесполезен для вашей цели.
Самый быстрый способ проверить, открыт ли TCP-порт (включая любые аппаратные брандмауэры, которые могут быть у вас), - набрать с удаленного компьютера (например, на вашем рабочем столе):
telnet myserver.com 80
Что будет пытаться открыть соединение с портом 80 на этом сервере. Если вы получаете тайм-аут или отрицаете, порт не открыт:)
ОК, в общем, у вас есть сервер, на который вы можете войти. Вы хотите посмотреть, что-то слушает какой-то порт. Как root, запустите:
netstat -nlp
это покажет список процессов, прослушивающих порты TCP и UDP. Вы можете сканировать (или grep) его для интересующего вас процесса и /или номера портов, которые вы ожидаете увидеть.
Если ожидаемого процесса не существует, вы должны запустить этот процесс и снова проверить netstat. Если процесс существует, но он прослушивает интерфейс и порт, которых вы не ожидали, возникает проблема конфигурации (например, он может прослушиваться, но только на интерфейсе loopback, поэтому вы увидите 127.0.0.1:3306 и нет других строк для порта 3306, в случае конфигурации по умолчанию для MySQL).
Если процесс завершен, и он прослушивает ожидаемый порт, вы можете попробовать запустить «telnet» на этом порту с вашего Macbook в вашем офисе /доме, например,
telnet xxxxxxxxxxxx.co.uk 443
Это проверит, если (при условии стандартных портов), что для SSL настроен веб-сервер. Обратите внимание, что этот тест с использованием telnet будет работать только в том случае, если процесс прослушивает порт TCP. Если это UDP-порт, вы можете попробовать с любым клиентом, который вы собираетесь использовать для подключения к нему. (Я вижу, что вы использовали порт 224. Это masqdialer, и я понятия не имею, что это такое).
Если служба существует, но вы не можете получить ее извне, тогда есть брандмауэр, блокирующий вас. В этом случае запустите:
iptables -L -n
Это покажет все правила брандмауэра, определенные в вашей системе. Вы можете опубликовать это, но, как правило, если вы не разрешаете все в цепочке INPUT, вам, вероятно, потребуется явно разрешить трафик на рассматриваемый порт:
iptables -I INPUT -p tcp --dport 224 -j ACCEPT
или что-то в этом роде. Не запускайте свои команды брандмауэра вслепую, исходя из того, что какой-то незнакомец сказал вам в Интернете. Подумайте, что вы делаете.
Если ваш брандмауэр в блоке разрешает трафик, который вам нужен, ваша хостинговая компания может работать с брандмауэром (например, они могут использовать только SSH (22 /tcp), HTTP (80 /tcp) и HTTPS (443) /tcp) и отказ от всего входящего трафика). В этом случае вам нужно будет открыть с ними справочную службу, чтобы решить эту проблему, хотя я полагаю, что в вашей cPanel может быть что-то, что может это сделать.
Если вы подключены к системе и можете запустить команду как root, вы можете проверить вывод iptables
iptables -L -vn
в этом списке будут указаны правила брандмауэра и какие порты открыты цели ACCEPT
и любые явно закрытые порты target REJECT
.
Я использую комбо netstat
и lsof
:
netstat -an | grep <portnumber>
lsof -i: <portnumber>
Чтобы узнать, используется ли порт и что его использует.
lsof -i: ssh
будет отображать все процессы с открытым портом ssh, как для прослушивания, так и для активных соединений.