ラベル FreeBSD の投稿を表示しています。 すべての投稿を表示
ラベル FreeBSD の投稿を表示しています。 すべての投稿を表示

2020年1月27日月曜日

WinSshFsを使い、SSHサーバーをWindowsでネットワークドライブとしてマウントする方法。

WinSshFsで公開鍵認証のSSHサーバーに接続する方法

Puttyで生成した鍵はAES-256-CBCで出力されるが、win-sshfs(Dokan .Net library)はDES-DES3-CBCでないと読み込めないため、変換する必要がある。
そのままの鍵を使おうとすると
test could not connect:Invalid private key file.
とエラーが出てしまう。

変換はまずPuttyGenを起動し、作成した鍵ファイルを読み込む。
そして、Conversions→Export OpenSSH keyを選択し、秘密鍵を出力する。(ここではaes_newkeyとする)

そのファイルをサーバーに安全な方法でアップし(opensslが入った環境ならどこでも良い)、サーバー上で下記コマンドを実行する。
$ cat aes_newkey | openssl rsa | openssl rsa -des3 > des3_newkey
コマンド入力時にパスフレーズの入力を求められるため任意の文字列を入力する。
そして出力されたdes3_newkeyをローカルマシンに持ってきて、WinSshFSのSshfs Managerで図のように設定する。そうしてSAVEしてMountすれば任意のドライブレターにローカルドライブのようにSFTP環境でマウントできる。

参考:
win-sshfsで鍵を使ってログインする方法
Windows10からLinuxにSSHで接続し、ネットワークドライブとしてマウントして使うとすごく便利だった

2020年1月17日金曜日

FreeBSDでLet'sEncryptをMyDNSのDNS認証で自動更新させる

超下書き記事。後で清書予定。
ほとんどLet’s Encrypt + MyDNS でワイルドカードSSL証明書を自動更新する方法のコピー記事ですが(ごめんなさい)、自分の環境(FreeBSD12.1)に合わせて一部補足しています。
この方法であれば、80番や443のポート開放しなくてもLet'sEncryptの更新ができる。
V6プラスで任意のポートが使えない場合に有効だと思われる。

まず、MyDNSがリリースしたDNS認証の公式スクリプトはPHPで書かれているため、それが動くように下記の3つをインストールする。
# pkg search php
php74-7.4.1                    PHP Scripting Language
php74-openssl-7.4.1            The openssl shared extension for php
php74-mbstring-7.4.1           The mbstring shared extension for php

# pkg install php74-7.4.1
# pkg install php74-openssl-7.4.1
# pkg install php74-mbstring-7.4.1

ターミナルを開き、次のコマンドをroot権限で実行します
# cd ~ #ホームフォルダなどの作業スペースへ移動
# wget 'https://github.com/disco-v8/DirectEdit/archive/master.zip' -O DirectEdit-master.zip #MyDNSの自動更新スクリプトをダウンロード
# unzip master.zip #ダウンロードしたZipを解凍
# mv DirectEdit-master /opt/ #解凍したフォルダを/opt/に移動

次に、自動DNS書き換えの設定をしていきます。
# vi /opt/DirectEdit-master/txtedit.conf

内容を下記のように書き換えます。
$MYDNSJP_URL       = 'https://www.mydns.jp/directedit.html'; //そのまま
$MYDNSJP_MASTERID  = 'mydnsXXXXXX'; //MyDNSユーザーID
$MYDNSJP_MASTERPWD = 'yourmydnspasswd'; //MyDNSパスワード
$MYDNSJP_DOMAIN = 'example.com'; //MyDNSに登録したドメイン名

PHPのパスを確認
# which php
/usr/local/bin/php
FreeBSD12.1のphp7.4はここにbinのパスがあるため、
/DirectEdit-master/内のtxtregist.phpとtxtdelete.phpのbin/phpのパスを設定する。(1行目)
# vi /opt/DirectEdit-master/txtregist.php
#!/usr/local/bin/php
(txtdelete.phpも同様に行う)

権限を変更します。
# cd /opt/DirectEdit-master
# chown root:root ./
# chmod 700 ./*.php //DNS自動更新プログラム
# chmod 600 ./*.conf //設定ファイル

これで下準備はOKです。
既にLetsEncryptの証明書ファイルが有る場合はエラーの原因となるため、リネームして排除しておく。
# mv /usr/local/etc/letsencrypt /usr/local/etc/old_letsencrypt


それではMyDNS自動更新スクリプトを使ってdns-01認証でワイルドカード証明書を取得してみます。
# certbot-auto certonly --manual \ #certbot-autoコマンドは環境によって名前が異なる場合があります。
--preferred-challenges=dns \
--manual-auth-hook /opt/DirectEdit-master/txtregist.php \
--manual-cleanup-hook /opt/DirectEdit-master/txtdelete.php \
-d example.com -d *.example.com \ #※左記以外のサブドメイン(たとえばa.example.com)はMyDNSのスクリプトではエラーになるため指定できません。サブドメインのSSLを取得する場合は別途従来のhttp-01認証で取得してください。
--server https://acme-v02.api.letsencrypt.org/directory \
--agree-tos -m hoge@example.com \ #Let'sEncryptからの通知を受け取るアドレスを指定します。
--manual-public-ip-logging-ok

更新ができるか確認
# certbot renew --dry-run

成功したらCrontabに登録
# crontab -u root -e
00 04 01 * * certbot renew
自動でApacheのリロードも行う。
01 04 01 * * /usr/local/etc/rc.d/apache24 reload

参考
Let’s Encrypt + MyDNS でワイルドカードSSL証明書を自動更新する方法
Let’s Encrypt の証明書の更新を自動化する手順 (cron)

2020年1月9日木曜日

FreeBSDメジャーアップグレード

