ブログトップ 記事一覧 ログイン 無料ブログ開設

JF1DIR業務日誌 このページをアンテナに追加 RSSフィード

電子工作・オーディオクラフト・アマチュア無線・コンテスト・BCL
プロフィールはこちら

2017-04-13 Raspberry PiでWebサーバーの諸設定

Raspberry PiでWebサーバーの諸設定

| Raspberry PiでWebサーバーの諸設定を含むブックマーク Raspberry PiでWebサーバーの諸設定のブックマークコメント

先日Raspberry Pi3を導入し電子工作のツールとして使おうと考えていたのですが、立派なLinuxマシンを遊ばせておくのはもったいないと思い、また、とある必要性からWebサーバーに仕立て上げようと思い立ちました。他にLinuxマシンがあるのですが、あえてRPiで、ということでしょうか(汗)。

ここ数日Webサーバーの設定を済ませた後にラズパイをいじっているときmicroSDカードを機械的に破損させるなどの事故があり、OSインストールを2度繰り返す羽目になりました(苦笑)。来るべき3度目のため(?)に備忘録として設定の一部始終をここに書いておきます。初めての方にも参考になるかもしれませんが、ちゃんと動くかどうかの保証は致しかねます(汗)。なお、OSバージョンはRaspbian JESSIE LITE 2017.4.10版、WiFiを使わずEthernet接続です。

起動前に非HDMIモニタへの対応

HDMI-VGA変換アダプタを使って非HDMIモニタにつなげる場合の設定。DDmicroSDカードOSのイメージを書き込んだ後に、RPiを起動する前に/boot/config.txtを編集してしまう。

hdmi_force_hotplug=1
hdmi_ignore_edid=0xa5000080
hdmi_group=2
hdmi_mode=39

これでVGAモニタに1360x768ピクセルの画面解像度で表示される。microSDをRPiに挿して電源を入れる。

raspi-configでいろいろ設定

RPiを起動後、ユーザー名pi、パスワードraspberryでログイン。対話型設定ソフトraspi-configパスワード変更、host名変更、ローカライゼーション(タイムゾーン、キーボード設定)、インターフェイス設定(SSH有効化)、カード拡張などを済ませておく。

$ip route

でRPiのローカルIPを確認。他のPCからSSHログインを確認。これ以降、他の端末からSSH接続するので、キーボードディスプレイをはずしておく。

キーボードのCTRLとCAPSを入れ替え

好みにより、CTRLキーとCAPSキーを入れ替える。/etc/default/keyboardを編集。

XKBOPTIONS="ctrl:swapcaps"

Xの設定っぽいけどこれで大丈夫。Xは使わないに。その後リブートして有効になる。

rootパスワード変更

root無防備なのでまずはなによりパスワードを設定する。

$sudo passwd root

piユーザーを他のユーザー名(yuji)に変更。piでログインした状態で、

$sudo useradd -M foo
$sudo gpasswd -a foo sudo
$sudo passwd foo
$exit

fooでログインし、

$sudo usermod -l yuji pi
$sudo usermod -d /home/yuji -m yuji
$sudo groupmod -n yuji pi
$exit

yujiでログインし、fooを削除。

$sudo userdel foo
$sudo pass yuji

IPを固定化(イーサーネット)しておく

ip routeで確認したローカルIPが192.168.1.10とする。/etc/dhcpcd.confを編集。末尾に、

inteface eth0
static ip_address=192.168.1.10/24
static routers=192.168.1.0
static domain_name_servers=192.168.1.0

その後リブート、他の端末からSSHログインしてチェックする。

Sambaインストール

Windowsファイル共有するときに便利なのでいれておく。

$sudo apt-get install samba

/home/yuji/sambaWindowsファイルが見えるようにする。

/etc/samba/smb.confを編集、末尾に、

[share]
path=/home/yuji/share
read only=No
browsaeble=Yes
guest ok=Yes
force user=yuji
$mkdir /home/yuji/share
$sudo service samba restart

sambaをrestart(エラーが出る場合は、smbdとnmbdをrestart)。

Windowsエクスプローラで\\192.168.1.10を開くとshareフォルダが見えるようになる。

RSA公開鍵認証方式でSSHログイン

クライアント側(Teratermなど)で鍵を作成。パスフレーズを入力し、Public keyとPrivate Keyファイルを保存。それぞれ、

id_rsa.pub, id_rsaとする。id_rsa.pubをRPiへコピー。samba共有したフォルダにコピーしておく。サーバのRPi上で、

$mkdir ~/.ssh
$chmod 700 ~/.ssh
$mv ~/share/id_rsa.pub ~/.ssh
$cd ~/.ssh
$ssh-keygen -i -f id_rsa.pub >> authorized_keys

"uudecode failed."とエラーが出る場合は、

$ cat id_rsa.pub >> authorized_keys

