ZaLinux.ru

Как закрыть TCP подключение

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

TCP протокол устанавливает подключение для инициализации которого выполняется трёхэтапное рукопожатие, в процессе использования этого подключения происходит контроль целостности передачи данных и повторная передача повреждённых или неполученных пакетов.

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

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

Как разорвать TCP подключение используя утилиту tcpkill

Tcpkill — это сетевая служебная программа, которая может использоваться для уничтожения соединений с определенным хостом, сетью, портом или их комбинацией. Программа tcpkill входит в пакет dsniff.

Формат запуска:

sudo tcpkill -i ИНТЕРФЕЙС -9 port ПОРТ
sudo tcpkill -i ИНТЕРФЕЙС -9 host IP_ИЛИ_ДОМЕН

Например, я хочу отключить SSH подключение (22й порт) на интерфейсе wlo1:

sudo tcpkill -i wlo1 -9 port 22

Фильтры для подключений могут комбинироваться — вы можете использовать любые варианты Фильтров tcpdump и pcap, больше примеров смотрите в Руководстве по tcpdump.

Принцип работы tcpkill основан на том, что она анализирует передаваемый tcp трафик, вычисляет правильное значение пакета в последовательности и отправляет пакеты для сброса соединения. То есть эта программа может работать только для активных соединений, которые обмениваются трафиком после запуска tcpkill.

Как оборвать TCP соединение с помощью killcx

Killcx — это скрипт на Perl для закрытия TCP подключений в Linux независимо от их состояния (полуоткрытые, установоленные, ожидающие или закрывающиеся).

Killcx работает по следующему принципу: программа создаёт фальшивый SYN пакет с фиктивным номером в последовательности, спуфит удалённый IP/порт клиента и отправляет его на сервер. Это приведёт к ответвлению дочернего процесса, который будет захватывать ответ сервера, извлечёт 2 магических значения из пакета ACK и будет использовать их для отправки спуфленного (поддельного) пакета RST. Затем подключение будет закрыто.

Обратите внимание, что SYN отправляется для того, что если по каким-либо причинам подключение застряло (нет входящих/исхоодящих пакетов), killcx всё равно сможет закрыть его.

Как установить Killcx

Начните с установки зависимостей.

Установка зависимостей Killcx в Debian, Linux Mint, Ubuntu, Kali Linux и их производные:

sudo apt install libnet-rawip-perl libnet-pcap-perl libnetpacket-perl

Установка зависимостей Killcx в Arch Linux, BlackArch и их производные:

sudo pacman -S perl-net-rawip perl-net-pcap perl-netpacket

Далее во всех системах одинаково:

wget -O killcx-1.0.3.tgz https://sourceforge.net/projects/killcx/files/killcx/1.0.3/killcx-1.0.3.tgz/download
tar xvzf killcx-1.0.3.tgz
sudo mv killcx-1.0.3/killcx /usr/bin/killcx
rm -rf killcx-1.0.3*
killcx

Использование:

killcx <destip:destport> <ИНТЕРФЕЙС>

Где:

  destip               : IP удалённого хоста
  destport             : порт удалённого хоста
  ИНТЕРФЕЙС (опционально) : сетевой интерфейс (eth0, lo etc). Помните,
                         что во многих случаях использование 'lo' (loopback) даст
                         лучшие результаты, особенно когда подключение
                         ещё не, или уже не в состоянии ESTABLISHED
                         (SYN_RECV, TIME_WAIT и т.д.).

Примеры:

killcx 10.11.12.13:1234
killcx 10.11.12.13:1234 eth0

Рекомендуемые статьи:

Оставить комментарий

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