個人用忘備録。
FreeBSDのメジャーアップグレード(11.2→12.1)はここの記事の内容で全てOK!
FreeBSD 11.2 を FreeBSD 12.0 に更新
https://qiita.com/psaxuww/items/4f14414999fc1b31ca11
上記記事の完全引用です。書いてくださった方有難うございます。

12.1にしたいなら下記の順で進めていく。
アップグレードファイルダウンロード
# freebsd-update upgrade -r 12.1-RELEASE
カーネルのインストール
# freebsd-update install
再起動 
# reboot

再起動後ユーザランドのインストール
# freebsd-update install

古いサードパーティソフトのリビルドをするよう促されるので、パッケージアップグレード 

# pkg upgrade -y

仕上げ(soファイルの削除)
# freebsd-update install
バージョン確認 
$ uname -a
FreeBSD  12.1-RELEASE FreeBSD 12.0-RELEASE r341666 GENERIC  amd64
 と表示されればOK。詳細は上記リンク先記事で。

メインテナンスはこちら
https://maimokumemo.blogspot.com/2016/05/microserver-freebsd103nasweb5.html

2017年10月4日水曜日

FreeBSD+ApacheのLet's Encrypt導入が簡単だった件

StartSSLが使い物にならなくなったため、Let's Encryptを導入しようとしたのだが、仕組みがよくわからず、ずっと敬遠していた。
しかしようやく導入してみたところ、全然簡単だったためここに記す。

なお私の場合、Apacheを80番ポートで運用しておらず、尚且つルートディレクトリに既にアクセス制限を行っているため、通法ではLet's Encryptのドメイン認証が行えない。
そのため、スタンドアロンのドメイン認証用サーバープログラムを走らせて認証を行う。
このように書くとややこしく思えるが、行うことは非常に単純である。

まず、Let's Encryptの証明書取得ツールを導入する。
# pkg install py27-certbot

そして、ドメイン認証と証明書取得を行うのだが、この際ポート443で待ち受けしているソフトがある場合終了させる。(ApacheのSSLが443で待ち受けている場合はApacheを終了させる)
# /usr/local/etc/rc.d/apache24 stop

証明書取得を対話モードで行う
# certbot certonly

How would you like to authenticate with the ACME CA?
-------------------------------------------------------------------------------
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
↑ここで今回はスタンドアロンサーバーで認証を行うため、1を入力してEnter
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): hoge@hogehoge.com
連絡用メールアドレスを聞かれるため入力してEnter。(メール認証は特に行われない)

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a
↑利用規約に同意するか聞かれるのでaを入力しEnter

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: n
EFFにメールアドレスを登録するか聞かれるので、任意で答える。私の場合はnを入力してEnterした。

Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel): hogehoge.com
↑自分のドメイン名を入力

以下、証明書取得に伴うメッセージが表示される。
Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for hogehoge.com
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /usr/local/etc/letsencrypt/live/hogehoge.com/fullchain.pem. Your
   cert will expire on 20YY-MM-DD. To obtain a new or tweaked version
   of this certificate in the future, simply run certbot again. To
   non-interactively renew *all* of your certificates, run "certbot
   renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le
これだけ!!これだけでもう、/usr/local/etc/letsencrypt/live/hogehoge.com/にサーバー証明書、プライベートキー、中間CA証明書ができている!

あとはApacheのSSL設定ファイルでこれらのファイルをそれぞれ指定するだけである。
# vi /usr/local/etc/apache24/extra/httpd-ssl.conf

#   Server Certificate:
#   Point SSLCertificateFile at a PEM encoded certificate.  If
#   the certificate is encrypted, then you will be prompted for a
#   pass phrase.  Note that a kill -HUP will prompt again.  Keep
#   in mind that if you have both an RSA and a DSA certificate you
#   can configure both in parallel (to also allow the use of DSA
#   ciphers, etc.)
#   Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)
#   require an ECC certificate which can also be configured in
#   parallel.
SSLCertificateFile "/usr/local/etc/letsencrypt/live/hogehoge.com/cert.pem"
#SSLCertificateFile "/usr/local/etc/apache24/server-dsa.crt"
#SSLCertificateFile "/usr/local/etc/apache24/server-ecc.crt"

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
#   ECC keys, when in use, can also be configured in parallel
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/hogehoge.com/privkey.pem"
#SSLCertificateKeyFile "/usr/local/etc/apache24/server-dsa.key"
#SSLCertificateKeyFile "/usr/local/etc/apache24/server-ecc.key"

#   Server Certificate Chain:
#   Point SSLCertificateChainFile at a file containing the
#   concatenation of PEM encoded CA certificates which form the
#   certificate chain for the server certificate. Alternatively
#   the referenced file can be the same as SSLCertificateFile
#   when the CA certificates are directly appended to the server
#   certificate for convenience.
SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/hogehoge.com/chain.pem"

これで、Apacheを起動できれば無事導入できている。
# /usr/local/etc/rc.d/apache24 start
Performing sanity check on apache24 configuration:
Syntax OK
Starting apache24.

Let's Encryptの証明書期限は90日しかないため、それ以内に更新する必要があるが、更新するときは下記コマンドを入力するだけである。(この時もスタンドアロンサーバーが起動するため、競合するサーバープログラムがある場合は停止する)
# certbot renew 
これだけで更新される。超簡単!

2017年10月13日追記
証明書更新時にApacheの再起動も行う場合は下記のコマンドを使う。証明書の更新がある場合はApacheを停止し、証明書更新後Apacheを再起動する。私の環境では何故かエラーメッセージが出ますが実用上問題なさそうです。これをCronに登録しておけば多分OK。
certbot renew --pre-hook "service apache24 stop" --post-hook "service apache24 start"

実際に更新はしないが、更新できるかどうか試したい場合、下記のコマンドを入力する。
# certbot renew --dry-run
下記のように出てくれば成功。
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /usr/local/etc/letsencrypt/renewal/hogehoge.com.conf
-------------------------------------------------------------------------------
Cert not due for renewal, but simulating renewal for dry run
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for hogehoge.com
Waiting for verification...
Cleaning up challenges

