Home > サーバー関連 Archive

サーバー関連 Archive

VirtualBox install CentOS to Mac

いつもミドルウェアのインストールはapt-getやらyumやらportやらで楽していたので、丁度環境構築する機会があったのでソースからのインストールでやってみました。以下その作業ログです。

CentOSのインストール過程は下記のサイトに詳しく記載されています。必要最低限のものしか設定したくない人にはうってつけの参考サイトです。
CentOS5インストール

ちょっとはまりました。ネットワークに繋がらなかったので以下のコマンドを叩きました。

ifdown eth1
ifup eth1

こんな設定ありなのか・・・
 
ホストOSからゲストOSにsshとhttpの接続をする設定。かなりはまりました。以下のサイト通りに行えばできます。ネットワークの設定の箇所とiptablesの設定の箇所です。
VirtualBox 2.2 と CentOS 5.3 でローカル開発環境

 
ちょっと余談。ここまでくる間に使えそうな情報を見つけたので載せておきます。

FireWallとSELinuxの設定画面を再表示するコマンド
$ system-config-securitylevel-tui
コマンドラインからVirtualBox立ち上げ
$ VBoxManage startvm “仮想マシン名” –type headless
コマンドラインからVirtualBox止め
$ VBoxManage controlvm “仮想マシン名” poweroff

 
 
では、やっとお目当ての者たちを取り込みます。
apacheインストール
まず、必要なライブラリインストール

yum -y install gcc
yum -y install openssl-devel

ソースの置き場所はこちら:http://ftp.riken.jp/net/apache/httpd/

# cd /usr/local/src/
# wget http://ftp.riken.jp/net/apache/httpd/httpd-2.2.14.tar.gz
# tar xvfz httpd-2.2.14.tar.gz
# cd httpd-2.2.14
# ./configure –prefix=/usr/local/apache2 –enable-module=so –enable-so –enable-ssl –enable-rewrite

起動スクリプトの作成
参考サイト:CentOS 5.3にApache をインストールの起動スクリプトの作成以降を同じことやりました。
ちょっとつまづいたのは、参考サイトの中にある実行ユーザを作成したあと、httpdを起動しようとしたら以下のエラーが吐かれました。

