Перевірте, чи порт відкритий чи закритий на сервері Linux?


209

Як я можу перевірити, чи слухає порт на сервері Linux?


2
Не зовсім зрозуміло, про що ви питаєте. Що ви маєте на увазі під "відкритим"? Ви маєте на увазі, що якийсь сервер слухає цей порт? Або ти маєш на увазі, що це дозволено системним брандмауером? Або те, що?
Девід Шварц

Я думаю, що порт блокується на моєму сервері і хочу знову розблокувати / відкрити його.
Джеймс Андерсон

14
netstat -an | grep PORTNUMBER | grep -i listenЯкщо вихід порожній, порт не використовується.
automatix

Відповіді:


187

Ви можете перевірити, чи прослуховується процес на порталі TCP або UDP за допомогою netstat -tuplen.

Щоб перевірити, чи доступні деякі порти ззовні (це, мабуть, те, що ви хочете), можна скористатися сканером портів, як Nmap з іншої системи. Запуск Nmap на тому ж хості, який ви хочете перевірити, є абсолютно марним для ваших цілей.


54
GNU NetStat знає параметри -t, -u, -p, -l, -e, і -n. Завдяки аналізатору параметрів він може бути виражений як -tuplen. linux.die.net/man/8/netstat
joschi

3
Крім того, telnetкоманда зазвичай підтримує лише TCP, тому вам не пощастить, якщо служба, яку ви хочете перевірити, працює за іншим протоколом.
joschi

1
так, я використовував Windows, отже, плутанина.
Декстер

2
nc (краща) альтернатива telnet. Він також підтримує UDP.
Цветомир Димитров

1
Використовуйте його з судо : sudo netstat -tuplen. Це дасть вам процеси, які належать не тільки вам, але й іншим, і він надрукує додаткові деталі (наприклад, PID / назва програми), якщо вони вже не відображаються як некористувацький користувач.
Джон Ред

102

Найшвидший спосіб перевірити, чи не відкрито порт TCP (включаючи будь-які апаратні брандмауери), це набрати з віддаленого комп'ютера (наприклад, на робочому столі):

telnet myserver.com 80

Який спробує відкрити з'єднання з портом 80 на цьому сервері. Якщо ви вимкнули час або заборонили, порт не відкритий :)


1
говорить, що він не визнає "telnet" як команду ...
Джеймс Андерсон

6
"yum install telnet" для встановлення клієнтського пакету telnet.
cjc

8
Написано вище:if you get a time out or deny, the port is not open
Промислове

2
Що робити, якщо у вас немає посвідчень для встановлення telnet? Чи є ще один стандартний інструмент?
KC Baltz

3
Я спробував "telnet myhost 22" і отримав тайм-аут. Але я можу запустити цю машину. ?!
Торстен Бронгер

30

Добре, підсумовуючи, у вас є сервер, на якому ви можете увійти. Ви хочете побачити, чи щось слухається на якомусь порті. Як корінь, запустіть:

netstat -nlp

це покаже перелік процесів прослуховування на портах TCP та UDP. Ви можете відсканувати (або вимкнути) його на процес, який вас цікавить, та / або номери портів, які ви очікуєте побачити.

Якщо очікуваного процесу немає, слід запустити цей процес і знову перевірити 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 може бути щось, що може це дозволити.


Чи можете ви додати, як скасувати команду iptables -I? Дякую!!
Євген

1
"iptables -D", за яким слідує все, що ви мали після "-I" в початковій команді. В основному, шукайте документацію.
cjc

11

Я використовую комбо netstatта lsof:

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

Щоб побачити, чи використовується порт, і що він використовує.


нічого не
вимагає з судо

1
@DheerajThedijje - тоді цей порт не відкритий
warren

Так, не було, зрозумів.
Dheeraj Thedijje

7

Якщо ви підключені до системи і можете запустити команду як root, то ви можете перевірити вихід iptables

iptables -L -vn

тут буде перераховано правила брандмауера та які порти є відкритою ціллю ACCEPTта будь-які явно закриті цілі портів REJECT.


А якщо у вас є firewalld, це простіше firewall-cmd --query-port=port/protocol, наприклад firewall-cmd --query-port=80/tcp.
Агостіно

6

lsof -i :ssh буде перераховано всі процеси з відкритим ssh-портом, як прослуховування, так і активні з'єднання.


Префікс, sudoякщо він не повертає жодного результату.
Ілля Лінн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.