Centos 8: Доступ к порту только с определенных ip
Потихоньку мигрирую в клауд Hetzner-а разнося монолитную инфраструктуру по серверам. Столкнулся с тем, что в процессе миграции необходимо открыть порты на внешних адресах, пока весь зверинец не мигрирует в одну приватную подсеть. Сегодня расскажу как просто и быстро ограничить подключение к порту только с определенных ip..
Прежде всего, стоит заметить, что я буду использовать iptables, пока мне так удобнее. Наиболее правильное решение, использовать вместо iptables, firewalld. Но, мне пока надо, просто и быстро, поэтому пока воспользуемся iptables..
Для примера возьмем MySQL, по-умолчанию он работает на порте 3306. В my.cnf указываем в качестве интерфейса 0.0.0.0 и отключаем опцию skip-networking:
1 2 3 4 5 6 7 |
$ nano /etc/my.cnf.d/mariadb-server.cnf ... bind-address = 0.0.0.0 #skip-networking ... |
далее составляем список ip с которых можно будет коннектиться, пусть это будут такие адреса:
- 192.168.100.50
- 192.168.100.55
- 192.168.100.60
** тут намерено указаны локальные адреса, в вашем случае тут должны быть внешние адреса серверов с которых будет осуществляться подключение
теперь, добавляем правила iptables в цепочку INPUT которые разрешать подключение с этих адресов
1 2 3 4 5 |
iptables -A INPUT -p tcp -s 192.168.100.50 --dport 3306 -j ACCEPT iptables -A INPUT -p tcp -s 192.168.100.55 --dport 3306 -j ACCEPT iptables -A INPUT -p tcp -s 192.168.100.60 --dport 3306 -j ACCEPT |
далее, добавляем правило iptables которое заблокирует все остальные подключения
1 2 3 |
iptables -A INPUT -p tcp --dport 3306 -j DROP |
Вот и все, теперь можно проверить подключение с удаленной машины
1 2 3 |
mysql -h192.168.200.200 -u<ИМЯ-ПОЛЬЗОВАТЕЛЯ> -p |
** 192.168.200.200 внешний адрес машины с MySQL
Следующее, что нужно упомянуть, это то, как просмотреть и удалить правила. Просмотр
1 2 3 |
iptables -L --line-numbers |
удаление
1 2 3 |
iptables -D INPUT 3 |
** 3 = номер правила указанный в выводе команды iptables -L --line-numbers
Правила, будут работать только до перезагрузки машины, чтобы сохранить их на постоянной основе понадобиться установить пакет iptables-services
1 2 3 4 |
dnf install iptables-services systemctl enable iptables |
после этого текущие правила можно сохранить вот такой командой и они будут загружены автоматически после перезагрузки
1 2 3 |
service iptables save |
Как видите, все довольно просто.
-- [еще пару полезных команд по iptables] --
Очистить все правила из цепочки INPUT
1 2 3 |
iptables -F INPUT |
Очистить все правила из цепочки INPUT и восстановить доступ для всех
1 2 3 |
iptables -P INPUT ACCEPT |
Очистить все что можно 🙂
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F iptables -X iptables -N iptables -I iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -t raw -F iptables -t raw -X iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT |
** "iptables -P INPUT ACCEPT" два раза, тк в случае если политика по-умолчанию DROP и вы подключены удаленно, после iptables -F, вас может выкинуть.
Author: | Tags: /
| Rating:
Leave a Reply