CentOS6.6+httpd2.4.16+Mariadb10.0.20+php5.6.11 Source 설치....

by 조쉬 posted Sep 25, 2016
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

CentOS6.6 64bit 최소설치를 한 상태에서 최신 APM 소스 설치를 진행해 보았습니다.

CentOA6.6. 최소설치에 대해서는 많은 블로거들이 공개하니 여기선 언급하지 않겠습니다....^^;;

아래 작업중 에러가 나는 프로그램에 대해서는 첨부한 파일을 이용해서 설치 해 주시면 에러없이 설치가 가능 합니다.

APM 설치 작업중 복사&붙혀넣기 하실때 # 은 제외하고 작업해 주셔야 합니다.


@ apache /usr/local/apache/
@ mariadb /usr/local/mariadb/
@ php /usr/local/php/
@ apache-log /logs/
@ db 파일 저장 위치 /usr/local/mariadb/data


@ 패키지 제거 및 설치
# rpm -qa httpd php mysql
# yum remove -y httpd php mysql
# yum -y install ORBit2 PyXML a2ps acpid alsa-lib amtu aspell at atk audiofile audit-libs-python autoconf* autofs automake* avahi avahi-glib bc bind bind-chroot bind-libs bind-utils cairo ccid compat-libstdc++-33 conman cpp cpuspeed crash createrepo crypto-utils cryptsetup-luks cups-libs cvs cyrus-sasl-md5 cyrus-sasl-plain db4-devel dbus-python device-mapper-multipath dhcp dhcp-devel dialog dmraid dos2unix dosfstools dump e2fsprogs-devel ed eject elfutils elfutils-libs enscript expat-devel expect expect-devel expectk fetchmail file finger flex fontconfig fontconfig-devel foomatic ftp gcc gcc-c++ gdb gdbm-devel gettext gfs2-utils glib2-devel glibc-devel glibc-headers gmp-devel gnutls gpm gtk2 hal hdparm hesiod hicolor-icon-theme imake iptraf iptstate ipvsadm irqbalance jwhois kernel-devel kernel-headers keyutils-libs-devel kpartx krb5-devel krb5-workstation ksh lcms lftp libICE libSM libX11 libX11-devel libXau libXau-devel libXcursor libXdmcp libXdmcp-devel libXext libXfixes libXft libXi libXinerama libXpm libXpm-devel libXrandr libXrender libXt libXxf86vm libaio libaio-devel libart_lgpl libbonobo libc-client libcurl-devel libdaemon libevent libfontenc libgomp libgssglue libhugetlbfs libhugetlbfs-devel libidn-devel libmng libnl libnl-devel libpcap libselinux-devel libselinux-python libsepol-devel libsmi libstdc++-devel libsysfs libtiff libtool libtool-ltdl libwvstreams libxml2-devel libxml2-python libxslt libxslt-python lksctp-tools logwatch lrzsz lsof m2crypto mailcap mailx make nasm man man-pages man-pages-ko mc mcstrans mdadm memtest86+ mesa-libGL mesa-libGL-devel mgetty microcode_ctl mkbootdisk mlocate mrtg mt-st mtools mtr mutt nc ncurses-devel net-snmp-libs netpbm nfs-utils nfs-utils-lib nmap nscd nss_db ntp ntsysv numactl oddjob openssh-clients openssl-devel pam-devel pam_krb5 pam_passwdqc pam_pkcs11 pango parted parted-devel patch pax pciutils pcsc-lite perl perl-Archive-Tar perl-BSD-Resource perl-Compress-Zlib perl-DBI perl-Digest-HMAC perl-Digest-SHA1 perl-HTML-Parser perl-HTML-Tagset perl-IO-Socket-INET6 perl-IO-Socket-SSL perl-IO-Zlib perl-Net-IP perl-Net-SSLeay perl-Newt perl-Socket6 perl-String-CRC32 perl-URI perl-libwww-perl pkgconfig pm-utils postgresql-libs prelink procmail psacct psutils pulseaudio-esound-compat pyOpenSSL pykickstart pyorbit pyparted python-pyblock pyxf86config quota rdate rdist readahead rmt rpcbind rpm-build rsh rsync rusers rwho samba samba-client samba-common samba-swat sendmail sendmail-cf setools setserial setuptool shared-mime-info sip sos spamassassin squashfs-tools strace stunnel symlinks sysfsutils syslinux sysstat system-config-date system-config-firewall talk tcl tcp_wrappers tcpdump tcsh telnet telnet-server time tk tmpwatch traceroute tree ttmkfdir unix2dos unixODBC unzip usbutils usermode vconfig vim-common vim-enhanced vsftpd wget wireless-tools words xinetd xorg-x11-proto-devel yp-tools ypbind ypserv zip zlib-devel GConf2 ImageMagick ImageMagick-perl avahi-libs bwidget cloog-ppl crda cryptsetup-luks-libs cups db4-cxx deltarpm desktop-file-utils device-mapper-multipath-libs dmidecode dmraid-events docbook-dtds flac foomatic-db foomatic-db-filesystem foomatic-db-ppds ghostscript ghostscript-fonts gnome-doc-utils-stylesheets gnome-python2 gnome-python2-canvas gnome-user-docs gnome-vfs2 gpm-libs groff-perl gstreamer gstreamer-tools hal-info hal-libs html2ps hunspell iw jasper-libs kpathsea lcms-libs libIDL libX11-common libXcomposite libXdamage libXdamage-devel libXext-devel libXfixes-devel libXfont libXres libXtst libXxf86vm-devel libasyncns libcanberra libcanberra-gtk2 libcom_err-devel libcroco libdrm-devel libedit libglade2 libgnomecanvas libgsf libnetfilter_conntrack libnfnetlink libnotify libogg libpaper librsvg2 libsamplerate libsndfile libtalloc libtasn1 libtdb libthai libtirpc libusb1 libvorbis libwmf-lite libwnck libxcb libxcb-devel lm_sensors-libs mesa-dri-drivers mozilla-filesystem mpfr mrtg-libs netpbm-progs notification-daemon ntpdate openjpeg-libs pcsc-lite-libs perl-Compress-Raw-Zlib perl-Crypt-OpenSSL-Bignum perl-Crypt-OpenSSL-RSA perl-Crypt-OpenSSL-Random perl-Date-Manip perl-Digest-SHA perl-Encode-Detect perl-ExtUtils-MakeMaker perl-ExtUtils-ParseXS perl-IO-Compress-Base perl-IO-Compress-Zlib perl-Mail-DKIM perl-MailTools perl-Module-Pluggable perl-Net-DNS perl-Net-LibIDN perl-NetAddr-IP perl-Package-Constants perl-Pod-Escapes perl-Pod-Simple perl-SNMP_Session perl-Test-Harness perl-Time-HiRes perl-TimeDate perl-YAML-Syck perl-devel perl-libs perl-version pixman poppler poppler-data poppler-utils portreserve ppl psutils-perl pulseaudio pulseaudio-libs pycairo pygobject2 pygtk2 pygtk2-libglade python-decorator python-deltarpm python-slip python-slip-dbus rarian rarian-compat rtkit samba-winbind-clients setools-console setools-gui setools-libs setools-libs-tcl sgml-common sgpio sound-theme-freedesktop speex startup-notification system-config-date-docs system-config-firewall-tui tex-preview texinfo texinfo-tex texlive texlive-dvips texlive-latex texlive-texmf texlive-texmf-dvips texlive-texmf-errata texlive-texmf-errata-dvips texlive-texmf-errata-fonts texlive-texmf-errata-latex texlive-texmf-fonts texlive-texmf-latex texlive-utils tokyocabinet urlview urw-fonts usermode-gtk xcb-util xml-common xorg-x11-font-utils xulrunner xz xz-lzma-compat yelp lksctp-tools-devel libtool-ltdl-devel gmp mhash mhash-devel gdbm zlib curl g++ openssl bzip2-devel libc-client-devel bison system-config-securitylevel libc-client-devel readline-devel compat-readline43 distcache-devel cmake lynx php-snmp gd-devel glibc-* nano

