В nfqws добавлен параметр --dpi-desync-fake-unknown=<filename>
в нем указывается файл, который будет отсылаться в качестве фейка при --dpi-desync=fake --dpi-desync-any-protocol
и обработке не http запроса и не TLS ClientHello вместо стандартного пакета из 256 нулей
cutoff теперь имеет 3 варианта ограничителя
n - номер пакета, начиная с 1
d - номер пакета с данными, начиная с 1
s - relative sequence number. он равен количеству переданных от клиента байтов + 1
Отсечение происходит, если параметр равен или больше заданного значения.
--wssize-cutoff=[n|d|s]N ; apply server wsize only to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N
--dpi-desync-cutoff=[n|d|s]N ; apply dpi desync only to packet numbers (n, default), data packet numbers (d), relative sequence (s) less than N
Вкратце поясню зачем вся эта котовасья.
Представьте , что настал очередной печальный день в истории рунета, и РКН решил заблокировать SMTP (тут можете подставить ваш любимый протокол, телеграм, допустим). Шлите почту только через авторизованные сервисы, где сидит тов. майор. SMTP протокол распознается и режется на ТСПУ.
Задача точно такая же, как и в случае http/https. Сделать так, чтобы DPI не понял, что это SMTP.
Но так случилось, что абы чего DPI не пропускает. Левые протоколы тоже стали резать.
Надо подсунуть что-то безобидное. Например, http запрос.
И делать это до того момента, как начнется шифрованная фаза (ведь вы конечно же не будете слать почту без TLS ?)
Обычно при отсылке почты через SMTP клиент выдает 2 открытых сообщения “EHLO servername” и “STARTTLS”, потом идет TLS handshake.
nfqws --qnum=250 --dpi-desync-any-protocol --dpi-desync-cutoff=d4 --dpi-desync=fake,split2 --dpi-desync-ttl=5 --dpi-desync-fake-unknown=/opt/zapret/files/fake/fake_http_req_example.bin
Будут обработаны первые 3 исходящих пакета TCP соединения с данными (то есть не будут в нумерации учтены пустые пакеты с ACK)
Будут отосланы следующие сообщения : Будут отосланы следующие сообщения :
фейк : GET / HTTP/1.1 ... Host: iana.org
реал : EH
реал : LO mail.myserver.com
фейк : GET / HTTP/1.1 ... Host: iana.org
реал : ST
реал : ARTTLS
фейк : TLSClientHello от w3.org
реал : TLSClientHello от mail.myserver.com - первые 2 байта
реал : TLSClientHello от mail.myserver.com - остальные байты
после этого наступает состояние desync-cutoff (отсечение desync).
nfqws больше не трогает это соединение, чтобы не замусоривать канал всякой ерундой и не снижать скорость
если добавите --debug
, все станет понятно из лога nfqws
Разумеется, описанный сценарий пока чисто гипотетический, он служит лишь для иллюстрации техники. Будет ли это работать и с какими нюансами - покажет время.
Если тупо забанят 25 порт или по IP startmail, protonmail, … - не сработает точно