Coder Social home page Coder Social logo

nfqws QUIC ipfrag2 about zapret HOT 8 CLOSED

AlexeiGHub avatar AlexeiGHub commented on June 14, 2024
nfqws QUIC ipfrag2

from zapret.

Comments (8)

bol-van avatar bol-van commented on June 14, 2024 1

ipfrag вообще большая боль. фактически он работает только для конкретных целей типа wireguard на своей VPSке, если по пути не порежут. для общего обхода не годится, поскольку сеть враждебна к ip фрагментам. не любит она их.

еще есть проблема с атакой ipfrag на проходящий пакет (forward) , когда используется masquerade.
по идее надо делать так. хватаемся с очень низким приоритетом (predefrag) на output, чтобы до conntrack пометить генеренные в nfqws пакеты как notrack. тогда их conntrack трогать не будет.
НО поскольку генеренный пакет - первый в сеансе, то в conntrack таблице еще нет информации о сеансе.
окей, сгенеренный пакет уходит. в ответ что-то приходит. и создается запись conntrack на основании вошедшего пакета. получается ломается NAT
этой проблемы нет, когда NAT не задействуется. например, в случае исходящего трафика с самой системы

в последней версии добавил переменную POSTNAT_ALL. если ее установить в 1, например в config, то схема nftables переключается на вариант обработки после nat, но в этом случае могут ломаться проходящие атаки на udp
зато нет проблем с bind_fix

from zapret.

bol-van avatar bol-van commented on June 14, 2024 1

ipfrag не будет работать при POSTNAT_ALL=0, потому что NAT не сможет заменить source address на инетовский

from zapret.

bol-van avatar bol-van commented on June 14, 2024

Фрагменты имеется в виду что ? ipfrag или split ?

from zapret.

bol-van avatar bol-van commented on June 14, 2024

Скрипты zapret хватают пакеты еще до srcnat

 chain postrouting {
                type filter hook postrouting priority srcnat - 1; policy accept;
......
}

nfqws получает пакеты с локальным IP и отправляет их так же. это нормально.
masquerade работает уже после , как с пропущенными через очередь оригиналами, так и с отправленными nfqws пакетами через raw socket

если адрес после masquerade сохранился, значит пакеты не были обработаны, возможно по какой-то причине свалились в состояние conntrack INVALID. но правила fw4 такое должны отсекать и не пропускать

по поводу ipfrag там вообще отдельная песня. скрипты zapret не поддерживают его использование. только ручками

from zapret.

AlexeiGHub avatar AlexeiGHub commented on June 14, 2024

ipfrag

ipfrag2

from zapret.

AlexeiGHub avatar AlexeiGHub commented on June 14, 2024

если адрес после masquerade сохранился, значит пакеты не были обработаны, возможно по какой-то причине свалились в состояние conntrack INVALID. но правила fw4 такое должны отсекать и не пропускать

Так и есть, я отключил прибивание conntrack INVALID, иначе rawsend: sendto: Operation not permitted

Как найти причины #свалиливания в состояние conntrack INVALID?

from zapret.

AlexeiGHub avatar AlexeiGHub commented on June 14, 2024

И в коде
`
if (!ip_frag(pkt_orig, pkt_orig_len, ipfrag_pos, ident, pkt1, &pkt1_len, pkt2, &pkt2_len))
return res;

				DLOG("sending 1st ip fragment 0-%zu len=%zu : ", ipfrag_pos-1, ipfrag_pos)
				hexdump_limited_dlog(pkt1,pkt1_len,IP_MAXDUMP); DLOG("\n")
				if (!rawsend((struct sockaddr *)&dst, desync_fwmark, ifout , pkt2, pkt2_len))
					return res;

				DLOG("sending 2nd ip fragment %zu-%zu len=%zu : ", ipfrag_pos, len_transport-1, len_transport-ipfrag_pos)
				hexdump_limited_dlog(pkt2,pkt2_len,IP_MAXDUMP); DLOG("\n")
				if (!rawsend((struct sockaddr *)&dst, desync_fwmark, ifout , pkt1, pkt1_len))

`

порядок отправки перепутан специально?

from zapret.

AlexeiGHub avatar AlexeiGHub commented on June 14, 2024

Проверьте корректность работы при POSTNAT_ALL=0

from zapret.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.