とーますメモ

Ruby on Rails / Goなどの学習メモ

【Rails】はてなブログをAtomAPIを使用して作成してみた

Rubyで記事をAtomAPIを使用して更新する方法としては、「atomutil」というgemを使用するのが定番のようだが
いろんな記事を見てみると、新しいRubyのバージョンだと、文字エンコーディングのエラーが発生するため
「atomutil」をforkした「ruby-atomutil」というgemを使用している記事が多い。

[参考]
はてなブログのAPIを使って、記事を投稿するRubyサンプル · GitHub
Ruby | はてなダイアリーAtomPubをRubyから利用してブログ記事を投稿する - Tbpgr Blog

しかし、2018年9月4日で最新版(0.1.5)が更新されて
この文字系のエラーが解消されているので以下のように書けば、記事を作成できる。

インストール

gem 'atomutil', '~> 0.1.5'

コード

def initialize
  @user_id         = ENV['HATENA_USER_ID']
  @password        = ENV['HATENA_API_KEY']
  @create_page_url = "#{ENV['HATENA_BLOG_ROOT_END_POINT']}/entry"
end

def create(title, content)
  auth   = Atompub::Auth::Wsse.new(username: @user_id, password: @password)
  client = Atompub::Client.new(auth: auth)

  entry = Atom::Entry.new({
    title:   title,
    content: content
  })

  client.create_entry(@create_page_url, entry)
end

...
...

title   = 'テストタイトル'
content = <<~'EOS'
  *表題
  - リスト1
  - リスト2
EOS

create(title content)

[他参考]
Rubyのヒアドキュメントの書き方いろいろ - Hack Your Design!
Ruby:はてなブログAPIを使って記事の一覧をJSON形式で取得する - Madogiwa Blog

【Ruby】はてなブログをAtomAPIを使用して作成してみた

Rubyで記事をAtomを使用して更新する方法としては、「atomutil」というgemを使用するのが定番のようだが
いろんな記事を見てみると、新しいRubyのバージョンだと、文字エンコーディングのエラーが発生するため
「atomutil」をforkした「ruby-atomutil」というgemを使用している記事が多い。

[参考]
はてなブログのAPIを使って、記事を投稿するRubyサンプル · GitHub
Ruby | はてなダイアリーAtomPubをRubyから利用してブログ記事を投稿する - Tbpgr Blog

しかし、2018年9月4日で最新版(0.1.5)が更新されて
この文字系のエラーが解消されているので以下のように書けば、記事を作成できる。

インストール

gem 'atomutil', '~> 0.1.5'

コード

def initialize
  @user_id         = ENV['HATENA_USER_ID']
  @password        = ENV['HATENA_API_KEY']
  @create_page_url = "#{ENV['HATENA_BLOG_ROOT_END_POINT']}/entry"
end

def create(title, content)
  auth   = Atompub::Auth::Wsse.new(username: @user_id, password: @password)
  client = Atompub::Client.new(auth: auth)

  entry = Atom::Entry.new({
    title:   title,
    content: content
  })

  client.create_entry(@create_page_url, entry)
end

...
...

title   = 'テストタイトル'
content = <<~'EOS'
  *表題
  - リスト1
  - リスト2
EOS

create(title content)

[他参考]
Rubyのヒアドキュメントの書き方いろいろ - Hack Your Design!
Ruby:はてなブログAPIを使って記事の一覧をJSON形式で取得する - Madogiwa Blog

【Lynis】Ubuntu16.04にセキュリティ監査ツール「Lynis」を入れてみた

インストール

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C80E383C3DE9F082E01391A0366C67DE91CA5D5F
apt install apt-transport-https
echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/99disable-translations
echo "deb https://packages.cisofy.com/community/lynis/deb/ stable main" > /etc/apt/sources.list.d/cisofy-lynis.list
apt update
apt remove lynis
apt install lynis

以下のサイト様より引用
linuxのセキュリティツール - fr33f0r4ll

使い方

$ lynis audit system

メールレポート送信

デフォルトでは、メールレポート送信機能はないので、
以下のスクリプトを作成。

Lynisはスキャンが終わると、そのレポートを「/var/log/lynis-report.dat」に作成する。
大事なのは、「Warning」と「Suggestion」箇所なので、
その部分を抽出し、各行数を追記し、レポートをメールを送信する。

一日に1回のスキャンで自分は良いので、cron.dailyにスクリプトを配置している。
結構汚いコードなので、あしからず。

/etc/cron.daily/lynis_daily

#!/bin/bash

