かんたんメール送信(添付ファイル対応) Perl用ライブラリ

―――――――――――――――――――――――――――――――――――――
【ソフト名】かんたんメール送信(添付ファイル対応)
【著作権者】ORBIT
【制作日】2011年09月17日
【種 別】Perlモジュール
【連絡先】https://www.orsx.net/blog/
【配布元】https://www.orsx.net/blog/
【圧縮形式】zip
【動作環境】Sendmailコマンドの使えるUNIX系OS
【開発環境】Perl5.8(標準モジュール Encode MIME::Base64 使用)
―――――――――――――――――――――――――――――――――――――
≪著作権および免責事項≫

 本ソフトはフリーソフトです。自由にご使用ください。なお,著作権は作者
であるORBITが保有しています。

 このソフトウェアを使用したことによって生じたすべての障害・損害・不具
合等に関しては、私と私の関係者および私の所属するいかなる団体・組織とも、
一切の責任を負いません。各自の責任においてご使用ください。

・はじめに
 メール送信を行うとき毎回文字操作を行うのが面倒だったためそれらを全て行う
モジュールを作成しました。
 わずか数行で添付ファイル付きのメールを送信できるため簡単なメールフォーム
の作成等に強力な力を発揮すると思います。

・ファイル構成
readme.txt ← 当ファイル
Sendmail.pm ← 本体

・インストール方法
対象のプロブラムと同じディレクトリにおいてください。

・使い方
Sendmail.pm最下部に簡単な利用法を記載してるのでそちらを御覧ください。

・履歴
2011年09月17日 Ver 1.0.0 公開

簡単な使用例

#!/usr/bin/perl
# 当モジュールを呼び出し
use Sendmail;

# オブジェクトの生成
my $send_obj = Sendmail->new({
        Subject => '件名',                     # 件名
        From    => 'user@mail.goge.net',       # 送信元
        });

# メール送信
$send_obj->sendmail(
                'user@mail.goge.net',          # 送信先
                '添付ファイル無し',            # メッセージ
                );

# メール送信
$send_obj->sendmail(
                'user@mail.goge.net',          # 送信先
                '添付ファイル有り',            # メッセージ
                'file.txt,日本語ファイル.txt'  # 添付ファイル(,で区切ると複数送信可能)
                );

ライセンス形態:GPL
Sendmail

オブジェクト指向 Perl プログラミング 設定用クラスのひな形

Perlでオブジェクト指向なプログラミングを行う時設定ファイルの扱いに困った。confファイルでも使おうかと思ったが、Settingクラスを作ってやったところ思いの外使い勝手が良かったので公開してみる。

Settingクラスは値の設定だけでなく外部の設定ファイルへのアクセスを行うメソッドを定義しておくことでメールのテンプレートや、禁止ワード等幅広い用途で外部の設定ファイルを素早く使う事ができる。

Settingクラス(Setting.cgi)のひな形

package Setting; # クラスのパッケージ名を宣言

sub new {
	my $class = shift;
	my $self= {
		# 設定項目を適当に作る
		setting1 => 'mogempoge',
		setting2 => 'hogehoge.txt',
		setting3 => 'hoguhogu.txt'
	};
	return bless $self , $class;
};

# テンプレートを記述したファイルから内容を読み取り変数に格納し、返すメソッド
sub read_config{
	my $self = shift; #クラスプロパティ
	$self->{ ConfigFile } = $_[0] if( @_ );
	
	open(my $fh, "<", $self->{ ConfigFile }) || die("Can not open file $self->{ ConfigFile }");
	my $file_contents;
	while( my $line = readline $fh ){ 
		$file_contents .= $line;
	}
	return $file_contents;
}

# 改行で区切られたワードを記述したファイルから内容を読み取り配列に格納し、返すメソッド
sub read_words {
	my $self = shift; #クラスプロパティ
	$self->{ ConfigFile } = $_[0] if( @_ );
	
	open(my $fh, "<", $self->{ ConfigFile }) || die("Can not open file $self->{ ConfigFile }");
	my @word_contents;
	while( my $line = readline $fh ){ 
		chomp($line); # 改行を削除
		push(@word_contents, $line);
	}
	return \@word_contents;
}

1;

mainクラス(Test.cgi)のひな形

#!/usr/bin/perl
BEGIN{ $| = 1; print "Content-type: text/html\n\n"; open(STDERR, ">&STDOUT"); }
# オプション関連の宣言
use strict;
use warnings;

# クラスを宣言
require "Setting.cgi";
require "Function.cgi";

# パッケージ名宣言
package main;

