CentOS 6でローカルサーバーに接続できないときの対処法
2017-10-20
普通、ローカルで起動しているサーバーへ、ネットワーク経由(ループバックインターフェース)で接続する場合、デフォルトのサーバーの設定ではファイアウォール等の影響を受けないように設定されます。
しかし、これまで色々なサーバーを触ってきましたが、稀にホワイトリスト方式でローカルからのネットワーク接続も拒否するような設定にしているところもあったりします。
私の経験上、そのような設定ではデータベース(MySQL)サーバーで後になってから問題になることがあります。
多くの場合、ローカルのプロセスへの接続には自動的にUNIXドメインソケットを利用するようになっており、ネットワーク経由で接続できずとも直ちに問題になることは少ないです。しかし、導入するアプリケーションやデータベースクライアントによっては、SSHトンネルによるUNIXドメインソケット経由では接続できず、ネットワーク(ローカルループバックインターフェース)経由での接続を強制されることがあるのです。
そんなときどうすればいいか、備忘録として残しておきます。
現象
mysql -u root -p
# Enter password:
# Welcome to the MySQL monitor. Commands end with ; or \g.
上記のように、ホスト未指定(UNIXドメインソケット経由)で接続した場合には、接続できます。
mysql -h 127.0.0.1 -u root -p
# Enter password:
# ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (110)
しかし、上記のように、ホストに127.0.0.1
を指定した場合には、接続に失敗します。
iptablesの設定変更
まず、ローカルサーバーへ接続できなくなったら、iptables(CentOS 6で導入される標準のファイアウォール)が影響を与えているかどうかを確認します。
下記のコマンドを実行し、iptablesを停止します。
sudo /etc/init.d/iptables stop
iptablesが停止したら、ローカルサーバーに再度接続してみます。
接続できればiptablesが原因なので、次の手順に進みましょう。それでも接続できなければ、原因は他にあります。Googleに戻って別の対処法を探してください。
再度iptablesを起動します。
sudo /etc/init.d/iptables start
以下のコマンドを実行し、ローカルループバックインターフェースからのパケットを全て許可するルールを先頭に追加します。
sudo iptables -I INPUT -i lo -j ACCEPT
以上で終了です。
なお、このままだと再起動で設定が元に戻ってしまうので、下記のコマンドを実行し、設定を/etc/sysconfig/iptables
へ保存します。
sudo /etc/init.d/iptables save
これで、再起動しても設定が引き継がれます。
まとめ
他の人が構築したサーバーをいじったりする機会があると、結構色々な場面でつまづいたりします。ファイアウォールくらいはよくある落とし穴なので、これを機にファイアウォールの設定について、見直してみてはいかがでしょうか。