LOGFILE="{{ lynis_log_directory }}/lynis-$(date +'%Y-%m-%d_%H:%M:%S').log";

DATA="{{ lynis_log_directory }}/lynis-data-$(date +'%Y-%m-%d_%H:%M:%S').txt";
WARNING_DATA="{{ lynis_log_directory }}/lynis-warning-$(date +'%Y-%m-%d_%H:%M:%S').txt";
SUGGESTION_DATA="{{ lynis_log_directory }}/lynis-suggestion-$(date +'%Y-%m-%d_%H:%M:%S').txt";
TMP_DATA="{{ lynis_log_directory }}/lynis-tmp-$(date +'%Y-%m-%d_%H:%M:%S').txt";

EMAIL_FROM="{{ lynis_mail_from }}";
EMAIL_TO="{{ lynis_scan_email }}";

SEPARATOR="--------------------------------------------------------------------------------"

echo "Starting a lynis scan"
lynis audit system

if [ -f /var/log/lynis-report.dat ]; then
cat /var/log/lynis-report.dat | grep 'warning\[\]' | sed -e 's/^warning\[\]\=/warning: /g' > ${WARNING_DATA}
cat /var/log/lynis-report.dat | grep 'suggestion\[\]' | sed -e 's/^suggestion\[\]\=/suggestion: /g' > ${SUGGESTION_DATA}
mv /var/log/lynis-report.dat ${DATA}

# [START] append header
WARNING_HEADER="Warnings ($(cat "$WARNING_DATA" | wc -l)):\n$SEPARATOR"
SUGGESTION_HEADER="\n\n\nSuggestions ($(cat "$SUGGESTION_DATA" | wc -l)):\n$SEPARATOR"

sed "1s/^/$WARNING_HEADER\n/" ${WARNING_DATA} > ${TMP_DATA}
cat "$TMP_DATA" > ${WARNING_DATA}

sed "1s/^/$SUGGESTION_HEADER\n/" ${SUGGESTION_DATA} > ${TMP_DATA}
cat "$TMP_DATA" > ${SUGGESTION_DATA}

rm "$TMP_DATA"
# [END] append header

cat "$WARNING_DATA" "$SUGGESTION_DATA" | mail -s "Lynis Report" -r "$EMAIL_FROM" "$EMAIL_TO";
fi

exit 0

【ClamAV】Ubuntu16.04にClam AntiVirusを設定してみた

ネット上で調べてみると、色んなやり方があり困惑。。。

ClamAVを使用する際に、よく紹介されているパッケージ構成は
以下の3つのパッケージをインストールするやり方。

・clamav
・clamav-daemon(デーモンとして動作し、高速がスキャン可能)
・clamav-freahclam(ウイルス定義DBの更新。clamavをインストールすると自動で入ってるっぽい。)

上記の構成で色々と設定を試みてみたが、
どうしてもclamav-daemonが
よくわからないエラーで、動作しなかったため、clamav-daemonを使用する方法は諦めた。

自分の場合、頻繁にスキャンする用途ではなく、
1時間に1回の頻度でスキャンし、レポートメールを受け取れれば
それで良いので以下の構成で環境を構築した。

・clamavのみインストール(freshclamは一緒にインストールされる)
・スキャンを行いレポートメールを送信するスクリプトを作成する

※前提として、メールは環境は別途構築済み(Postfix + mailutils)

1)clamavのみインストール

$ apt install -y clamav

2)スキャンレポートメールスクリプトの作成

$ vim /etc/cron.hourly/clamscan_hourly

スクリプト内の以下の変数は環境に応じて設定要
・clamav_mail_from
・clamav_scan_email
・clamav_virus_isolation_directory

以下のスクリプト例では、「/var」のみを再帰的にスキャンしている。
またウイルスが発見された場合、削除するのではなく
clamav_virus_isolation_directory内に隔離している。

スキャン対象ディレクトリを変更する場合や、発見後に削除したい場合など
必要に応じて変更してほしい。

#!/bin/bash

LOGFILE="/var/log/clamav/clamav-$(date +'%Y-%m-%d_%H:%M:%S').log";
EMAIL_MSG="Please see the log file attached.";
EMAIL_FROM="{{ clamav_mail_from }}";
EMAIL_TO="{{ clamav_scan_email }}";
# DIRTOSCAN="/var/www /var/vmail";
DIRTOSCAN="/var";

