Рандомизация порта источника для новых соединений

Обычно, когда исходный порт выбирается сетевым приложением, он выбирается последовательно между свободными портами, такими как 32000, 32001 и т. Д. Я хочу рандомизировать выбор порта источника. Я пробовал это с помощью iptables следующим образом, но это не помогло.

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 

Может ли кто-нибудь помочь мне в решении этого?

  • Каковы преимущества и недостатки редактирования файла конфигурации iptables и добавления правил с помощью команды iptables
  • Настроить iptables на удаленном сервере, не блокируя меня
  • Блокировка исходящих соединений с iptables
  • Управление iptables для конкретных ips и портов
  • Разве это руководство блокировало пингу на моем сервере?
  • В iptables, в чем разница между целями DNAT и REDIRECT?
  • Почему мой брандмауэр iptables отклоняет подключения к порту 1531?
  • iptables не пересылает из WAN виртуальные машины
  • One Solution collect form web for “Рандомизация порта источника для новых соединений”

    Диапазон эфемерных портов легко настраивается с помощью sysctl net.ipv4.ip_local_port_range="32768 61000" , и вы также можете исключать порты с параметром net.ipv4.ip_local_reserved_ports .

    Для большей настройки я хотел бы начать с изучения источника ядра, AFAIK – это net / ipv4 / inet_connection_sock.c, где мое первое впечатление заключается в том, что назначение является случайным, а не последовательным.

     # 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; 
    Linux и Unix - лучшая ОС в мире.