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

Перенаправление на альтернативные порты

Я пытаюсь немного обезопасить себя посредством неизвестности и хочу сделать следующее для ряда служб (например, MySQL):

Я пробовал использовать iptables и REDIRECT или DNAT с помощью ряда комбинаций, но безрезультатно, а использование туннелей SSH слишком технически для клиентов.

Любая помощь будет оценена по достоинству!

Вы можете попробовать следующие правила.

iptables -A INPUT -i eth0 -p tcp --dport 3306 -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 53306 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 53306 -j DNAT --to-destination :3306

Предполагая eth0 это публичный интерфейс. Вы сможете получить доступ к порту mysql локально, используя 127.0.0.1.

РЕДАКТИРОВАТЬ:

Не забудьте разрешить выходной трафик и связанный с ним (после установления соединения).

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

Обратите внимание, что вам может потребоваться настроить эти правила под свои нужды. Я просто пытаюсь помочь. Если ваша машина общедоступна без сетевого брандмауэра, вам следует внимательно изучить правила брандмауэра.

Я наконец-то понял. Для всех, кому может быть интересно, вот что я сделал (обратите внимание, что это не полная конфигурация брандмауэра, а только строки, необходимые для достижения того, что описано в OP):

  • Отметьте все пакеты, которые проходят через цель mangle, предназначенную для порта 33306 (замените здесь свой альтернативный порт и свой номер отметки, если хотите)

    iptables -t mangle -ПЕРЕДАЧА! -i lo -p tcp -m tcp --dport 33306 -j MARK --set-mark 96

  • Перенаправьте пакеты на их законный порт в цели nat

    iptables -t nat -А ПЕРЕДАЧА! -i lo -p tcp -m tcp --dport 33306 -j REDIRECT --to-port 3306

  • Допускать в 3306 только те упаковки, которые имеют с собой знак

    iptables -t filter -A INPUT -m state --state RELATED, ESTABLISHED -j ACCEPT
    iptables -t filter -A INPUT -i lo -j ACCEPT
    iptables -t filter -A INPUT! -i lo -m tcp -p tcp --dport 3306 -m mark --mark 96 -j ПРИНЯТЬ
    iptables -t filter -A INPUT! -i lo -m tcp -p tcp --dport 3306 -j DROP

Для этого вам необходимо использовать цель REDIRECT, поскольку вы отправляете трафик на другой порт того же сервера. Предполагая, что IP-адрес вашего сервера 192.0.2.100, синтаксис команды будет следующим:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 192.0.2.100 --dport 53306 -j REDIRECT --to-ports 3306

Или вы можете сделать это для всего входящего трафика на интерфейсе, используя аргумент -i вместо -d с IP-адресом.

Вам также необходимо разрешить трафик на порт 3306 в цепочке INPUT:

iptables -A INPUT -p tcp -m tcp --dport 3306 -m state --state NEW -j ACCEPT