CentOS8で構築する自宅サーバ:sshサーバの構築

CentOS8Firewallsshサーバパソコン自宅サーバ

CentOSには最初からsshサーバが入っていて有効になっていますが、そのままではインターネットに公開できないので、設定を変更します。

[root@ace ~]# vi /etc/ssh/sshd_config
[root@ace ~]# cat /etc/ssh/sshd_config | grep PermitRootLogin
PermitRootLogin no
# the setting of "PermitRootLogin without-password".
[root@ace ~]#
[root@ace ~]# cat /etc/ssh/sshd_config | grep UseDNS
UseDNS no
[root@ace ~]#
[root@ace ~]# systemctl restart sshd
[root@ace ~]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset>
   Active: active (running) since Sun 2020-02-16 01:13:35 JST; 7s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 1480 (sshd)
    Tasks: 1 (limit: 25017)
   Memory: 1.1M
   CGroup: /system.slice/sshd.service
           mq1480 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-p>

 2月 16 01:13:35 ace.lo.zeke.ne.jp systemd[1]: Stopped OpenSSH server daemon.
 2月 16 01:13:35 ace.lo.zeke.ne.jp systemd[1]: Starting OpenSSH server daemon...
 2月 16 01:13:35 ace.lo.zeke.ne.jp sshd[1480]: Server listening on 0.0.0.0 port>
 2月 16 01:13:35 ace.lo.zeke.ne.jp sshd[1480]: Server listening on :: port 22.
 2月 16 01:13:35 ace.lo.zeke.ne.jp systemd[1]: Started OpenSSH server daemon.
[root@ace ~]#

sshサーバの設定ファイルは/etc/ssh/sshd_configです。その中のPermitRootLoginパラメータをyesからnoに変更します。これはsshからrootアカウントでログインできなくするためです。

不正アクセスしようとする人は、まずは既知のrootアカウントなどで適当なパスワードを使ってログインしようとします。

簡単なパスワードを使っていませんが、あまりにも不正ログイン試行が多いので、rootでログインできなくしたほうが安心します。

rootでログインできなくなっていることを確認!

また、IPアドレスからホスト名への逆引きをしないようにします。悪意あるユーザのホスト名はまともじゃないことが多いので、逆引きするだけ時間の無駄です。

suコマンドを制限する

rootで直接sshでログインできなくなりました。ついでに、suコマンドを制限してrootになれるユーザを限定してしまいましょう。

[root@ace ~]# grep "pam_wheel.so use_uid" /etc/pam.d/su
#auth           required        pam_wheel.so use_uid
[root@ace ~]# vi /etc/pam.d/su
[root@ace ~]# grep "pam_wheel.so use_uid" /etc/pam.d/su
auth            required        pam_wheel.so use_uid
[root@ace ~]# 
[root@ace ~]# 
[root@ace ~]# grep ^wheel /etc/group
wheel:x:10:
[root@ace ~]# usermod -G wheel zeke
[root@ace ~]# grep ^wheel /etc/group
wheel:x:10:zeke
[root@ace ~]#

/etc/pam.d/suを編集して「#auth required pam_wheel.so use_uid」のコメントを外します。

すると、wheelグループに入っているユーザしかsuコマンドが使えなくなります。

で、一般ユーザをwheelグループに入れて、

[zeke@ace ~]$ su -
パスワード:
最終ログイン: 2020/02/18 (火) 21:19:55 JST日時 pts/1
[root@ace ~]#

rootになれることを確認!

Firewallで不正アクセスをブラックホールへ

サーバ公開しているとわかりますが、sshサーバへの不正アクセスはとても多いです。既知のアカウント(rootなど)に対して適当なパスワードでログインを試みるログがたくさんあります。

複雑なパスワードにしておけばよいのですが、不安なので、日本国外のsshサーバへのアクセスはすべて遮断します。

手順は

