AWS EC2 php5.4 LAMP環境の構築

1. データベースサーバなどの関連ソフトウェアのインストール

 mysql-serverパッケージがインストールされていない場合は、以下コマンドを実行。

 yum -y install mysql-server

 

  MySQLのデフォルト文字コードを UTF-8に設定しておく事。

  また、ストレージエンジンはInnoDBを使用する事。

 

/etc/my.conf に以下設定を追記。

**********************************************************  

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#log=/var/log/mysql.log

#default-character-set=utf8
character-set-server=utf8
skip-character-set-client-handshake

innodb_file_per_table
innodb_buffer_pool_size=64M
innodb_log_file_size=16M
innodb_log_files_in_group=2

[mysqld_safe]
log-error=/var/log/mysqld-error.log
pid-file=/var/run/mysqld/mysqld.pid

**********************************************************  

 

その他のパッケージをインストール

yum -y install mysql fping iksemel net-snmp-libs openldap curl unixODBC OpenIPMI-libs libssh2

 

2. Apacheのインストール

   yum install httpd24

 

3. PHPのインストール

yum -y install php54 php54-gd php54-bcmatch php54-mysql php54-mbstring php54-xml

 

php.ini の timezone 設定   

vim /etc/php.ini

date.timezone = Asia/Tokyo 

cp /usr/share/zoneinfo/Japan /etc/localtime

 

1GBのswap領域を作成
dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
swapon /swapfile

 

Apacheの起動

service httpd start

 

FTPサーバー構築

FTPサーバーの構築手順を記す。

vsftpd インストール

yum -y install vsftpd

 

vsftpdを起動

service vsftpd start

chkconfig vsftpd on

chkconfig --list vsftpd

 

iptablesの 20,21番ポートが開いているのを確認

iptables -vnL

 

パケットフィルタリングに関する設定を施す。 

vim /etc/sysconfig/iptables-config

IPTABLES_MODULES=""

  ↓

IPTABLES_MODULES="ip_conntrack_ftp"

 

iptables を再起動

service iptables restart

 

 

FTP ログイン・ユーザーの制限

FTP接続ユーザーの設定を行う。

etc/vsftpd/ftpusers に設定したユーザーは、FTPでログインすることが不可である。

デフォルトでは、root や nobody などがFTPでログインできないように設定されている。

また、/etc/vsftpd/user_list というユーザーを設定するリストも存在する。

これはデフォルトでは、/etc/vsftpd/ftpusers と同様にブラックリストとして機能する。

しかし、/etc/vsftpd/vsftpd.conf に以下のように記述するとホワイトリストとなる

 

vim /etc/vsftpd/vsftpd.conf

userlist_enable=YES

  ↓

userlist_enable=YES

userlist_deny=NO

userlist_file=/etc/vsftpd/user_list

 

匿名ログインを拒否

anonymous_enable=YES

  ↓

anonymous_enable=NO

 

上記設定をすると/etc/vsftpd/user_list がホワイトリストとして機能する。

userlist_deny=NO(拒否するユーザーリストを拒否=許可するユーザーリストして使う)という設定になる。

 

また、/etc/vsftpd/user_listをホワイトリストとして使用しても、

/etc/vsftpd/ftpusers がブラックリストとして機能することは変わらない。

つまり、/etc/vsftpd/ftpusers に記されたユーザーはFTPログインができない。

 

chrootFTPログイン時にユーザー自身のディレクトリのみを見せる)を有効にする。

#chroot_list_enable=YES

  ↓

chroot_local_user=YES

 

FTPログの保存先を指定する

#xferlog_file=/var/log/xferlog

  ↓

xferlog_file=/var/log/vsftpd.log

 

ホワイトリスト作成

vi /etc/vsftpd/user_list

username

 

FTPログインを許可するユーザーを設定。

vsftpdを再起動

service vsftpd restart

 

FTPクライアントから接続時のエラー対応

下記エラーが表示された時は、SELinuxを無効にし、サーバーを再起動する。

500 OOPS: cannot change directory:/home/username

 

vim /etc/sysconfig/selinux

#SELINUX=enforcing

SELINUX=disabled

 

