Иногда нужно выяснить, было ли соединение на SSH-порт сервера (обычно 22) с конкретного адреса. Казалось бы, задача простая, но есть несколько подходов - как для активных соединений, так и для анализа постфактум.
▪️ Активные подключения. Если соединение активно прямо сейчас, смотрим его в списке сетевых сокетов.
Современный инструмент - ss:
ss -ntu | grep ':22'
Аналог - netstat:
netstat -ntu | grep ':22'
Еще один полезный вариант - lsof:
lsof -ni TCP:22
▪️ Логирование попыток подключения. Если интересуют прошлые соединения, а не только активные, то тут уже нужны логи.
SSH по умолчанию пишет в системный журнал (
/var/log/auth.log или /var/log/secure), но для других сервисов можно включить логирование через firewall.Пример для iptables:
iptables -N ssh_in
iptables -A INPUT -p tcp --dport 22 -j ssh_in
iptables -A ssh_in -j LOG --log-level info --log-prefix "--IN--SSH-- "
iptables -A ssh_in -j ACCEPT
Теперь все подключения на порт 22 будут попадать в syslog.
Хотите отдельный лог - добавьте правило в rsyslog.
На практике часто используют отдельные цепочки (INPUT, OUTPUT, FORWARD), куда добавляют правила для логирования нужных адресов и портов.
▪️ Альтернативный способ. Можно посмотреть информацию о соединениях напрямую в conntrack:
cat /proc/net/nf_conntrack | grep 'dport=22'
По сути, ss и netstat читают данные именно отсюда.
#network
🧑💻 NetworkAdmin