
Estoy intentando realizar una inspección profunda de paquetes HTTP. El propósito de esto es recopilar datos de carga útil HTTP y luego crear algunos informes independientes de proxy/caché. Después de esto, la idea es desarrollar complementos de proxy/caché específicos (por ejemplo, Squid) para utilizar los informes.
Estoy usando el siguiente escenario de prueba (máquinas VirtualBox, todas las máquinas son CentOS 6.3):
ROUTER:
Interfaces:
eth0 conectado a la red 192.168.1.0/24 (ip 192.168.1.10)
eth1 conectado a la red 192.168.2.0/24 (ip 192.168.2.20)
eth2 conectado a la red 192.168.3.0/24 (ip 192.168.3.30)
eth3 acceso a Internet
PC1 (inspección profunda de paquetes - DPI PC):
Interfaces:
eth0 conectado a la red 192.168.1.0/24 (ip 192.168.1.1)
Las solicitudes HTTP de PC en redes 192.168.2.0 y 192.168.3.0 se marcan con iptables y luego se enrutan a una PC DPI.
Script de iptables del ENRUTADOR:
#ALL CHAINS POLICY = ACCEPT
# DPI PC IP
IP_DPI=192.168.1.1
# Interface to reach DPI PC from router
IF_DPI_OUT=eth0
# Internet access interface
IF_MASQ=eth3
# Flush everything
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
# Zero counters
iptables -Z
iptables -t nat -Z
iptables -t mangle -Z
# Enable MASQUERADING
iptables -t nat -A POSTROUTING -s 192.16.1.0/24 -o $IF_MASQ -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o $IF_MASQ -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o $IF_MASQ -j MASQUERADE
### HTTP packets redirection
# Mark HTTP packets
iptables -t mangle -A PREROUTING -p tcp --dport 80 -m state --state NEW -s 192.168.2.0/24 -i eth1 -j MARK --set-mark 7
iptables -t mangle -A PREROUTING -p tcp --dport 80 -m state --state NEW -s 192.168.3.0/24 -i eth2 -j MARK --set-mark 7
# Create routing table named "http_redirect"
echo 202 http_redirect >> /etc/iproute2/rt_tables
# Marked packets use "http_redirect" table
ip rule add fwmark 7 table http_redirect
# Sent packets to DPI PC
ip route add default via $IP_DPI dev $IF_DPI_OUT table http_redirect
# Flush route cache
ip route flush cache
En DPI PC hago lo mismo, los paquetes se redirigen nuevamente al enrutador:
script de iptables de DPI PC:
#ALL CHAINS POLICY = ACCEPT
IP_ROUTER=192.168.1.10
IF_ROUTER_OUT=eth0
# Flush everything
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
# Zero counters
iptables -Z
iptables -t nat -Z
iptables -t mangle -Z
### HTTP packets redirection
# Mark HTTP packets
iptables -t mangle -A PREROUTING -p tcp --dport 80 -i eth0 -j MARK --set-mark 7
# Create routing table named "http_redirect"
echo 202 http_redirect >> /etc/iproute2/rt_tables
# Marked packets use "http_redirect" table
ip rule add fwmark 7 table http_redirect
# Sent packets back to ROUTER
ip route add default via $IP_ROUTER dev $IF_ROUTER_OUT table http_redirect
# Flush route cache
ip route flush cache
Usando el registro de iptables, veo que solo el primer paquete (paquete con SYN activado) se redirige desde el ROUTER a la PC DPI, y desde la PC DPI nuevamente al ROUTER, pero una vez que el paquete vuelve a obtener el ROUTER, no se enruta a través de eth3 (acceso a Internet). ). Luego se genera un nuevo paquete con SYN activado e ID=ID_anterior+1 y se repiten los pasos nuevamente.
Con lo siguiente en una PC local (ip 192.168.3.3):
wget www.yahoo.com
Registro de DPI PC:
Jan 8 19:29:03 localhost kernel: D:IN:eth0:HTTP:d80: IN=eth0 OUT=
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48079 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139AFDB0000000001030305)
Jan 8 19:29:03 localhost kernel: D:IN:eth0:MARK-1.0 IN=eth0 OUT=
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48079 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139AFDB0000000001030305)
Jan 8 19:29:03 localhost kernel: D:OUT:eth0:HTTP:d80: IN= OUT=eth0
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=48079 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139AFDB0000000001030305) MARK=0x7
Jan 8 19:29:04 localhost kernel: D:IN:eth0:HTTP:d80: IN=eth0 OUT=
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48080 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139B3C30000000001030305)
Jan 8 19:29:04 localhost kernel: D:IN:eth0:MARK-1.0 IN=eth0 OUT=
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48080 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139B3C30000000001030305)
Jan 8 19:29:04 localhost kernel: D:OUT:eth0:HTTP:d80: IN= OUT=eth0
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=48080 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139B3C30000000001030305) MARK=0x7
Jan 8 19:29:06 localhost kernel: D:IN:eth0:HTTP:d80: IN=eth0 OUT=
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48081 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139BB930000000001030305)
Jan 8 19:29:06 localhost kernel: D:IN:eth0:MARK-1.0 IN=eth0 OUT=
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48081 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139BB930000000001030305)
Jan 8 19:29:06 localhost kernel: D:OUT:eth0:HTTP:d80: IN= OUT=eth0
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=48081 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139BB930000000001030305) MARK=0x7
Registro del ENRUTADOR:
Jan 8 19:28:48 localhost kernel: R:IN:eth2:HTTP:d80: IN=eth2 OUT=
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=48079 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139AFDB0000000001030305)
Jan 8 19:28:48 localhost kernel: R:IN:eth2:MARK-3.0 IN=eth2 OUT=
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=48079 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139AFDB0000000001030305)
Jan 8 19:28:48 localhost kernel: R:OUT:eth0:HTTP:d80: IN= OUT=eth0
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48079 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139AFDB0000000001030305) MARK=0x7
Jan 8 19:28:48 localhost kernel: R:IN:eth0:HTTP:d80: IN=eth0 OUT=
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=48079 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139AFDB0000000001030305)
Jan 8 19:28:49 localhost kernel: R:IN:eth2:HTTP:d80: IN=eth2 OUT=
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=48080 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139B3C30000000001030305)
Jan 8 19:28:49 localhost kernel: R:IN:eth2:MARK-3.0 IN=eth2 OUT=
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=48080 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139B3C30000000001030305)
Jan 8 19:28:49 localhost kernel: R:OUT:eth0:HTTP:d80: IN= OUT=eth0
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48080 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139B3C30000000001030305) MARK=0x7
Jan 8 19:28:49 localhost kernel: R:IN:eth0:HTTP:d80: IN=eth0 OUT=
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=48080 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139B3C30000000001030305)
Jan 8 19:28:51 localhost kernel: R:IN:eth2:HTTP:d80: IN=eth2 OUT=
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=48081 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139BB930000000001030305)
Jan 8 19:28:51 localhost kernel: R:IN:eth2:MARK-3.0 IN=eth2 OUT=
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=48081 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139BB930000000001030305)
Jan 8 19:28:51 localhost kernel: R:OUT:eth0:HTTP:d80: IN= OUT=eth0
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=48081 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139BB930000000001030305) MARK=0x7
Jan 8 19:28:51 localhost kernel: R:IN:eth0:HTTP:d80: IN=eth0 OUT=
SRC=192.168.3.3 DST=200.152.175.146 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=48081 DF PROTO=TCP SPT=49268 DPT=80 WINDOW=14600 RES=0x00 SYN URGP=0 OPT (020405B40402080A0139BB930000000001030305)
Paquete con ID=48079:
1. Llega al eth2 del ROUTER desde el host 192.168.3.3
2. Se marca con 0x7
3. Se enruta al DPI PC a través del eth0 del ROUTER
4. Llega al eth0 del DPI PC (entrante)
5. Se marca con 0x7
6 Se enruta de regreso al ROUTER a través del eth0 (saliente) de la PC DPI.
7. Vuelve al eth0 del ROUTER
(los paquetes no se enrutan a través de eth3 y los pasos se repiten nuevamente, con un nuevo paquete con ID=48080).
La inspección profunda de paquetes debe realizarse entre los pasos 4 a 6 una vez que este esquema funcione.
Los paquetes necesariamente deben enrutarse desde el ROUTER A la PC DPI y desde la PC DPI nuevamente al ROUTER porque más adelante usaré Squid en la PC DPI.
Agradecería cualquier orientación,
gracias de antemano
Respuesta1
Lo más probable es que sea el filtro rp funcionando en el dispositivo enrutador.
Google: filtro rp de Linux