@ 기타 모듈 설치
# cd /usr/local/src
# mkdir etc
# cd etc
# wget http://download.savannah.gnu.org/releases/freetype/freetype-2.6.tar.gz
# wget https://bitbucket.org/libgd/gd-libgd/downloads/libgd-2.1.1.tar.gz
# wget http://ijg.org/files/jpegsrc.v9a.tar.gz
# wget http://sourceforge.net/projects/libpng/files/libpng16/1.6.18rc03/libpng-1.6.18rc03.tar.gz
# wget ftp://ftp.cac.washington.edu/imap/imap-2007f.tar.gz
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz
# wget http://heanet.dl.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz
# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

# tar zxvf freetype-2.6.tar.gz; tar zxvf libgd-2.1.1.tar.gz; tar zxvf jpegsrc.v9a.tar.gz; tar zxvf libpng-1.6.18rc03.tar.gz; tar zxvf imap-2007f.tar.gz; tar zxvf pcre-8.37.tar.gz; tar zxvf libmcrypt-2.5.8.tar.gz; tar zxvf libiconv-1.14.tar.gz
# cd /usr/local/src/etc/jpeg-9a;./configure --prefix=/usr/local/jpeg --enable-shared --enable-static;make clean;make -j4; make install;
# cd /usr/local/src/etc/libpng-1.6.18rc03
# cp scripts/makefile.linux Makefile
# make clean;make -j4;make install
# cd /usr/local/src/etc/freetype-2.6
# make clean;./configure --prefix=/usr/local/freetype;make -j4;make install
# cd /usr/local/src/etc/libgd-2.1.1
# make clean;./configure --prefix=/usr/local/gd;make -j4;make install
# cd /usr/local/src/etc/imap-2007f

Makefile을 오픈하여 EXTRACFLAGS= 를 EXTRACFLAGS=-fPIC 로 수정 합니다.

# make clean;make lr5
# mkdir /usr/local/imap
# mkdir /usr/local/imap/include
# mkdir /usr/local/imap/lib
# cp c-client/*.h /usr/local/imap/include/
# cp c-client/*.c /usr/local/imap/lib/
# cp c-client/c-client.a /usr/local/imap/lib/libc-client.a
# cp imapd/imapd /usr/sbin/
# vi /etc/xinetd.d/imapd

service imap
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/imapd
log_on_success += HOST DURATION
log_on_failure += HOST
}

# service xinetd restart
# cd /usr/local/src/etc/pcre-8.37
# make clean;./configure --prefix=/usr/local --enable-unicode-properties=yes;make -j4;make install
# cd /usr/local/src/etc/libmcrypt-2.5.8
# make clean;./configure --prefix=/usr/local;make -j4;make install
# cd /usr/local/src/etc/libiconv-1.14
# make clean;./configure --prefix=/usr/local;make -j4;
# make install
# ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2

vi /etc/sysconfig/selinux 를 열어
SELINUX=enforcing 를 SELINUX=disabled 로 바꿔주고 서버 재부팅 한다.

reboot



@ 아파치 설치전 apr 설치
# cd /usr/local/src
# wget http://archive.apache.org/dist/apr/apr-1.5.2.tar.gz
# wget http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
# wget http://archive.apache.org/dist/apr/apr-iconv-1.2.1.tar.gz
# tar zxvf apr-1.5.2.tar.gz
# cd /usr/local/src/apr-1.5.2
# ./configure --prefix=/usr/local/apr
# make;make install
# cd /usr/local/src
# tar zxvf apr-util-1.5.4.tar.gz
# cd /usr/local/src/apr-util-1.5.4
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make;make install
# cd /usr/local/src
# tar zxvf apr-iconv-1.2.1.tar.gz
# cd apr-iconv-1.2.1
# ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
# make;make install

