Вопрос: Проверьте, открыт или закрыт порт на сервере Linux?


Как проверить, прослушивает ли порт на сервере Linux?


161
2017-09-07 17:24


Источник


Не совсем понятно, о чем вы спрашиваете. Что вы подразумеваете под «открытым»? Вы имеете в виду, что какой-то сервер прослушивает этот порт? Или вы имеете в виду, что это разрешено системным брандмауэром? Или что? - David Schwartz
Я думаю, что порт блокируется на моем сервере и хочет разблокировать / открыть его снова. - James Anderson
netstat -an | grep PORTNUMBER | grep -i listen Если выход пуст, порт не используется. - automatix


Ответы:


Вы можете проверить, прослушивает ли процесс TCP или UDP-порт с помощью netstat -tuplen,

Чтобы проверить, доступны ли некоторые порты снаружи (возможно, это то, что вы хотите), вы можете использовать сканер портов, например Nmap из другой система. Запуск Nmap на том же хосте, который вы хотите проверить, совершенно бесполезен для вашей цели.


152
2017-09-07 17:31



GNU netstat знает параметры -t, -u, -p, -l, -e, а также -n, Благодаря парсеру параметров он может быть выражен как -tuplen, linux.die.net/man/8/netstat - joschi
Так же telnet команда обычно поддерживает только TCP, поэтому вам не повезло, если служба, которую вы хотите проверить, запускается по другому протоколу. - joschi
да, я использую окна, следовательно, путаницу. - Dexter
nc является (лучше) альтернативой telnet. Он также поддерживает UDP. - Tsvetomir Dimitrov
Используйте его с sudo: sudo netstat -tuplen, Это даст вам процессы, принадлежащие не только вам, но и другим пользователям, и он будет печатать дополнительные данные (например, PID / Название программы), если они еще не отображаются как пользователь без полномочий root. - John Red


Самый быстрый способ проверить, открыт ли TCP-порт (включая любые аппаратные брандмауэры, которые у вас могут быть), - это ввести с удаленного компьютера (например, на вашем рабочем столе):

telnet myserver.com 80

Который попытается открыть соединение с портом 80 на этом сервере. Если вы получаете тайм-аут или отрицаете, порт не открыт :)


78
2017-09-07 17:33



говорит, что он не распознает «telnet» как команду ... - James Anderson
«yum install telnet» для установки клиентского пакета telnet. - cjc
Говорит: telnet: подключитесь к адресу 82.165.148.224: соединение отклонено - James Anderson
Написано выше: if you get a time out or deny, the port is not open - Industrial
Что делать, если у вас нет perms для установки telnet? Есть ли еще один стандартный инструмент? - KC Baltz


ОК, в общем, у вас есть сервер, на который вы можете войти. Вы хотите посмотреть, что-то слушает какой-то порт. Как 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 может быть что-то, что может это сделать.


22
2017-09-07 20:01



Не могли бы вы добавить, как отменить команду iptables -I? Благодаря!! - Evgeny
«iptables -D» следует за всем, что было после «-I» в исходной команде. В принципе, посмотрите документацию. - cjc


Если вы подключены к системе и можете запустить команду как root, вы можете проверить вывод iptables

iptables -L -vn

это будет отображать правила брандмауэра и какие порты открыты цели ACCEPT и любые явно закрытые порты REJECT,


7
2017-09-07 17:57



И если у вас есть firewalld, это проще firewall-cmd --query-port=port/protocol, например. firewall-cmd --query-port=80/tcp, - Agostino


Я использую комбо netstat а также lsof:

netstat -an | grep <portnumber>
lsof -i:<portnumber>

Чтобы узнать, используется ли порт и что его использует.


6
2018-03-28 19:32



ничего не подсказывает с или без sudo - Dheeraj Thedijje
@DheerajThedijje - тогда этот порт не открыт - warren
Да, это не так, понял. - Dheeraj Thedijje


lsof -i :ssh перечислит все процессы с открытым портом ssh, как для прослушивания, так и для активных соединений.


4
2018-01-25 21:45



Префикс sudo если он не возвращает какой-либо вывод. - Elijah Lynn