Я управляю одним сервером, который регулярно (несколько раз в минуту) пытается подключиться к другому компьютеру через TCP-порт 22. (ssh)
Мой вопрос: как мне найти процесс, породивший это соединение?
Что уже проверял:
Захват tcpdump на интерфейсе Ethernet + передача в wirehark => результат был не таким интересным, за исключением того, что это было стандартное зашифрованное соединение SSH, повторная сборка потока не дала мне полезной информации, поскольку он был (конечно) зашифрован.
lsof скрипт: я сбрасывал весь доступ к файлам, известный lsof, в файл около 60 раз с 1 секундой между каждым запуском. Я вижу настройку подключения в файле журнала, но не вижу никакой полезной информации:
...
ssh 8478 root 3u IPv4 945966 TCP servername:randomport->destinationserver:ssh (ESTABLISHED)
...
Похоже, он принадлежит пользователю root. Повторил процесс несколько раз, но ничего интересного не обнаружил.
netstat показывает это: (netstat -ntap)
tcp 0 0 servername:randomport destinationserver:22 TIME_WAIT -
tcp 0 0 servername:randomport destinationserver:22 TIME_WAIT -
когда я регистрирую достаточно итераций этого, я вижу, что он снижается до одного time_wait cnx и возвращается до 2 несколько раз в минуту.
не найдено crontab для любого пользователя, который запускает какой-либо ssh cnx, ничего о ssh в файлах и каталогах / etc / cron *
добавил это правило:
auditctl -a exit,always -F arch=b64 -S connect -k MYCONNECT
Ничего не узнал, кроме того, что это действительно похоже на соединение ssh с тем же источником и IP-адресом назначения и т. Д.
Я не понимаю, откуда это.
Если я не могу найти источник этих бесполезных подключений, я могу хотя бы использовать iptables, чтобы заблокировать их, но это, конечно, не так уж и красиво.
спасибо за любые подсказки.
У меня возникнет соблазн использовать auditd для (краткого) сбора информации о создании задачи и посмотреть, смогу ли я вернуться к этому
auditctl -D
auditctl -a task,always
Затем просмотрите результаты
ausearch -i -sc execve
Также lsof предоставляет PID, чтобы вы могли попробовать
ps -p <PID> -o ppid=
Одна вещь, которую можно попробовать, - это поместить сценарий оболочки вокруг стандартного двоичного файла ssh и иметь идентификатор и время журнала сценария оболочки. Это просто не в моей голове, поэтому может потребоваться некоторая работа.
mv /usr/bin/ssh /usr/bin/ssh.real
Заменить
/ usr / bin / ssh
с этим скриптом:
#!/usr/bin/perl
use Sys::Syslog; # all except setlogsock()
use Sys::Syslog qw(:standard :macros); # standard functions & macros
openlog('ssh', "ndelay,pid", "auth"); # or whatever is appropriate other than auth
syslog('info',"started by $ENV{'USER'}");
exec '/usr/bin/ssh.real', @ARGV;