вторник, 3 октября 2023 г.

УСТАНОВКА И НАСТРОЙКА ПРОСТОГО ФАЙРВОЛА UFW В DEBIAN/UBUNTU

 


7 сетевых Linux-команд о которых должен знать системный администратор

 

Команда ip

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

Синтаксис этой команды выглядит так:

ip <OPTIONS> <OBJECT> <COMMAND>

Самое важное тут — это <OBJECT> (подкоманда). Здесь можно использовать, помимо некоторых других, следующие ключевые слова:

  • address — адрес протокола (IPv4 или IPv6) на устройстве.
  • tunnel — IP-туннель.
  • route — запись таблицы маршрутизации.
  • rule — правило в базе данных политики маршрутизации.
  • vrf — управление виртуальными устройствами маршрутизации и перенаправления трафика.
  • xfrm — управление IPSec-политикой.

Ниже приведены примеры, демонстрирующие распространённые сценарии использования команды ip.

Вывод IP-адресов, назначенных интерфейсу на сервере:

[root@server ~]# ip address show

Назначение IP-адреса интерфейсу, например — enps03:

[root@server ~]# ip address add 192.168.1.254/24 dev enps03

Удаление IP-адреса из интерфейса:

[root@server ~]# ip address del 192.168.1.254/24 dev enps03

Изменение статуса интерфейса, в данном случае — включение eth0:

[root@server ~]# ip link set eth0 up

Изменение статуса интерфейса, в данном случае — выключение eth0:

[root@server ~]# ip link set eth0 down

Изменение статуса интерфейса, в данном случае — изменение MTU eth0:

[root@server ~]# ip link set eth0 mtu 9000

Изменение статуса интерфейса, в данном случае — перевод eth0 в режим приёма всех сетевых пакетов:

[root@server ~]# ip link set eth0 promisc on

Добавление маршрута, используемого по умолчанию (для всех адресов), через локальный шлюз 192.168.1.254, который доступен на устройстве eth0:

[root@server ~]# ip route add default via 192.168.1.254 dev eth0

Добавление маршрута к 192.168.1.0/24 через шлюз на 192.168.1.254:

[root@server ~]# ip route add 192.168.1.0/24 via 192.168.1.254

Добавление маршрута к 192.168.1.0/24, который доступен на устройстве eth0:

[root@server ~]# ip route add 192.168.1.0/24 dev eth0

Удаление маршрута для 192.168.1.0/24, для доступа к которому используется шлюз 192.168.1.254:

[root@server ~]# ip route delete 192.168.1.0/24 via 192.168.1.254

Вывод маршрута к IP 10.10.1.4:

[root@server ~]# ip route get 10.10.1.4

Команда ifconfig

Команда ifconfig до определённого времени представляла собой один из основных инструментов, используемых многими системными администраторами для настройки сетей и решения сетевых проблем. Теперь ей на замену пришла команда ip, о которой мы только что говорили. Но если вас, всё же, интересует эта команда, можете взглянуть на данный материал.

Команда mtr