サーバー再起動を実行

shutdown -r now

 

再度FTP接続が行い、接続可能になった事を確認。

 

SSL 証明書発行

特定ドメインにてhttps(443)アクセスを可能にしたい場合のApache設定手順

 

1. mod_sslの確認とインストール

mod_sslがインストールされているかを確認

rpm -qa mod_ssl

 

何も表示されない場合には mod_ssl のインストールを実行

yum install mod_ssl

 

インストール後、ssl.conf ファイルの存在を確認

ll /etc/httpd/conf.d/

-rw-r--r--. 1 root root  392  8月 14 02:30 2013 README

-rw-r--r--. 1 root root  990  3月  6 00:09 2014 php.conf

-rw-r--r--  1 root root 9473  8月  2 20:59 2013 ssl.conf

-rw-r--r--. 1 root root  299  8月  2 20:59 2013 welcome.conf

 

 

1. keyファイル作成

mkdir /etc/httpd/ssl

cd ssl/

keyファイル作成

openssl genrsa -des3 2048 > hogehoge.co.jp.key

Enter pass phrase: (パスフレーズ入力)

Verifying - Enter pass phrase: (パスフレーズ入力)

 

パスフレーズ解除

openssl rsa -in hogehoge.co.jp.key -out hogehoge.co.jp.key    

Enter pass phrase for hogehoge.co.jp.key:(パスフレーズ入力)

writing RSA key

 

 

2. csrファイル作成

csrファイル作成

openssl req -new -key hogehoge.co.jp.key -out hogehoge.co.jp.csr

 

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:JP

State or Province Name (full name) :Tokyo     

Locality Name (eg, city) [Default City]:Bunkyo

Organization Name (eg, company) [Default Company Ltd]:hoge Inc.

Organizational Unit Name (eg, section) :

Common Name (eg, your name or your server's hostname) :hogehoge.co.jp

Email Address :

 

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password :

An optional company name :

 

 

3. crtファイル作成

openssl x509 -req -in hogehoge.co.jp.csr -signkey hogehoge.co.jp.key -out hogehoge.co.jp.crt

Signature ok

subject=/C=JP/ST=Tokyo/L=Bunkyo/O=hogehoge.co.jp Inc./CN=hogehoge.co.jp

Getting Private key 

 

 

4. Apache confファイル作成

vim /etc/httpd/conf.d/hogehoge.co.jp.conf

<VirtualHost *:443>

    ServerName hogehoge.co.jp:443

    DocumentRoot "/var/www/html/hogehoge.co.jp/htdocs"

    ErrorLog logs/hogehoge.co.jp-ssl_error.log

    TransferLog logs/hogehoge.co.jp-ssl_access.log

    LogLevel warn

    SSLEngine on

    SSLProtocol all -SSLv2

    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

 

    SSLCertificateFile /etc/httpd/ssl/hogehoge.co.jp.crt

    SSLCertificateKeyFile /etc/httpd/ssl/hogehoge.co.jp.key

    <Files ~ "\.(cgi|shtml|phtml|php3?)$">

        SSLOptions +StdEnvVars

    </Files>

    <Directory "/var/www/cgi-bin">

        SSLOptions +StdEnvVars

    </Directory>

 

    SetEnvIf User-Agent ".*MSIE.*" \

            nokeepalive ssl-unclean-shutdown \            downgrade-1.0 force-response-1.0

 

    CustomLog logs/ssl_request_log \

         "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

 

 

 

5. iptables 443ポート解放

vim /etc/sysconfig/iptables

-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

service iptables restart

iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]

iptables: ファイアウォールルールを消去中:                  [  OK  ]

iptables: モジュールを取り外し中:                             [  OK  ]

iptables: ファイアウォールルールを適用中:                    [  OK  ]

 

443 ポートが解放された事を確認

netstat -lntp

 

 

6. Apache 再起動

service httpd configtest

service httpd restart

 

7. KEYの確認

openssl rsa -text -noout -in hogehoge.co.jp.key

 

7. CSRの確認

openssl req -text -noout -in hogehoge.co.jp.csr

 

9. CRTの確認