httpd を停止中: [失敗]
httpd を起動中: (98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs [失敗]

すでに使用しているポートに働きかけしてるから失敗?
同じサイトなのかな。解決方法が載ってます。apacheの再起動でエラー (98)Address already in use: make_sock: could not bind to address [::]:80とても参考になりました。ありがとうございました。

 
MySQLのインストール
ソースはこちら:http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-5.1/
参考サイトはこちら:http://wiki.livedoor.jp/callistoiv/d/MySQL%20Memo
http://tatsunet.net/contents/linux/centos4/lamp/
必要なもの取得

# yum -y install ncurses-devel
# wget http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-5.1/mysql-5.1.41.tar.gz

ユーザ作成

# groupadd mysql
# useradd mysql -g mysql -M -s /sbin/nologin

インストール作業

# tar xvfz mysql-5.1.41.tar.gz
# cd mysql-5.1.41
# ./configure –prefix=/usr/local/mysql –with-charset=utf8 –with-collation=utf8_general_ci –with-extra-charsets=all –with-readline –with-mysqld-user=mysql
# make
# make install

DB初期化

# ./scripts/mysql_install_db
# chown -R mysql:mysql /usr/local/mysql/var/
# /usr/local/mysql/bin/mysqld_safe –user=mysql &
# /usr/local/mysql/bin/mysqladmin -u root password ‘XXXXXXXXXX’
# /usr/local/mysql/bin/mysqladmin -u root -p shutdown

MySQLの自動起動の設定

# cp support-files/mysql.server /etc/rc.d/init.d/mysql
# chmod 755 /etc/rc.d/init.d/mysql
# chkconfig –add mysql
# chkconfig –list mysql
mysql 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# /etc/rc.d/init.d/mysql start

 
では次に、PHPインストール
ソースの置き場所はこちら:http://www.php.net/downloads.php
参考サイト:http://sj6.org/vmware_setup_by_centos/
必要なものインストール

# yum install libxml2*
# yum install libjpeg*
# yum install gd-devel
# yum install openldap-devel
# yum install libxslt-devel
# yum -y install curl-devel
# yum -y install libmcrypt-devel

# wget http://jp.php.net/get/php-5.3.1.tar.gz/from/this/mirror
# tar xvfz php-5.3.1.tar.gz
# cd php-5.3.1
# ./configure –prefix=/usr/local/lib/php5 –with-apxs2=/usr/local/apache2/bin/apxs –with-pear=/usr/local/lib/php5/pear –enable-zend-multibyte –enable-mbstring –enable-mbregex –with-xsl –with-mysql=/usr/local/mysql –with-pdo-mysql=/usr/local/mysql –with-curl –with-curlwrappers –with-zlib-dir –with-zlib –with-gd=shared –with-png-dir –with-jpeg-dir –with-ttf –with-ldap=shared –with-mcrypt
# make
# make install
# cp php.ini-development /usr/local/lib/php.ini

次に、/usr/local/lib/php.iniを編集します。編集内容は参考サイトにある通りにしました。
最後に/usr/local/apache2/conf/httpd.confに.phpがphpだと分からせるようにする設定を記述します。

<IfModule dir_module>
    DirectoryIndex index.html index.php # index.phpを追加
</IfModule>

 ・・・・・
    # If the AddEncoding directives above are commented-out, then you
    # probably should define those extensions to indicate media types:
    #
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType application/x-httpd-php .php # この行を追加

/usr/local/apache2/htdocs/phpinfo.phpを作成したりして動作確認。

以上です。ふぅ、かなり時間かかった。

ではでは

Ubuntu Postfix (TLS + SMTP AUTH) と Dovecot 構築

とても分かり易くお世話になったサイト
メールサーバの設定 - postfix & dovecot
PostfixによるSMTPサーバの構築(CentOS標準版編)
Ubuntu 8.04 によるサーバーの構築 >Postfix (SMTPサーバー)の構築
どうもありがとうございました。

以下私のログです。

必要なパッケージをインストール

sudo apt-get install postfix dovecot sasl2-bin

Postfix最低限〜SMTP AUTH設定

/etc/postfix/main.cfを編集

# ドメイン名の指定
mydomain = yourhost.com
# Fromアドレスに付加されるドメインの指定
myorigin = $mydomain

myhostname = mail.yourhost.com
# メールの配送を許可する宛先ドメイン名を指定します。
mydestination = $myhostname, localhost.$mydomain, localhost, $myorigin

# ここで指定したネットワークからのメールは、無条件に配送されます
# mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mynetworks = 192.168.0.0/24, 127.0.0.0/8

# メールヘッダに記載されるMTAの表示に関する設定
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)

# TLS parameters 前回のsslで設定の際、作成した証明書と鍵を使用
smtpd_tls_cert_file= /etc/ssl/key/server.crt
smtpd_tls_key_file= /etc/ssl/key/server.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

relayhost =

mailbox_size_limit = 51200000

recipient_delimiter = +

inet_interfaces = all

mtpd_banner = $myhostname ESMTP unknown

home_mailbox = Maildir/

# SMTP認証の設定
# SMTP認証を有効にするには、smtp_sasl_auth_enableをyesにし、smtpd_recipient_restrictionsにpermit_sasl_authenticatedを加える。参考サイト抜粋
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_local_domain = $mydomain
broken_sasl_auth_clients = yes # sasl_authに対応していないメーラに対応
smtpd_sasl_security_options = noanonymous # 匿名認証を許可しない

次に、PostfixでSMTP認証の監視を行うsaslauthdの設定を行います。まず、PostfixにSMTP認証のチェッカーとしてsaslauthdを使うように設定するため、/etc/postfix/saslディレクトリ以下にsmtpd.confというファイルを作成して*1抜粋、以下を追加