for S in ${DIRTOSCAN}; do
 DIRSIZE=$(du -sh "$S" 2>/dev/null | cut -f1);

 echo "Starting a daily scan of "$S" directory.
 Amount of data to be scanned is "$DIRSIZE".";

 # clamscan -ri "$S" >> "$LOGFILE";
 clamscan -ri "$S" --move={{ clamav_virus_isolation_directory }} --exclude-dir=^{{ clamav_virus_isolation_directory }} >> "$LOGFILE";

 # get the value of "Infected lines"
 MALWARE=$(tail "$LOGFILE"|grep Infected|cut -d" " -f3);

 # if the value is not equal to zero, send an email
 if [ "$MALWARE" -ne "0" ];then
 # 
 # echo "$EMAIL_MSG" | mail -A "$LOGFILE" -s "Malware Found" -r "$EMAIL_FROM" "$EMAIL_TO";
 cat "$LOGFILE" | mail -s "Malware Found" -r "$EMAIL_FROM" "$EMAIL_TO";
 fi
done

exit 0


あとは実行権限を付与するだけ。

$ chmod 0755 /etc/cron.hourly/clamscan_hourly

これで毎時間スキャンされ、問題があった場合にメールが届く。

テスト

無害のテスト用のウイルスを以下のようにダウンロード可能。
※上記スクリプトでは、「/var」内がスキャン対象なので、「/var」以下にダウンロード

$ wget http://www.eicar.org/download/eicar_com.zip -O /var/eicar_com.zip

すぐにテストしたければ、直接スクリプトを実行すればよい。

$ ./etc/cron.hourly/clamscan_hourly

[参考]
Configure Clamav for daily system scans and email notification on Debian

ClamAVによる定期ウイルススキャンの設定 | 稲葉サーバーデザイン
Automate ClamAV to Perform Daily System Scan and Send Email Notifications on Linux | Lisenet.com :: Linux | Security | Networking
【Ubuntu 18.04/16.04 LTS Server】ClamAVで定期的にウイルスチェックし、メール通知する | The modern stone age.

【Postfix】迷惑メールになってしまう?何が悪いの?そんなときに使えるサイト

Gmailで迷惑メール判定されてしまい、
どうやっても、何が悪いのか、どう設定したら良いのか
わからなくなったとき、知り合いから教えてもらったサイト。

Newsletters spam test by mail-tester.com
f:id:Thoames1212:20180823004650p:plain

TOPページに表示されている、一時的に払い出されたメールアドレスに
テストしたいSMTPサーバ(Postfix)からメールを送信すると
スパム判定スコアを表示してくれ、どの設定が悪いのか10点満点で判定してくれる。

f:id:Thoames1212:20180823010034p:plain

原因がわかったら、あとは10点満点になるまで対応すれば良い。


また以下のサイトもいい感じで使えそう。
MX Lookup Tool - Check your DNS MX Records online - MxToolbox

ドメインからいろんな情報を調べることができる。

【DigitalOcean】ホスト名逆引き登録の設定

以下のサイトを参考にそのままできた。
[ホスティング] DNS逆引きを可能にする (迷惑メール判定回避) – 端くれプログラマの備忘録
How do I set up reverse DNS for my IP? | DigitalOcean

DigitalOceanでは、Droplet作成時にホスト名を設定可能。
後で変更する場合は、Dropletを一覧画面から選択後、Droplet名をクリックすると編集できる。
すごい簡単にできる。

※「Add a domain」から設定しないといけないのかと思ったが不要。

また、以下のコマンドでも逆引き登録の結果を確認できる。

$ nslookup IPアドレス

または

$ dig -x IPアドレス

[参考]
DNS逆引きの基本について - 基本へ帰ろう
サーバーのメールが迷惑メールにならないようにする設定 - はじめてのさくらVPS

【Postfix】Ubuntu16.04でDKIM設定(送信元ドメイン認証)を行ってみた

自分用メモ。

DKIMとは

以下、Postfix + OpenDKIMで送信元ドメイン認証を実装するメモより引用

処理の流れ

1. 送信者が送信メールのヘッダ+本文でハッシュ作成
2. ハッシュ + 秘密鍵で電子署名作成
3. 電子署名をDKIM-Signatureヘッダとして添付
4. メール送信
5. 受信者が受信メールのヘッダ+本文でハッシュ作成
6. DKIM-Signatureヘッダの電子署名から公開鍵でハッシュを復号
7. 受信者が作成したハッシュと比較する

インストールは以下を参考にすれば簡単にできた。
How To Install and Configure DKIM with Postfix on Debian Wheezy | DigitalOcean

注意したいのはポイントは以下。
thoames.hatenadiary.jp