-------------------------------------------------------------------------------
new certificate deployed without reload, fullchain is
/usr/local/etc/letsencrypt/live/hogehoge.com/fullchain.pem
-------------------------------------------------------------------------------
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /usr/local/etc/letsencrypt/live/hogehoge.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)
赤文字で下記のエラーが出た場合は、競合するサーバープログラムがあり、更新に失敗しているのでそれらを停止してから更新を行う。
Attempting to renew cert from 
/usr/local/etc/letsencrypt/renewal/hogehoge.com.conf produced an 
unexpected error: Problem binding to port 443: Could not bind to IPv4 or
 IPv6.. Skipping.

いやはや、あまりの簡単さに愕然とした。最早簡単すぎてセキュリティスペシャリストの勉強にならない次元である。

巷には公式サイトからの引用で、
$ sudo certbot certonly --webroot -w /var/www/example -d example.com -d 
www.example.com -w /var/www/thing -d thing.is -d m.thing.is
とコマンドを入力する導入方法が紹介されているところが多く見られるが、今回のやり方が初心者には一番わかり易いのではないかと思う。
慣れてきたら上記コマンドで導入したいが、次回以降使うのは# certbot renew だけなのである(笑)。

一度導入すると仕組みがわかると思うので、色々とチャレンジしたい場合は非公式解説サイトを読んでみると良いと思う。
https://letsencrypt.jp/faq/


参考:
certbot
https://certbot.eff.org/#freebsd-apache


Let's Encrypt 総合ポータル
https://letsencrypt.jp/

完全に闇に落ちていた StartSSL に ¥3,603 課金してしまったお話
https://masutaka.net/chalow/2017-01-10-1.html

2017年6月30日金曜日

ZFSをマウントできないときに試すこと

システムを入れ替えた際zfsがマウントできないときに試すこと
ZFSのマウントポイントを変えてみる
http://centos.sabakan.red/entry/2015/06/28/150000
ZFSをエクスポートし、名前を変えてインポートしてみる
 http://docs.oracle.com/cd/E19253-01/819-6260/6n89n6cfd/index.html

zpool export tank
zpool import tank

2017年2月5日日曜日

FreeBSDでユーザー認証付き、アクセス先をホワイトリストで制限した、Torプロキシサーバーを立てる方法。Squid+Privoxy+Tor

自己責任で実行すること。

方法
squidとprivoxyとTorを組み合わせる。
squidでユーザー認証、ホワイトリスト制限をし、privoxyに転送して、
privoxyからtorにポートフォワードし、
Torでアクセスという多段串の構造になる。
下記設定ではsquidの待受ポートを任意のものに、privoxyの待受はローカルホストのみに対して8118ポートで、torの待受はローカルホストのみに対して9050で受け付けているという条件で行っている。

squidの設定
プロキシサーバーsquidのインストール
pkg search squid
squid-3.5.23                   HTTP Caching Proxy
自動起動するには
squid_enable="YES"
を/etc/rc.confに追加。
# echo 'squid_enable="yes"'>> /etc/rc.conf

ホワイトリスト制限をする場合は、まずホワイトリストを作成する。
vi /usr/local/etc/squid/whitelist
でホワイトリストファイルを作成し、ドメイン指定をする。先頭に.を入れるとサブドメインを含めたものにも適応できる。
.hogehoge.com
.hoge2.hogehoge.jp

また、BASIC認証を行う場合は、htpasswdコマンドで、ユーザー名とパスワードの定義ファイルを作っておく。
htpasswd -b -c .htpasswd user passwd
(htpasswdを初めて作る場合。すでにファイルが有ってユーザーを追加するだけなら-cオプションを外す)

ここまでの準備をして、squidの設定ファイルを編集する。
設定ファイルがない場合は一度起動するとsquidの設定ファイルができるので、終了させてからそれを編集。
vi /usr/local/etc/squid/squid.conf
http_port XXXX
待受ポートを任意のものに変える。
squidの設定ファイルは
前半部がacl [ルール名] [ルール]の構文でルールを幾つか定義し、
後半部でhttp_access allow/deny [ルール名]を羅列し、どのルール名のものを許可あるいは拒否するかということを書いている。ルールは上から順に適応される。

まず、前半部において
#ルールホワイトリストの定義whitelistを設定。
acl whitelist dstdomain "/usr/local/etc/squid/whitelist"
#BASIC認証の設定
auth_param basic program /usr/local/libexec/squid/basic_ncsa_auth /usr/local/etc/squid/.htpasswd
auth_param basic children 5 startup=5 idle=1
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
#BASIC認証通過の定義pauthを設定。
acl pauth proxy_auth REQUIRED
を追加。

後半部で
定義pauthとwhitelistの両方を満たす設定のみ通信可能にしている(AND条件)。このように書かないと、ホワイトリストが機能しない。↓
http_access allow pauth whitelist
#http_access allow localnetはローカルネットワークからのアクセスを認証無しで許可してしまうため#をつけて無効化。(もしくはlocalhetをwhitelistとともにAND条件に組み込む。)
上記ルールまでに許可されなかったものはすべて拒否↓
http_access deny all

あとは、
cache_peer 127.0.0.1 parent 8118 0 no-query
never_direct allow all
を追加し、provixyに転送。当然ながら、外部公開するとリスクが高いので、最低限ポート番号は変更しておく。
プロキシであることを隠したい場合は、以下の項目も追加。ただし悪用された場合、言い訳ができなくなり相当危険。
#hidden proxy info
request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all
reply_header_access X-Forwarded-For deny all
reply_header_access Via deny all
reply_header_access Cache-Control deny all