# vim /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd

なお、この設定でUnixユーザーアカウントのアカウント名およびパスワードでSMTP認証できます。
試してないので不確実なのですがpwcheck_method: pwcheckでも同じ設定になるのではないかと思います。余談としてUnixユーザーアカウントではなく、sasl認証ユーザ用のアカウント作成方法を*1の本に載っているので参考にして下さい。

UbuntuにインストールされているPostfixは、標準でchroot環境になっており、/var/spool/postfixをルートディレクトリとして使うようになっています。しかし、saslauthdは/var/run/saslauthdを使おうとするため、挙動がおかしくなってしまします。この問題を解決するため、saslauthdサービスの設定ファイルである/etc/default/saslauthdファイルを書き換えて、新しくsaslauthd用のディレクトリを/var/spool/postfix以下に作成する必要があります。*1
よって以下の作業が必要になります。

# vim /etc/default/saslauthd
#START=no
START=yes ←起動時にsaslauthdを動作させるようにする
# OPTIONS= “-c -m /var/run/saslauthd”
OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd”

sudo rm -r /var/run/saslauthd/
sudo mkdir -p /var/spool/postfix/var/run/saslauthd
sudo ln -s /var/spool/postfix/var/run/saslauthd /var/run
sudo chgrp sasl /var/spool/postfix/var/run/saslauthd
sudo adduser postfix sasl

saslauthdデーモンを起動

/etc/init.d/saslauthd start

Postfix設定の確認

postfix check

問題がなければ、Postfixに設定を反映

postfix reload

TLSの設定

TLSはSSLを利用した暗号化通信技術ですかね?TLSによりデータを暗号化することができるため、SMTP_AUTHで利用するデータを盗聴から保護することが可能になります。

/etc/postfix/main.cfの次の設定がTLSを利用する設定です。

# TLS parameters 前回のsslで設定の際、作成した証明書と鍵を使用
smtpd_tls_cert_file= /etc/ssl/key/server.crt
smtpd_tls_key_file= /etc/ssl/key/server.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

TLSを使うために以下も修正。

# vim /etc/postfix/master.cf
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
# サブミッションポートの設定
submission inet n - - - - smtpd
-o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
tlsmgr unix - - n 1000? 1 tlsmgr
これらをすべてコメントアウトをはずす

再度、Postfixに設定を反映。

Dovecotの設定

# vim /etc/dovecot/dovecot.conf
protocols = pop3 pop3s imap imaps
disable_plaintext_auth = no
sl_cert_file = /etc/ssl/key/server.key
ssl_key_file = /etc/ssl/key/server.key
mail_location = maildir:~/Maildir

Dovecotを起動

# sudo /etc/init.d/dovecot start

サーバの設定は以上です。

あとはメーラの設定です。
メーラの設定では必ずTLSを利用するに設定しなければいけません。
あとメーラからメールが送れなかったらSMTPサーバの使用ポートを587に変更してください。サブミッションポートの設定により、送れないことが原因だと思います。

とりあえず行ったことは以上になります。

*1 参考図書:図解でわかる Linuxサーバ構築・設定のすべて

余談1

下記4行を追加してTCPの110番ポート(pop)とTCPの143番ポート(imap)を開放します。
IP制御をしてローカルネットワーク内と特定の外部からのみ接続できるようにします
その条件を説明してくれているサイト
抜粋

-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 110 -s 192.168.0.0/24 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 110 -s xxx.xxx.xx.xx(外部IPアドレス)/24 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 143 -s 192.168.0.0/24 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 143 -s xxx.xxx.xx.xx(外部IPアドレス)/24 -j ACCEPT

余談2

APOP使うときには参考になる
外部からメールサーバを使えるようにする
ただAPOP使うには注意。プロトコル上の問題で惰弱性があることを認識しておく。

SSL接続のサーバ構築 設定編

RedminをSSLで構築していきます。

