自宅にサーバを作ってみた。
OS CentOS7
OSは入っていて、rootと自分用のアカウントを作った以外には何もしていない状態からサーバからプライベートIPをDDNSに公開して、どこからでもVPNできるようにするまでやる。
僕の記事はしょせん素人なので安心ならんという方向け
https://centossrv.com/
を参照してください。
SSHDを立てる
とりあえず、これでサーバの近くにいなくて済む。
時刻を合わせる
まず今の時刻を確認
$ timedatectl #現在のシステムクロックの確認
#Local time: 金 2018-05-25 23:58:44 JST
# Universal time: 金 2018-05-25 14:58:44 UTC
# RTC time: 金 2018-05-25 14:58:44
# Time zone: Asia/Tokyo (JST, +0900)
# NTP enabled: no
#NTP synchronized: no
# RTC in local TZ: no
# DST active: n/a
時刻合わせる前は2日分くらいずれてた。よくわからん。
CentOS7 になってから時刻同期にはNTPではなくてChronyを使うようになったらしい。最初NTPを入れてかつ設定してしまって慌てたが、chronyと同時に建てるとNTPの方がDisbaleになるらしいので、放置する。
NTPを入れたときの参照はこちら。ちなみに参照先の
# ntpd -p これは間違い ntpq -p #これが正しい
コメントには違うという旨が書かれていたけど、見逃して少し時間を食いました。
話を戻して、chronyのためにここを参照。というか最初からhttps://centossrv.com/を参照していれば何も問題なかった。
最後に、ちゃんとchronyが動いているかを確認するために
systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since 土 2018-05-26 00:20:49 JST; 3min 5s ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Process: 874 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
Process: 822 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 831 (chronyd)
CGroup: /system.slice/chronyd.service
└─831 /usr/sbin/chronyd
5月 26 00:20:49 localhost.localdomain chronyd[831]: chronyd version 3.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SECHASH +SIGND +ASYNCDNS +IPV6 +DEBUG)
5月 26 00:20:49 localhost.localdomain chronyd[831]: Could not change ownership of /var/run/chrony : Operation not permitted
5月 26 00:20:49 localhost.localdomain chronyd[831]: Could not access /var/run/chrony : No such file or directory
5月 26 00:20:49 localhost.localdomain chronyd[831]: Disabled command socket /var/run/chrony/chronyd.sock
5月 26 00:20:49 localhost.localdomain chronyd[831]: Frequency 0.000 +/- 1000000.000 ppm read from /var/lib/chrony/drift
5月 26 00:20:49 localhost.localdomain systemd[1]: Started NTP client/server.
5月 26 00:21:23 localhost.localdomain chronyd[831]: Selected source 133.243.238.244
5月 26 00:21:24 localhost.localdomain chronyd[831]: Source 139.162.66.25 replaced with 108.61.223.189
5月 26 00:22:29 localhost.localdomain chronyd[831]: Selected source 172.105.231.23
5月 26 00:23:34 localhost.localdomain chronyd[831]: Selected source 133.243.238.244
「Could not ...」言っていて心配になった。ググっても難しそうなところしかでない。https://qiita.com/Pirlo/items/c4c23cc1ba2b1d3c0673を参照。SELinuxをdisableにすれば良いとのこと。その予定だったので、無視する。
ハードウェアクロックの更新
ここを参照して
~]# hwclock --systohc --utc
#次の命令でも同様の効果が得られるらしい
#timedatectl set-local-rtc false #これで上のRTC in local TZをnoにできる。trueならyes
とした。これで、ハードウェアクロックはUTCとして、システムクロックに同期した。定期更新されるか心配だけど、ここには「NTP を使用する場合、ハードウェアクロックは 11 分ごとにシステムクロックに自動的に同期され…」という文があり、これでいいかなという感じ。ずれたらまた手動で直す。
また確認。
$ timedatectl
Local time: 土 2018-05-26 00:35:19 JST
Universal time: 金 2018-05-25 15:35:19 UTC
RTC time: 金 2018-05-25 15:35:19
Time zone: Asia/Tokyo (JST, +0900)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
CentOS7初期設定
- rootになれるユーザーを管理者のみにする
- パッケージ管理システム設定
- root宛メールを転送する
- SELinuxの無効化
https://centossrv.com/centos7-init.shtml
を参考にして、上の内容をこなす。
root宛てにメールを転送してもできない問題。いくら調べてもわからないので放置
EPELレポジトリを導入
セキュリティ系
結局、tripwireもrootkitも定期実行まではしないことにした。悪意のあるユーザに入られたら終了という考え方。
rootkitに至ってはコマンドの退避もしていないので、多分意味がない。
ファイル改竄検知システム導入(Tripwire)
結局これいらない気がしてきた。
installするときに明示的にepelを指定する必要があった。
yum install tripwire --enablerepo=epel
ここも参照
http://think-t.hatenablog.com/entry/20140113/p1
rootkit導入
インストール部分は
https://qiita.com/bezeklik/items/7964ce67f1a1363b694e
参照
以降は
https://centossrv.com/chkrootkit.shtml
iptables導入
sshの公開鍵認証のみの受付
パスワードによる管理は弱いので、公開するにあたり最小限ここは押さえたい。
https://qiita.com/uhooi/items/137de4578534c8e7e7f2
DDNSの設定
#参照先では
#setarch `uname -m` /usr/local/bin/DiCE/diced
#と書かれているが
/usr/local/bin/DiCE/diced
#これで問題なかった
また、DiCEをPC起動時に起動するためのコードとしてetc/rc.d/rc.local
にDiCEの起動コマンドを書く箇所があるが、それだけでは起動時には起動してくれないようだ。というのも初期の状態ではetc/rc.d/rc.local
に実行権限がないからだ。だから、
chmod +x /etc/rc.d/rc.local
を実行しようとetc/rc.d/rc.local
の中に書いてある。
top | grep diced #これで実行しているかを確認できる
VPNの設定
最初はサーバそのものにVPNサーバを立てて、直接入ってVPNを張ろうと画策していたが、よくよく見てみれば、うちのNAT兼ルータ君がVPNの機能を持っていた。既にDDNSにIPはさらしているので、本当にVPNの設定をルータに設定するだけだった。
VPNの設定を終えた後の注意点
- VPNを張る先と同一のLAN内でVPNは張れないみたい
- 検査時、スマホでテザリングして一旦外部に出てから繋いでみた
- VPNの設定で設定できない項目があり詰まった
- Windows10の場合、設定->ネットワークとインターネット->VPNのように簡単にVPNの設定ができるが、さらに込み入ったプロパティを指定したい場合はコントロールパネル->ネットワークとインターネット->ネットワークと共有センター->アダプターの設定の変更で所望のVPNを右クリックして、プロパティを弄れば良い