my $f_obj = Function->new();
$f_obj->function();

その他クラス(Function.cgi)で設定ファイルを読み込む場合のひな形

package Function; # クラスのパッケージ名を宣言

# コンストラクタを定義する時にSettingクラスを継承してあげる。
sub new {
	# 引数を受ける
	my ( $class, @args ) = @_;
	my %args = ref $args[0] eq 'HASH' ? %{ $args[0] } : @args;
	my $self = { %args }; #クラスプロパティ
	# オブジェクト生成
	$self = Setting->new();
	return bless $self , $class;
};

sub function{
	my $self = shift; #クラスプロパティ
	# "setting1"の値を表示する
	print $self->{ setting1 };
	# テンプレート"setting2"の内容を変数で受け取り表示する
	print $self->read_config( $self->{ setting2 } );
	# ワードリスト"setting3"の一覧を配列で受け取り表示する
	print $self->read_words( $self->{ setting3 } );
}

CentOS5 OpenSSH のログイン時にバナーを表示させる

設定ファイルのBanner項目を有効化しバナーが書かれたファイルまでのパスを記述する

# vi /etc/ssh/sshd_config
# no default banner path
#Banner none ←ここを下記に書き換える
Banner /etc/ssh/banner

# vi /etc/ssh/banner
バナーの内容を書く

対ボット+外国人用 平仮名+和製漢字CAPTCHA Perl用ライブラリ

―――――――――――――――――――――――――――――――――――――
【ソフト名】かんたん日本語画像認証(アルファベットも可)
【著作権者】ORBIT
【制作日】2011年07月05日
【種 別】Perlモジュール
【連絡先】https://www.orsx.net/blog/
【配布元】https://www.orsx.net/blog/
【圧縮形式】zip
【動作環境】Perl5とImage::Magick、sazanami-gothicをインストールしたLinux
Windows系OSでは動作しない事が確認されております。
【開発環境】
CentOS5.6 perl, v5.8.8
―――――――――――――――――――――――――――――――――――――
≪著作権および免責事項≫

 本ソフトはフリーソフトです。自由にご使用ください。なお,著作権は作者
であるORBITが保有しています。

 このソフトウェアを使用したことによって生じたすべての障害・損害・不具
合等に関しては、私と私の関係者および私の所属するいかなる団体・組織とも、
一切の責任を負いません。各自の責任においてご使用ください。

・はじめに
 新しいフォームを作った時の副産物の公開です。わずか数行で画像認証機能
を実装することが可能です。
 海外のスパム・人間、共に日本特有の和製漢字・平仮名は入力できないこと
に着目し今回の日本語画像認証を作成しました。

・ファイル構成
readme.txt 当取説ファイル
JCaptcha.pm 本ソフト
background.jpg 画像認証用の下地となる画像ファイル
tmp/imgs/ 作成済みの画像ファイルを保存するディレクトリ

sazanami-gothic.ttf
↑さざなみゴシック(フォント) ライセンスの関係上同封しておりません。

・導入方法
efont プロジェクト日本語トップページ – SourceForge.JP
http://sourceforge.jp/projects/efont/
よりさざなみフォントをダウンロードし、sazanami-gothic.ttfのみ取り出し
ファイル構成のようにJCaptcha.pmと同じディレクトリに格納する。

 画像認証機能を追加したい対象のプログラムと同じディレクトリに上記、
ファイル構成を設置する。

・利用方法
下記の使用例を参考にプログラムに組み込んでください。

簡単な使用例

#!/usr/bin/perl

# 当モジュールを呼び出し
use JCaptcha;

# オブジェクトの生成
my $obj = JCaptcha->new(
		Key    => RX, # 鍵を指定
		Lang   => JP, # 言語を指定(JP/ENG)
		Length => 5   # 文字の長さを指定
	);

# 認証画像作成用メソッドを呼び出す
my $tmp1 = $obj->makeimgcode(); # 認証用画像を作成し、その画像までのパスを受ける
print "$tmp1\n"; # 認証画像までのパスを受け取る

#==============================================#
# 画像を表示し、入力を行う処理を書いてください #
#==============================================#

# 認証
# 入力された文字列で認証を行い、正しければ"1"間違っていれば"0"を受ける
#(受け渡す文字列はフラグ無しUTF-8とする)
my $tmp2 = $obj->enimgcode('入力を受けた文字列');
print "$tmp2\n"; # if文などで認証の成功失敗を判別する

・履歴

2011年09月05日 Ver 1.0.0 公開

作成された画像認証用画像の一例

ライセンス形態:GPL
Download:JCaptcha