では、まずSSLを構築していきましょう。
流れは前回の説明した順序でやっていきます。

1. 自前の認証局(CA)で証明書(CACERT)を作成
debianコマンド、make-ssl-certは使いませんでした。理由は前回の疑問の通り。
以下のように自前の認証局と証明書を作成しました。

# cd /usr/lib/ssl/misc
# ./CA.sh -newca
以下の入力はここを参考にさせて頂きました。
CA certificate filename (or enter to create) ← Enter
Enter PEM pass phrase:  ←パスワードを入力
Verifying password - Enter PEM pass phrase:  ←再度パスワードを入力
Country Name (2 letter code) [AU]:JP ←国コードを入力JP
State or Province Name (full name) [Some-State]:Osaka ←都道府県名を入力
Locality Name (eg, city) []:HigashiOsaka ←市区町村名を入力
Organization Name (eg, company) [Internet Widgits Pty Ltd]:←会社名、団体名等を入力。私は入力しませんでした
Organizational Unit Name (eg, section) []:Hoge ←部門名・部署名等を入力。私は入力しませんでした
Common Name (eg, YOUR name) []:*****.com ←正確にドメイン名を入力しなければならない
Email Address []:←私は何も入力しませんでした

すると、
/usr/lib/ssl/misc/demoCA/cacert.pem
/usr/lib/ssl/misc/demoCA/private/cakey.pem
が生成されます。

安全のため、秘密鍵を他人に見られないようにパーミッションを設定します

# chmod 600 /usr/lib/ssl/misc/demoCA/private/cakey.pem
# chmod 700 /usr/lib/ssl/misc/demoCA/private

以下のコマンドで、作成した証明書が正しくできたかどうか確認できます。
私は確認してませんけど。。

# openssl x509 -in cacert.pem -text

2. サーバ秘密鍵(Key)と証明書署名要求(CSR)を作成
サーバ秘密鍵の生成 (私はホームディレクトリで作業しました。どこでもいいと思います)

# cd ~
# openssl genrsa -out server.key 1024
# ls
# server.key ← ファイルが生成されているはず

証明書署名要求(CSR)の作成
# cd ~
# openssl req -new -key server.key -out server.csr
上で行った作業と一緒でいいと思います。
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]: Osaka 
Locality Name (eg, city) []:HIgashiOsaka
Organization Name (eg, company) [Internet Widgits Pty Ltd]:←私は何も入力しませんでした
Organizational Unit Name (eg, section) []:←私は何も入力しませんでした
Common Name (eg, YOUR name) []: *****.com ←正確にドメイン名を入力しなければならない
Email Address []:←私は何も入力しませんでした

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:←私は何も入力しませんでした
An optional company name []:←私は何も入力しませんでした

# ls
server.key server.csr

3. 自前の認証局で証明書署名要求(CSR)に署名し証明書を作成
続いて、CSRに対して認証局が署名します。これによってサーバ証明書が生成されます。
ちなみに、通常はベリサインなどの第三者認証局げCSRを送って証明書に署名を入れてもらいます。今回は自前の認証局を立てて、自己署名する方法で行っていきます。

# cd /usr/lib/ssl/misc/
# openssl ca -out serverca.crt -infiles ~/server.csr
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem: ←1で入力したパスワード
Check that the request matches the signature
Signature ok
省略
Certificate is to be certified until Aug 8 01:17:21 2011 GMT (730 days)
Sign the certificate? [y/n]:y ← yを入力
1 out of 1 certificate requests certified, commit? [y/n]y ← yを入力
Write out database with 1 new entries
Data Base Updated

サーバ証明書serverca.crtが作成されました

4. サーバ証明書と秘密鍵(Key)をApacheサーバにインストール

# mkdir /etc/ssl/key
# cp serverca.crt /etc/ssl/key/ ←サーバ証明書
# cp ~/server.key /etc/ssl/key/ ←秘密鍵

