Рандомизация порта источника для новых соединений
Обычно, когда исходный порт выбирается сетевым приложением, он выбирается последовательно между свободными портами, такими как 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 в Linux
- Определить, какая программа заблокирована брандмауэром
- Блокировать все IP-адреса от доступа к чему-либо на сервере
- Прямой порт 22 выдает конкретный интерфейс
- Как настроить правила ICMP iptables на маршрутизаторе?
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;