Не селен во всяких iptables, выручайте. Задача: открыть доступ к MySQL извне, но только с адреса нужного мне сервера. А лучше с пары адресов, чтобы я еще с локалки мог потестить. Я в курсе, конечно, про правила MySQL Код (PHP): GRANT … TO user@address мне интересны именно настройки файрвола. И чтобы они не слетели после перезагрузки. Debian Wheezy, MariaDB 10 Заранее спасибо! P.S. про ssh -L я в курсе. мне нужен девственный доступ не туннелированный.
Код (PHP): iptables -A INPUT -p tcp --dport 8000 -s 1.2.3.4 -j ACCEPT iptables -A INPUT -p tcp --dport 8000 -j DROP где 8000 - твой порт мускула (я правильно понял что там не будет подмены номера порта?), ну а 1234 - тот адрес, которому можно. добавь вторую-третью-энную строку для расширения списка хороших адресов. а вот по поводу сохранения - у тебя как сейчас устроена работа фаервола? или ты там еще не ковырялся?
Подмена номера допустима, наверное даже желательна. Сейчас слушается 127.0.0.1:3306 Щаз попробую твой рецепт… Добавлено спустя 7 минут: Подставил свои цифры: 3306 и внешний IP моей локалки mysql -h адрес-мускульного-сервера -u myuser -pmypassword Код (PHP): ERROR 2003 (HY000): Can't connect to MySQL server on 'адрес-мускульного-сервера' (10061) Добавлено спустя 1 минуту 21 секунду:Ну и telnet-ом попробовал: Connection refused
ну я перед тем как тебе слить - на своих кошках проверил. ну чтоб фуфлом не быть и всё такое)))) iptables-save что показывает?
Ganzal, а слушать при этом надо внешний интерфейс, а не 127.0.0.1, я правильно понимаю? Твои правила это не проброс, а фильтр пакетов, да? Добавлено спустя 1 минуту 57 секунд: Код (PHP): # Generated by iptables-save v1.4.21 on Tue Mar 1 08:42:12 2016 *filter :INPUT ACCEPT [451:43257] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [319:430339] :fail2ban-ssh - [0:0] -A INPUT -p tcp -m multiport --dports #### -j fail2ban-ssh -A INPUT -s мой-айпишник/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A INPUT -p tcp -m tcp --dport 3306 -j DROP -A fail2ban-ssh -j RETURN COMMIT # Completed on Tue Mar 1 08:42:12 2016
поменял в my.conf bind-address на 0.0.0.0 и получил Код (PHP): ERROR 1045 (28000): Access denied for user 'я'@'мой-айпишник' (using password: YES) это уже внушает надежду! надо проверить как с других хостов… Добавлено спустя 14 минут 29 секунд: Да, всё ок: с указанного хоста заходит, а с неуказанного Can't connect to MySQL server. Спасибо!
Для полноты шпаргалки дописываю инструкцию: Если нам надо разрешить доступ к серверу MySQL не только с локального (по отношению к нему) веб-сервера, но и с каких-то адресов извне, делаем так: 1. Начинаем слушать внешний сетевой интерфейс. Для этого проверяем, что в my.conf у нас как-то так: Код (PHP): #bind-address = 127.0.0.1 #skip-networking Т.е. не биндимся на локальный IP, а слушаем всё. А раньше слушал, как видите, локальный адрес. Запрета сетевой активности нет. Закомментировать bind-address это то же самое, что написать bind-address = 0.0.0.0 Если бы я просто изменил 127.0.0.1 на IP внешнего сетевого интерфейса, мне бы пришлось переписывать все конфиги сайтов, в которых указан 127.0.0.1 ))) 2. Настраиваем сетевой фильтр: Код (PHP): iptables -A INPUT -p tcp --dport 3306 -s 1.2.3.4 -j ACCEPT iptables -A INPUT -p tcp --dport 3306 -j DROP Здесь 1.2.3.4 это адрес того хоста, которому разрешен доступ. Повторяем первую строчку для каждого из разрешенных адресов. 3. Настраиваем фильтр MySQL: От имени рута или другого суперпользователя разрешаем доступ конкретного пользователя к конкретной базе: Код (PHP): GRANT ALL PRIVILEGES ON 'mydatabase'.* TO 'myuser'@'1.2.3.4' IDENTIFIED BY 'mypassword';
это ПОЛНЫЙ доступ. в целях безопасности всё же лучше лимитировать глобальные привилегии этой учетки, и раздать её еще и конкретные права на конкретные базы/таблицы.
Ты можешь пояснить как эти iptables работают? Почему, например, они НЕ блокируют локальный доступ, ведь про 127.0.0.1 здесь ничего не сказано.
я правила так профигариваю из консоли Код (PHP): firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=22/tcp --permanent firewall-cmd --reload только, да, это не iptables
Добавлю ещё, что из коробки правила iptables не сохраняются и после перезагрузки наши добавочки пропадут. Но под Debian есть пакет iptables-persistent, который при ахтунге сохраняет, а при загрузке восстанавливает правила. Код (PHP): sudo apt-get install iptables-persistent Дело сделано! Добавлено спустя 4 минуты 52 секунды: Я кое-где использовал arno-iptables-firewall, он сохраняет правила, облегчает составление белых списков, но это только малый кусочек чего могут iptables. Боюсь, что ручные правила могут затираться сгенеренными из визарда. Наверное надо либо всё через магию, либо всё ручками.
возможно это связано с тем что дефолтные политики у тебя ACCEPT стоят. у меня на серверах дефолтны DROP, а потом идет список разрешений в т.ч. и для lo. я в жизни никогда не задумывался о блокировках на лупбэке