Webアプリケーションファイアウォール mod_security を導入した上でmuninでApacheのグラフを表示させる方法

中々、mod_securityを導入した中でmuninでApacheのグラフを表示させてる人がいないのか対策方法が紹介されていないのでメモします。

muninはApacheのデータを取得するためlocalhostのserver-statusにアクセスする。
しかし、mod_securityを導入している環境だとError 406 で取得できない。
(wget http://127.0.0.1 と実行すると分かりやすい。)
そのため、muninが通るようにWebアプリケーションファイアウォールに穴を開ける。

対象となるルール ユーザエージェントでボットを判別している。
# /etc/httpd/modsecurity.d/base_rules/modsecurity_crs_35_bad_robots.conf
アクセス規制対象のロボット一覧から対象のボット名を探し削除する。
# vi /etc/httpd/modsecurity.d/base_rules/modsecurity_35_bad_robots.data

削除対象
perl
libwww-perl
wget ←必要があれば削除

Apacheに設定適用
# service httpd restart

PHP error_reporting .htaccess 設定

下記のような警告が出た時、警告を非表示にする方法。
Deprecated: Function set_magic_quotes_runtime() is deprecated in
/path/file.php on line 718

php.ini で設定する場合は
error_reporting = E_ALL & ~E_NOTICE
を追記すれば良いようですが全部で適用されちゃってセキュリティー的にどうなのか?とか気になります。

.htaccessで設定する場合をメモします。下記を追記して対象のディレクトリに設置してください。
php_value error_reporting 6135

その他の設定は次のサイトで詳しく紹介されてるのでそちらを御覧ください。
.htaccess で error_reporting を設定するときの注意点 | Sun Limited Mt.

CentOS5.6 mod-pagespeed インストール

mod_deflateを使ってたら思いも寄らないトラブルが発生したため、仕方なくmod_cacheを使おうかと考えてたら
Googleがページ読み込みを2倍高速化するApacheモジュール登場こんなのを出していたので導入してみた。

# wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_x86_64.rpm
# rpm -i mod-pagespeed-beta_current_x86_64.rpm
# service httpd reload

phpMyAdminでエクスポートしたSQL文を直接mysqlコマンドでインポートする方法

phpMyAdminにログインして上部のタブからエクスポートを選択
エクスポート
information_schema 以外の移動するデータベースを選択する
SQL 形式をSQL文にする

構造 下記の全てにチェックを入れる
DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT を追加
IF NOT EXISTS を追加
AUTO_INCREMENT 値を追加する
テーブル名やフィールド名を逆クォートで囲む
CREATE PROCEDURE / FUNCTION / EVENT を追加

エクスポートし、sqlファイルをテキストエディタで開く
21行付近の下記の行の前に–を追記してコメントアウト
CREATE DATABASE `db_bame` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
変更後
— CREATE DATABASE `db_bame` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

必要があれば置換しデータベースの名前を揃えておく

移動先のサーバにアップロードして下記をシェルで実行
mysql -u DB用のユーザ名 -h 127.0.0.1 -p < ファイル名.sql ※ 必ずしも成功するとは限りませんがとりあえずうまく行ったりしたのでメモしました。 ちなみにWordPressとかはインポート・エクスポート機能を使った方がプラグインが汚しまくったデータベースを移動するより絶対良いです。

ハッキング対策 コマンドの隠蔽

不正アクセスによく使用されるコマンドは大体決まってます。
そこでよく使用されるコマンドの中でもつかられるとリスクの大きいコマンドを一般ユーザから利用できないようにします。

※ ls dir find rm cp このあたりも制限する事が望ましいですが他のプログラムに影響を及ぼす可能性が高いため今回は下記に絞りました。

# chown -c root:wheel /sbin/ifconfig
# chmod -c 2710 /sbin/ifconfig
# chown -c root:wheel /bin/ps
# chmod -c 2710 /bin/ps
# chown -c root:wheel /usr/bin/top
# chmod -c 2710 /usr/bin/top
# chown -c root:wheel /usr/bin/pstree
# chmod -c 2710 /usr/bin/pstree
# chown -c root:wheel /usr/sbin/lsof
# chmod -c 2710 /usr/sbin/lsof
# yum remove finger

nagios等の監視ソフトや一般管理者ユーザでエラーが出ると困ることからwheelグループからも一応アクセスできるようにする。
そして普通に使っているだけならfingerコマンドなんて使うことはないのでこれは削除します。

CentOS 5.6 最新Snort + SWATCH で不正アクセスを検知しリアルタイムで規制する

本来IDS(侵入検知システム)は不正アクセスを検知し管理者に通知するだけであるが、今回SWATCHと組み合わせることで強力なセキュリティー機能を備えたいと思う。
※ SWATCHはログ監視ツール導入(SWATCH)の設定が行われていることを前提とする

Snortのダウンロード
# wget http://vscojot.free.fr/dist/snort/snort-2.9.0.5/RHEL5/x86_64/snort-2.9.0.5-12.el5.x86_64.rpm
# wget http://vscojot.free.fr/dist/snort/snort-2.9.0.5/RHEL5/x86_64/daq-0.5-9.el5.x86_64.rpm
# wget http://vscojot.free.fr/dist/snort/snort-2.9.0.5/RHEL5/x86_64/libdnet-1.12-7.el5.x86_64.rpm
# wget http://vscojot.free.fr/dist/snort/snort-2.9.0.5/RHEL5/x86_64/libpcap1-1.1.1-10.el5.x86_64.rpm

依存関係でエラーが出るため下記の順番にインストールする
# rpm -Uvh libdnet-1.12-7.el5.x86_64.rpm
# rpm -Uvh libpcap1-1.1.1-10.el5.x86_64.rpm
# rpm -Uvh daq-0.5-9.el5.x86_64.rpm
# rpm -Uvh snort-2.9.0.5-12.el5.x86_64.rpm

ルールはsnortrules-snapshot-2905.tar.gzをダウンロードする
ルールのダウンロードにはアカウント作成がいるようである
# tar zxvf snortrules-snapshot-2905.tar.gz
# cp rules/* /etc/snort/rules/
# /etc/snort/snort.conf

LAN内のPCは例外とするように設定ファイルを書き換える
var HOME_NET 192.168.1.0/24
var EXTERNAL_NET !$HOME_NET

下記のコメントを解除しルールを有効化する
include $RULE_PATH/attack-responses.rules
include $RULE_PATH/backdoor.rules
include $RULE_PATH/bad-traffic.rules
include $RULE_PATH/blacklist.rules
include $RULE_PATH/botnet-cnc.rules
include $RULE_PATH/chat.rules
include $RULE_PATH/content-replace.rules
include $RULE_PATH/ddos.rules
include $RULE_PATH/dns.rules
include $RULE_PATH/dos.rules
include $RULE_PATH/exploit.rules
include $RULE_PATH/finger.rules
include $RULE_PATH/ftp.rules
include $RULE_PATH/icmp.rules
include $RULE_PATH/icmp-info.rules
include $RULE_PATH/imap.rules
include $RULE_PATH/info.rules
include $RULE_PATH/misc.rules
include $RULE_PATH/multimedia.rules
include $RULE_PATH/mysql.rules
include $RULE_PATH/netbios.rules
include $RULE_PATH/nntp.rules
include $RULE_PATH/oracle.rules
include $RULE_PATH/other-ids.rules
include $RULE_PATH/p2p.rules
include $RULE_PATH/phishing-spam.rules
include $RULE_PATH/policy.rules
include $RULE_PATH/pop2.rules
include $RULE_PATH/pop3.rules
include $RULE_PATH/rpc.rules
include $RULE_PATH/rservices.rules
include $RULE_PATH/scada.rules
include $RULE_PATH/scan.rules
include $RULE_PATH/shellcode.rules
include $RULE_PATH/smtp.rules
include $RULE_PATH/snmp.rules
include $RULE_PATH/specific-threats.rules
include $RULE_PATH/spyware-put.rules
include $RULE_PATH/sql.rules
include $RULE_PATH/telnet.rules
include $RULE_PATH/tftp.rules
include $RULE_PATH/virus.rules
include $RULE_PATH/voip.rules
include $RULE_PATH/web-activex.rules
include $RULE_PATH/web-attacks.rules
include $RULE_PATH/web-cgi.rules
include $RULE_PATH/web-client.rules
include $RULE_PATH/web-coldfusion.rules
include $RULE_PATH/web-frontpage.rules
include $RULE_PATH/web-iis.rules
include $RULE_PATH/web-misc.rules
include $RULE_PATH/web-php.rules
include $RULE_PATH/x11.rules

# vi /etc/logrotate.d/snort
不要(存在しないログファイル)な部分を削除する
/var/log/snort/alert /var/log/snort/*log {

SWATCHの設定
# vi /etc/swatch/snort.conf

# logfile /var/log/snort/alert

# 不正なアクセスを3回以上検知したら該当ホストからのアクセスを24時間規制
watchfor /Priority/
    pipe "/usr/local/bin/swatch_action.sh 13"
    throttle=00:00:10