*** httpd 2.4.16 설치 ***

cd /usr/local/src
wget http://mirror.apache-kr.org//httpd/httpd-2.4.16.tar.gz
tar zxvf httpd-2.4.16.tar.gz


prefork 설정시
# vi server/mpm/prefork/prefork.c (73번 라인)
DEFAULT_SERVER_LIMIT의 상수값을 1024로 수정.
worker 설정시
# vi server/mpm/worker/worker.c (84번 라인)
DEFAULT_SERVER_LIMIT의 상수값을 64로 수정.


# cd httpd-2.4.16
./configure \
--prefix=/usr/local/apache \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util \
--with-z \
--with-pcre \
--enable-mods-static='vhost_alias log_config logio mime mime_magic alias headers status http negotiation' \
--enable-mods-shared='file_cache disk_cache deflate expires usertrack unique_id actions userdir autoindex cgi cache mem_cache distcache auth_digest rewrite remoteip' \
--enable-rewrite \
--enable-deflate \
--enable-expires \
--enable-headers \
--enable-cache \
--enable-ssl \
--disable-imagemap \
--disable-include \
--disable-charset-lite \
--disable-reqtimeout \
--disable-cgid \
--disable-asis \
--enable-so \
--enable-authn-socache=no \
--enable-socache-shmcb \
--enable-socache-dbm=no \
--enable-ldap=no \
--enable-authnz-ldap=no \
--enable-cgid=no \
--enable-dav=no \
--enable-dav-fs=no \
--enable-isapi=no \
--enable-ext-filter=no \
--enable-authnz-ldap=no \
--enable-lbmethod-byrequests=no \
--enable-lbmethod-bytraffic=no \
--enable-lbmethod-bybusyness=no \
--enable-lbmethod-heartbeat=no \
--enable-dav-lock=no \
--enable-mpms-shared=all


이 컴파일 옵션은 다음과 같은 특징을 같습니다.

## LDAP 를 사용할 수 없다.
## DSO 로 컴파일 되었다.
## MPM 을 Loadable MPM으로 컴파일 되었다. 이는 Run-time 에서 MPM 모델을 바꿀 수 있다는 뜻.

# make;make install


httpd의 기본적으로 사용할 계정을 생성해 줍니다.
# /usr/sbin/useradd -c "Apache" -u 48 -s /sbin/nologin -r -d /usr/local/apache/htdocs apache

그리고 나서 httpd.conf 파일을 다음과 같이 수정해 줍니다.
vim /usr/local/apache/conf/httpd.conf
User apache
Group apache

'Loadable MPM'(–enable-mpms-shared=all) 으로 컴파일 되었기 때문에 자신이 사용할 MPM 모듈을 활성화 해줍니다.
#LoadModule mpm_event_module modules/mod_mpm_event.so # event MPM
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so # prefork
#LoadModule mpm_worker_module modules/mod_mpm_worker.so # worker


그리고 ServerName 을 자신의 서버 환경에 맞게 적어줍니다.

ServerName localhost:80
서버관리자 메일주소 설정
ServerAdmin webmaster@localhost

웹 페이지 접속시 기본적으로 읽어 들일 파일명 설정
DirectoryIndex index.html 를 찾아 DirectoryIndex index.html index.htm index.php index.php3 index.cgi index.jsp 로 수정
아래와 같이 추가 합니다.
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .htm .html .php .ph php3 .php4 .phtml .inc -->추가
AddType application/x-httpd-php-source .phps -->추가
LoadModule php5_module modules/libphp5.so -->PHP 설치 후 없다면 추가
주석제거
# AddHandler cgi-script .cgi
몇가지 주석 및 제거 - 필요에 따라 더 적용해도 무방함
LoadModule userdir_module modules/mod_userdir.so <-- 주석제거
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so <-- 주석제거
Include conf/extra/httpd-mpm.conf <-- 주석제거
Include conf/extra/httpd-userdir.conf <-- 주석제거
Include conf/extra/httpd-vhosts.conf <-- 주석제거
Include conf/extra/httpd-default.conf <-- 주석제거
인터넷주소 rewrite 모드 사용을 위한 설정

AllowOverride All <-- 수정
Require all denied

#vi /usr/local/apache/conf/extra/httpd-userdir.conf
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec 를
Options MultiViews SymLinksIfOwnerMatch IncludesNoExec 로
Indexes 를 삭제 한다.
@ 접속이 안될경우 80포트 열어 주어야 한다.

vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT =>추가
/etc/init.d/iptables restart 또는 service iptables restart

cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
@ chkconfig를 이용해서 자동실행 등록해야 하지만 이전에 실행 스크립트 파일에 아래 내용 추가가 선행되어야 한다.
# vi /etc/init.d/httpd
-httpd 파일
# chkconfig: 2345 90 90
# description: init file for Apache server daemon
# processname: /usr/local/apache/bin/apachectl
# config: /usr/local/apache/conf/httpd.conf
# pidfile: /usr/local/apache/logs/httpd.pid
이를 추가한다.
# chkconfig --add httpd
# chkconfig --list | grep httpd
# /etc/init.d/httpd start



*** mariaDB 다운로드 및 설치 ***

