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

Как я могу заставить перенаправление портов работать с iptables?

Я хочу защитить свой сервер MySQL от сканеров портов / зондов. Итак, моя идея - подключить внешний порт, скажем, 36636внутренний порт должен оставаться равным 3306 по умолчанию для совместимости с локальными приложениями.

Клиент MySQL подключается к mysql.hostname.tld: 36636, а затем iptables должен перенаправить его на 3306. Но я просто не могу заставить его работать. Вот мое правило перенаправления:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 36636 -j REDIRECT --to-port 3306

Я активировал расширенное ведение журнала в iptables и MySQL, я почти уверен, что пакеты проходят через брандмауэр, но затем они «исчезают», они, кажется, не достигают MySQL. Конечно, я также открыл порт 36636 в iptables.

Прежде всего, это не эффективный способ защиты сервера mysql. Изменение порта не лишит злоумышленника возможности узнать, что вы используете сервер mysql. Это может немного задержать его.

Чтобы ответить на ваш вопрос, ваше правило кажется нормальным, если вы запускаете iptables и mysql на одном хосте. В противном случае вам нужно использовать DNAT цель вместо REDIRECT. Кроме того, в этом случае вам необходимо разрешить переадресацию IP. Это что касается правил NAT. Для правил фильтрации вам нужно либо разрешить порт mysql, либо установить значение по умолчанию INPUT/FORWARD/OUTPUT политика к ACCEPT (делайте это только в том случае, если вы хотите разрешить всему проходить через брандмауэр).

В любом случае вы должны разрешить порт 3306, даже если вы выполняете переадресацию порта с другого порта. У вас есть два варианта:

1- Change the port mysql server is listening on. This might not be suitable for you as it will affect the local applications.
2- Add another NAT rule to port forward standard mysql port 3306 to something else invalid.

Для варианта 2 вы можете выполнить:

iptables -A PREROUTING ! -s local_subnet -p tcp --dport 3306 -j REDIRECT --to-port 9999

Это правило предотвратит доступ к порту mysql из нелокальной подсети.

Что ж, нет необходимости включать переадресацию ip, если сервер MySQL находится на том же хосте. Вы можете использовать следующую команду для перенаправления трафика с порта 36636 на порт 3306:

iptables -t nat -A PREROUTING -m tcp -p tcp --dport 36336 -j DNAT --to-destination IP_ADDRESS:3306

где IP_ADDRESS - это IP-адрес интерфейса, который слушает MySQL.