Linuxの初期設定

2018年11月24日

Time4VPSのStorage VPSを使うためにLinuxでサーバーを立てることになりました。FreeBSD 12.0の初期設定フォーマットに従って、CentOS 7.6とDebian 9.9の設定内容をまとめます。

OSのメンテナンスとパッケージシステム

LinuxはFreeBSDと違ってOS部分もディストリビューターによって違うものを寄せ集めているので、OSのアップデートもパッケージシステムが担当しているっぽい。Red Hat系のCentOSのパッケージマネージャはyum、Debian系のパッケージマネージャはaptだそうです。

というわけでまずはパッケージシステムの更新。

CentOS

yum update

ちなみにCentOSバージョンは/etc/redhat-releaseファイルに書いてあります。

$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

Debian

apt update

Debianのバージョンは/etc/debian_version。

$ cat /etc/debian_version
9.9

あっさりしてる。

ファイアウォールの設定

CentOS

CentOS7のファイアウォールはfirewalldというサービスを使うらしい。そしてデーモンの操作はserviceではなくてsystemctlコマンドを使います。

startではサービスが立ち上がるだけで、再起動後も自動的に動かすためにはenableしなきゃいけない。FreeBSDと違って/etc/rc.conf設定が不要なのは楽なのかな。

systemctl start firewalld.service
systemctl enable firewalld.service

動作状態はstatusで確認できます。

# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2018-12-13 20:29:21 JST; 10h ago
     Docs: man:firewalld(1)
 Main PID: 179 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─179 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Dec 13 20:10:06 1sae.f.time4vps.cloud firewalld[790]: WARNING: ebtables not usable, disabling ethernet bridge firewall.
Dec 13 20:17:20 1sae.f.time4vps.cloud systemd[1]: Stopping firewalld - dynamic firewall daemon...
Dec 13 20:17:21 1sae.f.time4vps.cloud systemd[1]: Stopped firewalld - dynamic firewall daemon.
Dec 13 20:29:20 1sae.f.time4vps.cloud systemd[1]: Starting firewalld - dynamic firewall daemon...
Dec 13 20:29:21 1sae.f.time4vps.cloud systemd[1]: Started firewalld - dynamic firewall daemon.
Dec 13 20:29:21 1sae.f.time4vps.cloud firewalld[179]: WARNING: ipset not usable, disabling ipset usage in firewall.
Dec 13 20:29:21 1sae.f.time4vps.cloud firewalld[179]: ERROR: Failed to read file "/proc/sys/net/netfilter/nf_conn...per'
Dec 13 20:29:21 1sae.f.time4vps.cloud firewalld[179]: WARNING: Failed to get and parse nf_conntrack_helper setting
Dec 13 20:29:21 1sae.f.time4vps.cloud firewalld[179]: WARNING: ebtables not usable, disabling ethernet bridge firewall.
Dec 13 20:29:22 1sae.f.time4vps.cloud firewalld[179]: WARNING: /etc/sysconfig/network-scripts/ifcfg-venet0: Dupli...no"'
Hint: Some lines were ellipsized, use -l to show in full.

設定はfirewall-cmdというコマンドを使います。

最初の–add-portはsshの接続ポート指定。続く3つの–add-serviceは許可するサービスの追加設定。いずれも–permanentを付けないと恒久設定になりません。さらに–reloadしないと設定が読み込まれません。

firewall-cmd --permanent --add-port=20022/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload

ちゃんと設定できたかどうか、–list-allで確かめておきましょう。

# firewall-cmd --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: ssh dhcpv6-client http https dns
  ports: 20022/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Debian

一方Debian9ですが、ufwというツールを使うのが一般的なよう。デーモンの操作にsytemctlを使うのは同じです。

まずはufwのインストール。Debianはパッケージをインストールするだけでデーモンが自動起動されるようになります。ただしufwが起動しているだけなので改めて有効化する必要があります。

apt install ufw
ufw enable

以降、Qiitaのiptablesが難しいためufwでWEBサーバーのファイアウォール設定に従って操作しました。