# cd /etc/apache2/sites-available
# cp default-ssl ssl
# emacs ssl

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
        serverName redmine.cypher-works.com:443 ← depends on you
	ServerAdmin ***** ← depends on you
	DocumentRoot /var/www/redmine/public ← depends on you
	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /var/www/redmine>
		Options FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
	</Directory>
	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
	<Directory "/usr/lib/cgi-bin">
		AllowOverride None
		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
		Order allow,deny
		Allow from all
	</Directory>

	ErrorLog /var/log/apache2/error.log
	LogLevel warn
	CustomLog /var/log/apache2/ssl_access.log combined
	Alias /doc/ "/usr/share/doc/"
	<Directory "/usr/share/doc/">
		Options Indexes MultiViews FollowSymLinks
		AllowOverride None
		Order deny,allow
		Deny from all
		Allow from 127.0.0.0/255.0.0.0 ::1/128
	</Directory>

	SSLEngine on
	SSLCertificateFile    /etc/ssl/key/serverca.crt ← サーバ証明書を指定
	SSLCertificateKeyFile /etc/ssl/key/server.key ← 秘密鍵を指定
	#SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt
	#SSLCACertificatePath /etc/ssl/certs/
	#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt
	#SSLCARevocationPath /etc/apache2/ssl.crl/
	#SSLCARevocationFile /etc/apache2/ssl.crl/ca-bundle.crl
	#SSLVerifyClient require
	#SSLVerifyDepth  10
	#<Location />
	#SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
	#            and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
	#            and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
	#            and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
	#            and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20       ) \
	#           or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
	#</Location>
	#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
	<FilesMatch "\.(cgi|shtml|phtml|php)$">
		SSLOptions +StdEnvVars
	</FilesMatch>
	<Directory /usr/lib/cgi-bin>
		SSLOptions +StdEnvVars
	</Directory>

	BrowserMatch ".*MSIE.*" \
		nokeepalive ssl-unclean-shutdown \
		downgrade-1.0 force-response-1.0
</VirtualHost>
</IfModule>

そして次にsslがapacheで使えるようにするために

# a2enmod ssl
Enabling module ssl.

さきほどのVirtualHostで設定したものを有効にするために

# a2ensite ssl
Enabling site ssl.

apache再起動と文法的に間違ってないか確認

# apache2ctl restart
# apache2ctl -t
Syntax OK

port443が開いているか確認

# netstat -a | grep https
tcp 0 0 *:https *:* LISTEN

5. クライアントのブラウザに自前の認証局の証明書(CACERT)をインストールして信頼させる

# cd /usr/lib/ssl/misc/
# openssl x509 -inform pem -in demoCA/cacert.pem -outform der -out demoCA/ca.der

ここからはRedmineのインストール。
svnからチェックアウトしたもので構築していったときなぜか500 Internal server errorになってしまいました。解決方法を探しに検索すると、だいたいtmpとlogのパーミッションを変更しろというものでしたが、解決しませんでした。

圧縮ファイルから解凍してのインストールだとうまくいきました。理由は分かりませんが以下そのログです。

# wget http://rubyforge.org/frs/download.php/56909/redmine-0.8.4.tar.gz
# tar xvfz redmine-0.8.4.tar.gz
# mysql -u root -p****
> create database redmine character set utf8;
>¥q
# cp config/database.yml.example config/database.yml
database.ymlを編集してください
# rake db:migrate RAILS_ENV=”production”
# rake load_default_data RAILS_ENV=”production”
Select language: bg, ca, cs, da, de, en, es, fi, fr, he, hu, it, ja, ko, lt, nl, no, pl, pt, pt-br, ro, ru, sk, sr, sv, th, tr, uk, vn, zh, zh-tw [en] ja
chmod -R 666 tmp/
chmod -R 666 log/

apache+passengerで構築していますがその詳細はこちらにあります。

最後にBasic認証をしています。以下のその例です。

