В мрежата портът е интересна характеристика. Това е начин за мрежовия трафик да идентифицира приложението или услугата дестинация. Всеки процес / услуга получава своя уникален порт. Портът винаги ще бъде свързан с IP адреса на хоста заедно с протокола.
Това е любима моя метафора, за да опиша какво е пристанище. Представете си кораб, натоварен с товар, който ще пътува до далечна земя. Каква информация е необходима, за да стигнете правилно до дестинацията? За по-голяма простота, да кажем, че се нуждае от държавата (IP адресът) и пристанище корабът ще акостира.
В това ръководство проверете как да изброите отворени портове в Linux.
Портове на Linux
Пристанищата действат като крайна точка на комуникация. Това е 16-битово число (от 0 до 65535 в десетични знаци). Въпреки че обхватът е голям, за по-лесно използване, портовете са категоризирани в три категории. Всяка категория е обозначена като диапазон на стойността на порта:
- 0 до 1023: Това са „добре познатите“ портове, известни още като „системни“ портове, които са запазени за системни процеси, които предлагат голямо разнообразие от мрежови услуги. За да се обвърже с „добре познат“ порт, процесът трябва да има привилегия на суперпотребител.
- 1024 до 49151: Това са „Регистрираните“ портове, известни също като „Потребителски“ портове, които са определени от IANA за специфични услуги. При поискване процесът може да има достъп до тях. В случая на повечето системи не се изисква привилегия на суперпотребител за използването на тези портове.
- 49152 до 65535: Това са „динамичните“ портове, известни също като „частни“ портове. Тези портове не могат да бъдат регистрирани в IANA. Тези портове са отворени за използване за частни или персонализирани услуги и могат да бъдат автоматично разпределени като краткотрайни портове (краткотрайни портове, използвани от IP).
В Linux има няколко начина за проверка на отворените портове. По подразбиране всеки порт ще остане затворен, освен ако приложение не го използва. Ако портът е отворен, той трябва да бъде присвоен на услуга / процес.
Списък на отворените портове
По-лесно е да се идентифицират кои портове се използват, а не кои портове са отворени. Ето защо следващият раздел ще включва методи за изброяване на всички портове, които се използват в момента. В Linux има няколко инструмента на разположение за задачата. Повечето от тях са вградени във всяка дистрибуция на Linux.
Да научите кои портове са отворени в момента може да бъде полезно в различни сценарии. Възможно е да конфигурирате специален порт за определено приложение. Отвореният порт също може да бъде силен индикатор за проникване в мрежата.
Следните методи са демонстрирани на Ubuntu 20.04.1 LTS.
Избройте протоколи и отворени портове от / etc / services
Файлът / etc / services съдържа информация за текущо изпълняваните услуги. Това е голям файл, така че е готов да бъдете претоварени.
$ cat / etc / services | по-малко
Списък на отворените портове с помощта на netstat
Инструментът netstat е помощна програма за показване на мрежови връзки за TCP, маршрутни таблици и различни мрежови интерфейси. Той също така предлага статистика на мрежовия протокол. С помощта на netstat можем да изброим всички отворени портове на системата.
Изпълнете следната команда netstat:
$ netstat -atu
Нека направим бърза разбивка на всички флагове, които използвахме в тази команда.
- а: Казва на netstat да показва всички сокети
- T: Казва на netstat да изброява TCP портове
- u: Казва на netstat да изброява UDP портове
Ето още един вариант на командата netstat:
$ netstat -lntu
В командата са използвани два нови флага. Какво имат предвид?
- л: Казва на netstat да отпечатва само гнездата за слушане
- н: Казва на netstat да показва номера на порта
За да покажете PID на процеса, който използва порт, използвайте флага “-p”:
$ netstat -lntup
Списък на отворените портове с помощта на ss
Инструментът ss е помощна програма за проучване на сокет. Използването му е подобно на netstat.
За да изброите отворените портове, изпълнете следната ss команда:
$ ss -lntu
Знамената са подобни на netstat. Функциите, които те описват, също са доста сходни.
- л: Казва на ss да показва сокети за слушане
- н: Казва на ss да не се опитва да разрешава имената на услуги
- T: Казва на ss да показва TCP сокети
- u: Казва на ss да показва UDP сокети
Списък на отворените портове с помощта на lsof
Командата lsof е да изброи отворени файлове. Той обаче може да се използва и за показване на отворени портове.
Изпълнете следната команда lsof:
$ lsof -i
За да получите отворените портове на определен протокол (TCP, UDP и т.н.) след това го дефинирайте след флага “-i”, използвайте:
$ lsof -i
Списък на отворените портове с помощта на nmap
Инструментът nmap е мощен инструмент за проучване на мрежата и сканиране на сигурността / порта. Той може да докладва за всички отворени портове в системата.
За да изброите отворените TCP портове, изпълнете следната команда nmap. Тук IP адресът е на хост компютъра:
$ sudo nmap -sT -p- localhost
Тук има две части от командния аргумент.
- -sT: Този раздел казва на nmap да сканира за TCP портове.
- -стр- : Това казва на nmap да сканира за всички 65535 порта. Ако не се използва, тогава nmap ще сканира само 1000 порта по подразбиране.
Ако трябва да изброите отворените UDP портове, изпълнете следната команда nmap:
$ sudo nmap -sU -p- localhost
За да получите както отворените TCP, така и UDP портовете, използвайте следната команда:
$ sudo nmap -n -PN -sT -sU -p- localhostСписък на отворените портове с помощта на netcat
Инструментът netcat е помощна програма за команден ред за четене и запис на данни през мрежови връзки през протоколите TCP и UDP. Този инструмент може да се използва и за изброяване на отворени портове. Той може да извършва тестове на определен порт или набор от портове.
Следващата команда netcat ще сканира порта от 1 до 1000. Командата netcat ще изпълни сканирането на протокола TCP по подразбиране:
$ nc -z -v localhost 1-1000
Той може да бъде разширен и до целия списък с възможни портове:
$ nc -z -v localhost 1-65535
Нека направим бърза разбивка на флаговете.
- z: Казва на netcat да сканира само за отворени портове, без да изпраща никакви данни
- v: Казва на netcat да работи в многословен режим
За да получите само отворените портове от този списък, филтрирайте изхода с grep за термина „успял“.
$ nc -z -v localhost 0-65535 2> & 1 | grep успяАко искате да извършите сканирането по UDP протокол, добавете флага “-u”.
$ nc -z -v -u localhost 0-65535 2> & 1 | grep успяФинални мисли
Както беше демонстрирано, има множество начини за сканиране на отворени портове в Linux. Предлагам да изпробвате всички методи, преди да решите кой да овладеете. Ако редовно използвате определен инструмент като netcat или nmap, овладяването на свързаните методи ще бъде най-полезно.
Щастливи компютри!