openssl x509 -text -noout -in hogehoge.co.jp.crt

 

 

 

su / sudo 権限の設定

≪suコマンドの実行可能ユーザーを制限≫

suコマンドは system グループに所属するユーザーのみが実行出来るように設定する。

 

system グループを作成する

groupadd system

作成された事を確認

grep "system" /etc/group

 

system グループに kmurakoshi ユーザーを追加

usermod -G system kmurakoshi

grep "system" /etc/group

 

/etc/login.defsの編集

/etc/login.defsに以下の行を追記してsuコマンドの制限を有効にする。

vim /etc/login.defs

SU_WHEEL_ONLY yes

 

/etc/pam.d/suの編集

suコマンド実行可能なグループ(system)を設定

vim /etc/pam.d/su

#auth       required      pam_wheel.so use_uid

 ↓ 

auth       required      pam_wheel.so use_uid group=system

 

/etc/groupの編集

/etc/groupの system に、suコマンドの実行を許可するユーザー(kmurakoshi)を追加。

vim /etc/group

system:x:1001:root,kmurakoshi

 

変更した設定を有効にするために、システムを再起動。

shutdown -r now

 

設定確認用のテストユーザー作成

useradd hoge

passwd hoge

 

suコマンド実行可能なユーザー(kmurakoshi)

[kmurakoshi@localhost ~]$ su -

Password:

[root@localhost ~]#

 

suコマンド実行不可能なユーザー(hoge)

[hoge@localhost ~]$ su -

Password:

su: incorrect password

[hoge@localhost ~]$

 

 

≪sudo 権限の設定≫

sudoコマンドは system,manager グループに所属するユーザーのみが実行出来るように設定する。

manager グループを作成する

groupadd manager

作成された事を確認

grep "manager" /etc/group

 

manager ユーザーを作成

useradd manager

passwd manager

 

manager グループに manager ユーザーを追加

usermod -G manager manager

grep "manager" /etc/group

 

/etc/sudoers を visudo コマンドから編集

%manager        ALL=(ALL)       ALL

 %system         ALL=(ALL)       ALL

 

su権限を禁止した場合には以下のような設定を施す

Cmnd_Alias NOTSU = /bin/su

 %manager        ALL=(ALL)       ALL,!NOTSU

 

変更した設定を有効にするために、システムを再起動。

shutdown -r now

 

ユーザーにPATH を通しておく。

su - kmurakoshi

vim .bash_profile

PATH=$PATH:$HOME/bin/

 ↓

PATH=$PATH:$HOME/bin:/sbin:/usr/sbin/

source .bash_profile

 

sudo コマンドの実行確認

su - kmurakoshi

[kmurakoshi@localhost ~]$ sudo service httpd restart

Password: (passwd で設定したパスワードを入力)

Stopping httpd:                                            [  OK  ]

Starting httpd:                                            [  OK  ]

 

 

 

 

 

imagemagick インストール

PHPimagemagickを使用できるようにする。

imagemagick をインストール

yum -y install gcc

yum -y install ImageMagick ImageMagick-devel

yum -y install php-pear php53-devel

yum --enablerepo=remi,remi-php54 install php-devel 

pecl install imagick

 

imagick.soファイルがある場所を検索

find / -name imagick.so

/usr/lib/php/modules/imagick.so

 

 

php.ini の設定 (追記)

extension_dir=/usr/lib/php/modules/

extension=imagick.so

 

apache 再起動

service httpd restart

 

phpinfo で imagick が使用可能になっていることを確認

php -i | grep imagick

imagick

imagick module => enabled

imagick module version => 3.1.2

imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator

imagick.locale_fix => 0 => 0

imagick.progress_monitor => 0 => 0

 

infophp で imagick が表示されない場合には、以下コマンドを実行

restorecon /usr/lib/php/modules/imagick.so

 

DBサーバ ( MySQL) 外部ホストから接続設定

DBサーバ ( MySQL)  へ外部ホストから接続するための設定方法を記載する。

(例) DBサーバ : 192.168.154.128

 WEBサーバ : 192.168.154.130

 

 

DBサーバに ssh 接続後 mysql コンソールで DB 接続を行う。

