Randomizar a porta de origem para novas conexões

2

Geralmente, sempre que a porta de origem é selecionada por um aplicativo de rede, ela é selecionada de forma sequencial entre as portas livres, como 32000, 32001 e assim por diante. Eu quero randomizar a seleção da porta de origem. Eu tentei isso usando o iptables da seguinte forma, mas isso não ajudou.

 Chain POSTROUTING (policy ACCEPT 462 packets, 31025 bytes)
 743 44580 MASQUERADE  tcp  --  *      !lo     0.0.0.0/0            0.0.0.0/0           masq ports: 32768-61000 random

Alguém pode me ajudar a resolver isso?

    
por pradeepchhetri 31.01.2014 / 13:50

1 resposta

2

O alcance das portas efémeras é facilmente sintonizável com sysctl net.ipv4.ip_local_port_range="32768 61000" , e você também pode excluir portas com o parâmetro net.ipv4.ip_local_reserved_ports .

Para mais personalização, eu começaria olhando para a fonte do kernel, o AFAIK seria um começo net / ipv4 / inet_connection_sock.c onde minha primeira impressão é que a atribuição é aleatória e não sequencial.

# net/ipv4/inet_connection_sock.c
...
/* Obtain a reference to a local port for the given sock,
 * if snum is zero it means select any available local port.
 */
int inet_csk_get_port(struct sock *sk, unsigned short snum)
{
...
            inet_get_local_port_range(net, &low, &high);
            remaining = (high - low) + 1;
            smallest_rover = rover = net_random() % remaining + low;
    
por 31.01.2014 / 15:40