AWS EC2 php5.4 LAMP環境の構築
1. データベースサーバなどの関連ソフトウェアのインストール
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 設定
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ログインができない。
chroot(FTPログイン時にユーザー自身のディレクトリのみを見せる)を有効にする。
#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
#SELINUX=enforcing
SELINUX=disabled
サーバー再起動を実行
shutdown -r now
再度FTP接続が行い、接続可能になった事を確認。
SSL 証明書発行
特定ドメインにてhttps(443)アクセスを可能にしたい場合のApache設定手順
1. mod_sslの確認とインストール
mod_sslがインストールされているかを確認
何も表示されない場合には 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ファイル作成
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ポート解放
-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)
Password:
su: incorrect password
≪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
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 インストール
PHPでimagemagickを使用できるようにする。
imagemagick をインストール
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 が使用可能になっていることを確認
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 ポートへ接続できるようにポート解放の設定を追加。
-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)
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
ダウンロードしたファイルを削除
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ファイルの削除