
Пожалуйста, внимательно прочитайте этот вопрос.
У меня есть удаленный вход по SSH на сервер, и у меня нет привилегий sudo, и я хочу создать слушателя на этом сервере. Так что любое входящее соединение должно отображаться в моей консоли, т.е.myname@anyip консоль.
Так как же мне поступить?
решение1
Итак, вы хотите шпионить за другими пользователями сервера?
Без привилегий root вы не сможете сделать это эффективно. Самое близкое, что вы можете сделать, это netstat -an
многократное выполнение команды и анализ вывода. Если система использует контейнеры или какую-либо другую технологию изоляции, команда netstat
может показывать только соединения для вашего контейнера. На сервере с усиленной безопасностью команда netstat
может быть даже ограничена только для администраторов.
С правами root вы могли бы, например, настроить iptables
правило ведения журнала, которое будет вызывать создание сообщения журнала для всех новых входящих подключений. А затем вы могли бы настроить демон syslog для записи этих сообщений в определенный файл или для отправки их по сети в какую-то другую систему. Если вы отправляете сообщения журнала по сети, то вам пришлось бы настроить получателя для сообщений журнала в системе, в которую вы отправляете сообщения.
На сервере, на котором может быть несколько пользователей, может быть много входящих соединений, происходящих одновременно. Некоторые из них на самом деле будут внутренними соединениями между процессами на одном сервере; в частности, процессы Java, как правило, используют много «сетевых» соединений для связи между различными процессами на одном сервере. В такой ситуации информация, которую вы ищете, будет скрыта среди подавляющего количества сообщений о соединениях, которые для вас не важны. Поэтому вам может быть выгодно быть более конкретными в своих информационных запросах.
Если можно спросить, для чего вам нужна информация о входящих соединениях? Возможно, можно будет получить информацию, которая будет соответствовать вашим конкретным потребностям, каким-то другим способом.
Например, если вам нужно сопоставить сетевые соединения сервера для какой-то передачи административной ответственности, то вы можете сначала использовать netstat -na -A inet
и netstat -na -A inet6
для идентификации всех портов TCP/UDP, которые способны принимать входящие соединения. Для портов TCP вы просто ищете порты в LISTEN
состоянии; для портов UDP вам придется проверить все перечисленные порты, чтобы определить, используются ли они для входящих или исходящих пакетов.
Как только у вас появится список служб, которые действительно активны в системе, вы сможете исключить то, что вам не интересно. Например, если сервер передается от одного хостинг-провайдера другому, порты, используемые инфраструктурой мониторинга сервера старого провайдера, не будут представлять особого интереса, поскольку старый провайдер, скорее всего, удалит свои утилиты мониторинга до фактической передачи, а новый провайдер, скорее всего, установит свои собственные инструменты мониторинга.
Следующим шагом может стать просмотр журналов интересных служб: если вы можете получить доступ к журналам и в них есть нужная вам информация, это может быть лучшим вариантом. Если у вас нет необходимого доступа, запрос на чтение старых журналов определенной службы может быть лучше воспринят администратором сервера, чем всеобъемлющий запрос на мониторинг всех входящих соединений.
С помощью небольшого скрипта вы можете искать в журналах сообщения, указывающие на входящие соединения ( grep
), выбирать информацию об источнике соединения (с помощью sed
, awk
или любого другого инструмента, который вы предпочитаете), а затем удалять дубликаты (с помощью , sort
за которым следует uniq
). Обрабатывая любые существующие журналы таким образом, вы можете иметь больше шансов обнаружить соединения, которые происходят только редко (например, раз в неделю или месяц), чем просто отслеживая все входящие соединения в течение нескольких дней.