Changes in title
+FreeBSD 12で自宅サーバの構築 基本システム編その2
Changes in tags
@@ -0,0 +1,197 @@
+## はじめに
+FreeBSD 12を使用した自宅サーバの構築を行った。FreeBSD 12はリリースされて間もない状態ですが、カーネルに標準でVIMAGEが取り込まれDNSの外向きと、内向きを別々のシステム(jail+VIMAGE)が同一ホストで構築できることから採用することにしました。その時の構築手順を備忘録の意味も含め、具体的にいくつかに渡り説明する。
+
+* [基本システム編その1](URL "https://qiita.com/chun3/")
+ - 背景
+ - 基本のインストール
+ - 日本語環境の設定
+* [基本システム編その2](URL "https://qiita.com/chun3/")(この記事)
+ - セキュリティ
+ - ftpサーバ
+* [基本システム編その3](URL "https://qiita.com/chun3/")
+ - jail
+ - 基本システム編おわり
+* [jail内基本システム編](URL "https://qiita.com/chun3/")
+ - 基本の設定(jail1・jail2共通)
+* DNS編
+* Let's Encrypt編
+* Webサーバ編
+* メールサーバ編
+* ファイルサーバ編
+
+## セキュリティ
+### ファイヤーウォール
+ファイヤーウォールには、後の節で説明するblacklistdと連携できることから、今回ipfwを使用する。もこのipfwは基本的機能以外にNATや帯域制限が使えるようですが、今回はパケットフィルタ機能についてのみ使用する。また、設定を失敗するとsshでログインができなくなるので確認ができるまではconsoleで行うとよい。
+まず、rc.confに使用することを宣言する。
+
+```sh:/etc/rc.conf
+firewall_enable="YES"
+firewall_type="/etc/firewall.tab"
+firewall_logging="YES"
+```
+
+firewall_typeはOS起動時に設定するフィルターテーブルです。また、firewall_loggingは、フィルターテーブルに設定することで特定のパケットをログすることができる。以下の8000番のように指定すると/var/log/securityに100件までログされる。また、この後の節で説明する予定のDNS・NTP・web・メールサーバなどのポートを開ける。
+
+```sh:/etc/firewall.tab
+add 5000 allow ip from 192.168.1.0/24 to any
+add 5200 allow tcp from any to 192.168.1.0/24 established
+# hosts,DNS,NTP
+add 6000 allow udp from any to me 53,123
+add 6100 allow udp from any 53,123 to me
+add 6400 allow tcp from any to me 53,123
+add 6500 allow tcp from any 53,123 to me
+# ftp,ssh,smtp,http,https,smtps,smtp,imaps,pop3s
+add 7000 allow tcp from any to me 20-22,25,80,443,465,587,993,995
+#
+add 60000 deny tcp from any to me
+add 60100 deny udp from any to me
+add 60400 deny ip from any to me
+```
+
+ipfwを開始する
+
+```
+# service ipfw start
+```
+
+ログの機能を使って、サーバが勝手に外の80番ポートに読みに行っていないかログに残すには以下のように5000番の前にテンポラリーに挿入する。
+
+```
+ipfw add 4000 allow log logamount 100 tcp from me to any 80
+```
+
+再起動するとなくなるが、不要になった場合は以下のようにする。
+
+```
+ipfw delete 4000
+```
+
+現在の状況を確認するには以下のコマンドでできる。
+
+```
+# ipfw show
+00100 0 0 allow ip from any to any via lo0
+00200 0 0 deny ip from any to 127.0.0.0/8
+00300 0 0 deny ip from 127.0.0.0/8 to any
+00400 0 0 deny ip from any to ::1
+00500 0 0 deny ip from ::1 to any
+00600 5 432 allow ipv6-icmp from :: to ff02::/16
+00700 0 0 allow ipv6-icmp from fe80::/10 to fe80::/10
+00800 2 232 allow ipv6-icmp from fe80::/10 to ff02::/16
+00900 0 0 allow ipv6-icmp from any to any icmp6types 1
+01000 0 0 allow ipv6-icmp from any to any icmp6types 2,135,136
+05000 4806 952813 allow ip from 192.168.1.0/24 to any
+05200 0 0 allow tcp from any to 192.168.1.0/24 established
+06000 0 0 allow udp from any to me 53,123
+06100 0 0 allow udp from any 53,123 to me
+06400 0 0 allow tcp from any to me 53,123
+06500 0 0 allow tcp from any 53,123 to me
+07000 0 0 allow tcp from any to me 20-22,25,80,443,465,587,993,995
+60000 0 0 deny tcp from any to me
+60100 0 0 deny udp from any to me
+60400 0 0 deny ip from any to me
+65535 1 419 deny ip from any to any
+```
+
+カウントを初期化する場合
+
+```
+# ipfw zero
+Accounting cleared.
+```
+
+firewall.tabで設定していないループバック関係の設定が最初に挿入され、最後に全てを禁止する設定が挿入される。また、blacklistdが2000番代に挿入するので5000番から始めている。
+### blacklistd
+ftp・ssh・smtpなどのDoS攻撃を防止する方法としてblacklistdを使用する。
+例によってい使用宣言
+
+```sh:/etc/rc.conf
+blacklistd_enable="YES"
+blacklistd_flag="-r"
+```
+
+-rフラグは、システムを再起動しても再度ルールを適用してブロックを開始する。なお、-fを指定すると再起動時に消去される。ルールはデフォルから追加している。
+
+```/etc/blacklistd.conf
+# $FreeBSD: releng/12.0/usr.sbin/blacklistd/blacklistd.conf 336977 2018-07-31 16:39:38Z brd $
+#
+# Blacklist rule
+# adr/mask:port type proto owner name nfail disable
+[local]
+ssh stream * * * 3 24h
+ftp stream * * * 3 24h
+smtp stream * * * 3 24h
+smtps stream * * * 3 24h
+submission stream * * * 3 24h
+imaps stream * * * 3 24h
+pop3s stream * * * 3 24h
+
+#6161 stream tcp6 christos * 2 10m
+* * * * * 3 60
+
+# adr/mask:port type proto owner name nfail disable
+[remote]
+#129.168.0.0/16 * * * = * *
+#6161 = = = =/24 = =
+#* stream tcp * = = =
+```
+
+sshdをblacklistdと連携する
+
+```sh:/etc/rc.conf
+sshd_flags="-o UseBlacklist=yes"
+```
+
+開始する
+
+```
+# service blacklistd start
+Starting blacklistd.
+# service sshd restart
+Performing sanity check on sshd configuration.
+Stopping sshd.
+Performing sanity check on sshd configuration.
+Starting sshd.
+```
+
+運用状況を確認するにはいかのコマンドを入力する(-rは残り時間、まだ適用されていないのでリストが出ていない)
+
+```
+# blacklistctl dump -ar
+ address/ma:port id nfail remaining time
+```
+
+運用すると以下のようにルールが適用されポートについて、ipfwのルールに追加される。
+
+```
+02022 311 24408 deny tcp from table(port22) to any 22
+02025 836 42388 deny tcp from table(port25) to any 25
+02465 427 26130 deny tcp from table(port465) to any 465
+02587 788 47004 deny tcp from table(port587) to any 587
+```
+
+tableの内容を確認したい場合は以下のコマンドで確認できる
+
+```
+# ipfw table port22 list
+--- table(port22), set(0) ---
+・・・
+```
+
+## ftpサーバ
+
+ftpについては、以下の設定をすることによりftpが使用でき連携される。最初に使用宣言。
+```/etc/rc.conf
+inetd_enable="YES"
+```
+
+最後の-Bはデフォルトでは無くblacklistdと連携するためのオプションである
+
+```/etc/inetd.conf
+ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -B
+```
+
+```
+# service inetd start
+Starting inetd.
+```
