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

IPTables: разрешить исходящие соединения MySQL, но не входящие.

У меня есть сервер, который не позволяет подключаться к mysql из внешних источников - все мои базы данных и подключения происходят на localhost. Политика iptables по умолчанию - отбрасывать соединения для любых портов, которые я не указываю (в настоящее время у меня нет порта 3306, указанного в моих правилах iptable, поэтому все соединения с этим портом отброшены).

Это нормально, но теперь я хотел бы подключиться к базе данных mysql, расположенной извне в Amazon RDS.

Порт 3306 может быть открыт для внешнего мира следующим образом:

iptables -t filter -A INPUT -p tcp --sport 3306 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT

Это позволяет мне подключаться к базе данных на Amazon RDS, но также позволяет удаленно подключаться к базам данных на моем сервере.

Что мне нужно сделать, чтобы разрешить моему серверу подключаться к базе данных на Amazon, но ограничить внешние подключения к базам данных на моем сервере?

Также имейте в виду, что IP-адрес моего инстанса Amazon RDS может периодически меняться, я полагаю.

Воспользуйтесь преимуществами движка состояний:

iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT
iptables -t filter -A INPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

или в более поздних версиях iptables

iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT
iptables -t filter -A INPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Именно для этого существует механизм состояний: разрешить трафик, соответствующий различным критериям (например, протокол, порт источника) но также является частью существующего соединения (как он определяет связь). В итоге исходящие TCP SYN пакет на конкретный внешний IP-адрес на порт назначения 3306, из локального ephmeral порта, создаст запись в таблице состояний для этой конкретной комбинации IP-адресов и номеров портов, и будет разрешен только обратный трафик с той же комбинацией адресов и портов через, и только на время этого соединения.