とする。

/etc/ssh/sshd_configを編集

PermitRootLogin no
PasswordAuthentication no
RSAAuthentication    yes
PubkeyAuthentication yes
AuthorizedKeysFile   %h/.ssh/authorized_keys

sshをrestart。これでrootログインできなくし、パスワード入力によるログインも禁止になり、セキュリティレベルが上がる。

クライアント(Teratermなど)でアクセスするとき秘密鍵ファイルid_rsaを指定してログイン。鍵ファイルはRPi上には置かない。id_rsaなどのファイルパーミッションを600に設定しておくこと。

Apache2インストール

$sudo apt-get install apache2

ブラウザhttp://192.168.1.10アクセスして"Work It!"の表示を確認。

$sudo a2enmod userdir

これで~/public_htmlの下にアクセスできるようになる。ブラウザhttp://192.168.1.10/~yuji/public_html/test.htmlなどで表示させてチェック。

CGIの設定

~/public_html/cgi-binの下にあるPerlPythonプログラムを起動させるとする。

$sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/cgi.load

/etc/apache2/sites-aviailable/000-default.confを編集。

Include conf-available/serve-cgi-bin.conf

/etc/apache2/mods-available/mime.confを編集し、CGIプログラムの拡張子を設定。

AddHandler cgi-script .cgi .py .pl

/etc/apache2/conf-available/serve-cgi-bin.confを編集。

ScriptAlias /cgi-bin/ /home/*/public_html/cgi-bin
                <Directory "/home/*/public_html/cgi-bin">

これで~/public_html/cgi-binの下のCGIプログラムが有効になる。

/etc/apache2/mods-available/userdir.confを編集

<Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit
                Options MultiViews SymLinksIfOwnerMatch IncludesNoExec

OptionsにIndexesを取り去ると、ブラウザ上に(index.htmlがないディレクトリとかで)ディレクトリ構造が見えなくなる。

apache2をrestartすると反映されるので、~/public_html/cgi-bin/のプログラムをブラウザから起動させて確認。プログラムにはchmodしておく。

ポートの開放

ルータアクセスブラウザからhttp://192.168.1.1/を開く。

静的IPマスカレード設定で、ポート番号80と22を開いておく。この瞬間から世界中からSSHログイン攻撃が始まる。sudo lastbで確認できる。rootやpiのパスワード絶対に設定しておくこと。

自宅IPグローバルIPを把握する。

$curl httpbin.org/ip

このIPを別のネットワーク上の端末のブラウザで開いてみる。Apache2の設定のときの"Work It"の画面が出ることを確認。

ファイアーウォールの設定

SSH, WWW, Sambaポートを許可する。それ以外を禁止。

$sudo apt-get install ufw
$sudo ufw disable
$sudo ufw default deny
$sudo ufw allow proto tcp from 192.168.1.0/24 to any port 22
$sudo ufw allow 8080
$sudo ufw allow 80
$sudo ufw allow 137/udp
$sudo ufw allow 138/udp
$sudo ufw allow 139/tcp
$sudo ufw allow 445/tcp
$sudo ufw enable

SSHポート22番はLAN内のアクセスに制限しているが、外からのログインもやりたい場合はufw allow 22とする(ただし外からのSSH攻撃に会うので、セキュリティ対策をしっかりしておくこと)。

ファイアーオールの設定は$sudo ufw statusで確認。

MyDNS.jpDDNS更新をcronで行う

独自ドメインを取得し、MyDNSを利用しているのでDDNSの更新の設定をしておく。

$crontab -e
(以下の1行を追加して保存)
*/10 * * * * wget -q -O /dev/null http://(mydns.jp のマスターID):(mydns.jp のパスワード)@www.mydns.jp/login.html

Gmail経由でmailを出せるようにする

Gmailアドレスはxxxx@gmail.com

Googleログイン名をxxxx、パスワードをfoobarとする

$sudo apt-get install mailutils
$sudo apt-get install ssmtp

/etc/ssmtp/ssmtp.confを編集

root=xxxx@gmail.com
mailhub=smtp.gmail.com:587
hostname=xxxx@gmail.com
AuthUser=xxxx
AuthPass=foobar
USESTARTTLS=YES

$mail xxxx@gmail.comメールが送られてくるか確認。セキュリティの低いクライアントからのアクセスが有りましたとGoogleから知らせが来るのでGmailの設定で許可しておく。

Python関連をインストールする。

Pipではなぜか失敗するので、すべてapt-getでインストールする。

$sudo apt-get install python-pip
$sudo apt-get install python-numpy
$sudo apt-get install ipython
$sudo apt-get install python3
$sudo apt-get install ipython3
$sudo apt-get install python3-pip
$sudo apt-get install python3-numpy

など。Python3も入れておくがデフォルトはPython2しておく(そのほうがトラブルが少ない?)。