privoxyの設定
provixyのインストール
pkg search privoxy
privoxy-3.0.26                 Privoxy is a web proxy with advanced filtering capabilities
pkg install privoxy
自動起動するには
privoxy_enable="YES"
を/etc/rc.confに追加。
# echo 'privoxy_enable="yes"'>> /etc/rc.conf
設定ファイルがない場合は一度起動するとprivoxyの設定ファイルができるので、終了させてからそれを編集。

vi /usr/local/etc/privoxy/config
Torと組み合わせて使われることも多いため、設定ファイルにすでに書かれている下記の行を編集。
#        forward-socks5t   /               127.0.0.1:9050 .
行頭の#を外し、設定を有効化する。socks5tは、DNSリークを防止する拡張仕様。

torの設定
デフォルトのままで起動する。
torのインストール
pkg search tor
tor-0.2.9.8                    Anonymizing overlay network for TCP
pkg install tor-0.2.9.8

インストール後、自動起動させるには、
tor_enable="YES"
を追加。
# echo 'tor_enable="yes"'>> /etc/rc.conf

あとは、それぞれのサービスを起動させる。
つながらない場合は、
それぞれのサービスの待受IP:ポートに間違いがないか確認。
Provixyを外部公開している場合、
listen-address  192.168.XX.XX:YYYY
などに変更しているため、squidからフォワードする際は
cache_peer 192.168.XX.XX parent YYYY 0 no-query
にする必要がある。Torを外部公開している場合もprivoxyの設定で同様。


参考
プロキシサーバーの構築に関するメモ
http://www.satlab-gineiden.com/pc-soft/proxy_server.html
proxyサーバ squidでアクセス時に認証を要求する設定(Ubuntu14.04の設定) 
http://vogel.at.webry.info/201504/article_13.html
squid.confでwhitelistに書いたドメインだけのアクセスを許可したい
https://teratail.com/questions/48053
プロキシサーバの設定
http://tech.ckme.co.jp/proxy.shtml
Privoxy
https://wiki.archlinuxjp.org/index.php/Privoxy
Squid example config file for working with default provixy
https://gist.github.com/ourway/6dd800ca619120e35076

2016年5月20日金曜日

Microserver FreeBSD10.3でNASとWebサーバーを構築する5 メインテナンス編

一通りの設定が済んだので、メインテナンスについて述べる。

普段のアップデート作業まとめ
カーネルのアップデートチェック
# freebsd-update fetch
アップデート対象があったら
# freebsd-update install

パッケージに脆弱性がないかチェック
# pkg audit -F
パッケージ一括アップデート( -yオプションを付ければ自動でインストール)
# pkg upgrade

ZFSストレージにエラーがないかチェック
# zpool status

有効になっているサービスの確認
# service -e

入っているパッケージの確認
# pkg version -v

パッケージを探す
# pkg search パッケージ名

パッケージの削除(例としてsamba47を削除する場合)
# pkg delete samba47-4.7.12

使われていない package の自動削除(不必要な依存パッケージの削除)
# pkg autoremove

アップデートの確認をCronで自動実行する
# vi /etc/crontab
#↓を追加(実行結果はvar/log/batch.logに出力され、更新の必要がある場合メール通知される)
@daily                                  root    freebsd-update cron >> /var/log/batch.log 2>&1

periodic絡みの毎日実行されるコマンド内容をメールでなくログ出力にする場合
# vi /etc/periodic.conf
#下記内容を追加
daily_output=/var/log/daily.log
weekly_output=/var/log/weekly.log
monthly_output=/var/log/monthly.log
#重要な内容のみ出力するには下記も追加。
daily_show_success=NO
daily_show_info=NO
daily_show_badconfig=NO
#/tmpディレクトリ下にある3日以上前の一時ファイルを毎朝削除するには下記を追加
daily_clean_tmps_enable="YES"

本当にFreeBSDの管理は楽だと思う。
カーネルの更新はこちら
https://maimokumemo.blogspot.com/2020/01/freebsd.html

root宛てのメールはssmtpをインストールしてGmailに転送すると便利。


参考・引用
ZFSを使いたかったので、FreeBSD 10.0をインストールしてNAS構築
http://ik-fib.com/2014/02/freebsd10-install/
[FreeBSD] 日常使いのpkgng その1
http://april.fool.jp/blogs/2013/03/freebsd-%E6%97%A5%E5%B8%B8%E4%BD%BF%E3%81%84%E3%81%AEpkgng-%E3%81%9D%E3%81%AE1/
pkg によるバイナリ package の管理
https://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/pkgng-intro.html

Microserver FreeBSD10.3でNASとWebサーバーを構築する4 Apache設定編

OSインストール、Sambaの設定が済んだら、いよいよApacheの設定を行う
(やや下書き記事。時間あるとき追記します。 )

まず、Apache2.x系のパッケージを検索

# pkg search apache2
apache22-2.2.31                Version 2.2.x of Apache web server with prefork MPM.
apache22-event-mpm-2.2.31      Version 2.2.x of Apache web server with event MPM.
apache22-itk-mpm-2.2.31        Version 2.2.x of Apache web server with itk MPM.
apache22-peruser-mpm-2.2.31    Version 2.2.x of Apache web server with peruser MPM.
apache22-worker-mpm-2.2.31     Version 2.2.x of Apache web server with worker MPM.
apache24-2.4.20_1              Version 2.4.x of Apache web server
p5-Apache2-SOAP-0.73_3         Apache2 mod_perl2 SOAP Server
p5-Apache2-SiteControl-1.05_2  Perl web site authentication/authorization system

apache2.4系をインストール
# pkg install apache24


設定ファイルを編集
vi /usr/local/etc/apache24/httpd.conf

編集すべき場所↓

WevDAVを使う場合は下記コメントアウト#を消して有効にする
LoadModule dav_module libexec/apache24/mod_dav.so
LoadModule dav_fs_module libexec/apache24/mod_dav_fs.so
Include etc/apache24/extra/httpd-dav.conf