# cd /usr/local/src
# wget https://downloads.mariadb.org/f/mariadb-10.0.20/source/mariadb-10.0.20.tar.gz
# tar zxvf mariadb-10.0.20.tar.gz
# cd mariadb-10.0.20
# ln -s /usr/local/lib/libpcre.so.1 /lib64 또는 ln -s /usr/local/lib/libpcre.so.1 /lib
# cd BUILD
# sh autorun.sh
# cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mariadb \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mariadb/data \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATEDX_STORAGE_ENGINE=1 \
-DWITH_ARIA_STORAGE_ENGINE=1 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system

# make;make install

* 사용자 등록

MariaDB 서버의 실행시킬 사용자를 생성한다.

# /usr/sbin/groupadd -g 27 -o -r mysql
# /usr/sbin/useradd -M -g mysql -o -r -d /usr/local/mariadb/data -s /bin/false -c "MariaDB Server" -u 27 mysql

※ 사용자를 mysql로 한것은 mariaDB는 MySQL과의 호환성으로 인하여 mysql로 하였습니다.

* 소유권 변경

# mkdir -p /usr/local/mariadb/InnoDB/redoLogs
# mkdir -p /usr/local/mariadb/InnoDB/undoLogs
# chown -R mysql /usr/local/mariadb/data
# chgrp -R mysql /usr/local/mariadb
# mkdir /usr/local/mariadb/logs /usr/local/mariadb/tmp
# chown mysql.mysql /usr/local/mariadb/tmp
# chown mysql.mysql /usr/local/mariadb/logs
# chown -R mysql:mysql /usr/local/mariadb/data

* 자동 실행 등록
# cp /usr/local/mariadb/support-files/mysql.server /etc/rc.d/init.d/mysqld

# chmod 755 /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig --list | grep mysqld


* 시스템 테이블 생성
# cd /usr/local/mariadb
# ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb --datadir=/usr/local/mariadb/data


* 라이브러리를 추가
# echo "/usr/local/mariadb/lib" > /etc/ld.so.conf.d/mysql.conf


* 64bit 라면 라이브러리를 위해서 심볼릭 링크

# cd /usr/local/mariadb
mariadb# ln -s lib lib64


# cd /usr/local/mariadb/support-files
# cp my-huge.cnf /etc/my.cnf
# chmod 755 /etc/init.d/mysqld
# /etc/init.d/mysqld start

※ 다른버전과 다르게 "character-set-server" 가 아닌 "character_set_server" 처럼 아래쪽라인 (_) 입니다.
이게 맞지 않을 경우 PID 에러라고 하면서 mysql이 실행되지 않을 수 있습니다.


* root 비밀번호 변경

# /usr/local/mariadb/bin/mysql -uroot -p
Enter password: (그냥 Enter 누르시면 됩니다.)

mysql> USE mysql;
mysql> UPDATE user SET password=password('12dnjf27dlf') WHERE user='root';
mysql> FLUSH privileges;


* 캐릭터셋 확인

mysql> show variables like 'c%';

+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
| completion_type | NO_CHAIN |
| concurrent_insert | AUTO |
| connect_timeout | 10 |
+--------------------------+----------------------------------+
14 rows in set (0.00 sec)

설치 작업이 끝났다면 익명접근권한을 삭제하자. ( mysql 콘솔에 그냥 접근을 못하게 해야 함.)
# /usr/local/mariadb/bin/mysql -u root -p
# Enter password:
# mysql> USE mysql;
# mysql> delete from user where password = "";
# mysql> exit
# /usr/local/mariadb/bin/mysqladmin -u root -p reload
# Enter password:



*** PHP 5.6.11 설치 및 설정 ***

# cd /usr/local/src
# wget http://kr1.php.net/distributions/php-5.6.11.tar.gz
# tar zxvf php-5.6.11.tar.gz
# cd php-5.6.11

# ./configure --prefix=/usr/local/php \
--enable-fpm \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-libdir=lib \
--with-gettext \
--with-mhash \
--with-gmp \
--with-gd \
--with-jpeg-dir=/usr/local/jpeg \
--with-png-dir=/usr/local/lib \
--with-mcrypt=/usr/local/lib \
--with-iconv=/usr/local/lib \
--with-freetype-dir=/usr/local/freetype \
--with-config-file-path=/usr/local/lib \
--with-zlib \
--enable-gd-native-ttf \
--enable-bcmath \
--enable-exif \
--with-mcrypt \
--with-zlib \
--with-bz2 \
--enable-mbstring \
--enable-opcache \
--with-curl \
--with-openssl \
--with-imap=/usr/local/imap \
--with-imap-ssl \
--with-pdo-mysql=/usr/local/mariadb \
--with-mysql=/usr/local/mariadb \
--with-mysqli=/usr/local/mariadb/bin/mysql_config \
--enable-pcntl \
--enable-mbregex \
--with-mhash \
--enable-zip \
--with-pcre-regex \
--with-libxml-dir=/usr \
--with-kerberos \
--disable-debug \
--enable-soap \
--with-gdbm \
--enable-ftp \
--enable-calendar \
--enable-shmop \
--enable-inline-optimization \
--enable-sigchild \
--enable-sockets \
--enable-maintainer-zts

# make; make install

* php.ini 파일을 다음과 같이 복사해 줍니다.

# cp php.ini-production /usr/local/lib/php.ini


추가작업은 아래와 같이

# vi /root/.bash_profile
PATH=$PATH:$HOME/bin 를
PATH=$PATH:$HOME/bin:/usr/local/mariadb/bin:/usr/local/apache/bin:/usr/local/php/bin 로 수정
source /root/.bash_profile
service httpd restart
@ php.ini 설정
# vi /usr/local/lib/php.ini
post_max_size = 100M
upload_max_filesize = 100M
allow_url_fopen = Off
short_open_tag = On
disable_functions = exec,passthru,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source 또는


