はじめに
CentOS 7 で初めにすることを記載します(以下前提)
- VPS
- 公開サーバ
- rootユーザでの操作
OS・パッケージのアップデート
OS・カーネル・パッケージをアップデートします
OSやカーネルをアップデートしたくない場合は /etc/yum.conf を修正します(今回は省略します)
# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
以下を実行します(数分掛かります)
# yum -y update
Loaded plugins: fastestmirror
:
Complete!
# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
ロケールの設定
地域や言語を日本にします
まずは現在の設定を確認
# localectl status
System Locale: LANG=en_US.UTF-8
VC Keymap: jp
X11 Layout: jp,us
X11 Variant: ,
ロケールを変更します
# localectl set-locale LANG=ja_JP.utf8
# localectl status
System Locale: LANG=ja_JP.utf8
VC Keymap: jp
X11 Layout: jp,us
X11 Variant: ,
/etc/locale.conf を安全に書き換えてくれるようです
LANG=ja_JP.utf8
現在のログインの環境変数には未反映のようです
# env | grep LANG
LANG=en_US.UTF-8
反映するには再度ログインするか、以下を実行します
# . /etc/locale.conf
rootユーザのパスワード変更
コンソールからログインする時に使用するパスワードを設定します
# passwd
ユーザー root のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
パスワードが一致しません。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
不要なサービスを停止(必要に応じて)
あらかじめインストールされた有効なものを確認します
# systemctl list-unit-files --state=enabled --type=service
UNIT FILE STATE
acpid.service enabled
auditd.service enabled
autovt@.service enabled
chronyd.service enabled
crond.service enabled
:
32 unit files listed.
サービスを停止します
# systemctl stop サービス名
サービスを自動起動を無効にします
# systemctl disable サービス名
サービスを起動不可にします
# systemctl mask サービス名
ホスト名の設定
ホスト名を設定します
# hostnamectl set-hostname www.example.com
/etc/hostname を安全に書き換えてくれるようです
www.example.com
CentOS 6 では /etc/sysconfig/network の編集により変更可能でした
また、# による行コメントアウトも可能でしたが、
CentOS 7 で同様なことをしてしまうと、ホスト名の設定がおかしくなります
プロンプトに表示されるホスト名はログインし直すと反映されます
[root@www ~]#
DNSの設定
VPS提供者のDNSサーバが利用できない場合、公開DNSサーバを利用します
# Generated by NetworkManager
search example.com
nameserver 8.8.8.8
nameserver 8.8.4.4
CentOS 7 では、設定ファイルを直接編集せずに、nmcli コマンドを使用することになっています
search はホスト名の設定によりドメイン部分が自動設定されるようです
nameserver は /etc/sysconfig/network-scripts/ifcfg-eth0 の DNS が自動設定されるようです
SSH のポート変更
既定のポートのままだと攻撃されやすいので変更します
SELinuxが有効になっているとそのままではポートを変更できませんので今回はSELinuxを無効化します
無効化するには、SELinuxの設定ファイルを編集します
# vi /etc/selinux/config
:
# SELINUX=enforcing
SELINUX=disabled
:
SELinuxの変更を反映するには再起動をします
# shutdown -r now
ここからSSHの設定です
まずはsshdの設定ファイルを編集します
# vi /etc/ssh/sshd_config
:
Port 22222
:
SSHのサービスを再起動します
# systemctl restart sshd
あわせてファイアウォールの設定も変更します
これをやらないとSSH接続できなくなります
firewalld の既定の設定ファイルをコピーして独自の設定ファイル作成します
# cp -p /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
# vi /etc/firewalld/services/ssh.xml
ポート番号を変更します
:
<port protocol="tcp" port="22222"/>
</service>
ファイアウォールの変更を反映します
# firewall-cmd --reload
success
ファイアウォールの設定
公開するサービスのポートを許可します
まずは現在のファイアウォールの設定を確認します
# firewall-cmd --list-all
public (active)
:
services: dhcpv6-client ssh
:
例として、Webサービス(http、https)への接続を許可します
# firewall-cmd --zone=public --add-service=http --permanent
success
# firewall-cmd --zone=public --add-service=https --permanent
success
変更を反映します
# firewall-cmd --reload
success
# firewall-cmd --list-all
public (active)
:
services: dhcpv6-client http https ssh
:
もう一つの例として、特定のIPアドレスからのすべての接続を許可します
既定の public ゾーンの他に、trusted ゾーンを追加します
# firewall-cmd --add-source=XXX.XXX.XXX.XXX --zone=trusted --permanent
success
変更を反映します
# firewall-cmd --reload
success
変更を確認します
# firewall-cmd --get-active-zones
public
interfaces: eth0
trusted
sources: XXX.XXX.XXX.XXX
# firewall-cmd --list-all --zone=trusted
trusted (active)
:
sources: XXX.XXX.XXX.XXX
services:
: