Назад | Перейти на главную страницу

Перенаправление с IPTABLES при скрытии исходного порта

Итак, мой сервер Glassfish прослушивает порт 8080.
Однако я хочу, чтобы мои запросы поступали на порт 80. скрываясь 8080,
так что люди думают, что мой сервер действительно работает на 80.

Как я могу это сделать с iptables? Я пробовал следующее правило:

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

но это не то, что я хочу, потому что я должен открыть и 80 и 8080, чтобы он работал.

Любые идеи?


Обновить: Я изменил свой файл правил, чтобы он выглядел так:

iptables -F

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

iptables -A INPUT -j DROP

#REDIRECTION RULES
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT  \
         --to-destination 127.0.0.1:8080

Но все равно не работает. у меня есть /proc/sys/net/ipv4/ip_forward установлен в 1.
Ни http://myserver:8080 ни то, ни другое http://myserver:80 работай. Пакеты отброшены.

У меня был точно такой же вопрос, и я нашел ответ с помощью этого сообщества. Вот ссылка:

Перенаправление порта с помощью iptables на localhost / блокировка порта назначения

Я решил проблему, пометив пакеты, поступающие на 8080, и затем отфильтровав их:

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 8080 -j MARK --set-mark 1
iptables -A INPUT -m mark --mark 1 -j DROP

Последнее правило для отбрасывания помеченных пакетов может быть самым первым правилом в вашей цепочке INPUT.

DNAT у меня не работал с localhost. Я думаю, это потому, что localhost обрабатывается в ядре специально.

Использовать DNAT.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination your.ip.address:8080

Что-то вроде этого должно работать. :)

ИЗМЕНИТЬ после вашего собственного редактирования: Я думаю, что эта строка слишком ранняя в вашем наборе правил:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Благодаря этому ваш сервер не принимает НОВЫХ подключений, верно? Попробуйте переместить его прямо перед вашим iptables -A INPUT -j DROP линия.

Вы пробовали изменить:

iptables -P FORWARD DROP

к

iptables -P FORWARD ACCEPT

?