disable_functions = system, show_source, exec, shell_exec, curl_exec, parse_ini_file, curl_multi_exec, proc_open, passthru, set_time_limit, ini_restore, mysql_list_dbs, ini_alter, dl, pfsockopen, openlog, syslog, symlink, link, chgrp, leak, popen, escapeshellcmd, apache_child_terminate, apache_get_modules, apache_get_version, apache_getenv, apache_note, apache_setenv, virtual, mb_send_mail 또는

disable_functions = php_uname, putenv, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, popen, dl, set_time_limit, exec, system, highlight_file, source, show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix_getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname


자주 살펴보는 파일은 심볼릭 링크를 설정해서 /root/conf 파일에 모아두자
# mkdir /root/conf
# cd /root/conf
# ln -s /usr/local/lib/php.ini /root/conf/php.ini
# ln -s /usr/local/apache/conf/httpd.conf /root/conf/httpd.conf
# ln -s /usr/local/apache/conf/extra/httpd-vhosts.conf /root/conf/httpd-vhosts.conf
# ln -s /usr/local/apache/conf/extra/httpd-ssl.conf /root/conf/httpd-ssl.conf
# ln -s /etc/my.cnf /root/conf/my.cnf
# ln -s /etc/sysconfig/iptables /root/conf/iptables



@ Zendopcache 설치

php 5.5.x 버전 이상에서는 opcache 가 기본 내장되어 있으므로 php 설치시에 --enable-opcache 를 설정해주고 설치한 후
vi /usr/local/lib/php.ini 파일의 [opcache] 하단에 아래와 같이 설정해주고 service httpd restart 하면 적용 된다.

zend_extension=/usr/local/php/lib/php/extensions/no-debug-zts-20131226/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1


@ ioncube_loaders 64비트 설치
# mkdir /usr/local/ioncube
# cd /usr/local/src
# wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
# tar -zxvf ioncube_loaders_lin_x86-64.tar.gz
# cp /usr/local/src/ioncube/ioncube_loader_lin_5.6_ts.so /usr/local/ioncube/

php.ini 하단에 에 추가 [opcache] 맨 위에 extension 입력

[opcache]
zend_extension=/usr/local/ioncube/ioncube_loader_lin_5.6_ts.so
zend_extension=/usr/local/php/lib/php/extensions/no-debug-zts-20131226/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

만약 ioncube_loader 가 적용이 안되면
vi /etc/sysconfig/selinux 를 열어
SELINUX=enforcing 를 SELINUX=disabled 로 바꿔주고 서버 재부팅 한다.


@ mod_security 모듈 설치
# cd /usr/local/src
# wget https://www.modsecurity.org/tarball/2.9.0/modsecurity-2.9.0.tar.gz
# tar xvfz modsecurity-2.9.0.tar.gz
# cd modsecurity-2.9.0
# ./autogen.sh
# ./configure --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apr/bin/apr-1-config --with-apu=/usr/local/apr-util/bin/apu-1-config --with-lua --with-pcre=/usr/local/bin/pcre-config
# make && make install

cp /usr/local/src/modsecurity-2.9.0/modsecurity.conf-recommended /usr/local/apache/conf/modsecurity.conf

아파치 환경파일 (http.conf) 추가
아파치 환경파일을 열어 위에서 설치한 모듈을 불러드립니다.
LoadModule security2_module modules/mod_security2.so
그리고, 파일 하단에 다음 문을 추가합니다. 차후 다운로드 받을 룰셋 파일을 불러드리기 위함입니다.

Include conf/modsecurity.conf


# service httpd restart


@ phpMyAdmin 설치
# cd /usr/local/src
# wget http://files.directadmin.com/services/all/phpMyAdmin//phpMyAdmin-4.4.12-all-languages.tar.gz
# tar xvfz phpMyAdmin-4.4.12-all-languages.tar.gz
# mv phpMyAdmin-4.4.12-all-languages pma
# mv pma /usr/local/apache/htdocs
# cd /usr/local/apache/htdocs/pma
# cp config.sample.inc.php config.inc.php

vi config.inc.php

$cfg['Servers'][$i]['auth_type'] = 'cookie'; --> http 로변경 (window 보안)
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['favorite'] = 'pma__favorite';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';

위 항목 주석을 푼다

에러 처리
- The phpMyAdmin configuration storage is not completely configured, some extended features have been deactivated. To find out why click here

- pma 관련 테이블 및 계정을 추가해 준다
- phpmyadmin 폴더에 포함된 sql로 되어있는 파일 실행시킨다
# mysql -uroot -ppassword  # mysql -u root -p
# Enter password:

- 아래 스크립트를 실행한다
mysql> GRANT USAGE ON mysql.* TO 'pma'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost';
mysql> exit


@Mod_Cband 설치

# cd /usr/local/src
# wget http://pkgs.fedoraproject.org/repo/pkgs/mod_cband/mod-cband-0.9.7.5.tgz/5c5d65dc9abe6cdc6931b6dd33be5018/mod-cband-0.9.7.5.tgz
# tar xvfpz mod-cband-0.9.7.5.tgz
# cd mod-cband-0.9.7.5
# ./configure --with-apxs=/usr/local/apache/bin/apxs
# make; make install

설치시 remote_ip 에러가 출력된다면 첨부된 mod_cband.c 파일에서 remote_ip 변수를 client_ip 로 변경후 재컴파일해서 인스톨 한다.


httpd.conf 파일에 추가

#mod-cband
#
# SetHandler cband-status
# Order deny,allow
# Deny from all
# Allow from all
#



SetHandler cband-status
AuthName "트래픽 관리 페이지"
AuthType Basic
AuthUserFile /usr/local/apache/htdocs/cband-status/.htpasswd
require valid-user


SetHandler cband-status-me
Order deny,allow
Deny from all
Allow from all



