ねじまきまきまき -Random Note-

やったこと忘れないための雑記

sshポート変更とかファイアウォールとか

VPSで借りてるCentOS7のセキュリティ設定あれやこれやっていう話。

とくに目新しいことをやるわけじゃないので、よくあるような設定をやっていく。

ブルートフォースって一般的よね

適当にセキュアログの最新20件とかとってみるとこんな感じ。
これだけ見ても割と頻繁にやってきているのがよくわかる。

$ sudo grep "Invalid user" /var/log/secure | tail -20
Jan 29 16:47:24 ******** sshd[21619]: Invalid user device from 142.93.185.255 port 39216
Jan 29 16:47:24 ******** sshd[21621]: Invalid user mysql from 142.93.185.255 port 39274
Jan 29 16:47:24 ******** sshd[21623]: Invalid user gpu from 142.93.185.255 port 39316
Jan 29 16:47:24 ******** sshd[21625]: Invalid user yjh from 142.93.185.255 port 39358
Jan 29 16:47:25 ******** sshd[21632]: Invalid user test from 142.93.185.255 port 39484
Jan 29 16:47:26 ******** sshd[21640]: Invalid user heliulu from 142.93.185.255 port 39658
Jan 29 16:47:26 ******** sshd[21642]: Invalid user xguest from 142.93.185.255 port 39712
Jan 29 16:47:26 ******** sshd[21647]: Invalid user hangchen from 142.93.185.255 port 39778
Jan 29 16:47:27 ******** sshd[21653]: Invalid user liuhui from 142.93.185.255 port 39904
Jan 29 16:47:27 ******** sshd[21658]: Invalid user user from 142.93.185.255 port 39994
Jan 29 16:47:27 ******** sshd[21664]: Invalid user test from 142.93.185.255 port 40118
Jan 29 16:47:27 ******** sshd[21666]: Invalid user gym from 142.93.185.255 port 40152
Jan 29 16:47:28 ******** sshd[21668]: Invalid user test from 142.93.185.255 port 40200
Jan 29 16:47:28 ******** sshd[21675]: Invalid user admin from 142.93.185.255 port 40328
Jan 29 16:47:28 ******** sshd[21677]: Invalid user wwwlogs from 142.93.185.255 port 40368
Jan 29 16:47:28 ******** sshd[21679]: Invalid user ubuntu from 142.93.185.255 port 40406
Jan 29 16:47:29 ******** sshd[21681]: Invalid user tsc_dev from 142.93.185.255 port 40444
Jan 29 16:47:29 ******** sshd[21685]: Invalid user upload from 142.93.185.255 port 40538
Jan 29 16:47:29 ******** sshd[21688]: Invalid user dmdba from 142.93.185.255 port 40572
Jan 29 16:47:29 ******** sshd[21690]: Invalid user test from 142.93.185.255 port 40624

とりあえずこいつらを防ぐためにfail2banの導入とか設定とかをやっていく。

設定項目

  • fail2ban導入
  • firewalld設定
  • sshd設定変更

fail2ban導入

インストールとか設定なんかはこの辺りを参考にただやっていく。
knowledge.sakura.ad.jp
www.khstasaba.com
qiita.com
note.classact.co.jp
CentOS7の場合、iptableじゃなくてfirewalldを使用することになるので、そこは間違えないようにとにかくポチポチ設定して起動する。

設定が終わってエラーなく起動していたらよしとする。

$ sudo systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
   Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
   Active: active (running) since 金 2021-01-29 17:54:26 JST; 9s ago
     Docs: man:fail2ban(1)
  Process: 25377 ExecStop=/usr/bin/fail2ban-client stop (code=exited, status=0/SUCCESS)
  Process: 23994 ExecReload=/usr/bin/fail2ban-client reload (code=exited, status=0/SUCCESS)
  Process: 25383 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
 Main PID: 25384 (f2b/server)
    Tasks: 7
   Memory: 10.6M
   CGroup: /system.slice/fail2ban.service
           mq25384 /usr/bin/python2 -s /usr/bin/fail2ban-server -xf start

ちなみに、fail2banのステータス確認時にWARNINGとか表示された場合は、jail設定ファイルに問題がある場合が多いので、設定を見直すこと。
たまにいろいろ変更したものが競合することもあるので、fail2banを再起動するとWARNINGが消えることもある。

fail2banでBANされた状況を確認するためにはfail2ban-clientコマンドやipsetコマンドを使用して確認することになる。
とはいえ確認するためにいちいちコマンド実行するのもめんどくさいので、こんな内容のbashを作成してサーバログイン時とか状況を見たいときに確認するようにしている。

geoiplookupはこんなコマンド。
techracho.bpsinc.jp

現在はGeoIPの最新のDBファイルは、アカウントを作成しないと取得できないようになっている。
とはいえ、ある程度見れればいいのでそのままにしている。

#!/usr/bin/bash
sudo fail2ban-client status sshd
echo "------------------------------------------"
sudo ipset --list
echo "------------------------------------------"
for i in `sudo ipset --list | egrep "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" | awk '{print $1}'`
do
    printf "%s : %s\n" "$i" "`geoiplookup $i`"
done

このbashの実行結果としてはこんな感じ
使用している環境はfail2banのBANタイムを変更していたりするのでタイムアウトが長い。
fail2ban-clientでBANされていて、ipsetにその内容が反映されていることがわかるので見たい内容としては十分。
geoipの結果はさきに書いた通り、あくまでも参考。

$ /Local/fail2ban_check.bash
Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     615
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 5
   |- Total banned:     5
   `- Banned IP list:   178.128.59.188 159.65.13.76 111.14.216.210 142.93.185.255 216.222.148.196
------------------------------------------
Name: f2b-sshd
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536 timeout 604800
Size in memory: 600
References: 2
Number of entries: 5
Members:
111.14.216.210 timeout 602958
159.65.13.76 timeout 602958
142.93.185.255 timeout 602958
216.222.148.196 timeout 602958
178.128.59.188 timeout 602958
------------------------------------------
111.14.216.210 : GeoIP Country Edition: CN, China
159.65.13.76 : GeoIP Country Edition: SG, Singapore
142.93.185.255 : GeoIP Country Edition: CA, Canada
216.222.148.196 : GeoIP Country Edition: US, United States
178.128.59.188 : GeoIP Country Edition: GR, Greece

firewalld設定

CentOS7のファイアウォール機能はiptableからfirewalldに変更になっているので、そっちの機能追加
sshdのポート変更をやるならそれを見越しつつ、使用するポートの穴あけを行うように参考を見つつ設定を行う。
qiita.com

sshd設定変更

sshdの設定変更としては、こんな感じのことを実施する。

  • rootの直接ログイン不可
  • パスワード認証を不可、鍵認証のみ許可
  • sshポート変更
rootの直接ログイン不可/パスワード認証を不可、鍵認証のみを許可

sshdのconfig編集と再起動がともに必要なので、とりあえずこのあたりを見て設定。
鍵の作成とかサーバ配置に使用方法もとりあえず参考を見つつ設定。
qiita.com

sshポート変更

これも参考を見つつ設定するだけ。
qiita.com

おまけ

パケットフィルタ

サービスによってはパケットフィルタによる穴あけもできるので、使用している場合はそっちの設定変更もしないとダメ。
firewalldを使っているならパケットフィルタをわざわざ使う必要はない気もするけどね。

SiteGuard

さくらVPSはWeb Application FirewallのSiteGuardが使えるみたいなので、こっちを使ってもいいかもね。
というか、ブルートフォースを防ぐにはこっちのほうが有効な気がする。