netfilter: Como marcar pacotes por reqid?

1

Eu tenho o seguinte problema. Eu tenho SAs que usam marcas de firewall. Portanto, apenas os pacotes que possuem essa marca são codificados e decodificados. Consegui definir a marca para os pacotes que devem ser codificados, mas não consigo fazer o outro lado funcionar.

Tenho pacotes de entrada que precisam ser descriptografados e preciso definir a marca correta para eles. Eu posso realmente definir a marca usando o seguinte comando:

iptables -t mangle -A PREROUTING --proto esp -j MARK --set-mark 1

MAS essa regra corresponde a todos os pacotes esp recebidos. No entanto, terei várias SAs e preciso definir marcas diferentes. Eu tentei usar select por reqid ou spi, mas assim que eu tentei, a regra não combina mais nada.

Alguém pode me ajudar a conseguir o comando iptables certo?

Cumprimentos,
  Steffen

root@vpn-b:~# setkey -D
10.5.0.2 10.5.0.1
        esp mode=tunnel spi=3296784692(0xc480f134) reqid=1(0x00000001)
        E: aes-cbc  c5eb72ab 906d5717 67e405f5 cfe73f7a
        A: hmac-sha1  6935290e e51f0965 06577876 0d6237d6 45a0083d
        seq=0x00000000 replay=32 flags=0x00000000 state=mature
        created: May 15 22:23:06 2012   current: May 15 22:24:43 2012
        diff: 97(s)     hard: 1200(s)   soft: 907(s)
        last: May 15 22:23:19 2012      hard: 0(s)      soft: 0(s)
        current: 7140(bytes)    hard: 0(bytes)  soft: 0(bytes)
        allocated: 85   hard: 0 soft: 0
        sadb_seq=1 pid=8282 refcnt=0
10.5.0.1 10.5.0.2
        esp mode=tunnel spi=3470192236(0xced6ee6c) reqid=1(0x00000001)
        E: aes-cbc  e6fad1a5 ff31325b b4856748 c8997ea1
        A: hmac-sha1  e401cc9d 59668c9f 866d7e86 b5a38d2c 1dcb2f2d
        seq=0x00000000 replay=32 flags=0x00000000 state=mature
        created: May 15 22:23:06 2012   current: May 15 22:24:43 2012
        diff: 97(s)     hard: 1200(s)   soft: 888(s)
        last: May 15 22:23:19 2012      hard: 0(s)      soft: 0(s)
        current: 7140(bytes)    hard: 0(bytes)  soft: 0(bytes)
        allocated: 85   hard: 0 soft: 0
        sadb_seq=0 pid=8282 refcnt=0

root@vpn-b:~# ip -s xfrm policy
src 10.1.1.0/24 dst 10.2.1.0/24 uid 0
        dir fwd action allow index 1218 priority 1859 share any flag  (0x00000000)
        lifetime config:
          limit: soft (INF)(bytes), hard (INF)(bytes)
          limit: soft (INF)(packets), hard (INF)(packets)
          expire add: soft 0(sec), hard 0(sec)
          expire use: soft 0(sec), hard 0(sec)
        lifetime current:
          0(bytes), 0(packets)
          add 2012-05-15 22:08:11 use 2012-05-15 22:18:27
        mark 1/0xffffffff
        tmpl src 10.5.0.1 dst 10.5.0.2
                proto esp spi 0x00000000(0) reqid 1(0x00000001) mode tunnel
                level required share any
                enc-mask ffffffff auth-mask ffffffff comp-mask ffffffff
src 10.1.1.0/24 dst 10.2.1.0/24 uid 0
        dir in action allow index 1208 priority 1859 share any flag  (0x00000000)
        lifetime config:
          limit: soft (INF)(bytes), hard (INF)(bytes)
          limit: soft (INF)(packets), hard (INF)(packets)
          expire add: soft 0(sec), hard 0(sec)
          expire use: soft 0(sec), hard 0(sec)
        lifetime current:
          0(bytes), 0(packets)
          add 2012-05-15 22:08:11 use -
        mark 1/0xffffffff
        tmpl src 10.5.0.1 dst 10.5.0.2
                proto esp spi 0x00000000(0) reqid 1(0x00000001) mode tunnel
                level required share any
                enc-mask ffffffff auth-mask ffffffff comp-mask ffffffff
src 10.2.1.0/24 dst 10.1.1.0/24 uid 0
        dir out action allow index 1201 priority 1859 share any flag  (0x00000000)
        lifetime config:
          limit: soft (INF)(bytes), hard (INF)(bytes)
          limit: soft (INF)(packets), hard (INF)(packets)
          expire add: soft 0(sec), hard 0(sec)
          expire use: soft 0(sec), hard 0(sec)
        lifetime current:
          0(bytes), 0(packets)
          add 2012-05-15 22:08:11 use 2012-05-15 22:18:27
        mark 1/0xffffffff
        tmpl src 10.5.0.2 dst 10.5.0.1
                proto esp spi 0x00000000(0) reqid 1(0x00000001) mode tunnel
                level required share any
                enc-mask ffffffff auth-mask ffffffff comp-mask ffffffff
    
por Steffen Heil 16.05.2012 / 00:30

2 respostas

2

Meu processo de pesquisa me pegou nesta página e decidi escrever. Como os pacotes ESP estão fluindo entre os peers, você pode adicionar argumentos adicionais, como endereços IP de origem e destino, aos seus iptables. Isso diferenciaria os pacotes esp e você poderia aplicar marcas diferentes depois. Por exemplo, de peer 100.100.100.100 para peer 200.200.200.200 (assumindo que 200.200.200.200 está do seu lado) você teria uma regra como essa em seu /etc/iptables.up.rules

*mangle

# Marking the ESP packets between peer A and peer B
-A INPUT -p esp -s 100.100.100.100 -d 200.200.200.200 -j MARK  --set-mark 10

Respectivamente, os pacotes ESP que pertencem a outro túnel seriam marcados assim (supondo que novamente 200.200.200.200 esteja do seu lado e 150.100.100.100 seja par remoto)

# Marking the ESP packets between peer C and peer B
-A INPUT -p esp -s 150.100.100.100 -d 200.200.200.200 -j MARK  --set-mark 20
    
por 24.08.2012 / 17:41
1

Tente o módulo de correspondência de política do iptables:

-m policy --reqid $ID

Mais detalhes em man iptables (8) .

    
por 21.06.2014 / 15:05