설치확인
- httpd.conf 파일에
LoadModule cband_module modules/mod_cband.so
줄이 추가된것을 볼 수 있습니다.
- 아파치/modules 디렉토리에
mod_cband.so
파일이 추가 된 것을 볼수 있습니다.

추가설정
아래와 같이 트래픽 리셋창에 접근 할 수 있도록 폴더와 파일을 만든다.
/usr/local/apache/htdocs/cband-status/.htpasswd

reset all 버튼에 마우스 우클릭을 하여 나오는 속성에서 URL를 확인할 수 있습니다. wget 커맨드 뒤에 이 URL을 입력하여 엔터 치면 웹상에서 reset all 버튼을 누르는 것과 같은 효과를 낼 수 있습니다.

텍스트 웹브라우저의 하나인 lynx를 이용하는 방법도 있습니다. 사용법은 아래와 같습니다.
/usr/bin/lynx --source [reset all 버튼의 URL]

lynx 패키지는 CenOS 5.x 이상의 경우 yum으로 간단하게 설치할 수 있습니다.
# yum -y install lynx

wget을 이용하는 방법과 lynx를 이용하는 방법 둘 중에 하나를 골라 cron에 매일 00시 00분에 실행되도록 해서 사용하면 됩니다.
00 00 * * * root /usr/bin/lynx --source [reset all 버튼의 URL]

# service httpd restart


@arpwatch 설치

# yum install arpwatch

# vi /etc/sysconfig/arpwatch 파일을 열서 수정한다.

# -u : defines with what user id arpwatch should run
# -e : the where to send the reports
# -s : the -address
#OPTIonS="-u pcap -e '메일주소' -s '보내는이(Arpwatch)' -n '192.168.1.2/24'"
OPTIonS="-u arpwatch -e '받을메일' -s 'root(Arpwatch)' -n '192.168.1.2/24'"

위 옵션은 다음과 같은 의미를 가진다.
-e : 수신 Email 주소를 의미한다.
-s : 보내는이
-n : 감시할 IP대역
-u : arpwatch를 실행할 사용자

# service arpwatch start
아래와 같은 에러가 뜬다면
#arpwatch (을)를 시작 중: arpwatch: lookup_device: Can't open netlink socket 13:Permission denied

설정파일에서 옵션을 enforcing 에서 disabled 로 수정.
# vi /etc/selinux/config
SELINUX=enforcing => SELINUX=disabled

SELinux 를 재부팅하지 않고 즉시 중지
/usr/sbin/setenforce 0

만약 setenforce 가 없다면 서버를 재부팅해야 합니다.

# cd /usr/local/src
# wget http://standards.ieee.org/regauth/oui/oui.txt
# mv oui.txt /var/lib/arpwatch/ethercodes.dat
이렇게 하면 최신 하드웨어 정보로 업데이트 된다.
# service arpwatch restart



@Webalizer 설치

# cd /usr/local/src
# wget ftp://ftp.mrunix.net/pub/webalizer/webalizer-2.23-08-src.tgz
# tar xvfz webalizer-2.23-08-src.tgz
Webalizer/lang/webalizer_lang.korean 파일을 열어서 학국어가 제대로 보이는지 확인 할것
# mv webalizer-2.23-08 webalizer
# mv webalizer /usr/local
# cd /usr/local/webalizer
# ./configure --with-language=korean --with-gd=/usr/local/gd

configure: error: gd library not found... please install gd. 와 같은 에러가 나오면
yum -y install gd-devel 실행후 rm -f config.cache 하고 다시 configure 한다.

# make && make install
# mkdir conf
# mkdir bin

# cp sample.conf /usr/local/webalizer/conf/nanoomi.org.conf

# vi /usr/local/webalizer/bin/webalizer.sh

#!/bin/bash
/usr/local/bin/webalizer -c /usr/local/webalizer/conf/nanoomi.org.conf > /home/nanoomi/public_html/web_log/nanoomi.org

esc :wq 로 저장한다

# chmod 755 /usr/local/webalizer/bin/webalizer.sh


nanoomi.org.conf 수정

- LogFile : 로그파일 위치
- OutputDir : 분석결과 저장위치
- HistoryName : 사이트명
- ReportTitle : 분석결과 페이지 이름
- HostName : 호스트명 FQDN형식

LogFile /home/nanoomi/public_html/web_log/access_log
OutputDir /home/nanoomi/public_html/web_log
HistoryName nanoomi.org
ReportTitle nanoomi.org WebSite
HostName www.nanoomi.org

아래 구문의 주석(#)을 삭제 한다.
SearchEngine .google. q=
SearchEngine yahoo.com p=
SearchEngine altavista.com q=
SearchEngine aolsearch. query=
SearchEngine ask.co q=
SearchEngine eureka.com q=
SearchEngine lycos.com query=
SearchEngine hotbot.com MT=
SearchEngine msn.com q=
SearchEngine infoseek.com qt=
SearchEngine excite search=
SearchEngine netscape.com query=
SearchEngine mamma.com query=
SearchEngine alltheweb.com q=
SearchEngine northernlight.com qr=


실행은
# sh /usr/local/webalizer/bin/webalizer.sh

crontab 에 저장해서 주기적으로 실행
00 02 * * * su - root -c '/usr/local/webalizer/bin/webalizer.sh'>& /dev/null

웹에서 확인할 경우에는 아래와 같다
http://도메인/web_log




@ClamAV 설치 및 사용법

# cd /usr/local/src
# wget http://sourceforge.net/projects/clamav/files/clamav/0.98.7/clamav-0.98.7.tar.gz
# tar xvfz clamav-0.98.7.tar.gz
# adduser clamav
# cd ./clamav-0.98.7
# ./configure --enable-static --prefix=/usr/local/clamav
# make;make install

디렉토리 생성 및 권한부여
# mkdir /usr/local/clamav/db
# mkdir /usr/local/clamav/log
# chmod 757 /usr/local/clamav/db
# chmod 757 /usr/local/clamav/log
# mkdir /var/run/clamav

파일 add 후 설정 (/usr/local/clamav/etc/clamd.conf, /usr/local/clamav/etc/freshclam.conf)

1) clamd.conf

