Подтвердить что ты не робот

Iptables перенаправляет с 80 на 8080, но блокирует доступ к общественному 8080

У меня есть несколько правил iptables, которые перенаправляют запросы на порт 80 на наш сервер приложений (GlassFish) на порт 8080 (а также на порты SSL, но я их оставил для простоты).

В то время как у нас все работает нормально (и у меня лично нет проблем), порт 8080 также открыт для внешнего мира, если кто-то хочет указать его в URL-адресе. Утверждено, что порт 8080 должен быть закрыт от доступа из внешнего мира, и только 80 будут открыты.

Я не хочу менять слушателя на сервере приложений (для использования порта 80 для этого требуется, чтобы ему было необходимо получить права доступа для пользователя, на котором запущен сервер приложений), а слушатель на порту 8080 должен знать IP-адрес источника пакет, поскольку приложение проверяет запросы к приложению (т.е. мы не можем изменить исходный IP-адрес на локальный).

Ниже приведена текущая конфигурация iptables. Кто-нибудь знает, есть ли способ блокировать 8080 из общедоступного Интернета, сохраняя исходный IP-адрес в пакетах, перенаправленных с порта 80?

Большое спасибо заранее.


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

    # allow establishment of connections initialised by my outgoing packets
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

    # accept anything on localhost
    iptables -A INPUT -i lo -j ACCEPT

    ################################################################
    #individual ports tcp 
    ################################################################
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

    #drop everything else
    iptables -A INPUT -j DROP

    ################################################################
    #Redirection Rules
    ################################################################
    # redirection rules (allowing forwarding from localhost)
    iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080

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

4b9b3361

Ответ 1

Один из способов, который я нашел для этого, - использовать цель MARK в цепочке PREROUTING таблицы mangle.

Добавьте правило для тега пакетов, которые вы хотите заблокировать:

iptables -t mangle -A PREROUTING -p tcp --dport 8080 -j MARK --set-mark 1

Затем, прежде чем разрешить порт 8080 добавить это в DROP помеченные пакеты:

iptables -A INPUT -m mark --mark 1 -j DROP

Ответ 2

Я обработал это несколько иначе. Я переслал 443-3000 (как указано выше), но также перешёл от 3000 до 443. Затем я разрешаю трафик на 3000, но блокирую его на 443. Когда фильтрация трафика 443 должна быть только из порта 3000.

Я использую ufw, поэтому правила фильтра были введены с использованием этого инструмента. Я добавил правила nat в /etc/ufw/before.rules.

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3000

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 3000 -j REDIRECT --to-ports 443