# cd /etc/apache2/sites-available/
# emacs ssl
以下を追加

       <Location />
                AuthType Basic
                AuthName "Redmine"
                AuthUserFile /etc/apache2/.htpasswd
                AuthGroupFile /dev/null
                Require valid-user
       </Location>

次に.htpasswdを作成

# cd /etc/apache2/
# htpasswd -c .htpasswd ユーザ名
パスワード入力
# apache2ctl restart

ちなみにssl(https)で構築するとdigest認証は成立しないのでしょうかね。
sslで暗号化しているから、digest認証でも暗号化すると暗号に暗号を重ねることになって成立しなくなるのでしょうか。う〜ん。知りたい。

以上で完了です。

ではでは

参考サイト
apache+opensslで自前SSL
WebサーバのSSL対応
etch/park2/10_apache2
パーソナルWeb共有をhttps接続できるようにしよう

SSL接続のサーバ構築 疑問編

参考サイト
OpenSSLで認証局(CA)構築とApache+mod_sslでサーバ認証
UbuntuでApache2+SSLしてみる
apache+opensslで自前SSL

自前SSLのサーバ構築はだいたい下記の流れのようである。
1.自前の認証局(CA)で証明書(CACERT)を作成(3のときに実行しても良いけど、認証局がサーバより先にあるというのが一般的なので)
2.Apacheサーバで秘密鍵(Key)と証明書署名要求(CSR)を作成
3.自前の認証局で証明書署名要求(CSR)に署名し証明書(CERT, certificate)を作成
4.証明書(CERT)と秘密鍵(Key)をApacheサーバにインストール
5.クライアントのブラウザに自前の認証局の証明書(CACERT)をインストールして信頼させる

debianにはmake-ssl-certというコマンドがあって検索するとだいたい下記のようにたたく。

mkdir /etc/apache2/ssl
make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem

そうすると、/etc/apache2/sslディレクトリ以下にapache.pemが作成されて、
apache.pemには秘密鍵と証明書の両方の内容が記述されているようです。

ここで疑問なのだが、make-ssl-certをたたいたとき、上記の作成フローの3番まで一気に行ってしまうのか、2番でストップするのかどっちなのか分からない。

もし、3番まで実行してしまうなら、ベリサインなどのCAに証明書発行要求が出来ないのではないか。

う〜ん。分かったらまたエントリを書きます。

ではでは

ubuntu iptables設定 辞書攻撃対策

辞書攻撃された。

やろぉ。

犯人はこいつ。
http://www.projecthoneypot.org/ip_****

ちょうどログを監視してたからすぐ対応できました。
dovecot宛になにかしろしてたので、devecotを一旦stopしました。

こういう経験あるとセキュリティーに関して熟知しないとな、と強く感じます。

やられたからには、対策を。(本当はやられる前に対策を。)
ファイアーウォールの設定で辞書攻撃用の対策を施します。

iptablesを使うのでインストールされてないかたインストールを。

$ sudo apt-get install update
$ sudo apt-get install iptables

元ネタはここから
sshへの総当り攻撃をiptablesの2行で防ぐ方法
お世話になりました。

他、参考にさせて頂いたサイトです。
Ubuntu/iptables(firewall)説明に流れがあり分かり易かったです。
iptables (netfilter) のインストール方針が勉強になりました。
iptablesでサーバーのファイアウォールを構築するCommentsAdd Star記述する内容が詳しく説明されています。
専用サーバを構築するときにまず行う4つの設定 ウノウさん。こういう記事があると流石と思います。

では、設定を。180秒間に5回ssh接続を試みたIPアドレスをシャットアウトする。あとログに残す

$ sudo iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –set –name ssh_attack
$ sudo iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –update –seconds 180 –hitcount 5 –rttl –name ssh_attack -j LOG –log-prefix ‘SSH attack: ‘
$ sudo iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –update –seconds 180 –hitcount 5 –rttl –name ssh_attack -j DROP

上記が設定されて、保存をします。

$ sudo iptables-save > /etc/iptables.rule

/etc/iptables.ruleに先ほど設定した内容が生成されました。

