Как я могу нарушить произвольное соединение TCP/IP в Linux?

Есть ли какая-либо команда, которая может быть использована для взлома существующего соединения TCP/IP из какой-либо программы?

Есть ли что-нибудь в TCP-соединении, о котором знает ОС, или же ОС видит только TCP-передачу в локальных сокетах и ​​не знает, какой запрос подан в какой сокет?

Например, если Firefox отправляет запрос на некоторый серверный порт 80 и ждет ответа. Возможно ли тогда найти порт прослушивания Firefox и трюк Firefox в показе ERR_CONNECTION_REFUSED или что-то подобное.

Я бы хотел, чтобы решение не мешало потоку данных и позволяло приложению обрабатывать эту ситуацию на своем пути, а скорее закрывать сокет или соединение TCP/IP (что должно быть возможным, поскольку сокет - это то, что ОС Ответ: Является ли соединение также свойством ОС или просто чем-то, что делает приложение?), поэтому приложение будет реагировать немедленно.

Ответ 1

Используйте tcpkill.

Ответ 2

Резак

Cutter отправит пакеты на оба конца TCP/IP-соединения, чтобы закрыть соединение. Он предназначен для использования на маршрутизаторе Linux для отключения нежелательных подключений.

Веб-сайт: http://www.digitage.co.uk/digitage/software/linux-security/cutter

Debian имеет пакет из него: https://packages.debian.org/stable/cutter

Ответ 3

Я использую фреймворк `iproute2.

Создайте таблицу маршрутизации/недоступности таблицы маршрутизации (в моей примерной таблице id 33) с помощью правила и дайте ей высокий приоритет:

# ip rule add from all lookup 33 prio 1

Теперь найдите соединения, которые вы пытаетесь заблокировать. В моем случае я использовал Chromium для подключения к google.com:

# ss -n -e -p | grep "chrom" | grep "173.194.*:443"
ESTAB      0      0               10.211.55.4:46710         173.194.35.2:443    timer: (keepalive,38sec,0) users:(("chromium-browse",8488,106)) uid:1000 ino:38318 sk:f6a4f800
ESTAB      0      0               10.211.55.4:49288        173.194.35.18:443    timer:(keepalive,34sec,0) users:(("chromium-browse",8488,109)) uid:1000 ino:38047 sk:f6a4cb00

Итак, добавьте 173.194.0.0/16 в таблицу 33 и сбросьте кеш:

# ip route add unreachable 173.194.0.0/16 table 33
# ip route flush cache

Попробуйте подключиться к google.com сейчас в своем браузере, и вы получите ERR_CONNECTION_REFUSED в своем браузере.

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

# ip route flush table 33

Конечно, если вам нужно более гранулированное различие, вы можете использовать tc и u32 classifier, чтобы указать точное комманда IP:PORT (и другие аспекты пакета) и добавить правило fw в ведро (untested):

# tc filter add dev eth1 parent ffff: protocol ip prio 1 u32 \
    match ip src 173.194.0.0/16 match ip dport 443 classid :1
# ip rule add fwmark 1 table 33 prio 1 realms 3/4