#サーバーのポート番号
Listen 80

#自分のドメイン名またはグローバルIPアドレス
ServerName example.com

#ドキュメントルート(ブラウザからサーバーにアクセスした時に表示される最上層の場所)
DocumentRoot "/export/homeserver" 

公開ディレクトリの個別設定
<Directory "/tank/homeserver">
    #インデックスリストを表示するかどうか(下の場合はする場合)
    Options Indexes FollowSymLinks
    #Sambaとの文字化けを防ぐためにUTF-8で統一↓
    IndexOptions Charset=UTF-8
    #.htaccessファイルでディレクトリごとの設定変更を許可するか(下記の場合は許可)
    AllowOverride All
    #どのIPからも接続は許可
    Require all granted
    #WebDAVを使用する
    Dav On
</Directory>

Apacheをリバースプロキシにして特定のURLをLAN内の別のサーバーに転送する場合
ProxyPass /hoge2/ http://192.168.x.xx/
ProxyPassReverse /hoge2/ http://192.168.x.xx/ 

Apacheの設定が終わったらrc.confに登録
# echo 'apache24_enable="yes"'>> /etc/rc.conf

Apache起動
# /usr/local/etc/rc.d/apache24 start 

 今後Apacheの設定を変えただけの場合はreloadでも良い。
# /usr/local/etc/rc.d/apache24 reload

SSL化
大体
http://www.lifewithunix.jp/notes/2015/09/28/how-to-install-https-apache24-on-freebsd10-2/
ここに書いてあるとおりにする

SSLに必要な署名ファイルたちは
http://www.kyoji-kuzunoha.com/2013/08/startssl-certificate.html
ここのように設定する

注意すべき点は/extra/http-ssl.conf のVirtualhostの中のポート番号をSSLのポートに設定するのと、DocumentRootのパスを公開するディレクトリに設定しないとSSLアクセス出来ない。
また、証明書と秘密鍵のペアが違うとSyntax OKとは出るが、サーバーは起動しない。

Webdavについては、とりあえず見られればいいやというスタンスで、書き込みなどについては設定ができてないかもしれない。時間があるとき見直したい。


参考・引用
FreeBSD 10.2: Apache 2.4 に SSL を導入
http://www.lifewithunix.jp/notes/2015/09/28/how-to-install-https-apache24-on-freebsd10-2/

StartSSLで無料のSSL証明書を取得してサーバーに適用する
http://www.kyoji-kuzunoha.com/2013/08/startssl-certificate.html

2016年5月19日木曜日

Microserver FreeBSD10.3でNASとWebサーバーを構築する3 samba設定編

OSインストール、ZFSストレージ設定まで終わったら、今度はsambaを設定し、NASとして使えるようにする。

まずはsambaインストールから。
# pkg search samba
p5-Samba-LDAP-0.05_2           Manage a Samba PDC with an LDAP Backend
p5-Samba-SIDhelper-0.0.0_3     Create SIDs based on G/UIDs
samba-nsupdate-9.8.6_1         nsupdate utility with GSS-TSIG support
samba-virusfilter-0.1.3_1      On-access anti-virus filter for Samba
samba36-3.6.25_3               Free SMB and CIFS client and server for Unix
samba36-libsmbclient-3.6.25_2  Shared lib from the samba package
samba36-nmblookup-3.6.25       NetBIOS Name lookup tool
samba36-smbclient-3.6.25       Samba "ftp-like" client
samba41-4.1.22_2               Free SMB/CIFS and AD/DC server and client for Unix
samba42-4.2.11                 Free SMB/CIFS and AD/DC server and client for Unix
samba43-4.3.8                  Free SMB/CIFS and AD/DC server and client for Unix

 samba4.3.8が出ているのでこれをインストール
# pkg install samba43

初回はsambaの設定ファイルを作成。
# vi /usr/local/etc/smb4.conf

[global]←samba全体設定
workgroup = WORKGROUP
server string = FreeBSD
security = user
hosts allow = 192.168.←同一LANからのアクセスのみ許可
netbios name = hogehoge←他のPCから見られるサーバー名
map to guest = Bad User
load printers = no
log file = /var/log/samba4/log.%m
max log size = 50
dns proxy = no
printing = bsd
create mask = 760
directory mask = 770
wide links = yes
unix extensions = no
follow symlinks = yes

[share]←個別設定。ここではゲストアクセス可、読み書きOK設定
path = /tank/homeserver/test1
browseable = yes
writable = yes
guest only = yes
guest ok = yes

[user1]←個別設定例2。特定ユーザーのみアクセス可、サーバーを参照してもパスを直接打たないかぎり表示もされない設定
path = /tank/homeserver/user1
browseable = no←ここでパス直打ち以外の表示を拒否
writable = yes←ユーザーは書き込み可能
valid users = user1←ここで指定したユーザーのみアクセス可

設定が終わったらsambaをrc.dに登録し、起動できるようにする。
# echo 'samba_server_enable="YES"'>> /etc/rc.conf
# /usr/local/etc/rc.d/samba_server restart
 
なお、上記の[user1]のような設定をした場合は、user1の名前でFreeBSD上にアカウントを作り、sambaにも登録する必要がある。また、Windowsからアクセスする場合、このユーザー名とパスワードはWindowsのものと同一である必要がある。

FreeBSDにユーザー追加
# adduser

 ユーザー認証(FreeBSD上のアカウントをSambaで使えるようにする)
# pdbedit -a -u user1

この時、Windowsのユーザー名とそのパスワードも一致させる必要がある。
その上で、sambaで使うフォルダの所有者とパーミッションを設定する必要がある。
# chown -R user1 /tank/homeserver/user1
# chmod -R 770 /tank/homeserver/user1
 以上で、Windowsから、\\hogehoge\user1とアクセスした際に、アクセスできるようになっているはずである。


