Jak lze zobrazit otevřené porty a určit, z jakých IP adres se na ně lze připojit, aniž bychom použili příkaz netstat?
sobes.tech AI
Odpověď od AI
Можно использовать утилиту ss (socket statistics) или lsof (list open files).
Сравнение netstat и ss:
| Особенность | netstat | ss |
|---|---|---|
| Скорость | Медленнее при большом трафике | Быстрее, напрямую работает с Netlink |
| Информация об inodes | Нет | Есть |
| Поддержка протоколов | Ограниченная | Широкая |
Пример использования ss:
# Показать все слушающие сокеты TCP
ss -tuln
Для определения IP-адресов, с которых можно обращаться к портам, нужно смотреть правила файрвола. Чаще всего используется iptables или firewalld.
Пример просмотра правил iptables для INPUT цепочки:
# Показать все правила в цепочке INPUT с нумерацией строк
sudo iptables -L INPUT -n --line-numbers
В выводе нужно искать правила, разрешающие трафик на интересующие порты. В этих правилах может быть указан исходный IP-адрес или подсеть (-s).
Пример правила, разрешающего TCP трафик на порт 22 с IP 192.168.1.10:
# Пример вывода iptables -L INPUT
# 1 ACCEPT tcp -- 192.168.1.10 anywhere tcp dpt:ssh
Пример использования firewalld:
# Показать активные зоны
sudo firewall-cmd --get-active-zones
# Показать разрешенные сервисы и порты для конкретной зоны (например, public)
sudo firewall-cmd --zone=public --list-all
В выводе firewall-cmd --zone=<zone> --list-all будут указаны разрешенные сервисы и порты. Для определения исходных IP-адресов нужно смотреть правила "rich rules", которые дают более детализированный контроль.
Пример rich rule, разрешающего доступ к TCP порту 80 с IP 192.168.1.0/24:
# Пример вывода firewall-cmd --zone=public --list-all (секция rich rules)
# rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="80" accept
Таким образом, для определения открытых портов и адресов, с которых возможен доступ, используется комбинация утилит для просмотра сокетов (ss) и инструментов управления файрволом (iptables, firewalld).