Я пытаюсь немного обезопасить себя посредством неизвестности и хочу сделать следующее для ряда служб (например, 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