LocalSocket /var/run/clamav/clamd.socket
FixStaleSocket yes
TCPSocket 3310
TCPAddr 127.0.0.1
MaxThreads 20
User clamav
LogFile /usr/local/clamav/log/clamd.log
LogTime yes
PidFile /usr/local/clamav/log/clamd.pid
DatabaseDirectory /usr/local/clamav/db
DetectBrokenExecutables yes



2) freshclam.conf

DatabaseMirror database.clamav.net
DatabaseDirectory /usr/local/clamav/db/
UpdateLogFile /usr/local/clamav/log/freshclam.log
DatabaseOwner clamav
NotifyClamd /usr/local/clamav/etc/clamd.conf


백신 DB 업데이트 및 스캔

ln -s /usr/local/lib/libiconv.so.2 /usr/lib64
--> 아래 에러 방지
error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory

# /usr/local/clamav/bin/freshclam 업데이트


# /usr/local/clamav/bin/clamscan 현재디렉토리 검사
# /usr/local/clamav/bin/clamscan -r /home 현재디렉토리 하위검사

clamd 데몬실행

# chown -R clamav:clamav /var/run/clamav
# chmod -R 700 /var/run/clamav
# service clamav restart

# /usr/local/clamav/sbin/clamd –config-file=/usr

바이러스 DB 업데이트를 데몬으로 관리 하고자 한다면 아래와 같이 실행한다.
# freshclam -d

이제 바이러스 조회해 봅시다.
# clamscan
# clamscan -r (하위 폴더 까지 조회)

매일 혹은 매시 등 일정 시간 마다 자동으로 조회 하려면 crontb에 등록해서 사용
crontb 에 등록 : /etc/crontab
02 1 * * * su - root /usr/local/clamav/bin/clamscan -r /home



@mod_evasive_1.10.1 설치

mod_evasive - apache DoS, DDoS 공격 방어 모듈로, 초당 일정 횟수 이상 같은 페이지를 요청하는 경우 공격 IP에 대한 접근을 일정시간 차단하는 기능을 합니다.

* mod_evasive 다운로드
# cd /usr/local/src
# wget http://pkgs.fedoraproject.org/repo/pkgs/mod_evasive/mod_evasive_1.10.1.tar.gz/784fca4a124f25ccff5b48c7a69a65e5//mod_evasive_1.10.1.tar.gz

* 압축해제
# tar zxvf mod_evasive_1.10.1.tar.gz

* 디렉토리 이동
# cd mod_evasive
# ls -alh


합계 120K
drwxr-xr-x 2 root root 4.0K 10월 9 2005 .
drwxr-xr-x 7 root root 4.0K 8월 13 05:30 ..
-rw-r--r-- 1 root root 26 9월 2 2003 .cvsignore
-rw-r--r-- 1 root root 1.4K 10월 9 2005 CHANGELOG
-rw-r--r-- 1 root root 18K 8월 31 2003 LICENSE
-rw-r--r-- 1 root root 470 10월 9 2005 Makefile.tmpl
-rw-r--r-- 1 root root 14K 10월 9 2005 README
-rw-r--r-- 1 root root 19K 10월 9 2005 mod_evasive.c (apache 1.x)
-rw-r--r-- 1 root root 18K 10월 9 2005 mod_evasive20.c (apache 2.x)
-rw-r--r-- 1 root root 16K 10월 9 2005 mod_evasiveNSAPI.c
-rw-r--r-- 1 root root 406 8월 31 2003 test.pl

* 모듈 추가
# /usr/local/apache/bin/apxs -iac mod_evasive20.c (apache 2.x)
# /usr/local/apache/bin/apxs -iac mod_evasive.c (apache 1.x)

설치시 remote_ip 에러가 난다면 client_ip로 수정 하거나 본문에 첨부된 mod_evasive20.c 파일을 대체해서 재컴파일한다
# chmod 755 /usr/local/apache/modules/mod_security2.so

* 설정확인 및 변경
1. # ls -alh /usr/local/apache/modules/ 경로에 mod_evasive20.so 생성된 것을 확인
2. # vi /usr/local/apache/conf/httpd.conf 중간에 아래 내용이 추가된 것을 확인

======================================================
LoadModule evasive20_module modules/mod_evasive20.so (apache 2.x)
//LoadModule evasive_module modules/mod_evasive.so (apache 1.x)
======================================================

# vi /usr/local/apache/conf/httpd.conf


하단에 아래와 같은 설정을 추가한다.

=======================================


DOSHashTableSize 3097
DOSPageCount 10
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSEmailNotify webmaster@example.com
DOSLogDir "/usr/local/apache/logs/mod_evasive.log"
# DOSWhitelist 127.0.0.1 127.0.0.2 127.0.0.3...


=======================================

- DosHashTableSize
수치가 높을수록 evasive의 퍼포먼스는 향상되지만 테이블에 많은 메모리을 남김, 접속량이 많은 경우 수치를 늘림
- DOSPageCount
PageInterval에 지정된 시간동안 같은 페이지를 요청하는 횟수
- DOSSiteCount
SiteInterval에 지정된 시간동안 총 히트수(html,이미지)가 해당 횟수를 초과하는 경우, 이미지가 많은 사이트는 조절
- DOSPageInterval
PageCount 시간(default : 1)
- DOSSiteInterval
SiteCount 시간(default : 1)
- DOSBlockingPeriod
차단된 IP의 접속을 거부할 시간 설정, 차단후 설정된 시간 내에 다시 접속을 시도할 경우 시간은 설정만큼 다시 리셋
- DOSEmailNotify
차단된 IP를 이메일 발송
- DOSWhitelist
설정된 IP는 차단대상에서 제외
- 공격으로 차단되었던 IP는 /tmp/dos-[IP] 와 같이 파일이 생성

