Primeiro de tudo, esta não é uma maneira eficaz de proteger o servidor mysql. Alterar a porta não tornará impossível para um invasor saber que você está executando o servidor mysql. Pode apenas atrasá-lo um pouco.
Para responder sua pergunta, sua regra parece OK se você estiver executando o iptables e o mysql no mesmo host. Caso contrário, você precisará usar DNAT
target em vez de REDIRECT
. Além disso, você precisa permitir o encaminhamento de IP nesse caso. Isto é no que diz respeito às regras NAT. Para regras de filtragem, você precisa permitir a porta mysql ou definir o padrão INPUT
/ FORWARD
/ OUTPUT
policy como ACCEPT
(faça isso somente se você quiser permitir que tudo passe pelo firewall).
De qualquer forma, você tem que permitir a porta 3306 mesmo se estiver fazendo o encaminhamento de porta a partir de outra porta. Você tem duas opções:
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.
Para a opção 2, você pode executar:
iptables -A PREROUTING ! -s local_subnet -p tcp --dport 3306 -j REDIRECT --to-port 9999
Esta regra impedirá o acesso à porta mysql do sub-diretório não local.