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

В дополнение к тому, что было уже сказано, необходимо удостовериться, что различные связанные объекты, такие как запись SPF настраиваются правильно. Я полагаю, что Gmail является довольно суетливым о таких вещах.

216
задан 15 December 2015 в 17:52
7 ответов

You can check if a process listens on a TCP or UDP port with netstat -tuplen.

To check whether some ports are accessible from the outside (this is probably what you want) you can use a port scanner like Nmap from another system. Running Nmap on the same host you want to check is quite useless for your purpose.

191
ответ дан 16 December 2019 в 22:45

Quickest way to test if a TCP port is open (including any hardware firewalls you may have), is to type, from a remote computer (e.g. your desktop):

telnet myserver.com 80

Which will try to open a connection to port 80 on that server. If you get a time out or deny, the port is not open :)

104
ответ дан 16 December 2019 в 22:45

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

iptables -L -vn

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

8
ответ дан 16 December 2019 в 22:45

Итак, у вас есть сервер, на который вы можете войти. Вы хотите увидеть, прослушивает ли что-то какой-либо порт. От имени пользователя root выполните:

netstat -nlp

, это покажет список процессов, прослушивающих порты TCP и UDP. Вы можете просканировать (или выполнить поиск с помощью команды grep) в поисках интересующего вас процесса и / или номеров портов, которые вы ожидаете увидеть.

Если ожидаемого процесса нет, вам следует запустить этот процесс и проверить netstat очередной раз. Если процесс существует, но он прослушивает интерфейс и порт, которых вы не ожидали, то есть проблема с конфигурацией (например, он может прослушивать, но только на интерфейсе обратной связи, поэтому вы увидите 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 есть что-то, что может разрешить это.

тогда ваша хостинговая компания может использовать брандмауэр (например, они разрешают только SSH (22 / tcp), HTTP (80 / tcp) и HTTPS (443 / tcp) и запрещают весь другой входящий трафик). В этом случае вам нужно будет открыть запрос в службу поддержки, чтобы решить эту проблему, хотя я полагаю, что в вашей cPanel есть что-то, что может разрешить это.

тогда ваша хостинговая компания может использовать брандмауэр (например, они разрешают только SSH (22 / tcp), HTTP (80 / tcp) и HTTPS (443 / tcp) и запрещают весь другой входящий трафик). В этом случае вам нужно будет открыть запрос в службу поддержки, чтобы решить эту проблему, хотя я полагаю, что в вашей cPanel есть что-то, что может разрешить это.

31
ответ дан 16 December 2019 в 22:45

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

6
ответ дан 16 December 2019 в 22:45

Я использую комбинацию netstat и lsof :

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

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

12
ответ дан 16 December 2019 в 22:45

Если вам нужно написать такой тест, решение Сергея Попова (см. комментарий к вопросу), вероятно, будет лучшим, поскольку nc способен искать в стеке TCP открытый порт³ вместо попытки фактического подключения.

Простейшая форма:

nc -z <ip> <port>

Команда возвращает true, если обнаруживает указанную комбинацию : как открытую (т.е. одна из ваших служб прослушивает).

Теперь вы можете написать скрипт для ожидания открытия порта:

while ! nc -z <ip> <port>
do
    sleep 1
done

Примечание 1: Я попробовал параметр командной строки -w, и это, похоже, ничего не дало. В любом случае команда возвращается немедленно. Я думаю, что -w бесполезно с -z.

Примечание 2: для облегчения отладки попробуйте использовать параметр командной строки -v.

Примечание 3: nc -z ... фактически создает socket(), а затем пытается bind() его и connect( ). Если это работает, он считает, что порт открыт.

3
ответ дан 7 March 2020 в 17:13

Теги

Похожие вопросы