Мне нужно сделать переадресацию портов на моем Linux (Debian 8
) для перехвата пакетов, проходящих через машину.
Он должен быть основан на IP-адресе источника, поэтому разные порты для разных IP-адресов.
Я хотел использовать iptables
напр.
iptables -t nat -A PREROUTING -s 10.1.10.78/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 10.1.10.31/32 -j REDIRECT --to-port 4444
iptables -t nat -A PREROUTING -s 10.1.10.79/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 10.1.10.21/32 -j REDIRECT --to-port 5000
Но похоже, что при превышении более 20К правил машина становится медленной, и iptables может оказаться правильным решением. Теперь я могу масштабировать машину, но есть ли лучшее решение, кроме iptables
для этой "простой" задачи?
У меня нет инфраструктуры для моделирования вашего сценария, но я думаю, что здесь может помочь использование настраиваемых цепочек iptables. Их можно использовать для каскадирования правил и ухода от огромной монолитной PREROUTING
цепь.
Вам нужно сначала подумать о том, как назначить IP-адреса разным цепочкам. В этом небольшом примере я буду использовать IP-подсети.
# Create custom chains
iptables -t nat -N chain-net-192.168.1.0/24
iptables -t nat -N chain-net-192.168.2.0/24
iptables -t nat -N chain-net-192.168.3.0/24
# Let appropriate connection jump to proper custom chains
iptables -t nat -A PREROUTING -s 192.168.1.0/255.255.255.0 -j chain-net-192.168.1.0/24
iptables -t nat -A PREROUTING -s 192.168.2.0/255.255.255.0 -j chain-net-192.168.2.0/24
iptables -t nat -A PREROUTING -s 192.168.3.0/255.255.255.0 -j chain-net-192.168.3.0/24
# Inside chain-net-192.168.1.0/24 perform actions
iptables -t nat -A PREROUTING -s 192.168.1.15/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 192.168.1.25/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 192.168.1.35/32 -j REDIRECT --to-port 4321
# Inside chain-net-192.168.2.0/24 perform actions
iptables -t nat -A PREROUTING -s 192.168.2.15/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 192.168.2.25/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 192.168.2.35/32 -j REDIRECT --to-port 4321
# Inside chain-net-192.168.3.0/24 perform actions
iptables -t nat -A PREROUTING -s 192.168.3.15/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 192.168.3.25/32 -j REDIRECT --to-port 4321
iptables -t nat -A PREROUTING -s 192.168.3.35/32 -j REDIRECT --to-port 4321
Для получения дополнительной информации о пользовательских цепочках iptables см. Linux Server Hacks в O'Reilly.
Может стоит посмотреть nftables
. Он превосходит netfilter
/ iptables
во многих случаях.
Он перенесен на debian 8 согласно https://wiki.debian.org/nftables