【Xserver VPS】KUSANAGI × WordPressのセキュリティ設定 (2)

WordPress x Xserver VPS x KUSANAGI Xserver VPS

前回記事【Xserver VPS】KUSANAGI × WordPressのセキュリティ設定 (1)の続きです。

接続元のIPアドレスによるサーバへのアクセス制限

KUSANAGI推奨設定に従った設定

以下は結果として有効でなかった設定です。有効な設定をすぐにご覧になりたい場合は飛ばして【firewalldの設定を変更してアクセス制限を行う】をご覧ください。

hosts.allowとhosts.denyファイルを設定してサーバにアクセスできるホストを制限していきます。

KUSNAGI公式設定によると、

指定した設定が適用される順番は以下のとおりです。

  1. hosts.allowファイルに設定された条件に合致した場合、そのホストからのアクセスは許可されます。
  2. hosts.denyファイルに設定された条件に合致した場合、そのホストからのアクセスは禁止となります。
  3. hosts.allowおよびhosts.denyのいずれの条件にも合致しない場合、そのホストからのアクセスは許可されます。
推奨するセキュリティ設定 | KUSANAGI

との事ですので、基本的には許可したいホストだけをhosts.allowに記述して、hosts.denyでは全禁止するんだろうな、と思いながら読み進めていきます。

以下の通りhosts.allowとhosts.denyを記述していきます。サーバにはSSHでしかアクセスしない予定なので、推奨設定のallではなくsshと記述しています。不具合出たら、その時に修正する方針です。

# cd /etc/
# vi hosts.allow
ssh:許可したいIPアドレス
# vi hosts.deny
all:all

テスト用に一旦、hosts.allowをhosts.allow.orgにリネームしてSSH再接続してみます。

# mv hosts.allow hosts.allow.org

うまく機能していればアクセスできないはずです。

が、、、普通にアクセスできてしまいました。。。

なぜ動かないのか、色々調べてみる

そもそも、「設定ファイル買い換えただけで設定は変わらないだろう、サービスの再起動とか要るんでないの?」と思っていましたので、hosts.allow / hosts.denyを司っているサービスは何なのか、Webで検索です。

すると、tcpdがそうらしいので、以下のコマンドで稼働状況を調べてみます。

# systemctl status tcpd
Unit tcpd.service could not be found.

あれ?インストールされてない。

もしかしたら、Webで古い情報を調べていて、実はhosts.allow / hosts.denyはかつてtcpdがハンドルしていたけれど、実は最新のパッケージでは別のサービスが扱ってるんではないか?などと考えて色々と検索してみました。

すると、CentOS 7まではtcpd+hosts.allow & hosts.denyもサポートされていたが、CentOS 8では廃止されたとの情報が。入っていないわけですね。

前回同様にKUSANAGI推奨設定の記載が古かったようです。とは言え、やるべきことを記載して道筋を示してくれているだけでもありがたい話。どう実現すれば良いかは調べれば良い話です。

最後に、使用しないのに作成してしまったhosts.allowとhosts.denyは一応削除しておきます。

# cd /etc/
# rm hosts.allow
# rm hosts.deny

firewalldの設定を変更してアクセス制限を行う

CentOS 8でのアクセス制限はfirewalldを使って行っていきます。

firewalldそのものは【Xserver VPS】ファイアウォールの設定で行っていますので、そこに修正を加えていきます。

まずは、firewalldの設定を確認しておきます。

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources:
  services: dhcpv6-client http https ssh
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

sshは許可されていますね。ということは、言い換えればどこからでもSSHアクセスができるということになります。これを、特定のIPアドレスからのみアクセスできるようにしていきます。

まずは許可するIPアドレスを設定します。

# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="xxx.xxx.xxx.xxx" port protocol="tcp" port="22" accept"

一方で、元々の設定ではsshが(どこからでも)許可されていますので、これを削除します。

# firewall-cmd --remove-service=ssh --zone=public --permanent

firewalldの変更を反映させ、設定が変更されているか確認します。

# firewall-cmd --reload
# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources:
  services: dhcpv6-client http https
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="xxx.xxx.xxx.xxx" port port="22" protocol="tcp" accept

rich rulesに先ほど許可したIPアドレスが加えられています。

ディレクトリのパーミッション変更

特定のディレクトリのパーミッションを推奨の設定に変更します。

DocumentRootとwp-contentのパーミッションを777→755に変更します。

# cd /home/kusanagi/プロファイル名/
# chmod 755 DocumentRoot
# cd DocumentRoot
# chmod 755 wp-content

以上です。

コメント

タイトルとURLをコピーしました