MTR (Matt's traceroute) — это программа, работающая в режиме командной строки, представляющая собой инструмент для диагностики сетей и устранения сетевых неполадок. Эта команда совмещает в себе возможности ping и traceroute. Она, как traceroute, может выводить сведения о маршруте, по которому сетевые данные идут от одного компьютера к другому. Она выводит массу полезных сведений о каждом шаге маршрутизации, например — время ответа системы. Благодаря использованию команды mtr можно получить довольно подробные сведения о маршруте, можно обнаружить устройства, которые вызывают проблемы при прохождении данных по сети. Если, например, наблюдается рост времени ответа системы, или рост числа потерянных пакетов, это позволяет с уверенностью говорить о том, что где-то между исследуемыми системами возникла проблема с сетевым соединением.

Синтаксис команды выглядит так:

mtr <options> hostname/IP

Рассмотрим несколько распространённых способов применения mtr.

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

[root@server ~]# mtr google.com

Вот — вариант использования mtr, когда вместо имён хостов выводятся их IP-адреса (речь идёт о ключе -g, благодаря которому вместо имён выводятся числовые IP-адреса):

[root@server ~]# mtr -g google.com

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

[root@server ~]# mtr -b google.com

Так можно задать количество ping-пакетов, которые нужно отправить системе, маршрут к которой подвергается анализу:

[root@server ~]# mtr -c 10 google.com

А так можно получить отчёт, содержащий результаты работы mtr:

[root@server ~]# mtr -r -c 10 google.com > mtr-command-google-output

Вот — ещё один вариант получения такого отчёта:

[root@server ~]# mtr -rw -c 10 google.com > mtr-command-google-output

Для того чтобы принудительно использовать TCP вместо ICMP — надо поступить так:

[root@server ~]# mtr –tcp google.com

А вот так можно использовать UDP вместо ICMP:

[root@server ~]# mtr –udp google.com

Вот — вариант команды, где задаётся максимальное количество шагов маршрутизации:

[root@server ~]# mtr -m 35 216.58.223.78

Так можно настроить размер пакета:

[root@server ~]# mtr -r -s 50 google.com

Для вывода результатов работы mtr в формате CSV используется такая команда:

[root@server ~]# mtr –csv google.com

Вот — команда для вывода результатов работы mtr в формате XML:

[root@server ~]# mtr –xml google.com

Команда tcpdump

Утилита tcpdump предназначена для захвата и анализа пакетов.

Установить её можно так:

[root@server ~]# dnf install -y tcpdump

Прежде чем приступить к захвату пакетов, нужно узнать о том, какой интерфейс может использовать эта команда. В данном случае нужно будет применить команду sudo или иметь root-доступ к системе.

[root@server ~]# tcpdump -D

  1 eth0
  2 nflog
  3 nfqueue
  4 usbmon1
  5 any
  6 lo (Loopback)

Если нужно захватить трафик с интерфейса eth0 — этот процесс можно запустить такой командой:

[root@server ~]# tcpdump -i eth0

Или — такой, с указанием (через ключ -c) количества пакетов, которые нужно захватить:

[root@server ~]# tcpdump -i eth0 -c 10

Захват трафика, идущего к некоему хосту и от него

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

[root@server ~]# tcpdump -i eth0 -c 10 host 8.8.8.8

Для захвата трафика, идущего с хоста 8.8.8.8, используется такая команда:

[root@server ~]# tcpdump -i eth0 src host 8.8.8.8

Для захвата трафика, уходящего на хост 8.8.8.8, применяется такая команда:

[root@server ~]# tcpdump -i eth0 dst host 8.8.8.8

Захват трафика, идущего в некую сеть и из неё

Трафик можно захватывать и ориентируясь на конкретную сеть. Делается это так:

[root@server ~]# tcpdump -i eth0 net 10.1.0.0 mask 255.255.255.0

Ещё можно поступить так:

[root@server ~]# tcpdump -i eth0 net 10.1.0.0/24

Можно, кроме того, фильтровать трафик на основе его источника или места, в которое он идёт.

Вот — пример захвата трафика, отфильтрованного по его источнику (то есть — по той сети, откуда он приходит):

[root@server ~]# tcpdump -i eth0 src net 10.1.0.0/24

Вот — захват трафика с фильтрацией по сети, в которую он направляется:

[root@server ~]# tcpdump -i eth0 dst net 10.1.0.0/24

Захват трафика, поступающего на некий порт и выходящего из некоего порта

Вот пример захвата трафика только для DNS-порта по умолчанию (53):

[root@server ~]# tcpdump -i eth0 port 53

Захват трафика для заданного порта:

[root@server ~]# tcpdump -i eth0 host 8.8.8.8 and port 53

Захват только HTTPS-трафика:

[root@server ~]# tcpdump -i eth0 -c 10 host www.google.com and port 443

Захват трафика для всех портов кроме 80 и 25:

[root@server ~]# tcpdump -i eth0 port not 80 and not 25

Команда netstat

Инструмент netstat используется для вывода сведений о сетевых соединениях и таблицах маршрутизации, данных о работе сетевых интерфейсов, о masquerade-соединениях, об элементах групп многоадресной рассылки. Эта утилита является, как и ifconfig, частью пакета net-tools. В новом пакете iproute2 для достижения тех же целей используется утилита ss.

Если в вашей системе netstat отсутствует, установить эту программу можно так:

[root@server ~]# dnf install net-tools

Ей, в основном, пользуются, вызывая без параметров:

[root@server ~]# netstat

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

netstat <options>

Можно вызывать netstat и с несколькими параметрами, перечислив их друг за другом:

netstat <option 1> <option 2> <option 3>

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

[root@server ~]# netstat -a

Для вывода сведений обо всех TCP-портах применяется такой вариант команды:

[root@server ~]# netstat -at

Если нужны данные по UDP-портам — утилиту вызывают так:

[root@server ~]# netstat -au

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

[root@server ~]# netstat -l

Список TCP-портов, ожидающих соединений, выводится так:

[root@server ~]# netstat -lt

Так выводят список UDP-портов, ожидающих соединений:

[root@server ~]# netstat -lu

А так — список UNIX-портов, ожидающих соединений:

[root@server ~]# netstat -lx

Вот — команда для вывода статистических сведений по всем портам вне зависимости от протокола:

[root@server ~]# netstat -s

Так выводятся статистические сведения по TCP-портам:

[root@server ~]# netstat -st

Для просмотра списка TCP-соединений с указанием PID/имён программ используется такая команда:

[root@server ~]# netstat -tp

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

[root@server ~]# netstat -an | grep ‘:<port number>’

Команда nslookup

Команда nslookup используется для интерактивного «общения» с серверами доменных имён, находящимися в интернете. Она применяется для выполнения DNS-запросов и получения сведений о доменных именах или IP-адресах, а так же — для получения любых других специальных DNS-записей.

Рассмотрим распространённые примеры использования этой команды.

Получение A-записи домена:

[root@server ~]# nslookup example.com

Просмотр NS-записей домена:

[root@server ~]# nslookup -type=ns example.com

Выяснение сведений о MX-записях, в которых указаны имена серверов, ответственных за работу с электронной почтой:

[root@server ~]# nslookup -query=mx example.com

Обнаружение всех доступных DNS-записей домена:

[root@server ~]# nslookup -type=any example.com

Проверка использования конкретного DNS-сервера (в данном случае запрос производится к серверу имён ns1.nsexample.com):

[root@server ~]# nslookup example.com ns1.nsexample.com

Проверка A-записи для выяснения IP-адресов домена — это распространённая практика, но иногда нужно проверить то, имеет ли IP-адрес отношение к некоему домену. Для этого нужно выполнить обратный просмотр DNS:

[root@server ~]# nslookup 10.20.30.40

Команда ping

Команда ping — это инструмент, с помощью которого проверяют, на уровне IP, возможность связи одной TCP/IP-системы с другой. Делается это с использованием эхо-запросов протокола ICMP (Internet Control Message Protocol Echo Request). Программа фиксирует получение ответов на такие запросы и выводит сведения о них вместе с данными о времени их приёма-передачи. Ping — это основная команда, используемая в TCP/IP-сетях и применяемая для решения сетевых проблем, связанных с целостностью сети, с возможностью установления связи, с разрешением имён.

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

[root@server ~]# ping google.com
PING google.com (216.58.206.174) 56(84) bytes of data.
64 bytes from sof02s27-in-f14.1e100.net (216.58.206.174): icmp_seq=1 ttl=56 time=10.7 ms
64 bytes from sof02s27-in-f14.1e100.net (216.58.206.174): icmp_seq=2 ttl=56 time=10.2 ms
64 bytes from sof02s27-in-f14.1e100.net (216.58.206.174): icmp_seq=3 ttl=56 time=10.4 ms
64 bytes from sof02s27-in-f14.1e100.net (216.58.206.174): icmp_seq=4 ttl=56 time=10.4 ms
64 bytes from sof02s27-in-f14.1e100.net (216.58.206.174): icmp_seq=5 ttl=56 time=17.3 ms
^C
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 10.219/11.844/17.381/2.773 ms

В данном случае работу команды ping можно остановить, воспользовавшись сочетанием клавиш CTRL+C. В противном случае она будет выполнять запросы до тех пор, пока её не остановят. После каждой ping-сессии выводятся сводные данные, содержащие следующие сведения:

  • Min — минимальное время, которое требуется на получение ответа от пингуемого хоста.
  • Avg — среднее время, которое требуется на получение ответа.
  • Max — максимальное время, которое требуется на получение ответа.

Кроме того, среди данных, выводимых программой о пакетах, есть такой параметр, как TTL (Time To Live, время жизни пакета). Тут используются числовые значения TTL, указывающие на то, сколько шагов маршрутизации может пройти пакет. Это значение ещё известно как «лимит переходов» (hop limit).

Обычно, если запустить команду ping в её простом виде, не передавая ей дополнительные параметры, Linux будет пинговать интересующий пользователя хост без ограничений по времени. Если нужно изначально ограничить количество ICMP-запросов, например — до 10, команду ping надо запустить так:

[root@server ~]# ping -c 10 google.com

А для того чтобы увидеть лишь итоговый отчёт работы ping — можно воспользоваться ключом -q:

[root@server ~]# ping -c 10 -q google.com

В системах с несколькими сетевыми интерфейсами можно задавать конкретный интерфейс, которым должна пользоваться команда ping. Например, есть компьютер, имеющий интерфейсы eth0 и eth1. Если нужно, чтобы команда ping использовала бы интерфейс eth0 — надо запустить её так:

[root@server ~]# ping -I eth0 google.com

Или можно указать адрес интерфейса. В данном случае речь идёт об IP-адресе 10.233.201.45:

[root@server ~]# ping -I 10.233.201.45 google.com

Применяя эту команду, можно указать и то, какую версию протокола IP использовать — v4 или v6:

[root@server ~]# ping -4 google.com
[root@server ~]# ping -6 google.com

пятница, 29 сентября 2023 г.

Настройка сети (netplan) в Ubuntu 18.04/20.04/23.04

NetPlan — это инструмент для управления настройками сети, представленный в Ubuntu начиная с версии 17.10 и выше.

Этот инструмент заменяет файл статических интерфейсов /etc/network/interfaces, который ранее использовался для настройки сетевых интерфейсов в Ubuntu. Теперь нужно использовать /etc/netplan/*.yaml для ваших изменений в настройках сетевых интерфейсов.


Проверка конфигурации:
sudo netplan generate

Для DHCP:

network:
 version: 2
 ethernets:
   enp4s0:
     dhcp4: true
#      addresses: [192.168.89.222/24]
#      gateway4: 192.168.89.1
#      nameservers:
#        addresses: [192.168.89.1, 1.1.1.1]


вторник, 26 сентября 2023 г.

Настройка фаервола в Ubuntu с помощью утилиты UFW

 UFW (Uncomplicated Firewall) — удобный интерфейс для управления политиками безопасности межсетевого экрана. Наши серверы постоянно подвергаются различным атакам или сканируются в поиске уязвимостей. Как только эти уязвимости находятся, мы рискуем стать частью ботнета, раскрыть конфиденциальные данные или потерять деньги из-за сбоев в работе веб-приложений. Одной из первых мер по снижению рисков безопасности является грамотная настройка правил межсетевого экрана. В нашем руководстве мы рассмотрим основные команды и правила работы с утилитой UFW.

Предварительные требования

  1. Для начала работы с UFW вам потребуется суперпользователь( возможность исполнения команд под sudo). 
  2. Утилита UFW предустановлена в системе. Если по какой-то причине она была отсутствует, вы можете установить ее с помощью команды:
sudo apt-get install ufw

Проверка правил и текущего состояния UFW

В любое время вы можете проверить состояние UFW с помощью команды:

sudo ufw status verbose

По умолчанию UFW отключен, так что вы должны увидеть что-то вроде этого:

Status: inactive

Если UFW включен, то в консоли будут перечисляться заданные правила. Например, если firewall настроен таким образом — SSH (порт 22) соединение из любой точки мира, консоль может выглядеть следующим образом:

Status: active

Logging: on (low)

Default: deny (incoming), allow (outgoing), disabled (routed)

New profiles: skip

 

To                         Action      From

--                         ------      ----

22                         ALLOW IN    Anywhere

22 (v6)                    ALLOW IN    Anywhere (v6)

Так вы всегда можете узнать как настроен фаервол. 

Внимание! Проведите начальную настройку перед включением UFW. В частности, должен быть доступен SSH(22 порт). В ином случае вы рискуете потерять доступ к серверу.

Начальная настройка

По умолчанию UFW настройки запрещают все входящие соединения и разрешают все исходящие. Это значит, что если кто-то попытается достичь ваш сервер, он не сможет подключиться, в то время как любое приложение на сервере имеет доступ к внешним соединениям.


Cоответствующие правила фаервола прописываются так:

sudo ufw default deny incoming

sudo ufw default allow outgoing

Добавление правила для SSH-соединений

 Чтобы разрешить входящие SSH-соединения, выполните команду:

sudo ufw allow ssh

SSH демон прослушивает 22 порт. UFW знает об именах распространенных служб (ssh, sftp, http, https), поэтому вы можете использовать их вместо номера порта.

Если ваш SSH-демон использует другой порт, вам необходимо указать его в явном виде, например:

sudo ufw allow 2222

Теперь, когда ваш межсетевой экран настроен, можете включать его.

Запуск UFW

Чтобы включить UFW, используйте следующую команду:

sudo ufw enable

Вы получите похожее предупреждение:

Command may disrupt existing ssh connections. Proceed with operation (y|n)? 

Это означает, что запуск этого сервиса может разорвать текущее ssh соединение.

Но, так как мы его уже добавили ssh в правила, этого не произойдет. Поэтому просто нажмите (y).

Добавление правил для других подключений


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

HTTP (80 порт)

Для работы не зашифрованных веб-серверов используйте следующую команду:

sudo ufw allow http

или:

sudo ufw allow 80

HTTPS (443 порт)

То же самое, что и в предыдущем примере, но для зашифрованных соединений:

sudo ufw allow https

или:

sudo ufw allow 443

FTP (21 порт)

Данный порт используется для незашифрованной передачи файлов:

sudo ufw allow ftp

или:

sudo ufw allow 21/tcp

Добавление диапазонов портов

sudo ufw allow 3000:3100

Также вы можете указывать конкретный протокол:

sudo ufw allow 3000:3100/tcp
sudo ufw allow 3000:3100/udp

Добавление IP-адресов

Вs можете указать IP-адрес, которому будет разрешен доступ.

sudo ufw allow from 123.45.67.89

В приведенном примере указанному адресу разрешается доступ ко всем портам сервера.

Если же вы хотите указать доступ к конкретному порту, воспользуйтесь командой вида:

sudo ufw allow from 123.45.67.89 to any port 22

Аналогичным образом вы можете работать с диапазонами IP-адресов:

sudo ufw allow from 123.45.67.89/24

sudo ufw allow from 123.45.67.89/24 to any port 22

Ограничение подключений

Чтобы запретить HTTP-соединения, вы можете использовать следующую команду:

sudo ufw deny http

Если вы хотите запретить все соединения с 123.45.67.89, воспользуйтесь следующей командой:

sudo ufw deny from 123.45.67.89

Удаление правил

Существует два способа удаления правил. Первый — по номеру правила. Выполните команду:

sudo ufw status numbered
Status: active




     To                         Action      From

     --                         ------      ----

[ 1] 22                         ALLOW IN    Anywhere

[ 2] 80                         ALLOW IN    Anywhere

[ 3] 22 (v6)                    ALLOW IN    Anywhere (v6)

[ 4] 80 (v6)                    ALLOW IN    Anywhere (v6)

После этого выполните команду ufw delete и укажите номер правила, которое следует удалить:

sudo ufw delete 2

Второй способ заключается в том, что после команды ufw delete используется фактическое правило, например:

sudo ufw delete allow http

или:

sudo ufw delete allow 80

Отключение UFW

Отключить UFW можно при помощи команды:

sudo ufw disable

В результате ее выполнения все созданные ранее правила утратят силу.

Сброс правил

Если вам требуется сбросить текущие настройки, воспользуйтесь командой:

sudo ufw reset

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

Логи

В Ufw есть опция сохранения логов — журнал событий. Для запуска, используйте команду:

sudo ufw logging on

Ufw поддерживает нескоько уровней логгирования:

  • off — отключен.
  • low — регистрирует все заблокированные пакеты, не соответствующие заданной политике (с ограничением скорости), а также пакеты, соответствующие зарегистрированным правилам.
  • medium — все то, что при значении low. Плюс все разрешенные пакеты, не соответствующие заданной политике, все недопустимые пакеты, и все новые соединения. Все записи ведутся с ограничением скорости.
  • high — работает также как и medium. Плюс все пакеты с ограничением скорости.
  • full — также как и high, но без ограниения скорости. 

Чтобы задать уровень, укажите его как параметр:

 sudo ufw logging high

По умолчанию используется уровень low.

Для просмотра файлов относящихся с логам ufw используйте команду:

ls /var/log/ufw*