Как запустить MySQL сервер на конкретных IP

Подходящим решением которое я нашел для запуска MySQL сервера на конкретных IP адресах, это запустить его на всех и потом отфильтровать подключаемых клиентов через iptables.

Для теста я использовал Ubuntu Server 16.04.5 LTS, который имел более 200 внешних белых IP и был высоконагруженным.

MySQL сервер был установлен так:

sudo apt-get install mysql-server mysql-client
mysql -V
mysql  Ver 14.14 Distrib 5.7.23, for Linux (x86_64) using  EditLine wrapper

К MySQL серверу нужен был доступ от localhost и нескольких адресов в интернете.
Поэтому я запустил MySQL сервер на всех IP, закомментировав «bind-address» в конфигурации:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
#bind-address = 127.0.0.1
#skip-networking
sudo service mysql restart

Создал пользователей для хостов с которых будут выполнятся подключения, более детально смотрите в моей статье — Как создать пользователя MySQL и настроить права доступа

Потом через iptables разрешил подключения только с нужных IP:

/sbin/iptables -A INPUT -s 127.0.0.1 -p tcp --destination-port 3306 -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.1.5 -p tcp --destination-port 3306 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP

Правило DROP должно быть только последним, если нужно еще добавить IP в iptables, то удалим DROP и в конце снова добавим:

/sbin/iptables -D INPUT -p tcp --dport 3306 -j DROP
/sbin/iptables -A INPUT -s 192.168.5.33 -p tcp --destination-port 3306 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 3306 -j DROP

Кстати, на тесте при попытке указать несколько адресов в bind-address, MySQL запускался только на последнем:

bind-address = 192.168.1.11
bind-address = 127.0.0.1

Как вариант, у меня возникает еще такая идея, запустить MySQL только на 127.0.0.1 (bind-address = 127.0.0.1), через iptables переадресовать на любой внешний IP, ну и потом правилами выше можно еще ограничить доступ):

sudo sysctl -w net.ipv4.conf.all.route_localnet=1
sudo iptables -t nat -A PREROUTING -i enp0s3 -p tcp -d 192.168.1.11 --dport 3306 -j DNAT --to-destination 127.0.0.1:3306

Смотрите также мои статьи:
IPTables правила для MySQL
Установка и настройка MySQL сервера на Ubuntu

Оставьте комментарий

Добавить комментарий