Firewalldで特定IPからの接続をdrop
このサイトは見ての通りwordpressなのですが、wordpressではloginのurlが推測されやすいために結構攻撃を受けます。
私程度のサイトでも結構な頻度で攻撃されます。
Limit Login Attemptというプラグインを利用していると、攻撃をしかけてきているIPとその際にアクセスしようとしたログインIDがわかるのですが、久しぶりにみたら結構すごかったです。
やっぱログインのURL変えなきゃダメですね。
今回は攻撃元IPを全て遮断(drop)してみようと思います。
LimitLoginAttemptから一覧取得
お題目つけるほどでもないのですが、管理画面のプラグインページから
IP ID
の組み合わせを全部コピーしてきます。
それをサーバ上に配置したら準備完了です。
[root@metal ~]# vi limitLoginAttempt.txt
awkでコマンド作成
awkコマンドでIPを取得しつつ、firewall-cmdのコマンドを作成していきます。
私実は初めて自分でawk使いました。
便利ですね〜。
[root@metal ~]# cat limitLoginAttempt.txt | awk '{print "firewall-cmd --add-source=" $1 " --permanent --zone=drop"}' > drop_ip.sh
もっとかっこいい書き方があるのかもしれませんが、これで十分。
これにてコマンドが作成できました。
あとはこれをshell scriptにして実行するだけです。
シェルによるIPのdrop
続いて先ほどのファイルをshell scriptにして実行です。
# 先頭に #!/bin/sh を追加 [root@metal ~]# vi drop_ip.sh [root@metal ~]# chmod 700 drop_ip.sh [root@metal ~]# ./drop_ip.sh [root@metal ~]# firewall-cmd --reload success [root@metal ~]# firewall-cmd --list-all --zone=drop # 後片付け [root@metal ~]# rm drop_ip.sh limitLoginAttempt.txt rm: remove regular file ‘drop_ip.sh’? y rm: remove regular file ‘limitLoginAttempt.txt’? y
これにて完了です。
しばらくは標準出力としてコンソールにsuccessがたくさんでてきます。
あとは永続指定をしているのでfirewallをリロードしつつ、設定を確認しています。
これで少しは安心できますが、必ずしも固定IPの場所から攻撃されているわけでもないでしょうから巻き添えを食らっている人もいるかもしれません。
でもどうせ韓国とかロシアだろうから、気にしません。
あとがき
昨日なんの気なしに見たら、IDの場所に正しいIDが指定されていて肝が冷えました。
httpsなのになぜバレているんでしょうね。
わりとほんとわからないです。
RedmineからsSMTPでメールを送信
Redmineの管理画面にアクセスしたところメール通知設定は所定のファイルを編集しないとできないようでした。
今回はsSMTPを利用してメール通知を行ってみます。
configuration.yml作成
Redmineのメール設定はconfiguration.ymlに記載します。
今回はsSMTPを利用するので、そのために設定を行います。
root@raspberrypi:~# cp /var/www/public/redmine/config/configuration.yml.example /var/www/public/redmine/config/configuration.yml root@raspberrypi:~# vi /var/www/public/redmine/config/configuration.yml # 以下を追加 email_delivery: delivery_method: :sendmail sendmail_settings: arguments: '-i' root@raspberrypi:~# systemctl restart apache2
configuration.ymlにはdefault, production, development、それぞれの設定を記載するためのセクションがあります。
今回はdefaultに設定していますが、開発時と実運用時で分けたい場合にはここに分けて記載するというわけですね。
ssmtpの設定ではdelivery_methodがsendmailになります。
通常ではこの部分がsmtpになります。
また私はRoRの開発経験が地味にないのでキャッシュなのかそういうものなのかはわかりませんが、apacheの再起動をしないと設定が反映されませんでした。
これにて設定は完了です。
あとがき
今回mailのfromがredmine側で設定しているものと違うものになっていました。
これはssmtpを利用する弊害なのか、設定が足りてないかは謎です。
argumentsの部分を無理やり設定したらできそうではありますが、今のところはメールが届けばそれでいいので気にしていません。
そもそもこのredmineは家庭内で閉じているのでそもそもメール通知要らないんですけどね。
期限切れチケットがあるときにメール送るような設定ができるかどうか調べようと思います。
そこに水道代とかの支払いを設定して、忘れないようにしたいところです。
RaspbianにRedmine3を導入
普段Zabbixを入れて運用しいてるRaspbianにRedmineも入れてみました。
ややスペック不足になるかもしれないなと感じながら、まぁ使えると言っていいレベルには動いています。
Rubyのインストール
Raspianではデフォルトでruby1.9あたりがインストールされていますが、せっかくなので最新のrubyを入れてみます。
元々スペックも低いのでできるだけ最新のrubyを入れたいですよね。
もはやおなじみですがrbenvを導入します。
またRubyのインストールにはそれなりに時間がかかります。CPUにはヒートシンクをつけていますが、それでも45℃くらいまで温度が上がっていたので室温は多少気にした方がいいかもしれません。
root@raspberrypi:~# aptitude install git libssl-dev libreadline-dev root@raspberrypi:~# git clone https://github.com/sstephenson/rbenv.git /usr/local/rbenv ... Checking connectivity... done. root@raspberrypi:~# git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build ... Checking connectivity... done. root@raspberrypi:~# vi /etc/profile.d/rbenv.sh root@raspberrypi:~# cat /etc/profile.d/rbenv.sh export RBENV_ROOT="/usr/local/rbenv" export PATH="${RBENV_ROOT}/bin:${PATH}" eval "$(rbenv init -)" # shell再読み込み root@raspberrypi:~# exec $SHELL -l root@raspberrypi:~# rbenv install --list root@raspberrypi:~# CONFIGURE_OPTS="--disable-install-doc" rbenv install 2.2.3 root@raspberrypi:~# rbenv versions * system (set by /usr/local/rbenv/version) 2.2.3 root@raspberrypi:~# rbenv global 2.2.3 root@raspberrypi:~# ruby -v ruby 2.2.3p173 (2015-08-18 revision 51636) [armv7l-linux-eabihf] root@raspberrypi:~# vi ~/.gemrc root@raspberrypi:~# cat ~/.gemrc gem: --no-rdoc --no-ri
rbenvのlistで確認したところ、今の最新が2.2.3だったのでそれを導入しました。
redmineが導入できないと困るので一応確認はしていますが、2.2系でも問題なく動くようです。
Redmineの導入
続いてRedmineを導入していきます。
apt-get系のパッケージにはredmineが入っているらしいので、apt-get install redmineでも導入できるみたいですが、なんか嫌なのでwgetで取得しています。
例によってbundle installには結構時間がかかります。
# 必要なパッケージインストール root@raspberrypi:~# aptitude install imagemagick libmagick++-dev libmysqld-dev root@raspberrypi:~# cd /var/www/public root@raspberrypi:/var/www/public# wget http://www.redmine.org/releases/redmine-3.1.1.tar.gz root@raspberrypi:/var/www/public# tar zxvf redmine-3.1.1.tar.gz root@raspberrypi:/var/www/public# cd redmine-3.1.1 # DB作成 root@raspberrypi:/var/www/public/redmine-3.1.1# mysql -u root -p mysql> CREATE DATABASE redmine CHARACTER SET utf8; mysql> CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'N)VMD8ykhrdT'; mysql> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost'; mysql> quit Bye # DB接続設定を記載 root@raspberrypi:/var/www/public/redmine-3.1.1#cp config/database.yml.example config/database.yml root@raspberrypi:/var/www/public/redmine-3.1.1# vi config/database.yml root@raspberrypi:/var/www/public/redmine-3.1.1# diff config/database.yml.example config/database.yml 9,10c9,10 < username: root < password: "" --- > username: hogehoge > password: "fugafuga" root@raspberrypi:/var/www/public/redmine-3.1.1# gem install bundler root@raspberrypi:/var/www/public/redmine-3.1.1# bundle install --without development test root@raspberrypi:/var/www/public/redmine-3.1.1# rake generate_secret_token /usr/local/rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/htmlentities-4.3.1/lib/htmlentities/mappings/expanded.rb:465: warning: duplicated key at line 466 ignored: "inodot" root@raspberrypi:/var/www/public/redmine# RAILS_ENV=production rake db:migrate
ここまでを行うことで、一旦Redmineのインストールまでは完了です。
Railsのインストールはbundle installの場所で行われているということですね。
Passengerインストール
次はApacheを介してRedmineへ接続するためにpassengerを導入します。
これもいくつか導入方法があるようですが、いつもやり方で行っていきたいと思います。
またこちらも同じく時間がかかります。
root@raspberrypi:/var/www/public/redmine-3.1.1# gem install passenger --no-rdoc --no-ri # passengerの導入に必要なパッケージインストール root@raspberrypi:/var/www/public/redmine-3.1.1# aptitude install install -y libcurl4-openssl-dev apache2-threaded-dev libapr1-dev libaprutil1-dev root@raspberrypi:/var/www/public/redmine-3.1.1# passenger-install-apache2-module Use <space> to select. If the menu doesn't display correctly, press '!' ⬢ Ruby ‣ ⬡ Python ⬡ Node.js ⬡ Meteor (省略) Phusion Passenger is a registered trademark of Hongli Lai & Ninh Bui.
途中で、「Please edit your Apache configuration file, and add these lines:」この出力とともに今後利用する設定ファイルへの記述内容が表示されるのでコピーしておきましょう。
今回はRuby以外を導入するつもりもないのでPythonのチェックを外しました。
Apache サイト設定追加
最後に公開するためにapacheに設定を追加します。
root@raspberrypi:~# chown -R www-data:www-data /var/www/public root@raspberrypi:~# ln -s /var/www/public/redmine-3.1.1 /var/www/public/redmine # passenger用設定を追加 root@raspberrypi:~# vi /etc/apache2/conf-available/passenger.conf root@raspberrypi:~# cat /etc/apache2/conf-available/passenger.conf LoadModule passenger_module /usr/local/rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/passenger-5.0.21/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/local/rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/passenger-5.0.21 PassengerDefaultRuby /usr/local/rbenv/versions/2.2.3/bin/ruby </IfModule> # redmine用バーチャルホスト設定追加 root@raspberrypi:~# cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/redmine.conf root@raspberrypi:~# vi /etc/apache2/sites-available/redmine.conf root@raspberrypi:~# cat /etc/apache2/sites-available/redmine.conf <VirtualHost *:80> ServerName yourdomain.com ServerAdmin root@localhost DocumentRoot /var/www/public/redmine/public ErrorLog ${APACHE_LOG_DIR}/redmine/redmine-error.log CustomLog ${APACHE_LOG_DIR}/redmine/redmine-access.log combined <Directory /var/www/public/redmine/public> Options FollowSymLinks AllowOverride None </Directory> </VirtualHost> # ログ出力フォルダ作成 root@raspberrypi:~# mkdir /var/log/apache2/redmine root@raspberrypi:~# chown -R www-data:www-data /var/log/apache2/redmine # 設定の有効化 root@raspberrypi:~# a2enconf passenger root@raspberrypi:~# a2ensite redmine root@raspberrypi:/var/www/public# vi /etc/hosts root@raspberrypi:/var/www/public# cat /etc/hosts | grep redmine 127.0.0.1 redmine root@raspberrypi:/var/www/public# systemctl restart apache2 root@raspberrypi:/var/www/public# systemctl status apache2 ● apache2.service - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2)
今回は /var/www/public 以下にRedmine用のフォルダを作成しています。
redmineに対してシンボリックリンクを張っているのは、今後redmineのバージョンをあげるときにリンクの貼り直しで済ませるためです。
あとはブラウザから接続を行い動作確認をしてみてください。
デフォルトのログインID/PWはadmin, adminでした。
あとがき
毎回思いますがRailsの導入には時間がかかりますね。
raspberry piでは普段と違ってCPU温度が気になります。自分はwatchコマンドを使って温度を眺めたりするのですが、そういう数字が常に変動するものをみているのが好きなのでずっと見てしまいます。
有意義に時間使うのであれば技術書でも読むとちょうどいいんでしょうね。
あともしかしてRaspbianというかDebianにはSElinuxはないのでしょうか?
簡単にしか調べてませんが、特に見当たらないですね。audit logもないし。
なんかこう、守られている感が減るので心細い。
Raspberry Pi2/ラズベリーパイ2にFedoraをインストール
Raspberry pi2にFedoraがインストールできるという情報を入手したので2台目を購入してインストールを行いました。
以前はpidoraというものがありましたが、こちらの更新は停止していてraspberry pi2には対応していません。
しかしその間にfedoraそのものがraspberry pi2にインストールできるようになっていたのです。
嬉しい限りです。
今回はraspberry pi2にfedoraをインストールして基本設定を行うところまでを行います。
インストール用イメージの作成
まずはディスクイメージを作成します。
今回はFedora Image Builder for Raspberry Pi 2というスクリプトを利用してイメージを作成します。
このスクリプトを実行するにはdebian系のOSが必要になります。
中で利用しているコマンドに依存しているようです。
手順はこちらのサイトが参考になります。
私はVirtual Boxにubuntuをインストールして実行しました。
いくつかパッケージが必要なので以下のコマンドで必要なパッケージのインストールを行ってください。
# apt-get xzdec git kpartx
Linuxに慣れている方には問題とならない箇所かもしれませんが、一点注意。
settings.confファイルにある容量の設定には気をつけてください。
利用しているmicro sdにもよりますが、32GBのmicro sdを利用する場合には概ね以下のように設定すると良いと思います。
BOOTSIZE=200 ROOTSIZE=29500 COMPRESS=0
私は嫌な予感がするなぁ〜と何も考えずに設定を行ったために、/以下の容量が3.6GBになり、追加でパーティションを切ることになりました。
パーティションサイズを指定するところで気づく方もいると思いますが、イメージの作成に結構容量を食います。
仮想マシン上にも領域を確保するとディスクがしんどいので共有フォルダを利用して、ホストマシン側の領域でスクリプトを実行することをお勧めします。
またもしCentOS等のRedhat系のOSからスクリプトを実行したい場合には以下のサイトを参考にしてください。
Linux Install Memo
中を開いて自分で修正するという、これこそインフラ屋さんという感じです。すごい。
Raspberry PIの起動
ディスクイメージを作成したら、SDへ書き込みraspberry piにセットします。
ここで、一つ注意点。
Micro SDへの書き込みはWindowsマシンから行うことをお勧めします。
私はMac Book Proから書き込みを行ったところraspberry piがディスクを上手く認識してくれずに起動しませんでした。
基本的には以下のページと同様の手順で起動までを行うと良いです。
Raspberry Pi/ラズベリーパイ にFedora(Pidora)をインストール
Fedora初期設定
マシンを起動したら初期設定を行っていきます。
最初に何点かインストール時の設定が聞かれますが、見てわかると思うので割愛します。
raspbianと違ってキーボードの認識も正しく行われるのでストレスが溜まらないのは個人的に評価高いです。
あとは通常のredhat系OSと同じように設定を行っていきます。
ネットワーク設定
最初にネットワーク設定を行い、固定IPを降りつつDNSにgoogleのDNSを指定します。
[root@localhost ~]# nmcli c add type ethernet ifname eth0 con-name eth0 [root@localhost ~]# nmcli connection mod eth0 ipv4.method manual ipv4.addresses 192.168.1.12/24 ipv4.gateway 192.168.11.1 ipv4.dns 8.8.8.8 [root@localhost ~]# nmcli c up eth0 [root@localhost ~]# systemctl restart NetworkManager [root@localhost ~]# systemctl restart network
nmcli cになっていたりconnectionになっていたりしますが、意味は同じです。
modと書いてある部分もmodifyでもmでも良いです。
最後のrestartは不要かもしれませんが、不安なので行っています。
ホスト名設定
ホスト名の設定を行います。
[root@localhost ~]# nmcli g hostname fedora-pi [root@localhost ~]# hostname fedora-pi
パッケージ更新とインストール
パッケージの更新とよく使うパッケージのインストールを行います。
[root@localhost ~]# vi /etc/dnf/dnf.conf [root@localhost ~]# cat /etc/dnf/dnf.conf [main] gpgcheck=1 installonly_limit=3 clean_requirements_on_remove=true fastestmirror=true [root@localhost ~]# dnf upgrade [root@localhost ~]# dnf install wget tar less
なんとFedora22からはyumではなくdnfというものを利用するようになっています。
これはkernelが4になったことによるものだそうです。
最初に設定しているのはfastestmirror=trueの追加です。
これによりfastestmirrorが有効になります。
dnf upgradeはyum updateと同じです。
fedora22のminimalではtarもlessも入っていなかったためインストールしています。
lessがないのには驚きました。
そのうちCentOSもdnfというものになるんでしょうかね。
ユーザ追加
管理用ユーザの追加を行います。
[root@localhost ~]# useradd raru [root@localhost ~]# passwd raru ユーザー raru のパスワードを変更。 新しいパスワード: 新しいパスワードを再入力してください: passwd: すべての認証トークンが正しく更新できました。 [root@localhost ~]# usermod -G wheel raru
wheelがredhat系の管理ユーザ用グループです。
raspbianではadmというグループでしたね。
root設定
wheelグループのものだけがroot化できるように設定します。
[root@localhost ~]# cp /etc/pam.d/su/etc/pam.d/su.org [root@localhost ~]# vi /etc/pam.d/su [root@localhost ~]# diff /etc/pam.d/su.org /etc/pam.d/su 6c6 < #auth required pam_wheel.so use_uid --- > auth required pam_wheel.so use_uid
ssh設定
鍵認証のみを許すように設定します。
[root@localhost ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org [root@localhost ~]# vi /etc/ssh/sshd_config [root@localhost ~]# diff /etc/ssh/sshd_config.org /etc/ssh/sshd_config 49a50 > PermitRootLogin no 79c80,81 < PasswordAuthentication yes --- > PasswordAuthentication no > PermitEmptyPasswords no [root@localhost ~]# systemctl restart sshd
このあたりはもう毎度おなじみですね。
ssh用鍵の作成
先ほど作成したユーザの鍵を作成します。
[root@localhost ~]# su - raru [raru@fedora-pi ~]$ ssh-keygen -t rsa Generating public/private rsa key pair. .... [raru@fedora-pi ~]$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys [raru@fedora-pi ~]$ chmod 600 ~/.ssh/authorized_keys [raru@fedora-pi ~]$ cat ~/.ssh/id_rsa
cronの設定
最新のredhat系OSではcronがanaconになっているので使い慣れているnoanacronにもどします。
[root@localhost ~]# dnf remove cronie-anacron [root@localhost ~]# dnf install cronie-noanacron
これで基本的な設定は完了です。
OverClockテスト
今回購入したraspberry piのケースにはファンが付いているので、せっかくだからover clockを試してみたいと思います。
これも先ほど参考にさせていただいたサイトのpi2 fedora22 でOCという記事を参考にしました。
まずはover clock前の計測です。
[root@localhost ~]# dnf install gcc perl-Time-HiRes [root@localhost ~]# cd /usr/local/src [root@localhost src]# wget https://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz [root@localhost src]# tar xvzf UnixBench5.1.3.tgz [root@localhost UnixBench]# cd UnixBench [root@localhost UnixBench]# ./Run
それぞれCPU1つと全部合わせてのスコアです。
System Benchmarks Index Score 115.4
System Benchmarks Index Score 285.
当たり前ですがコア数が4でも単純に4倍にはならないのですね。
続いてover clockの設定と計測です。
[root@localhost UnixBench]# dnf install cpufrequtils [root@localhost UnixBench]# cpupower frequency-info ... current policy: frequency should be within 600 MHz and 900 MHz. The governor "powersave" may decide which speed to use ... [root@localhost UnixBench]# cpupower frequency-set -g ondemand Setting cpu: 0 Setting cpu: 1 Setting cpu: 2 Setting cpu: 3 [root@localhost UnixBench]# cpupower frequency-info ... current policy: frequency should be within 600 MHz and 900 MHz. The governor "ondemand" may decide which speed to use ... [root@localhost UnixBench]# ./Run
System Benchmarks Index Score 159.3
System Benchmarks Index Score 397.7
性能は1.4倍くらいにあがっている感じですかね。
CPUの温度は最大で47度まで上昇しました。
通常時が33度くらいなので、そこそこ温まったようです。
ただ参考サイトの方の実験では64度まで上昇しているようでしたので、ファンの効果はなかなかたかそうですね。
ひとまずはこのover clockさせた設定のまま稼働させてみようと思います。
パーティションの拡張
こちらはディスクイメージ作成を正しく行った方には不要です。
私は正しく行わなかった方なので必要でした。
microsdが32GBあるのに、システム全体で4GBくらいしか容量を使用しておらず残りが無駄になってしまっていたので、パーティションを追加していきます。
ルートのパーティションを拡張することも考えたのですが、インストールCDをブートしてどうこう書いてあったので、raspberry piのブートCDってなんだよ。。。ってことになり諦めました。
# ディスクのデバイス名を確認 [root@localhost ~]# fdisk -l ... Device Boot Start End Sectors Size Id Type /dev/mmcblk0p1 2048 411647 409600 200M e W95 FAT16 (LBA) /dev/mmcblk0p2 411648 7784447 7372800 3.5G 83 Linux [root@localhost ~]# fdisk /dev/mmcblk0 fdisk (util-linux 2.26.2) へようこそ。 ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。 書き込みコマンドを使用する際は、注意して実行してください。 コマンド (m でヘルプ): n パーティションタイプ p 基本パーティション (2 プライマリ, 0 拡張, 2 空き) e 拡張領域 (論理パーティションが入ります) 選択 (既定値 p): p パーティション番号 (3,4, 既定値 3): 3 最初のセクタ (7784448-62333951, 既定値 7784448): 最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (7784448-62333951, 既定値 62333951): +26624M 新しいパーティション 3 をタイプ Linux、サイズ 26 GiB で作成しました。 コマンド (m でヘルプ): p ディスク /dev/mmcblk0: 29.7 GiB, 31914983424 バイト, 62333952 セクタ 単位: セクタ (1 * 512 = 512 バイト) セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスクラベルのタイプ: dos ディスク識別子: 0x000611c3 デバイス 起動 開始位置 最後から セクタ サイズ Id タイプ /dev/mmcblk0p1 2048 411647 409600 200M e W95 FAT16 (LBA) /dev/mmcblk0p2 411648 7784447 7372800 3.5G 83 Linux /dev/mmcblk0p3 7784448 62310399 54525952 26G 83 Linux コマンド (m でヘルプ): w パーティション情報が変更されました。 ioctl() を呼び出してパーティション情報を再読み込みします。 パーティション情報の再読み込みに失敗しました。: デバイスもしくはリソースがビジー状態です カーネルは古い情報を使用しています。新しい情報を利用するには、システムを再起動するか、もしくは partprobe(8) または kpartx(8) を実行してください。 [root@localhost ~]# reboot # パーティションが増えていることを確認 [root@fedora-pi ~]# fdisk -l /dev/mmcblk0 Disk /dev/mmcblk0: 29.7 GiB, 31914983424 bytes, 62333952 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x000611c3 Device Boot Start End Sectors Size Id Type /dev/mmcblk0p1 2048 411647 409600 200M e W95 FAT16 (LBA) /dev/mmcblk0p2 411648 7784447 7372800 3.5G 83 Linux /dev/mmcblk0p3 7784448 62310399 54525952 26G 83 Linux # 作成したパーティションext4としてファイルシステムを作成 [root@fedora-pi ~]# /sbin/mkfs.ext4 /dev/mmcblk0p3 mke2fs 1.42.12 (29-Aug-2014) Discarding device blocks: done Creating filesystem with 6815744 4k blocks and 1703936 inodes Filesystem UUID: 07b79748-2a1b-4c02-8c8a-ba999c85cfa6 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done # 作成したパーティションをマウント [root@fedora-pi ~]# mkdir /data [root@fedora-pi ~]# vi /etc/fstab [root@fedora-pi ~]# cat /etc/fstab UUID=7c321d6b-f2b0-4783-9576-e3dfe657f9b3 / ext4 defaults,noatime 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 0 /dev/mmcblk0p3 /data ext4 defaults,noatime 0 0 [root@fedora-pi ~]# mount -a
ちょっと長くなったのでコードにコメントを追加しました。
まずはデバイス名を取得して、パーティションを作成しています。
このときに +****Mという形でサイズを直接指定していますが、ここは空欄のままの方が良さそうです。
そうすると自動的に残りの容量全てを利用してパーティションを作成してくれます。
私はセレクタの容量への変換の仕方がよくわからず62333951というセレクタが、どれくらいの容量の拡張なのかわからなかったので指定しました。
あとはリブートしてから、先ほど作成したパーティションを初期化してマウントです。
ここでmkfsを実行し忘れるとエラーが発生してマウントできないので注意です。
今回の購入物
[amazonjs asin="B00T356SFO" locale="JP" title="Raspberry Pi 2 Model B (1)"]
[amazonjs asin="B011BWXGN8" locale="JP" title="Eleduino Raspberry Pi 2 Model B アクリル ケース ブラック Black +MINI ファン パッケージ"]
[amazonjs asin="B00YM3OOKS" locale="JP" title="Raspberry Pi(ラズベリーパイ)用 1ポート USB 電源アダプター"]
[amazonjs asin="B00CES44EO" locale="JP" title="【Amazon.co.jp限定】Transcend microSDHCカード 32GB Class10 UHS-I対応 (無期限保証) Newニンテンドー3DS 動作確認済み TS32GUSDU1E (FFP)"]
今回はこの4つを購入して組み立てました。
アクリルケースは細くなっている部分が折れやすいので気をつけて下さい。
前回購入したものと違ってファンが付いていたり、固定用のゴム製の足がシールで同梱されていました。
ファンの性能はUnix Benchで試した通り、15度くらいは温度を下げてくれるみたいです。
また気になる音の方は非常に静音で、耳を近づけても音が聞こえないレベルです。
個人的には非常に満足しています。
ちなみ完成するとこんな感じ。
あとがき
Fedoraは普段使っていませんが、redhat系のOSなのでRaspbianと違って設定が非常にスムーズに進みます。
今回パーティション設定をミスしていしまったので、今後拡張した領域にいろいろとデータを保存していくことになりそうなのでSELinuxの設定が大変になりそうだなぁと今から少し憂鬱。
ですが、ついにRaspberry piでもfedoraが利用できるということで非常にサーバ用途として使いやすくなりました。
CentOSの対応が早く来てくれたらいいのになぁ、と思っております。
なんだかんだでfedoraは安定長期運用が用途ではないでしょうからねぇ。
参考サイト一覧
今回参考にさせていただいたサイト。
JUNKHACK
Linux Install Memo
両サイトとも非常に経験と知識を感じる内容でした。
個人でのProxyサーバ利用用途
Proxyサーバを建てたいということで、利用用途を考えていました。
まずサイト高速化であったり冗長化、移行の易化のためにリバースプロキシを建てるのが浮かんだのですがあくまで普通のProxyサーバが建てたかったの一旦思考から除外しました。
今回は一旦情報の整理を行います。
Proxyサーバを経由する利点
まずはなぜProxyを利用するのかという点です。
具体的に自分が使っていないので、あくまで受け売りになりますが大体以下。
・通信元の匿名化
・通信のフィルタリング
・キャッシュによる通信量軽減と見た目上の高速化
・通信障害の回避
他はサイトによりまちまちでしたが、個人的にはレジューム機能があるのかなと思いました。
ただおそらくこれは利用するミドルウェアによるのでProxyそのものの機能ではないです。
個人で使うときのメリットってほぼほぼ匿名化の部分なんじゃないかと感じます。
では非常に簡単にですが、それぞれ私の理解を記載したいと思います。
通信元の匿名化
通常の通信は [クライアント] -> [サーバ] という形で行われるため、サーバはこの後クライアントへレスポンスを返すために相手の「位置」を知っています。これがIPアドレスになるわけです。
しかしProxyを通すと通信は以下のようになります。
[クライアント] -> [Proxy] -> [サーバ]
こうするとサーバにとってのクライアントはProxyになりますので、サーバからはクライアントマシンのIPは必要がなくなりますし、やりとりもされません。
つまりクライアントの位置を知られずに済むということです。
IPアドレスだけではあまり情報を知られることはありませんが、場合によっては住んでいる都道府県や市区町村程度までなら検索することができるのでProxyを通すことでこれを隠すことがでますね。
よくネットを利用した犯罪が行われるときに串を通す、といいますが串とはproxyサーバのことです。
余談ですが、私も過去高校生エンジニアの子とskypeでチャットしたことがありますが、その子が作成していたちょっとした攻撃ツールで私の家宛にパケット送られまくって回線が潰されたことがあります。
IPが漏れてしまうとそういう気紛れな嫌がらせをされることがあるので、それを防ぐことができますね。
末恐ろしい子供です。
通信のフィルタリング
これはおそらく個人で使うことはないでしょう。
ただし個人でもお子さんがいる場合には、通信をproxy経由にすることでお子さんがエロサイトを閲覧することを防ぐことができるかもしれません。
会社で運用する場合には業務に利用する必要のないサイトを制限するなどが可能です。
キャッシュ
これは一度通信した内容をproxyサーバにキャッシュさせることで通信を高速化するというものです。
個人的には回線が高速になり、マシンパワーも十分ある今の時代にそこまでしてキャッシュする意味があるのかと感じます。
またキャッシュ期間をどうするかによりますが、接続先サイトが更新されていたのにキャッシュされてしまっていると新しいコンテンツが閲覧できないのが不便です。
キャッシュ期間が長いとその可能性が高まりますし、短いのでは意味がない、さらにブラウザ自体にもキャッシュがあるのでもうそれ必要なんだっけ? という自分への問いかけに答えられなかったです。
しかし会社などで利用する場合には、全接続のうちいくつかの上位サイトで通信の大きな割合を占めてしまうこともあるらしいので効果が見込めそうだとも思いました。
少し別になりますが、先ほど少し触れたレジューム機能というものはもしかしたら少し便利かもしれません。
これは一度切断されて途中で終わってしまったダウンロードなどを続きから再開したりできる機能みたいです。
これはsquidというミドルウェアには用意されています。squidはかなりメジャーなミドルウェアです。
ただこれも普段はダウンロードをブラウザからしか行わないので、ブラウザのアドオンや元々の機能で十分な気がしています。
通信障害の回避
普段の通信経路が死んでしまっているときに、proxy経由の経路を利用することで通信が可能になる可能性があるということですね。
普段ネットを利用していて通信障害に遭遇した感じることは滅多にないので、あまりこれをメインに導入しようとは思いません。
導入を踏みとどまっている理由
導入を検討していたのに踏みとどまっているのは、おそらく「一般人」共通の問題ですが回線が固定IPじゃないからです。
固定IPがないということはIP制限をかけるのが難しいということになります。
固定IPにするにはプロバイダにお金を払って固定で振ってもらわないといけなかったりするので、高いですし面倒です。
squid(proxyのミドルウェア)では、proxyを利用できる接続をIPなどで制限できます。
私はどうしてもそれが使いたい。
IP以外の制限方法
とはいえないものはないので、他の方法を考えるしかありません。
他には以下がありそうでした。
・認証による制限
・ドメインによる制限
認証による制限はよくありますね。
IP/PWを正しく入れた人にしか使えないというものです。
ただパソコンによる気合いと根性で突破可能なのであまり気が進みません。
ドメインによる認証も固定IPがないとやりづらいのですが、これはDDNSを利用することでなんとかなるのではと考えています。
まだ試していないので不明ですが、そのうち試してみようと思います。
しかしそこまでしてIPを隠したいのかという話もあって悩んでいます。
結局他のサーバも私名義で借りているため、匿名化したところで外からは私名義のサーバが通信しているだけです。
IPが流出しないので意味がないわけではないのですが、仮に自分の家の回線が攻撃されるのを防いでも我がproxyサーバのIPで攻撃されてもなぁという。
whois自体は代行サービスで私の情報は出ていないので、まぁ多少意味あるし勉強が目的でし建てるのもありでしょうかね。
屋内に建てたくない理由
通信の匿名化ができなければ、個人的に感じるメリットはほぼほぼなくなります。
さらに屋内にはクライアントマシン以外にはraspberry pi2と、うるさすぎて停止しているデスクトップ型の鼻毛鯖しかありません。
あまり余計なものを入れたくないのと、うるさいから起動したくないのでメリットに対するデメリットが大きいです。
総括
一般ご家庭のproxyサーバはあまり旨味を感じない。
あとはもうほんと趣味と勉強がてらDDNSをお試しですね。
あとがき
私としてはここに時間をかけるのであれば、rasberry pi2をもう一個買ってどこぞで見つけたfedoraインストール方法を試して家の中で小さなネットワーク構築をしつつDNSを建てることがしたいですね。
DDNSは正直全くやりたいとは思っていないのですが、やってみましょうかね。
またproxyを調べていたら、最近外に充実しているフリーwifiを安全に利用するのにproxyサーバが便利と書いてあったような記憶がありましたが、未だに理由がわかりません。
フリーwifiに繋いだ時点で、そこから先の経路とかどうでもいい気がするのですが……。
今回お世話になったサイト
今回はいろいろなページをみましたが、以下の2つのサイトが非常にわかりやすく内容も充実していると思いました。
Cyber Syndrome | proxyサーバ入門
素晴らしい情報提供を行ってくださっているサイト運営者の方に日々感謝です。
ZabbixからsSMTPを利用してエラー通知メール送信
今回はsSMTPを利用してRaspbian上のZabbix Serverからアラートメールの送信を行います。
また、合わせてサーバ監視の設定も行いたいと思います。
ただしzabbix agentは利用していません。
今のところはhttp, httpsの監視だけで充分だと考えています。
監視対象ホストの追加
まずは監視対象ホストを追加します。
ホスト設定とメール設定の順番は前後しても問題ないのであまり気になさらず。
まずはzabbixのウェブ管理画面へアクセスして[Configuration] -> [Hosts]と選択してください。
その後create hostを選択して、ホストを追加していきます。
今回はこのブログサーバを対象に監視しているので、ホストにはドメインを指定。
表示用の名前も同じで充分なので同様に。
グループはデフォルトで用意されていたlinux serverを指定しました。
新しく作成しても、他を指定しても構いません。自分が管理するためのグルーピングですので監視動作自体に影響はないはずです。
またzabbix-gentを利用しなくても Agent interfaces設定は必要になってしまうのでDNSにしつつそれっぽく指定しています。指定しているだけで実際には利用されていません。
ここまで設定ができたら、テンプレートタブを選択して監視する内容を設定します。
Link new templateのフォーム右にあるselectを押すと、テンプレート一覧が開くのでそこからhttp, httpsを選択して、Addボタンを押した後の画面です。
あとはSaveを選択して保存すれば完了です。
これで監視対象のホスト設定が追加されました。
sSMTPアラートメール設定
続いてメール送信の設定を行います。
Zabbixのメール送信では送信用のsmtpを設定するものがあります。
しかしsSMTPでは通信の受付を行う用のsmtpを自分自身に持っていないため、この設定が使えません。
仕方がないので他に用意されているスクリプトの設定を行い、そのスクリプトからsSMTPを利用したいと思います。
まずは[Administration] -> [Media Type] -> Create media typeを選択と画面を遷移していきます。
そうすると以下のような画面が表示されるのでタイプがscriptとなる、メディアタイプを追加します。
次はメールの宛先の設定を行います。
[Administration] -> [Users]と画面を移動して、以下の画面にある Admin (Zabbix Administrator)を選択していきます。
そうすると画面が遷移しますので、その画面の中からメディアタブを選択して[追加]リンクを選択して設定を行います。
この設定ではhogehoge@gmail.com宛に、24時間、毎日時間関係なしでメールを送信するようになります。
曜日や時間を設定したい方は時間の設定を編集してください。
個人的には24時間365日しないのであれば、なんのための監視なんだと思いますが。
以上でzabbix上の設定は完了です。
shellスクリプト作成
先ほど設定したシェルを作成します。
また、合わせてもろもろ設定の確認や権限設定をしましょう。
root@raspberrypi:~# cat /etc/zabbix/zabbix_server.conf | grep AlertScriptsPath ### Option: AlertScriptsPath # AlertScriptsPath=${datadir}/zabbix/alertscripts # 設定したシェル配置用directory AlertScriptsPath=/etc/zabbix/alert.d/ root@raspberrypi:~# vi /etc/zabbix/alert.d/zabbix-alert-mail.sh root@raspberrypi:~# chown zabbix:zabbix /etc/zabbix/alert.d/zabbix-alert-mail.sh root@raspberrypi:~# chmod 744 /etc/zabbix/alert.d/zabbix-alert-mail.sh root@raspberrypi:~# ls -l /etc/zabbix/alert.d/zabbix-alert-mail.sh -rwxr--r-- 1 zabbix zabbix 240 11月 1 00:57 /etc/zabbix/alert.d/zabbix-alert-mail.sh root@raspberrypi:~# cat /etc/zabbix/alert.d/zabbix-alert-mail.sh #!/bin/sh export MAIL_TO="$1" export SUBJECT="$2" export CONTENT="$3" echo "$CONTENT" > /tmp/mymailinput_$$ mail -E -s "$SUBJECT" $MAIL_TO < /tmp/mymailinput_$$ rm /tmp/mymailinput_$$
まずはシェルを配置する場所を確認します。
次にシェルを作成して、権限の設定です。
シェルの中身自体は、先ほど設定していた値がzabbixから渡されるのでそれを利用してmailコマンドを叩いているだけです。
mailコマンドを叩けばsSMTPが利用されるので無事メールが送信されるということですね。
また動作検証を行うときにはhttp通信を落とすためfirewallを閉じるかアプリケーションサーバのデーモンを停止するなどがあります。
私はそもそも起動させてないぜんぜん関係ないサービスを監視対象にして動作検証を行いました。
そもそもhttp, httpsを止めたくはありませんので。
以上で基本的な監視設定は完了かと思います。
あとがき
基本的な設定は完了したとか言いつつ、アラート通知後何分間状態に変化がないと再通知が来るのか気になっています。
そもそもzabbixがどんなことができて、どういう設定があるのか理解していないのであとは随時使いながら覚えていこうと思います。
参考サイト
今回ウェブの管理コンソールからの設定は以下の方のものが非常に参考になりました。
Zabbixを使ってエージェント無しで単純な Webサイト監視だけを行う最短の方法
Raspbianでメール送信 ssmtp編
Raspbianで監視などをおこなっているとメールが送信したくなります。
とりあえず何かと管理用にメールが欲しくなります。
ただドメインとも紐付いていない、固定IPでもないメールサーバを立てるのは思いの外面倒です。
postfixを入れて頑張るのも良いですが、なんだかんだでやっぱ面倒なのです。
今回は私も始めて利用するssmtpというものでメールを送信してみましょう。
送信と言いつつも、やっていることはroot宛のメール転送です。
ssmtpインストール
まずはインストールです。
おなじみのaptitude
root@raspberrypi:~# aptitude install heirloom-mailx ssmtp
raspbianはそもそもmailコマンドがないのでそちらも合わせてインストールします。
ssmtpを設定
インストールが終わったら、早速設定です。
驚くほど簡単で驚きました。
root@raspberrypi:~# cp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.org root@raspberrypi:~# vi /etc/ssmtp/ssmtp.conf root@raspberrypi:~# cat /etc/ssmtp/ssmtp.conf # # Config file for sSMTP sendmail # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. root=yourmail@yourdomain.com # The place where the mail goes. The actual machine name is required no # MX records are consulted. Commonly mailhosts are named mail.domain.com mailhub=smtp.gmail.com:587 # Where will the mail seem to come from? #rewriteDomain= # The full hostname # hostnameは特になんでも問題なし。 hostname=rasp2raru.com # Are users allowed to set their own From: address? # YES - Allow the user to specify their own From: address # NO - Use the system generated From: address #FromLineOverride=YES AuthUser=hogehoge@gmail.com AuthPass=******** UseSTARTTLS=YES
いやぁ、こんだけで終わるんですね。シンプルでいいです。
結局転送しているだけみたいですね。
postfixでrelayhost設定しているのと同じなのでしょう。
特にこのサーバは受信の予定もないので、これで十分といえば十分です。
<2015/11/1 追記>
勘違いしていたのですが、転送しているのはrootであってメールの送信自体は宛先に関わらず外部へ送る場合にはsSMTPを通してgmailから行われています。
root宛のlocalメールだけをgmailへ依頼しているわけではありません。
動作検証
設定が終わったら動作検証です。
root@raspberrypi:~# mail root Subject: test mail this is test. . EOT
mailコマンドでroot宛にメールを送ってみましょう。
これが転送されて、あなたのメールアドレス宛に届きます。
<2015/11/1 追記>
自分のメールアドレスを直接指定した場合にもメールが送信されます。
あとがき
大勢で使うサーバではあまり利用しないほうが良いような気がしますが、個人でライトに使う分には充分だと感じました。
というか、メール系はちゃんとドメインを取得しないと逆にわかりづらいです。
そういう意味でも他のサーバよりも敷居が高いですよね。