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
Связанные статьи:
- Фильтры tcpdump и pcap. Фильтры захвата Wireshark (83.4%)
- Как отправить и получить сырые TCP и UDP данные (66.7%)
- Что такое сокеты Unix и как они работают? (66.7%)
- Как использовать OpenVPN с протоколом TCP (66.7%)
- Какие есть полезные инструменты с интерфейсом командной строки для системных администраторов Linux (50%)
- Как запретить NetworkManager и другим программам менять файл /etc/resolv.conf (RANDOM - 50%)