Infra DevOps

インフラ構築のナレッジや、運用の自動簡易化に関する記事を書いていこうと思います

ソースコードを使ったapacheインストール

yumrpmだと利用できるバージョンが限られていたりするので

基本的にサービスの運用で利用するapacheについてはソースコンパイル

インストールを基本にすべきだと思います。

 

apacheユーザで起動させ、DOS対策も考えmod_dosdetectorの設定も含む

apacheインストール手順を記載します。

 

 

-------------------------------------------

rootユーザにスイッチ

  su - root

 

ソースコンパイル用のコンパイラインストール

  yum install gcc gcc-c++

 

apache前提条件のopenssl-develソフトウェアインストール

  yum install openssl-devel

 

こちらもapache前提条件のPCREインストール

  mkdir -p /usr/local/src

  mkdir -p /usr/local/src

  cd /usr/local/src
  wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz
  tar zxvf pcre-8.38.tar.gz
  cd /usr/local/src/pcre-8.38 
  ./configure
  make
  make install

 

apacheのソース用意

  cd /usr/local/src
  wget http://ftp.jaist.ac.jp/pub/apache/httpd/httpd-2.4.25.tar.gz
  tar zxvf httpd-2.4.25.tar.gz

 

apache前提条件のAPR用意
  wget http://ftp.jaist.ac.jp/pub/apache/apr/apr-1.5.2.tar.gz
  wget http://ftp.jaist.ac.jp/pub/apache/apr/apr-util-1.5.4.tar.gz
  tar zxvf apr-1.5.2.tar.gz
  tar zxvf apr-util-1.5.4.tar.gz
  mv apr-1.5.2 /usr/local/src/httpd-2.4.25/srclib/apr
  mv apr-util-1.5.4 /usr/local/src/httpd-2.4.25/srclib/apr-util

apacheソースコードのビルド、インストール
  cd /usr/local/src/httpd-2.4.25
  ./configure \
  --with-mpm=event \
  --enable-mods-shared="all ssl proxy cache cache_disk" \
  --sysconfdir=/etc/httpd/conf \
  --datadir=/var/www
  make
  su -
  cd /usr/local/src/httpd-2.4.25
  make install

apacheユーザ作成(/usr/share/doc/setup-2.5.58/uidgidに従う)
  groupadd -g 48 apache
  useradd -u 48 -g apache -d /var/www -s /sbin/nologin apache

ファイル所有者変更
  chown -R apache:apache /usr/local/apache2
  mkdir -p /var/www/html
  chown -R apache:apache /var/www
  ls -l /usr/local | grep apache2

シンボリックリンク作成(アップデートなどを考えたメンテナンス性向上のため)
  mv /usr/local/apache2 /usr/local/apache2.4.25
  ln -s /usr/local/apache2.4.25 /usr/local/apache2
  ls -l /usr/local

起動スクリプト作成、登録
  cp /usr/local/src/httpd-2.4.25/build/rpm/httpd.init /etc/init.d/httpd
  chmod 755 /etc/init.d/httpd
  chown apache:apache /etc/init.d/httpd
  ls -l /etc/init.d/httpd
  vi /etc/init.d/httpd
    ~~~~~
    httpd=${HTTPD-/usr/local/apache2/bin/httpd}
    pidfile=${PIDFILE-/usr/local/apache2/logs/${prog}.pid}
    ~~~~~
  chkconfig --add httpd
  chkconfig --list httpd
  chkconfig --level 35 httpd on
  chkconfig --list httpd

httpd.confファイル編集
  cd /etc/httpd/conf
  cp -p httpd.conf httpd.conf.`date +%Y%m%d`
  vi httpd.conf
    ~~~~~
    LoadModule rewrite_module modules/mod_rewrite.so            ★デフォルトから修正
    LoadModule dosdetector_module modules/mod_dosdetector.so    ★デフォルトから追加
   
    User apache    ★デフォルトから修正
    Group apache   ★デフォルトから修正
   
    # mod dosdetector Settings                                  ★デフォルトから追加
    Include /etc/httpd/conf/extra/httpd-mod_dosdetector.conf    ★デフォルトから追加

    ~~~~~
   

 

mod_dosdetectorソースコード入手して、
サーバ上の/usr/local/srcに格納してください
  mod_dosdetector-0.2.tar.gz(http://sourceforge.jp/projects/sfnet_moddosdetector/releases/)
  mod_dosdetector-0.2-apache2.4.patch.gz(http://ftp.momo-i.org/pub/www/patch/)

mod_desdetectorへのパッチ適用
  cd /usr/local/src
  tar zxvf mod_dosdetector-0.2.tar.gz
  gunzip mod_dosdetector-0.2-apache2.4.patch.gz
  mv mod_dosdetector-0.2-apache2.4.patch ./mod_dosdetector-0.2
  cd /usr/local/src/mod_dosdetector-0.2
  patch < mod_dosdetector-0.2-apache2.4.patch

mod_desdetectorのmakeファイルを今回の環境用に修正
  vi Makefile
  ~~~~~
    APXS=/usr/local/apache2/bin/apxs    ★デフォルトから修正

  vi mod_dosdetector.spec
  ~~~~~
    %define apxs               /usr/local/apache2/bin/apxs ★デフォルトから修正

mod_dosdetectorコンパイル、インストール
  cd /usr/local/src/mod_dosdetector-0.2
  make
  make install
 
mod_dosdetectorのコンフィグファイル作成
  cd /etc/httpd/conf/extra
  vi httpd-mod_dosdetector.conf
    ~~~~~
    #
    # The measure against a dos attack
    #
    <IfModule dosdetector_module>
       DoSDetection On
       DoSThreshold 600
       DoSHardThreshold 1800
       DoSPeriod 60
       DoSBanPeriod 600
       DoSTableSize 100
       DoSIgnoreContentType js|css|jpg|gif|png|bmp|htm|html
    </IfModule>

    <IfModule rewrite_module>
       RewriteEngine On
       RewriteCond %{ENV:SuspectHardDoS} =1
       RewriteRule .* - [R=503,L]
       ErrorDocument 503 "Server is busy."
    </IfModule>