引用・参照
FreeBSD 10 + samba 4で、Windowsからeveryoneアクセス可能な共有フォルダを作成
http://symfoware.blog68.fc2.com/blog-entry-1423.html

Microserver FreeBSD10.3でNASとWebサーバーを構築する2 ZFSストレージ設定編

せっかくFreeBSDで運用するので、売りであるZFSを使う。いくつかモードが有るのだが、HDD4台で運用する場合、冗長性と容量を確保できるRaidz1を用いた。

といっても一つの記事にする必要もないぐらい簡単で、下記コマンドで作成できる。
zpool create -m {マウント先} {プール名} {RAID レベル} {デバイス 1} {デバイス 2} ...

zpool create -m /tank/ tank raidz1 ada1 ada2 ada3
以上で/tank/にマウントされるRaidz1ストレージができる。



なお、OSを再インストールした場合、ZFSを再びマウントするには、
# zpool import

   pool: zpool0
     id: 4383566041817703211
  state: ONLINE
 action: The pool can be imported using its name or numeric identifier.
 config:

        zpool0      ONLINE
          raidz1-0  ONLINE
            ada1    ONLINE
            ada2    ONLINE
            ada3    ONLINE

# zpool import zpool0
# zfs list
NAME            USED  AVAIL  REFER  MOUNTPOINT
zpool0         47.3M  12.5T   368K  /zpool0
zpool0/gzip    4.78M  12.5T  4.78M  /zpool0/gzip
zpool0/gzip-9  4.76M  12.5T  4.76M  /zpool0/gzip-9
zpool0/lz4     6.13M  12.5T  6.13M  /zpool0/lz4
zpool0/main    15.8M  12.5T  15.8M  /zpool0/main
zpool0/zle     13.9M  12.5T  13.9M  /zpool0/zle
# zpool list
NAME     SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
zpool0    19T  71.8M  19.0T     0%  1.00x  ONLINE  -
↑解説
zpool importで、マウントされてないがインポート可能なZFSストレージのリストアップを行い、
zpool import プール名でマウントする。マウントポイントは以前の場所となる。この場合で言う/tank/にマウントされる。
マウントされたことはzfs listやzpool listで確認できる。

参考・引用
CentOS 7 + ZFS でファイルサーバを作成
http://lazy-dog.hatenablog.com/entry/2014/08/17/033038

ZFSを使いたかったので、FreeBSD 10.0をインストールしてNAS構築
http://ik-fib.com/2014/02/freebsd10-install/

Oracle Solaris 11 ZFSを使ってみよう(構築・運用ガイド)
https://www.fujitsu.com/jp/documents/products/computing/servers/unix/sparc/technical/document/01_ZFS.pdf

Microserver FreeBSD10.3でNASとWebサーバーを構築する1 OSインストール編


この記事は、主にHP Microserverで、できるだけ簡単にFreeBSDを用いてNASとWebサーバー構築し、実用的に運用することを目的としている。以下の様な作りを目指す。

HP MicroserverでUSBメモリ2つあるいは3つをOS用にし、ストレージ用にHDD4台で運用。
USBメモリは安いが耐久性が弱いことが多いので、RaidZ-Mirrerを使い冗長性を確保。
ストレージHDDは容量と冗長性を確保するためRaid-Z1で運用。
Portは入れず、Packageだけで管理する。(ゼロデイ攻撃に弱くなるが、運用は簡単になる)
NASアクセス時、日本語ファイルを文字化けさせない

特にPortを入れないあたり、セキュリティに関して万全とはいえないので、自己責任で行うこと。
ただ、Packageでも実用上十分な堅牢性や機能性は確保できるのではないかと思う。

なお、前提知識としてある程度のネットワークやUNIXコマンドの知識のほか、viエディタを使えることが必要である。(多分この記事を読みながら調べれば済むはず)
ド素人では難しいが、PC中級者以上ならばできるのではないかと思う。

OSインストール
USBメモリを用いてインストールする。OS領域にUSBメモリを2つ使う場合、インストール先USB2つと、それとは別にインストール用USBが必要。

下記サイトより自分のマシンに合ったイメージをダウンロードし、インストール用USBにイメージを書き込む。大抵の場合はamd64-memstick.imgを選択すれば問題ない。
https://www.freebsd.org/ja/where.html

イメージのUSBへの書き込みはWin32DiskImagerを使う。
下記サイトからダウンロードする。
https://osdn.jp/projects/sfnet_win32diskimager/

 USBに書き込んだら、インストール用USB、インストール先USBを刺してPCを起動。

FreeBSD ブートローダメニュー
このままEnterを押す。

ウェルカムメニュー
Installを選択してEnter

キーマップの選択
 YesでEnter

キーボードメニューの選択
自分の使っているキーボードを選択してEner。(jp.106.kbd keymapを選択すればたいてい問題ない)
その後Continue with~(自分の選択したキーマップ)でEnter

ホスト名の設定
ここでホスト名を入れる。今回は自宅サーバー用にドメインを取得していたのでそれを入力した。特にない場合は空欄でOKでも平気だったはず。


インストールするコンポーネントの設定
 ここはlib32だけを選択した状態でEnter。選択はスペースキーで行う。不要なgames等はチェックを外す。(上記画面とは違うことに注意)
今回は、手軽に運用することを目的とするので、ソースからビルドするPorts treeはチェックを外した。 必要なソフトはパッケージで入手することになる。

FreeBSD 10.x 以降でのパーティション分割の選択
インストール先のパーティション設定。今回はUSBを複数用いてZFSのMirrorモードを使うので、ZFSを選択しEnter

ZFS パーティションメニュー
Pool Type/Disks:を選択しEnter

ZFS プールタイプ
Mirrorを選択しEnter

ディスクの選択
インストール先のストレージを選択しEnter

