Мне нравится перенаправлять весь трафик, поступающий на 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
соответствовать пачке