firewall-cmd --permanent --new-zone=japan
firewall-cmd --permanent --zone=japan --add-service=ssh
firewall-cmd --permanent --zone=japan --add-source=::/0
wget -P /tmp https://ipv4.fetus.jp/jp.txt
firewall-cmd --permanent --new-ipset=JAPAN --type=hash:net
firewall-cmd --permanent --ipset=JAPAN --add-entries-from-file=/tmp/jp.txt
firewall-cmd --permanent --info-ipset=JAPAN
firewall-cmd --permanent --zone=japan --add-source=ipset:JAPAN
firewall-cmd --reload

です。以下のページを参考にさせていただきました。

ところが、「firewall-cmd –reload」コマンドを実行すると以下のエラーが出ます。

Error: COMMAND_FAILED: '/usr/sbin/nft insert rule inet firewalld raw_PREROUTING_ZONES iifname "enp0s3" goto raw_PRE_public' failed: Error: Could not process rule: No such file or directory
insert rule inet firewalld raw_PREROUTING_ZONES iifname "enp0s3" goto raw_PRE_public
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Feb 17 07:01:05 ace kernel: nft[2168]: segfault at 2ab9c ip 00007f79f8705978 sp 00007ffffb80f888 error 4 in libgmp.so.10.3.2[7f79f86ea000+96000]
Feb 17 07:01:05 ace kernel: Code: c1 48 29 c1 48 89 c8 75 44 4c 89 c2 48 8b 7f 08 48 8b 76 08 48 c1 fa 3f 48 89 d0 4c 31 c0 48 29 d0 eb 14 0f 1f 80 00 00 00 00 <48> 8b 14 c7 48 8b 0c c6 48 39 ca 75 1b 48 83 e8 01 48 83 f8 ff 75
Feb 17 07:01:05 ace systemd[1]: Created slice system-systemd\x2dcoredump.slice.
Feb 17 07:01:05 ace systemd[1]: Started Process Core Dump (PID 2169/UID 0).
Feb 17 07:01:05 ace systemd-coredump[2170]: Resource limits disable core dumping for process 2168 (nft).
Feb 17 07:01:05 ace systemd-coredump[2170]: Process 2168 (nft) of user 0 dumped core.
Feb 17 07:01:05 ace firewalld[844]: ERROR: '/usr/sbin/nft insert rule inet firewalld raw_PREROUTING_ZONES ip saddr @JAPAN goto raw_PRE_japan' failed:
Feb 17 07:01:05 ace firewalld[844]: ERROR: '/usr/sbin/nft insert rule inet firewalld raw_PREROUTING_ZONES ip saddr @JAPAN goto raw_PRE_japan' failed:
Feb 17 07:01:05 ace firewalld[844]: ERROR: '/usr/sbin/nft insert rule inet firewalld raw_PREROUTING_ZONES iifname "enp0s3" goto raw_PRE_public' failed: Error: Could not process rule: No such file or directory#012insert rule inet firewalld raw_PREROUTING_ZONES iifname "enp0s3" goto raw_PRE_public#012^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Feb 17 07:01:05 ace firewalld[844]: ERROR: '/usr/sbin/nft insert rule inet firewalld raw_PREROUTING_ZONES iifname "enp0s3" goto raw_PRE_public' failed: Error: Could not process rule: No such file or directory#012insert rule inet firewalld raw_PREROUTING_ZONES iifname "enp0s3" goto raw_PRE_public#012^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Feb 17 07:01:06 ace firewalld[844]: ERROR: COMMAND_FAILED: '/usr/sbin/nft insert rule inet firewalld raw_PREROUTING_ZONES iifname "enp0s3" goto raw_PRE_public' failed: Error: Could not process rule: No such file or directory#012insert rule inet firewalld raw_PREROUTING_ZONES iifname "enp0s3" goto raw_PRE_public#012^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

CentOS7ではエラーは発生しない&インストール直後でもエラーは発生するということで、原因はCentOS8(コピー元のRHEL8起因かな?)のバグっぽいです。

この、エラーの回避方法も検討しましたが、無理っぽいです。今後のバグ修正を期待して、一旦保留とします。

※4月16日追記 バグが直ったようなので、Firewallを設定しました!

お勧めのKindle本です!

コメント