ZFS パーティションメニュー
これで 再びこの画面に戻り、Installを押すとインストールが開始されるはずなのだが、私の場合途中でエラーが出てしまった。どうやらPool Nameがzrootのままでは勧めないとの事だったので、適当な名前zroot1等にしてインストールしたらうまく行った。

配布ファイルのダウンロード
しばらくこのような画面が続く。しばらく待機。

root パスワードの設定
この画面まで来たら、rootのパスワードを設定。打ち間違えないように確認のパスワードもタイプする。

イーサネットインタフェースの選択
ネットワークカードを選択しEnter

IPv4 ネットワークの選択
IPv4で運用する場合Yes。大抵の場合はまだIPv4なのでOKを押す。

IPv4 DHCP 設定の選択
DHCPサーバーから適当なIPアドレスを割り当てる場合はYesを。特定のIPアドレスを使う場合はNOを選択し、次に進む

IPv4 の静的な設定
前画面でNOを選択した場合はここでIPアドレスを設定。

IPv6 ネットワークの選択
IPv6を使う場合はYesを、渡しの場合はまだ使わないのでNOを選択した。

DNS の設定
DNSの設定。iSearchは自分のドメイン名を入力。なければ空欄でもいいかも。
IPv6はNoを押した場合、画像のようなIPv6DNSは表示されずIPv4DNSの設定だけになる。一つは設定が必要。大抵の場合DNSはルータのアドレスを入れればよい。

ローカルまたは UTC クロックの選択
時刻の設定。大抵の場合NOを押す。

地域の選択
タイムゾーンの設定。自分が住んでいる国(AsiaのJapanese)を選択。

追加で有効にするサービスの選択
有効にするサービスの設定。sshdとpowerdはチェックを入れておく。10.3ではこの他にcrashdにデフォルトでチェックが入っていたのでそのまま有効にした。

新しいユーザのアカウントの作成
ユーザーの追加でEnter

ユーザ情報の入力
ユーザー名だけ任意の名前で入れたら、あとはEnterのまますすめる。途中、パスワードを撃ちこむだけそこは任意の文字列を入力。あとは何も考えずにそのままEnter

ユーザおよびグループの管理を終了する
 利用するユーザーの登録が終わったらnoを入力しEnter。


このままセットアップを完了してよければExitを選択しEnter

Manual Configuration
追加の設定をするか聞かれるが、特に必要なければNoを選んでEnter

インストールの終了
 再起動時するので、電源が切れた段階でインストール用USBを外す。

ここまで行けば、あとはリモートから管理できる・・・とおもいきや、次の設定を行うまでリモートからsuコマンドが使えず管理者コマンドが使用できないので、再起動したらrootでログインして次の設定を行う。 自分のユーザー名がhogeの場合
# vi /etc/group

(変更前)
wheel:*:0:root

(変更後)
wheel:*:0:root,hoge 

 これで変更を保存し終了すればリモート管理ができる。お疲れ様でした。

2024年4月18日追記

固定IPアドレスの設定

(現在のネットワーク設定とネットワークカード名の確認)
# ifconfig (設定ファイルの編集) # vi /etc/rc.conf (変更後) # 固定 IPv4 アドレスとサブネットマスク
ifconfig_em0="inet 10.0.0.30/24"

#ネットワークサービス再起動
# service netif restart

SSHDのポート変更

# vi /etc/ssh/sshd_config
(変更前) #Port 22 (変更後) Port 30022

(SSHD再起動)
# service sshd restart


参考(画像引用)
FreeBSD のインストール
https://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/bsdinstall.html

メモ: FreeBSDでsuを使うにはユーザをwheelグループに所属させる
http://d.hatena.ne.jp/torazuka/20110505/wheel

初期設定 : ネットワークの設定
https://www.server-world.info/query?os=FreeBSD_14&p=initial_conf&f=3

FreeBSD: sshdの設定変更
https://www.zabutone.com/freebsd-sshd-configuration/

2015年12月11日金曜日

HPMicroserver Freebsdインストール

超下書き記事。時間があったら清書します。

FreeBSDをインストールした後Mountrootで止まる場合
? Enterでデバイス名を確認し、
utf:/dev/da0p2/を入力する。これで出来なかった場合は、出てきたデバイス名を順番に入力していけばいつか起動するものに当たる。
起動した後は、viでetc/fstabを編集し、Rootを上記の者に、SWAPも適宜変更する。

# dmesg
ずらずらメッセージが流れて一番最後に今接続したデバイスの情報が記載されている。
USBメディアは「da*」というデバイス名になっているので、「*」の部分の数字を確認する。
ここでは「da0」とする。

UFSフォーマットする。
# newfs /dev/da0

マウントする。
# mount /dev/da0 /mnt

複数デバイスをマウントする場合はマウント場所を別途作る。
# mkdir /mnt/ufs
# mount /dev/da0 /mnt/ufs

ZFSを再起動後も自動でマウントするには/etc/rc.confに
zfs_enable="YES"を 記載する必要がある。

echo 'zfs_enable="YES"'>> /etc/periodic.conf
[rc.conf]の初期設定(オリジナル)ファイルは[/etc/defaults/rc.conf]に存在。

ZFSの設定はここ参照
http://ik-fib.com/2014/02/freebsd10-install/
OS再インストール後のZFSストレージのインポートは下記の通り
zpool import←インポートされてないZFSストレージのリストアップ
   pool: zpool0
     id: 4383566041817703211
  state: ONLINE
 action: The pool can be imported using its name or numeric identifier.
 config:

        zpool0      ONLINE
          raidz2-0  ONLINE
            ada1    ONLINE
            ada2    ONLINE
            ada3    ONLINE
            ada4    ONLINE
            ada5    ONLINE
            ada6    ONLINE
            ada7    ONLINE
