Linux list open ports to the outside

Я не могу найти, как перечислить или "прочитать список" открытых портов в Linux. У меня сервер на базе Debian. Я нашел множество команд для списка открытых портов, но не могу найти ни одной, которая бы перечисляла только открытые порты, к которым можно получить доступ извне. Я знаю, что 3309 открыт, но я настроил mySQL так, чтобы он отвечал только локальному хосту, но порт все равно указан как открытый. Опять же, меня интересуют только порты, открытые для внешнего мира.

Если такой команды нет, может быть, есть grep для отсеивания только внутренних портов?

0
задан 8 February 2021 в 08:27
3 ответа

Возможно, вы не найдете простого ответа на этот вопрос, потому что это более сложный вопрос, чем вы можете предположить. Есть по крайней мере 3 возможных точки интереса, на которые следует обратить внимание:

  1. Порты, которые прослушиваются на сервере. netstat -an | grep LISTEN даст вам общее представление. Ищите адреса источника 0.0.0.0 или конкретные "внешние" интерфейсы (не забудьте про адреса IPv6, если применимо).

  2. Брандмауэр сервера (обычно iptables). iptables -l даст некоторое представление о том, какой трафик разрешен. Но также это должно показать вам любые NAT/перенаправления портов, выполняемые на уровне сервера. Например, ваш порт 3309 может быть перенаправлен на 127.0.0.1:3309. Таким образом, даже если ваш mysql может прослушивать только localhost, он будет технически доступен из "внешнего" мира.

  3. Ваш пограничный брандмауэр. Это ваш интернет-маршрутизатор/шлюз. Здесь проще всего перейти на сервер во "внешнем мире" (будь то открытый интернет, другое место в вашей сети и т.д.). - это не было четко определено в вопросе), и запустить nmap <ваш-внешний-ip> и посмотреть, что он сообщает как открытое. Недостатком этого способа является то, что если у вас нет выделенного IP для вашего сервера, вы, вероятно, увидите много вещей, которые не относятся к вашему конкретному серверу.

Эти три вещи ответят на большинство ваших вопросов, но я уверен, что у других будет больше идей/предложений.

2
ответ дан 24 April 2021 в 01:25

Привет и добро пожаловать на ServerFault.

Как насчет этого?

ss -tulpen | grep -vEe "\s+127[.]|::1"

Это исключает 127.0.0.0/8 и ::1 адреса из вывода.

Хотя здесь перечислены все TCP и UDP порты, прослушивающие адреса, доступные на этом компьютере, это не говорит вам, что они действительно доступны. Брандмауэр (IPTables/Netfilter, внешнее устройство) или политика безопасности (SELinux, SystemD, tcpwrappers) могут по-прежнему блокировать доступ.

edit. Если вы хотите знать, что порты действительно доступны из внешнего мира, поместите хост во "внешний мир" (например, в Интернет) и запустите сканер портов (например, nmap) на этом хосте, нацеленный на ваш сервер.

Пример для nmap:

sudo nmap -sS -p1-65535 <your_server's_ip>
2
ответ дан 24 April 2021 в 01:25

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

netstat -ntlp
0
ответ дан 24 April 2021 в 01:25

Теги

Похожие вопросы