Utilice nf_conntrack en lugar de ipset para crear un programa de verificación de golpes

Anoche, hice malabares con un servicio de llamadas a puertas:
https://blog.csdn.net/dog250/article/details/108479651

El truco aquí es utilizar la función de retransmisión de TCP:

  • El primero que rellena los datos de autenticación solo se usa para golpear y está destinado a ser descartado.
  • El segundo paquete de retransmisión pasa directamente a través de la puerta abierta por el primer paquete que golpea para establecer una conexión.

Utilizo la solución ipset en el lado del servidor, lo cual es bastante claro y creo que es bueno.

Me desperté por la mañana y pensé en otro plan basado en nf_conntrack. Después de todo, estoy muy familiarizado con conntrack, y siempre siento que pierdo el tiempo si no hago malabares dos veces.

No siempre se centre en el rendimiento. Antes de que no sepa cómo implementar la función, decir que el rendimiento es completamente grandioso. El uso de conntrack es deliberado, es algo muy bueno.

Muy simple, el servidor elimina todas las reglas de ipset e iptables, solo agregue lo siguiente:

# 使conntrack不再校验checksum,因为敲门包的checksum是故意错误的。
root@zhaoya-VirtualBox:/# sysctl -w net.netfilter.nf_conntrack_checksum=0
root@zhaoya-VirtualBox:/# iptables -t mangle -I PREROUTING -m conntrack --ctstatus CONFIRMED -j ACCEPT
root@zhaoya-VirtualBox:/# iptables -t mangle -A PREROUTING -p tcp --dport 22  -m string --string "skinshoe" --algo bm -j ACCEPT
root@zhaoya-VirtualBox:/# iptables -t mangle -A PREROUTING -p tcp --dport 22  ! -s 192.168.56.1 -j DROP

# 下面我们监控conntrack条目,同时在192.168.56.110上发起敲门:
# - 记得加载padding.ko模块并设置正确的敲门字符串。
root@zhaoya-VirtualBox:/# conntrack -E -p tcp
    [NEW] tcp      6 120 SYN_SENT src=192.168.56.110 dst=192.168.56.101 sport=50314 dport=22 [UNREPLIED] src=192.168.56.101 dst=192.168.56.110 sport=22 dport=50314
 [UPDATE] tcp      6 60 SYN_RECV src=192.168.56.110 dst=192.168.56.101 sport=50314 dport=22 src=192.168.56.101 dst=192.168.56.110 sport=22 dport=50314
 [UPDATE] tcp      6 432000 ESTABLISHED src=192.168.56.110 dst=192.168.56.101 sport=50314 dport=22 src=192.168.56.101 dst=192.168.56.110 sport=22 dport=50314 [ASSURED]

Es fácil de entender:

  • Piense en PREROUTING to INPUT de NF como una puerta.
  • El primer paquete de relleno SYN knock es responsable de pasar por el conntrack, se confirma la capa de IP, se descarta la capa de TCP y se golpea la puerta con éxito.
  • El segundo paquete SYN original retransmitido se ACEPTA directamente en la tabla de mangle, pasa a través de la capa IP y establece una conexión en la capa TCP.

Los zapatos de cuero en Wenzhou, Zhejiang están mojados, por lo que no engordan con la lluvia.

Supongo que te gusta

Origin blog.csdn.net/dog250/article/details/108500472
Recomendado
Clasificación