# zpool import zpool0←上記例だとzpool0をマウント。
マウントポイントは以前マウントしていた場所で設定される。



Sambaの設定はこれを参照(初回は新規作成)
/usr/local/etc/smb4.conf

[global]
workgroup = WORKGROUP
server string = hoge
security = user
hosts allow = 192.168.
netbios name = hogehoge
map to guest = Bad User
load printers = no
log file = /var/log/samba4/log.%m
max log size = 50
dns proxy = no
printing = bsd
#↓Apacheからも見えるように
create mask = 760
directory mask = 770
#↓シンボリックリンク対応にしたかったけど下記設定でもできなかった。いつか調べる
wide links = yes
unix extensions = no
follow symlinks = yes

[share]
path = /home/share
browseable = yes
writable = yes
guest only = yes
guest ok = yes

[user1]
path = /home/user1
browseable = no
writable = yes
valid users = user1

設定をしたらsambaで扱うフォルダのパーミッションを設定
chmod 777 sambaのフォルダ
↑777じゃないと認証が必要な場合は通らない

FreeBSDにユーザー追加
adduser

ユーザー認証(FreeBSD上のアカウントをSambaで使えるようにする)
pdbedit -a -u john

sambaを設定したら再起動を行う
/usr/local/etc/rc.d/samba_server restart


apache24をインストールし、Webdavをオンにする。
フォルダをsambaからもWebdavからもApacheからも見えるようにするには、パーミッションの設定が必須。
sambaから書き込まれるファイルやフォルダはデフォルトだとnobody:wwwになっているため、Apacheから読み書きできない。その為、/usr/local/etc/smb4.confを編集し、
force create mode = 760
force directory mode = 770
などの設定が必要となる。

http://www.ne.jp/asahi/hishidama/home/tech/unix/samba.html
参照

apacheのhttpd.confの場所
/usr/local/etc/apache24/httpd.conf

Apacheをリバースプロキシにして特定のURLをLAN内の別のサーバーに転送する場合
/usr/local/etc/apache24/httpd.confで、
ProxyPass /hoge2/ http://192.168.x.xx/
ProxyPassReverse /hoge2/ http://192.168.x.xx/


設定を変えたら再読み込み
/usr/local/etc/rc.d/apache24 reload

SSL化
大体
http://www.lifewithunix.jp/notes/2015/09/28/how-to-install-https-apache24-on-freebsd10-2/
ここに書いてあるとおりにする

SSLに必要な署名ファイルたちは
http://www.kyoji-kuzunoha.com/2013/08/startssl-certificate.html
ここのように設定する

注意すべき点は/extra/http-ssl.conf のVirtualhostの中のポート番号をSSLのポートに設定するのと、DocumentRootのパスを公開するディレクトリに設定しないとSSLアクセス出来ない。
また、証明書と秘密鍵のペアが違うとSyntax OKとは出るが、サーバーは起動しない。


インストールされている package のアップグレード
# pkg upgrade

インストールされている package の検証(セキュリティ)
# pkg audit -F

2. FreeBSD入れて最初にすること
2.2. ユーザのシェル基本設定
# vi ~/.cshrc
setenv  LANG ja_JP.UTF-8
set prompt = "%n@%m %c# "

2.5. portsnap
/etc/portsnap.confにて、不要なportsを切ってから開始すべき。組み込みルータにおける多言語、audio、multimedia、games等。

初回
# portsnap fetch extract

2度め以降
# portsnap fetch update


ZFSのエラー通知

ZFSには標準でチェック用のperiodic scriptが含まれており、それを有効にするだけで毎日チェック→通知をしてくれるそうです。
スクリプト本体の場所は、/etc/periodic/daily/404.status-zfs です。

そして毎日実行を有効にするために以下のコマンドで設定ファイルに記載します。

echo 'daily_status_zfs_enable="YES"'>> /etc/periodic.conf


sSMTP,root宛メールの転送設定
sendmailを設定しようと思いましたが、root宛のメールを転送したいだけだったので、送信だけのsSMTPを試してみました。
sendmailの停止設定

まだ特にsendmailの設定はしていないので起動することはないと思いますが、sSMTPはsendmailの代行として動く点も多いので、競合しないよう念のため止めて起きます。

echo 'sendmail_enable="NO"'>>/etc/rc.conf
echo 'sendmail_submit_enable="NO"'>>/etc/rc.conf
echo 'sendmail_outbound_enable="NO"'>>/etc/rc.conf
echo 'sendmail_msp_queue_enable="NO"'>>/etc/rc.conf

ssmtpをインストール
# cd /usr/ports/mail/ssmtp
# make install clean
# make replace

最後のmake replaceで/etc/mail/mailer.confを修正して、sendmailからssmtpに置き換えを行ってくれるようです。
ssmtpの設定

ssmtp自体の設定とroot当てのメールをgmailに転送する設定を行います。
– /usr/local/etc/ssmtp/ssmtp.conf

root=youremail@gmail.com
mailhub=smtp.gmail.com:587
AuthUser=youremail@gmail.com
AuthPass=yourpassword
UseSTARTTLS=YES

このとき、googleの二段階認証を使っている場合、AuthPassにはログインパスワードではなく、googleアカウントのセキュリティページで発行できる「アプリケーション固有のパスワード」を設定する必要があります。
mail送信のテスト

以下のコマンドで適当なメールを送って正しく送信できるかを確認します。

$ mail -v root
Subject: <件名>
適当な本文
適当な本文
(Ctrl+Dで終了を入力)

pkg updateでリモートリポジトリを更新したあとにpkg upgradeと実行することで、インストールしたソフトウェアをまとめてアップグレードできる。pkg updateでは先に/usr/local/sbin/pkgをアップグレードするように求められることがある。その場合、/usr/local/sbin/pkgをアップグレードした後で、もう一度pkg updateを実行すればリモートリポジトリが更新される。