ufw default DENY
ufw limit 20022
ufw allow 80
ufw allow 443
ufw allow 25

SSH,HTTP,HTTPS,MAILあたりのポートを開いておきます。ちなみにSSHだけlimitなのはブルートフォースアタック対策です。

ちゃんと設定できたかどうかをstatusで確認しておきます。

# ufw status
Status: active

To                         Action      From
--                         ------      ----
20022                      LIMIT       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
25                         ALLOW       Anywhere

SSHの設定

こちらはFreeBSDと同じ。useraddで接続用ユーザーを作ったら、~/.ssh/authorized_keyファイルに公開鍵を書き込んで、/etc/ssh/sshd_configを設定します。

Port 20022                  # 接続ポートを標準外にすることで攻撃されにくくします
Protocol 2                  # SSH2接続のみ許可します
PermitRootLogin no          # rootでのログインを拒否します
PasswordAuthentication  no  # パスワード認証を拒否します
PermitEmptyPasswords no     # パスワードなしの接続を拒否します
AllowUsers general_user     # ログインユーザーを限定します

ファイアウォールの設定で開いておいたポートと間違いないことを確認したら、sshdを再起動します。

# service sshd restart
Redirecting to /bin/systemctl restart sshd.service

…うっかりserviceコマンドを使ってもsystemctlコマンドにリダイレクトしてくれるね。

ntpの設定

CentOS7からntpdに代わってchronyというのが標準NTPサーバーになったそうです。

が、Time4VPSのCentOS7には入ってなかった。なぜならOpenVZ上の仮想環境だから。カーネルがホストOSと共通なので、この辺りのサービスはゲストで使えないようになっています。なのでfirewall-cmdでもntpポートは開けませんでした。

インストールやその後の設定などはQiitaに参考になりそうな記事があります。

不要な一時ファイルの削除

CentOS7やDebian9では/tmpおよび/var/tmpディレクトリ以下の一時ファイルをsystemd-tmpfiles-cleanというサービスが自動削除してくれます。

# systemctl status systemd-tmpfiles-clean.timer
● systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories
   Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static; vendor preset: disabled)
   Active: active (waiting) since Sat 2018-11-24 10:42:49 JST; 4h 23min ago
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)

Nov 24 10:42:49 81014.s.time4vps.cloud systemd[1]: Started Daily Cleanup of Temporary Directories.
Nov 24 10:42:49 81014.s.time4vps.cloud systemd[1]: Starting Daily Cleanup of Temporary Directories.

設定は/usr/lib/tmpfiles.d/tmp.confファイル。削除対象はvで始まるディレクトリ、除外対象はxまたはXで始まるディレクトリやファイルなどです。CentOS7では/tmpは10日、/var/tmpは30日で削除されるようになっていますね。

# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d

# Exclude namespace mountpoints created with PrivateTmp=yes
x /tmp/systemd-private-%b-*
X /tmp/systemd-private-%b-*/tmp
x /var/tmp/systemd-private-%b-*
X /var/tmp/systemd-private-%b-*/tmp

スワップファイルの設定

Time4VPSのStorage VPSも御多分に洩れずスワップパーティションはないわけですが、メモリをチェックしてみたらSwapが設定されていました。少ないけどね。

Time4VPS.EU - VPS hosting in Europe

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/simfs      512G  580M  512G   1% /
devtmpfs        256M     0  256M   0% /dev
tmpfs           256M     0  256M   0% /dev/shm
tmpfs           256M  200K  256M   1% /run
tmpfs           256M     0  256M   0% /sys/fs/cgroup
tmpfs            52M     0   52M   0% /run/user/1000
tmpfs            52M     0   52M   0% /run/user/0
# free -m
              total        used        free      shared  buff/cache   available
Mem:            512          33         337           0         140         389
Swap:           256           0         256

/etc/fstabに何も書き込まれていないのになんであるのかな?と調べてみたらどうもOpenVZの場合ホストから割り当てられているっぽい。だから後からSwapfile設定しようとしてもエラーで弾かれちゃう。

Time4VPSの場合、割当メモリの半分の容量のSwapが設定されているっぽいです。