これを起動時にも反映されるように、

$ sudo vim /etc/network/if-pre-up.d/iptables-up
以下記述内容
#!/bin/sh

iptables-restore < /etc/iptables.rule

$ sudo chmod 700 /etc/network/if-pre-up.d/iptables-up
$ sudo vim /etc/network/if-post-down.d/iptables-down
以下記述内容
#!/bin/sh

iptalbes-save > /etc/iptables.rule
$ sudo chomod 700 /etc/network/if-post-down.d/iptables-down

以上が、辞書攻撃対策でした。

ではでは

ubuntu cronの設定

はまってしまった。。

下記サイトを参考にさせてもらいましたが、
http://d.hatena.ne.jp/satake7/20080615/p1

cronの設定方法の注意

コマンドには「> /dev/null 2>&1」を付けて、標準出力も標準エラー出力も /dev/null に捨てないとうまくいかないそうです。(事前にググっていて対処済みだったため、付けないとどうなるかは未確認ですが)

という記述があったので「> /dev/null 2>&1」を付けてたんですけど、これがあると実行されなかったので、とっちゃいました。

とってやっとこさcronは正常に動いてくれました。

結局やったことはrootでcrontab -eをしてcronで実行したいものを記述

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# m h dom mon dow command
5 0 * * * /usr/bin/php /var/www/****/****.php

SHELLやらPATHやらの記述はenvコマンドを打つと分かります。とりあえず記述しときました。
PHPも絶対パスでやっときました。

/etc/init.d/cron restartでcronを再起動

結局これだけだと思います。(cronの再起動も必要あるのかどうか)

あとはログからcronが動いているか確認。
ubuntuは/var/log/syslogに残るみたいです。

いろいろ調べて試したもの

cronの状態

/etc/init.d/cron status

cronの再起動

/etc/init.d/cron restart

/var/log/cron.logの設定(失敗→特に生成されない)

$ emacs /etc/syslog.conf
cron.* /var/log/cron.log
↑を追加
/etc/syslog.confの反映
ps aux | grep syslog
kill -HUP ****

ではでは

ubuntu 時刻設定

時刻を合わせますー。

まずは同期の設定をするようです。下記サイトに詳しく載ってます。お世話になりましたー。
http://tobysoft.net/wiki/index.php?Ubuntu%2F%BB%FE%B9%EF%A4%CE%C6%B1%B4%FC

内容は

まずは同期の設定をする

