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

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

Мне нравится перенаправлять весь трафик, поступающий на 80, на 8000.

я использовал

iptables -tnat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8000

Но тогда порт 8000 все еще открыт для публики.

Я пробовал -DNAT:

iptables -t nat -A PREROUTING  -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8000

Но это совсем не работает. / proc / sys / net / ipv4 / ip_forward установлен в 1.

Никаких других правил не настроено.

Пожалуйста, помогите мне :)

-

редактировать:

В ответ на вопрос ниже: Вот что я хочу достичь:

У меня есть служба, работающая на порту 8000, которую можно рассматривать как веб-сервер. Он должен быть доступен через порт 80 извне, но не через порт 8000. Внутренняя сеть не имеет значения: может быть ограничена или нет.

Я понимаю, что REDIRECT не отбрасывает пакеты, адресованные напрямую на порт 8000, но если я отбрасываю все пакеты до 8000 в цепочке INPUT, то перенаправленные пакеты также удаляются.

iptables -A INPUT -p tcp -m tcp --dport 8000 -j DROP 

У меня не работает.

Есть ли способ отбросить пакеты с портом назначения 8000, которые не были перенаправлены через мою цепочку PREROUTING?

Добавление исходного ip через -s не помогает, правда? потому что исходный IP-адрес не меняется при перенаправлении.

Ответ

Основываясь на принятом ответе, я мог решить это так:

iptables -tmangle -A PREROUTING -p tcp -m tcp --dport 8000 -j MARK --set-mark 1
iptables -A INPUT -m mark --mark 1 -j DROP

Установите отметку в пакете, который вы перенаправляете. Затем разрешите отмеченные пакеты перед заблокированными пакетами. видеть iptables -j MARK -h пометить пакет и iptables -m mark -h соответствовать пачке