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

Как закрыть порт без прикрепленного процесса?

Этот вопрос похож на Сетевой порт открыт, но процесс не подключен? и netstat показывает порт прослушивания без pid, а lsof - нет

Я пробовал все, что могу (как root: netstat, lsof, ls -al / proc / * / fd и т. Д.), Но не могу найти pid.

В любом случае, мне нужно закрыть или освободить порт без pid, потому что мой процесс хочет его прослушивать. В любом случае это сделать?

Я не хочу перезагружать сервер. Поскольку в моей системе есть процесс, он обновит файлы bin на всех моих серверах, а затем автоматически развернет все серверы. Развертывание завершится неудачно, если будет прослушиваться 7123 или другие порты.

Спасибо.

Подробнее

В этой ситуации есть три сервера, все они являются серверами Rackspace, и весь «плохой порт» - это порт udp 7123.

Перезагрузка может решить эту проблему, я пробовал ее на одном из этих трех серверов. Но я не хочу перезагружать сервер.

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
udp   213120      0 134.213.205.214:7123        0.0.0.0:*                           -

Результат Nmap показывает, что этот порт не закрыт. (@ Enzo)

root@auto:~# nmap 134.213.205.214 -p 7123 -sU

Starting Nmap 6.40 ( http://nmap.org ) at 2018-04-16 12:01 UTC
Nmap scan report for auto (134.213.205.214)
Host is up.
PORT     STATE         SERVICE
7123/udp open|filtered unknown

Nmap done: 1 IP address (1 host up) scanned in 2.12 seconds

Обновить

На данный момент перезагрузка - единственный способ закрыть / освободить этот порт. Но перезагрузка - плохая идея, она останавливает службу.

Возможно, ваша система работает в несогласованном состоянии. Я бы начал с базовой диагностики.

Проверьте сокет UDP и его процесс.

Бегать sudo netstat -lunp или sudo ss -lunp чтобы узнать, занят ли этот UDP-сокет (порт 7123). sudo необходим для нормальный пользователь, чтобы повысить привилегии и увидеть PID и имя процесса, который "слушание"в этом порту. Без sudo там будет - вместо PID и имени процесса. Обратите внимание на PID. Если ничего не указано в списке, вы можете начать думать, что ваша система была скомпрометирована, поскольку процесс способен скрывать свое имя, манипулируя внутренними структурами ядра для процессов!
Если вы не видите PID с высокими привилегиями, вам лучше изолировать этот сервер, поскольку он, вероятно, был скомпрометирован и взломан.

Проверьте, идет ли процесс прослушивания "говорящий"

Я предлагаю использовать Nmap или более общий netcat инструмент. С участием nmap вы можете попробовать эту команду:

sudo nmap -sV -v -Pn -sU -p U:7123 134.213.205.214

Он пытается понять протокол, используемый для порта UDP: 7123. sudo требуется для конкретного типа сканирования (сканирование службы UDP). Если вы видите данные, которые не соответствуют тому, что вы ожидаете, то, вероятно, процесс либо не работает, либо находится в несогласованном состоянии. Или он был заменен другим (вредоносным?) Кодом.

С участием netcat вам потребуется ручное вмешательство для генерации трафика на сервер:

netcat -u 134.213.205.214 7123

Все, что вы наберете, будет отправлено в ваше приложение через порт UDP: 7123. Вы также можете передать некоторые случайные данные (но не ожидайте значимого результата) с помощью:

cat /dev/urandom | netcat -u 134.213.205.214 7123

Проверьте журналы системы и приложений (если есть)

Первые обычно хранятся в /var/log/ каталог. Журнал приложений может быть где угодно. Инструмент lsof может помочь, если вы проверите PID во втором столбце. Я буду следить за этими журналами во время последующих действий.

Проверьте таблицу процессов для этого PID

Команда ps может предоставить много деталей о процессах. Мой личный фаворит:

PS_FORMAT="ruser,pid,ppid,s,%cpu,rss,cmd" ps ax --sort=pid

Во втором столбце вы можете увидеть PID, который вы ищете, а также реальный идентификатор пользователя (рузер, 1-й столбец), родительский PID (ppid, 3-й столбец), положение дел (s, 4-й), % Использование процессора (% cpu, 5-й), размер резидентского набора (rss, 6th) и командная строка с аргументами (cmd, 7-й). На мой взгляд, именно в этом случае ключевыми значениями являются статус процесса (это одна буква) и процент использования процессора, а также командная строка.

Проверить на страница руководства для всех деталей для ps и для точной настройки вывода.

Проверьте двоичные файлы

Если у вас есть другая машина с такой же архитектурой и ОС и тот же процесс, работающий ожидаемым образом, вы можете проверить, соответствуют ли двоичные файлы побайтно. Если это не так, вам лучше переустановить эти двоичные файлы из известного безопасного источника.

Предположим, программа /usr/local/bin/myserver.
Рассчитайте и запишите его контрольную сумму. Что-то вроде этого:

sha512sum /usr/local/bin/myserver

Если программа была скомпилирована для использования динамических библиотек, вы также должны проверить их. Список используемых динамических библиотек получается с помощью:

ldd /usr/local/bin/myserver

Будьте осторожны: вывод может быть довольно длинным, но для каждой строки вы должны вычислить и записать контрольную сумму для сравнения.

В случае обнаружения каких-либо несоответствий с эталонной доверенной системой я предлагаю переустановить всю систему и приложения. Это радикальный подход, но я считаю, что целевой системе больше нельзя доверять.

Убейте и перезапустите процесс

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

sudo kill -s SIGKILL <PID>

Я должен вас предупредить, что есть ряд случаев, когда процесс не умирает или умирает позже, чем ожидалось. Это в основном зависит от статуса процесса, отображаемого ps команда, запущенная ранее. На указанной странице руководства содержится некоторая информация о столбце состояния процесса в параграфе «КОДЫ СОСТОЯНИЯ ПРОЦЕССА».
Используйте команду ps чтобы еще раз проверить статус процесса. Обычно он должен быть удален в течение нескольких секунд и исчез из списка процессов.

После того, как процесс был остановлен, вы можете попробовать перезапустить его и посмотреть, повторяется ли мошенническое поведение.

Как правило, если вы ничего не меняете в системе, поведение тоже не изменится. То есть простая перезагрузка приложения или системы вряд ли решит проблему: она просто будет продвинута вперед во времени.