他人が構築した CentOS の環境を触る機会がありまして、ここで動いている MySQL に外部 MySQL クライアントでアクセスしようとしたところ、拒否されました。きっとファイアウォールのせいだろうなと iptables を周りを見ることにしました。
$ sudo iptabels -L
で状態を見たところ、思った通り SSH、HTTPとFTP ぐらいしか通さないようになっていました。そこで試しに、
$ sudo iptables -F
としてルールを削除したところ、問題なく外部 MySQL クライアントからデータベースに接続できました。
で、本来とるべき対応として、外部 MySQL クライアントからの通信を通すようにしようとしたときに iptables の設定ファイルである /etc/sysconfig/iptables がどこにもないことに気づきました。
ではどうやって設定しているのか。調べると、そもそも
こちらに iptables ではなく firewalld を使っているよ、との記載。本当に firewalld が動いているか。
$ systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2019-01-10 01:45:27 UTC; 2h 44min ago Docs: man:firewalld(1) Main PID: 577 (firewalld) CGroup: /system.slice/firewalld.service └─577 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
running とのことで本当に動いていることがわかりました。
$ sudo firewall-cmd --list-services --zone=public --permanent ssh dhcpv6-client http ftp
で、現状許可しているサービスがわかります。ここに MySQL を追加してやれば良いということで、
$ sudo firewall-cmd --add-service=mysql --zone=public --permanent success
とすると、
$ sudo firewall-cmd --list-services --zone=public --permanent ssh dhcpv6-client http ftp mysql
mysql が追加されました。しかし、まだこれでは接続できません。
$ firewall-cmd --reload success
これで接続できるようになります。