mysql -u root -p

 

WEBサーバ : 192.168.154.130 から接続するための、

アプリケーション用 スキーマとユーザを作成。

create database apps_db default character set utf8;

grant all privileges on apps_db.* to apps_user@localhost identified by 'apps_password';

flush privileges;

 

apps_userユーザ確認を実施

use mysql;

select user, host from user;

+-----------+-----------------------+

| user      | host                  |

+-----------+-----------------------+

| repl      | %                     |

| repl      | 127.0.0.1             |

| root      | 127.0.0.1             |

|           | localhost             |

| apps_user | localhost             |

| root      | localhost             |

|           | localhost.localdomain |

| root      | localhost.localdomain |

+-----------+-----------------------+

 

apps_user ユーザ が WEBサーバ (192.168.154.130) から apps_db へアクセスできるように設定。

grant all privileges on apps_db.* to apps_user@"192.168.154.130" identified by 'apps_password' with grant option ;

 

DBサーバ (192.168.154.128) の iptables にWEBサーバ(192.168.154.130) から

3306 ポートへ接続できるようにポート解放の設定を追加。

vim /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -s 192.168.154.130 -p tcp --dport 3306 -j ACCEPT

service iptables restart

 

WEBサーバ (192.168.154.130) から DBサーバ (192.168.154.128) に接続テスト。

WEBサーバに ssh 接続し以下コマンドを実行。

mysql -h 192.168.154.128 --port=3306 -u apps_user -p;

 

 

Snort インストール

不正アクセス検知システムとしてネットワーク型IDSのSnortを導入。

Snortが抽出した不正アクセスログをWebブラウザ上で確認できるようにするためにSnortSnarfも導入。

Snort不正アクセスの判断をするために参照するルールファイルの最新化は、

Oinkmasterを導入して自動化。

(参考サイト:http://www1.matsue-torisen.co.jp/~naruse/Estab/CentOS/snort.html)

 

snortRPM作成に必要なパッケージインストール

yum -y install libpcap libpcap-devel pcre-devel libdnet-devel

 

libpcapのバージョンを確認

(libpcapが下記のようにバージョン1.0以下の場合、

daqがインストールできないのでアップデート作業を行う必要がある)

rpm -q libpcap

libpcap-0.9.4-15.el5

 

libpcapをバージョン1.0以上にアップデートする

cd /usr/local/src

wget http://www.tcpdump.org/release/libpcap-1.5.3.tar.gz

tar zxvf libpcap-1.5.3.tar.gz

cd libpcap-1.5.3

./configure

make

make install

yum update libpcap

 

daq ダウンロード

wget http://www.snort.org/downloads/2776

SRPMファイルのインストール

rpm -ivh rpm -ivh daq-2.0.2-1.src.rpm\?AWSAccessKeyId\=AKIAJ65S5YX6KA26VRJQ\&Expires\=1393062503\&Signature\=xCmpA0q62EN%2Fq2nyCI8rGWJ6UkU\=

rpmファイルの作成

rpmbuild -bb --clean /usr/src/redhat/SPECS/daq.spec

  

Snort ダウンロード

wget http://www.snort.org/downloads/2785

SRPMファイルのインストール

rpm -ivh snort-2.9.6.0-1.src.rpm\?AWSAccessKeyId\=AKIAJ65S5YX6KA26VRJQ\&Expires\=1393059983\&Signature\=w5JA7RljNsRQSNTjHLFyVhrQATM\=

rpmファイルの作成

rpmbuild -bb --clean /usr/src/redhat/SPECS/snort.spec

rpmファイルのインストール

rpm -ivh /usr/src/redhat/RPMS/i386/snort-2.6.1.3-1.i386.rpm

ダウンロードしたファイルを削除

rm -f snort-2.6.1.3-1.src.rpm

SRPMからRPMへのビルドにより作成されたファイル群を削除

rm -f /usr/src/redhat/RPMS/i386/snort-*

Snortのソースを削除

rm -f /usr/src/redhat/SOURCES/snort-2.6.1.3.tar.gz

SPECファイルの削除

rm -f /usr/src/redhat/SPECS/snort.spec