у меня есть этот iptables и он работает.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 0:20 -j REDIRECT --to-port 8080 #bypass SSH
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 23:442 -j REDIRECT --to-port 8080 #bypass SSL
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 444:2082 -j REDIRECT --to-port 8080 #Cpanel SSL
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2084:2086 -j REDIRECT --to-port 8080 #WHM SSL
любая идея изменить это на следующее условие более простыми правилами:
Перенаправить ВЕСЬ трафик на 8080
и исключить перенаправление, если порт назначения совпадает 22 443 2083 и 2087
Спасибо.
Обновить:
Мультипорты поддерживают до 15 отдельных портов Ref: Заметки о фильтрации пакетов iptables
Итак, я использовал другой метод для прямого приема определенных портов, например whois (port43)
iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport \
--dports 43 \
-j ACCEPT
Кто-то может возразить, что это может сработать как попытка краткости ваших правил, но это не сработает так, как ожидалось.
iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dports ! 22,443,2083,2087 -j REDIRECT --to-port 8080
условие «-option a, b» эквивалентно «-option a OR -option b», что представляет собой ровно 4 правила, сгенерированных из одного. Однако, если «! -Option a, b» следует интерпретировать как «NOT (-option a OR -option b)», то на самом деле это «(NOT -option a) AND (NOT -option b)», которое просто не может быть взорвался на два правила.