$(#) sudo vim /etc/default/ntpdate

同期サーバーがntp.ubuntu.comになっていますが、
国内用に以下のように変更します。
(設定はこれと同じでも大丈夫です。詳細→NTP - wiki@nothing

#NTPSERVERS=”ntp.ubuntu.com”
NTPSERVERS=”ntp.nict.jp ntp.jst.mfeed.ad.jp ntp.ring.gr.jp”

手動で合わせてみる

$(#) sudo /etc/network/if-up.d/ntpdate

これで日本時間になったかな?とdateコマンドで確認。結果まだみたい。
日本時間にするにはタイムゾーンの設定をしなければいけない。
それは下記サイトが教えてくれました。
ご教授ありがとうございますー。
http://wiki.bonnou.com/Linode%20%E3%81%B8%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%9F%20Ubuntu%20%E3%81%AE%E8%A8%AD%E5%AE%9A

http://memoro.cocolog-nifty.com/blog/2008/01/ubuntutimezone_4774.html

内容は、dpkg-reconfigure tzdataを打つ。

$(#) dpkg-reconfigure tzdata

こんな画面がでる
pic4

で、Asia → Tokyoと設定する。

で、dateコマンドで確認すると、ちゃんと日本時間になってました。おけー。

では、PHPのdate関数とかで生成される時間も、このシステム時間使われるのかなと確認したところ違うみたい。
PHPはphp.iniの設定を変更しなければいけないみたいですね。

$(#) vim php.ini

[Date]
; Defines the default timezone used by the date functions
date.timezone = Asia/Tokyo

追加

これでphpの処理も日本時間になりましたとさ。

ではでは

shindigとpartuzaというかVirtual Host

opensocialの開発を容易に出来ないものかと思案した結果、
shindigとpartuzaの環境構築がメジャーな例としてあるみたいですね。
では、環境構築して試してみたいと思います。

OpenSocial入門を例に私は構築しました。以下その図書です。

その図書からは、http://shindigやhttp://partuzaのようにアクセスするとなっていたので、
Virtual Hostの設定からやります。

まず、httpd.confのVirtual Hostを利用できるように設定を変更します。
私の環境では以下、/opt/local/apache2/conf/httpd.confを変更

下記のコメントアウトをはずす
;Include conf/extra/httpd-vhosts.conf

Include conf/extra/httpd-vhosts.conf

そして、httpd-vhosts.confを編集します。
私の環境では/opt/local/apache2/conf/extra/httpd-vhosts.confにあります。
こんな感じです。

<VirtualHost *:80>
    DocumentRoot /opt/local/apache2/htdocs
    ServerName localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /Library/WebServer/Documents/shindig/php
    ServerName shindig
    DirectoryIndex index.php index.html
    <Directory /Library/WebServer/Documents/shindig/php>
      AllowOverride All
      Options All
      Allow from All
      Order deny,allow
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /Library/WebServer/Documents/partuza/html
    ServerName partuza
    DirectoryIndex index.php index.html
    <Directory /Library/WebServer/Documents/partuza/html>
      AllowOverride All
      Options All
      Allow from All
      Order deny,allow
    </Directory>
</VirtualHost>

余談なんですが、Virutal Hostを設定している途中でoptions Indexesに差し掛かったとき、
ApacheのCGIの設定、Optionsディレクティブの詳細を備忘録のために書き留めたいな、
と思ってたので、この機に書こうと思います。

Optionsディレクティブのおもなオプション

オプション 説明
Indexes ブラウザからのURLのリソース指定がディレクトリの場合、そのディレクトリ直下にDirectoryIndexesで指定したファイルがなければ、ディレクトリ一覧の出力をおこなうことを許可します
FollowSymlinks シンボリックリンクのリンク先に辿れることを許可します
ExecCGI CGIプログラムの実行を許可します

公開サーバではディレクトリの出力を非表示にする必要があります。
以前、indexesの記述をすべて削除して見えなくしようとしましたが、非表示になりませんでした。
そんなときはautoindexのモジュールが効いているかもしれないので無効にしましょう。
下記サイトが参考になるかと思います。
http://www.kishiro.com/apache/disable_autoindex.html
私の環境は、ubuntsなのでa2disホニャララのコマンドが効きます。
a2disautoindexでディレクトリの非表示ができました。

余談終わります。

あと、Virtual Hostの設定は/etc/hostsをイジリーします。

127.0.01 localhost shindig partuza

でapacheの再起動します。(まだshindigとpartuzaを配置してない場合はそりゃエラーになります。)

以上でVirtual Hostの設定は終わりです。
Virtual Hostの設定したときに、立ち寄ったサイトです。
その他サーバ・アプリの設定も簡潔に記述されていて読み易いサイトです。
http://wiki.gaspanik.com/install-amp

で、本題?のshindigとpartuzaの設定でお世話になったサイトです。
リクルートのメディアラボさんのラボサイトはOpenSocial入門の誤記を指摘してくれているので必須でした。
誠にありがとうございます。
http://www.openpne.jp/archives/630/
http://mtl.recruit.co.jp/blog/2009/01/opensocialopensocialpartuza.html

この二つのサイトで事足りちゃいます。ので私は説明しません。
ちょっと補足を。
PartuzaDbFetcher.phpにDBの設定をしてほしいとの記述があるのですが、
記述するところはないので私はしませんでした。それで正常に動いています。

以上になります。

ではでは。

Home > サーバー関連 Archive

Search
Feeds
Meta

Return to page top