* Apache 재시작 후 테스트
# /usr/local/apache/bin/apachectl restart or service httpd restart
# perl test.pl
======================
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
......

HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
......
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
======================

또는 웹페이지 새로고침(F5)을 연속 실행할 경우 아래와 같이 차단됩니다.

=====================================================

Forbidden
You don't have permission to access / on this server.

=====================================================

* 기타 iptables 를 이용한 공격 방어 방법

iptables -A INPUT -p tcp --dport 80 -m recent --update --seconds 1 --hitcount 10 --name HTTP -j DROP
- 같은 IP가 HTTP서비스에 1초동안 tcp 80포트로 10회 이상 접속하는 경우 DROP 합니다.

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP
- 60초동안 SSH(port 22) 새로운 커넥션이 10회 발생할 경우 DROP 합니다.



@ GeoIP 설치 및 설정

# cd /usr/local/src
# wget http://pkgs.fedoraproject.org/repo/pkgs/GeoIP/GeoIP-1.5.1.tar.gz/36b82f3558e6e2ebdd11a56c5db21dbc/GeoIP-1.5.1.tar.gz
# tar xvfz GeoIP-1.5.1.tar.gz
# cd GeoIP-1.5.1
# ./configure --prefix=/usr/local/GeoIP
# make;make install

설치를 마치면 아래 경로에 GeoIP.dat 라는 바이너리 포맷 형식의 파일이 생성됩니다. 아마도 이 파일이 IP 주소 대역에 대응되는 국가 명칭 정보를 담고 있겠죠. ^^

# ls -l /usr/local/GeoIP/share/GeoIP/GeoIP.dat
-rw-r--r-- 1 root root 1.1M 7월 6 14:37 /usr/local/GeoIP/share/GeoIP/GeoIP.dat

이제 아파치의 mod_geoip 모듈을 설치하면 됩니다. 저는 아파치 2.x 버전에 설치하므로 http://www.maxmind.com/download/geoip/api/mod_geoip2/ 에서 받아 설치해 보겠습니다.
# cd /usr/local/src
# wget http://pkgs.fedoraproject.org/repo/pkgs/mod_geoip/mod_geoip2_1.2.7.tar.gz/76514ad0e8adb8cd8231c5e3646d03fd/mod_geoip2_1.2.7.tar.gz
# tar xvfz mod_geoip2_1.2.7.tar.gz
# cd mod_geoip2_1.2.7
# /usr/local/apache/bin/apxs -a -i -L/usr/local/GeoIP/lib -I/usr/local/GeoIP/include -lGeoIP -c mod_geoip.c

httpd.conf 에 아래 내용을 수정 및 첨부한다.


GeoIPEnable On
GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{Host}i %{GEOIP_COUNTRY_CODE}e" cnxlog
CustomLog logs/access_log cnxlog


위에서 %{변수명}i 형식은 요청할 때의 Header중 해당 값을 말한다. %{변수명}e 는 환경변수를 의미한다. LogFormat 설정 중에 2가지를 살펴보자.

%{Host}i : 요청한 호스트명을 로그에 남긴다. 이를테면 하나의 서버에 2개 이상의 도메인을 갖고 있을 때 유용하다.
www.foobar.com, www.foobar.net, foobar.com 등의 도메인이 있을 때 어떤 도메인으로 요청했는지를 남길 수 있게 된다.
%{GEOIP_COUNTRY_CODE}e : GEOIP_COUNTRY_CODE 환경변수, 즉 국가코드를 남긴다.

다음은 특정은 페이지를 지정한 국가에서 접근할 수 없도록 설정한 예이다.



GeoIPEnable On
GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat

SetEnvIf GEOIP_COUNTRY_CODE CN go_out
SetEnvIf GEOIP_COUNTRY_CODE RU go_out
SetEnvIf GEOIP_COUNTRY_CODE TH go_out

Order allow,deny
Allow from all
Deny from env=go_out



LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{Host}i %{GEOIP_COUNTRY_CODE}e" cnxlog
CustomLog logs/access_log cnxlog


위는 특정 국가만 제한하는 것인데, 반대로 특정 국가만 허용하려면 위의 내용중에 location 부분을 다음과 같이 수정하면 된다.


SetEnvIf GEOIP_COUNTRY_CODE KR allowcountry

Order Deny,Allow
Deny from all
Allow from env=allowcountry



위의 2가지 설정(로그에 국가코드, 특정 국가 제한)이 적용된 로그 예(일부 로그는 변경 처리함)이다. 2번째 줄은 특정 국가 접속시 403 에러를 발생하며, 접근이 제한됐음을 확인할 수 있다.

125.129.xxx.xxx - - [01/Apr/2008:01:07:15 +0900] "GET /bbs/ HTTP/1.1" 200 29388 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ko; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13" foobar.com KR
61.243.xxx.xxx - - [01/Apr/2008:01:17:20 +0900] "GET /data/linux_base/editors.html HTTP/1.1" 403 520 "-" "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; DigExt)" foobar.com CN

php용 모듈 설치
# cd /usr/local/src
# wget http://pecl.php.net/get/geoip-1.0.8.tgz
# tar zxvf geoip-1.0.8.tgz
# cd geoip-1.0.8
# phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-geoip=/usr/local/GeoIP
# make;make install

vi php.ini 추가
extension=geoip.so
... 생략 ...
[geoip]
geoip.custom_directory=/usr/local/GeoIP/share/GeoIP


7-28-2015 PM 4-00-03.png