:::: MENU ::::

株式会社バックスラッシュ

岐阜県関市にあるかゆい所に手が届くコンピュータ屋さん

Blog

  • 6月 29 / 2009
  • 0
CentOS, サーバ, 覚書

PHPのインストール

事前準備
c-clientのインストール
MySQLのインストール
PostgreSQLのインストール
Apacheのインストール

必要パッケージのインストール
# yum -y install libjpeg-devel
# yum -y install libpng-devel
# yum -y install libmcrypt
# yum -y install libmcrypt-devel
# yum -y install libxml2
# yum -y install libxml2-devel

□インストール
# cd /usr/local/src
# wget http://jp.php.net/get/php-5.2.10.tar.gz/from/this/mirror
# tar zxvf
# ./configure \
> –with-apxs2=/usr/local/apache2/bin/apxs \ Apache2用の共用モジュールを作成します
> –with-mysql=/usr/local \ MySQLのベースディレクトリを指定します
> –with-mysqli=/usr/local/bin/mysql_config \ 拡張MySQLサポートを有効にしています
> –with-pgsql=/usr/local/pgsql \ PostgreSQLのベースディレクトリを指定します
> –with-imap \ IMAP/POP3/NNTP関数を有効にしています
> –with-imap-ssl \ SSL対応のIMAP/POP3/NNTP関数を有効にしています
> –with-gd \ GDモジュールを有効にしています
> –with-jpeg-dir=shared \ JPEGライブラリを使用します
> –with-mcrypt \ Mcrypt暗号化関数を有効にします
> –enable-zend-multibyte \ 国際化版PHPの機能を有効にしています
> –enable-mbstring \ マルチバイト処理を有効にしています
> –enable-calendar カレンダ関数を有効にしています
# make
# make install

□設定

  • 6月 29 / 2009
  • 0
CentOS, サーバ, 覚書

Apacheのインストール

# groupadd -g 48 apache
# useradd -u 48 -g apache -s /sbin/nologin -d /data/www apache

$ cd /tmp
$ wget http://www.meisei-u.ac.jp/mirror/apache/dist/httpd/httpd-2.2.11.tar.gz
$ tar zxvf httpd-2.2.11.tar.gz
$ cd httpd-2.2.11
$ ./configure \
> –enable-ssl \ SSLを使用します
> –enable-rewrite \ RewriteEngineを使用します
> –enable-proxy \ プロキシ/ゲートウェイ機能を使用します
> –enable-proxy-ajp \ プロキシ/ゲートウェイ機能でAJP13プロトコルを使用します
> –enable-vhost-alias \ バーチャルホストのディレクトリエイリアス機能を使用します
> –enable-auth-digest \ Digest認証を有効にします
> –enable-suexec \ suEXECを使用します
> –with-suexec-caller=apache \ suEXECを実行するユーザー
> –with-suexec-userdir=/home/www/vhosts \ suEXECがアクセス可能なユーザーディレクトリ
> –with-suexec-docroot=/home/www \ Apacheのドキュメントルート
> –with-suexec-uidmin=10000 \ suEXEC対象ユーザーの最小ユーザーID
> –with-suexec-gidmin=10000 \ suEXEC対象グループの最小グループID
> –with-suexec-logfile=/var/log/httpd/suexec_log \ suEXECのログファイル
> –with-included-apr ApacheにバンドルされているAPRを使用します

$ make

$ su ここからはrootで行います
# make install

  • 6月 29 / 2009
  • 0
CentOS, サーバ, 覚書

HAクラスタの構築

●事前準備

# vgdisplay
— Volume group —
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 135.84 GB
PE Size 32.00 MB
Total PE 4347
Alloc PE / Size 4315 / 134.84 GB
Free PE / Size 32 / 1.00 GB
VG UUID DSisQg-OCiD-0dqt-eMLR-RAZe-m6xn-xtHGPq

# lvcreate -L 1024M /dev/VolGroup00
Logical volume "lvol0" created

# lvdisplay
— Logical volume —
LV Name /dev/VolGroup00/LogVol00
VG Name VolGroup00
LV UUID aWwT4l-4fGx-V8je-iWPA-XvVM-SCXu-W6NJ2C
LV Write Access read/write
LV Status available
# open 1
LV Size 130.91 GB
Current LE 4189
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:0

— Logical volume —
LV Name /dev/VolGroup00/LogVol01
VG Name VolGroup00
LV UUID 229j2o-uy0J-F3dZ-CfT1-VPOX-4gkC-Lgpxlk
LV Write Access read/write
LV Status available
# open 1
LV Size 3.94 GB
Current LE 126
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:1

— Logical volume —
LV Name /dev/VolGroup00/lvol0
VG Name VolGroup00
LV UUID 1sRHZJ-TGIq-V1yX-CckB-xubE-HBnZ-tVmWV1
LV Write Access read/write
LV Status available
# open 0
LV Size 1.00 GB
Current LE 32
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:2

# lvdisplay -C
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
LogVol00 VolGroup00 -wi-ao 130.91G
LogVol01 VolGroup00 -wi-ao 3.94G
lvol0 VolGroup00 -wi-a- 1.00G

●インストール

# yum -y install drbd82 kmod-drbd82

●設定

# vi /etc/drbd.conf

#
# please have a a look at the example configuration file in
# /usr/share/doc/drbd82/drbd.conf
#
global { usage-count no; }
common { syncer { rate 10M; } }
resource r0 {
protocol C;
startup {
degr-wfc-timeout 120;
}
net {
cram-hmac-alg sha1;
shared-secret "FooFunFactory";
}
on bssv1.back-slash.com {
device /dev/drbd0;
disk /dev/VolGroup00/lvol0;
address 192.168.20.201:7789;
flexible-meta-disk internal;
}
on bssv2.back-slash.com {
device /dev/drbd0;
disk /dev/VolGroup00/lvol0;
address 192.168.20.202:7789;
meta-disk internal;
}

# drbdadm create-md r0
md_offset 1073737728
al_offset 1073704960
bm_offset 1073672192

Found some data
==> This might destroy existing data! <==

Do you want to proceed?
[need to type ‘yes’ to confirm] yes

v07 Magic number not found
v07 Magic number not found
You want me to create a v08 style flexible-size internal meta data block.
There apears to be a v08 flexible-size internal meta data block
already in place on /dev/VolGroup00/lvol0 at byte offset 1073737728
Do you really want to overwrite the existing v08 meta-data?
[need to type ‘yes’ to confirm] yes

Writing meta data…
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.

# /etc/rc.d/init.d/drbd start
Starting DRBD resources: [ d(r0) s(r0) n(r0) ].
……….
***************************************************************
DRBD’s startup script waits for the peer node(s) to appear.
– In case this node was already a degraded cluster before the
reboot the timeout is 120 seconds. [degr-wfc-timeout]
– If the peer was available before the reboot the timeout will
expire after 0 seconds. [wfc-timeout]
(These values are for resource ‘r0’; 0 sec -> wait forever)
To abort waiting enter ‘yes’ [ 20]:yes

ノード2も実施

初期同期
# drbdadm — –overwrite-data-of-peer primary all

状態確認
# /etc/rc.d/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
m:res cs st ds p mounted fstype
0:r0 SyncSource Primary/Secondary UpToDate/Inconsistent C
… sync’ed: 6.7% (980924/1048508)K

# /etc/rc.d/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-i386-build, 2008-10-03 11:42:32
m:res cs st ds p mounted fstype
0:r0 Connected Primary/Secondary UpToDate/UpToDate C

# mkfs -t ext3 /dev/drbd0
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
131072 inodes, 262127 blocks
13106 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

■heartbeatのインストール
# yum -y install heartbeat
  :
useradd: ユーザ hacluster は存在します
error: %pre(heartbeat-2.1.3-3.el5.centos.i386) scriptlet failed, exit status 9
error: install: %pre scriptlet failed (2), skipping heartbeat-2.1.3-3.el5.centos
  :

エラーの為、再度インストール
# yum -y install heartbeat

# cp /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/

# vi /etc/ha.d/ha.cf

logfile /var/log/ha-log ← コメント解除
keepalive 2 ← コメント解除(ノード間死活監視時間(秒))
deadtime 30 ← コメント解除(ノードダウン検知時間(秒))
initdead 120 ← コメント解除
udpport 694 ← コメント解除(ブロードキャスト使用ポート番号)
baud 19200 ← コメント解除
serial /dev/ttyS0 # Linux ← コメント解除
watchdog /dev/watchdog ← コメント解除
node bssv1.back-slash.com ← 追加
node bssv2.back-slash.com ← 追加

# cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/

# vi /etc/ha.d/authkeys

auth 2
#1 crc
#2 sha1 HI!
2 sha1 ********
#3 md5 Hello!

# chmod 600 /etc/ha.d/authkeys

# mkdir /data

# vi /etc/ha.d/haresources
bssv1.back-slash.com \
IPaddr2::192.168.24.200/24/eth0/ \
MailTo::maint@back-slash.co.jp::heartbeat_fail_over drbddisk::r0 \
Filesystem::/dev/drbd0::/data::ext3 \
mysql \
pgsql

# rm -rf /var/lib/heartbeat/crm/cib.xml
# /usr/lib/heartbeat/haresources2cib.py /etc/ha.d/haresources

# vi /var/lib/heartbeat/crm/cib.xml

 :
<nvpair id="IPaddr_192_168_24_200_attr_1" name="nic" value="24"/>
  ↓
<nvpair id="IPaddr_192_168_24_200_attr_1" name="nic" value="eth0"/>
<nvpair id="IPaddr_192_168_24_200_attr_2" name="cidr_netmask" value=""/>
  ↓
<nvpair id="IPaddr_192_168_24_200_attr_2" name="cidr_netmask" value="24"/>
  :

# chkconfig heartbeat on
# chkconfig –list heartbeat
heartbeat 0:off 1:off 2:on 3:on 4:on 5:on 6:off

  • 6月 24 / 2009
  • 0
CentOS, サーバ, 覚書

iptablesを利用したファイアウォール構築

iptablesを利用したファイアウォールの構築をします。
<!–more–>

●ファイアウォールの定義作成
# vi /root/firewall.sh#!/bin/sh

#外部I/Fのネットワーク情報

EXTIF=”eth0″

EXTIP=$(ifconfig $EXTIF | grep inet | cut -d “:” -f 2 | cut -d ” ” -f 1)

#EXTIP=xxx.xxx.xxx.xxx #heartbeatで管理する為IPアドレスを明示的に設定

# 内部I/Fのネットワーク情報

INTIF=”eth1″

INTIP=$(ifconfig $INTIF | grep inet | cut -d “:” -f 2 | cut -d ” ” -f 1)

INTMASK=$(ifconfig $INTIF | grep Mask | cut -d “:” -f 4)

INTLAN=$INTIP’/’$INTMASK

# 非特権ポート

UNPRIVPORTS=”1024:65535″

# パラメータ

LOGLIMIT=”2/s” # ログマッチ許可 2回/秒

LOGBURST=”5″ # ログマッチ最大値 5回

SYNLIMIT=”5/s” # SYN-Flood許可 5回/秒

SYNBURST=”10″ # SYN-Flood最大値 10回

PINGLIMIT=”5/s” # PING-Flood許可 5回/秒

PINGBURST=”10″ # PING-Flood最大値 10回

# 全チェインを空にする

iptables -F

iptables -t nat -F

iptables -t mangle -F

# 全ユーザー定義チェインを削除する

iptables -X

iptables -t nat -X

iptables -t mangle -X

# 全チェインのカウンタをクリアする

iptables -Z

iptables -t nat -Z

iptables -t mangle -Z

# デフォルトポリシーをDROPに設定する

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

# — (ロギング用ユーザーチェインの定義) —

# DROPパケット

iptables -N LOG-DROP

iptables -A LOG-DROP -p all \

-m limit –limit $LOGLIMIT –limit-burst $LOGBURST \

-j LOG –log-prefix “iptables DROP ”

iptables -A LOG-DROP -f \

-m limit –limit $LOGLIMIT –limit-burst $LOGBURST \

-j LOG –log-prefix “iptables FRAGMENT DROP ”

iptables -A LOG-DROP -j DROP

# REJECTパケット

iptables -N LOG-REJECT

iptables -A LOG-REJECT -p all \

-m limit –limit $LOGLIMIT –limit-burst $LOGBURST \

-j LOG –log-prefix “iptables REJECT ”

iptables -A LOG-REJECT -f \

-m limit –limit $LOGLIMIT –limit-burst $LOGBURST \

-j LOG –log-prefix “iptables FRAGMENT REJECT ”

iptables -A LOG-REJECT -p tcp -j REJECT –reject-with tcp-reset

iptables -A LOG-REJECT -p udp -j REJECT –reject-with icmp-port-unreachable

iptables -A LOG-REJECT -j REJECT

# 不正なフラグを持つパケットを破棄

iptables -N LOG-BADFLAG

iptables -A LOG-BADFLAG -m limit –limit $LOGLIMIT –limit-burst $LOGBURST \

-j LOG –log-prefix “iptables BADFLAG DROP ”

iptables -A LOG-BADFLAG -j DROP

# 既存の接続に結び付けられていないパケットを破棄

iptables -N LOG-INVALID

iptables -A LOG-INVALID -m limit –limit $LOGLIMIT –limit-burst $LOGBURST \

-j LOG –log-prefix “iptables INVALID DROP ”

iptables -A LOG-INVALID -j DROP

# SYN-Floodパケットを破棄

iptables -N LOG-SYNFLOOD

iptables -A LOG-SYNFLOOD -m limit –limit $LOGLIMIT –limit-burst $LOGBURST \

-j LOG –log-prefix “iptables SYNFLOOD DROP ”

iptables -A LOG-SYNFLOOD -j DROP

# PING-Floodパケットを破棄

iptables -N LOG-PINGFLOOD

iptables -A LOG-PINGFLOOD -m limit –limit $LOGLIMIT –limit-burst $LOGBURST \

-j LOG –log-prefix “iptables PINGFLOOD DROP ”

iptables -A LOG-PINGFLOOD -j DROP

# 接続拒否国からのパケットを破棄

iptables -N LOG-DENY-COUNTRY

iptables -A LOG-DENY-COUNTRY -m limit –limit $LOGLIMIT –limit-burst $LOGBURST \

-j LOG –log-prefix “iptables DENY-COUNTRY DROP ”

iptables -A LOG-DENY-COUNTRY -j DROP

# — (ユーザ定義チェイン) —

# SYN-Floodをチェック

iptables -N CHK-SYNFLOOD

iptables -A CHK-SYNFLOOD -p tcp –syn \

-m limit –limit $SYNLIMIT –limit-burst $SYNBURST -j ACCEPT

iptables -A CHK-SYNFLOOD -p tcp –syn -j LOG-SYNFLOOD

iptables -A CHK-SYNFLOOD -p tcp ! –syn -j ACCEPT

# 不正なフラグを持つパケットをチェック

iptables -N CHK-BADFLAG

iptables -A CHK-BADFLAG -p tcp –tcp-flags SYN,RST SYN,RST -j LOG-BADFLAG

iptables -A CHK-BADFLAG -p tcp –tcp-flags SYN,FIN SYN,FIN -j LOG-BADFLAG

iptables -A CHK-BADFLAG -p tcp –tcp-flags ACK,FIN FIN -j LOG-BADFLAG

iptables -A CHK-BADFLAG -p tcp –tcp-flags ACK,PSH PSH -j LOG-BADFLAG

iptables -A CHK-BADFLAG -p tcp –tcp-flags ACK,URG URG -j LOG-BADFLAG

iptables -A CHK-BADFLAG -p tcp –tcp-flags FIN,RST FIN,RST -j LOG-BADFLAG

iptables -A CHK-BADFLAG -p tcp –tcp-flags ALL ALL -j LOG-BADFLAG

iptables -A CHK-BADFLAG -p tcp –tcp-flags ALL NONE -j LOG-BADFLAG

iptables -A CHK-BADFLAG -p tcp –tcp-flags ALL FIN,URG,PSH -j LOG-BADFLAG

iptables -A CHK-BADFLAG -p tcp –tcp-flags ALL SYN,FIN,URG,PSH -j LOG-BADFLAG

iptables -A CHK-BADFLAG -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOG-BADFLAG

iptables -A CHK-BADFLAG -p tcp –tcp-option 64 -j LOG-BADFLAG

iptables -A CHK-BADFLAG -p tcp –tcp-option 128 -j LOG-BADFLAG

# 既存の接続に結び付けられていないパケットをチェック

iptables -N CHK-INVALID

iptables -A CHK-INVALID -p tcp –dport 80 -j RETURN # WindowsXP IE 対応

iptables -A CHK-INVALID -p all -m state –state INVALID -j LOG-INVALID

# 国別のアクセス制限をチェック

iptables -N CHK-COUNTRY

# チェイン内容は別のスクリプトで作成します

# INPUT ICMPパケットをチェック

iptables -N CHK-IN-ICMP

# Ping Flood対策

iptables -A CHK-IN-ICMP -p icmp –icmp-type echo-request \

-m limit –limit $PINGLIMIT –limit-burst $PINGBURST -j ACCEPT

iptables -A CHK-IN-ICMP -p icmp –icmp-type echo-request -j LOG-PINGFLOOD

# ICMP-Redirectsを破棄

iptables -A CHK-IN-ICMP -p icmp –icmp-type redirect -j LOG-DROP

# ICMP-Timestampを破棄

iptables -A CHK-IN-ICMP -p icmp –icmp-type timestamp-request -j LOG-DROP

iptables -A CHK-IN-ICMP -p icmp –icmp-type timestamp-reply -j LOG-DROP

# ICMP-address-maskを破棄

iptables -A CHK-IN-ICMP -p icmp –icmp-type address-mask-request -j LOG-DROP

iptables -A CHK-IN-ICMP -p icmp –icmp-type address-mask-reply -j LOG-DROP

# チェックOKなら許可

iptables -A CHK-IN-ICMP -p icmp -j ACCEPT

# OUTPUT ICMPパケットをチェック

iptables -N CHK-OUT-ICMP

# ICMP-Redirectsを破棄

iptables -A CHK-OUT-ICMP -p icmp –icmp-type redirect -j LOG-DROP

# ICMP-TTL-Expiredを破棄

iptables -A CHK-OUT-ICMP -p icmp –icmp-type ttl-zero-during-transit -j LOG-DROP

iptables -A CHK-OUT-ICMP -p icmp –icmp-type ttl-zero-during-reassembly -j LOG-DROP

# ICMP-Parameter-Problemを破棄

iptables -A CHK-OUT-ICMP -p icmp –icmp-type parameter-problem -j LOG-DROP

# ICMP-Timestampを破棄

iptables -A CHK-OUT-ICMP -p icmp –icmp-type timestamp-request -j LOG-DROP

iptables -A CHK-OUT-ICMP -p icmp –icmp-type timestamp-reply -j LOG-DROP

# ICMP-address-maskを破棄

iptables -A CHK-OUT-ICMP -p icmp –icmp-type address-mask-request -j LOG-DROP

iptables -A CHK-OUT-ICMP -p icmp –icmp-type address-mask-reply -j LOG-DROP

# チェックOKなら許可

iptables -A CHK-OUT-ICMP -p icmp -j ACCEPT

# SMBパケットをチェック

iptables -N CHK-SMB

iptables -A CHK-SMB -p tcp –dport 137:139 -j DROP

iptables -A CHK-SMB -p tcp –dport 445 -j DROP

iptables -A CHK-SMB -p udp –dport 137:139 -j DROP

iptables -A CHK-SMB -p udp –dport 445 -j DROP

iptables -A CHK-SMB -p tcp –sport 137:139 -j DROP

iptables -A CHK-SMB -p tcp –sport 445 -j DROP

iptables -A CHK-SMB -p udp –sport 137:139 -j DROP

iptables -A CHK-SMB -p udp –sport 445 -j DROP

# — (INPUTチェイン) —

# ローカルからのパケットを許可

iptables -A INPUT -i lo -j ACCEPT

# 内部LANからのパケットを許可

iptables -A INPUT -i $INTIF -s $INTLAN -j ACCEPT

# 内部I/FのDHCP Broadcastを許可

iptables -A INPUT -i $INTIF -p udp –sport 68 –dport 67 -j ACCEPT

# 内部LANを騙る偽パケットを破棄

iptables -A INPUT -s $INTLAN -j LOG-DROP

# IDENTパケットを拒否

iptables -A INPUT -i $EXTIF -p tcp –dport 113 -j REJECT –reject-with tcp-reset

# ローカルアドレス宛のパケットを拒否

iptables -A INPUT -d 127.0.0.0/8 -j LOG-REJECT

# 不正なフラグを持つパケットをチェック

iptables -A INPUT -p tcp -j CHK-BADFLAG

# 既存の接続に結び付けられていないパケットをチェック

iptables -A INPUT -i $EXTIF -j CHK-INVALID

# INPUT ICMPパケットをチェック

iptables -A INPUT -i $EXTIF -p icmp -j CHK-IN-ICMP

# 外部I/FのSMBパケットをチェック

iptables -A INPUT -i $EXTIF -j CHK-SMB

# 各サービスのルールをここに入れます

# SSH接続を許可

iptables -A INPUT -i $EXTIF -p tcp –dport 22 -j CHK-SYNFLOOD

# FTP接続を許可

iptables -A INPUT -i $EXTIF -p tcp –dport 21 -j CHK-SYNFLOOD

# HTTP/HTTPS接続を許可

iptables -A INPUT -i $EXTIF -p tcp –dport 80 -j CHK-SYNFLOOD

iptables -A INPUT -i $EXTIF -p tcp –dport 443 -j CHK-SYNFLOOD

# SMTP/SMTPS接続を許可

iptables -A INPUT -i $EXTIF -p tcp –dport 25 -j CHK-SYNFLOOD

iptables -A INPUT -i $EXTIF -p tcp –dport 465 -j CHK-SYNFLOOD

iptables -A INPUT -i $EXTIF -p tcp –dport 587 -j CHK-SYNFLOOD

# POP3/POP3S接続を許可

iptables -A INPUT -i $EXTIF -p tcp –dport 110 -j CHK-SYNFLOOD

iptables -A INPUT -i $EXTIF -p tcp –dport 995 -j CHK-SYNFLOOD

# IMAP/IMAPS接続を許可

iptables -A INPUT -i $EXTIF -p tcp –dport 143 -j CHK-SYNFLOOD

iptables -A INPUT -i $EXTIF -p tcp –dport 993 -j CHK-SYNFLOOD

# ESTABLISHED/RELATED接続を許可

iptables -A INPUT -i $EXTIF -m state –state ESTABLISHED -j ACCEPT

iptables -A INPUT -i $EXTIF -p tcp –dport $UNPRIVPORTS \

-m state –state RELATED -j CHK-SYNFLOOD

iptables -A INPUT -i $EXTIF -p udp –dport $UNPRIVPORTS -m state –state RELATED -j ACCEPT

# 上記の何れにもマッチしなかったINPUTパケットを廃棄

iptables -A INPUT -j LOG-DROP

# — (OUTPUTチェイン) —

# ローカルのパケットを許可する

iptables -A OUTPUT -o lo -j ACCEPT

# 内部LANへのパケットを許可

iptables -A OUTPUT -o $INTIF -d $INTLAN -j ACCEPT

# UDPによるtracerouteコマンドを許可

iptables -A OUTPUT -o $EXTIF -p udp –dport 33434:33523 -m state –state NEW -j ACCEPT

# OUPUT ICMPパケットをチェック

iptables -A OUTPUT -o $EXTIF -p icmp -j CHK-OUT-ICMP

# 外部I/FのSMBパケットをチェック

iptables -A OUTPUT -o $EXTIF -j CHK-SMB

# 非特権ポートからのTCP/UDPパケットを許可

iptables -A OUTPUT -o $EXTIF -s $EXTIP -p tcp –sport $UNPRIVPORTS -j ACCEPT

iptables -A OUTPUT -o $EXTIF -s $EXTIP -p udp –sport $UNPRIVPORTS -j ACCEPT

# NTP接続を許可

iptables -A OUTPUT -o $EXTIF -s $EXTIP -p udp –sport 123 -j ACCEPT

# SSH接続を許可

iptables -A OUTPUT -o $EXTIF -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

# FTP接続を許可

iptables -A OUTPUT -o $EXTIF -p tcp –sport 21 -m state –state ESTABLISHED,RELATED -j ACC

EPT

# HTTP/HTTPS接続を許可

iptables -A OUTPUT -o $EXTIF -p tcp –sport 80 -j ACCEPT

iptables -A OUTPUT -o $EXTIF -p tcp –sport 443 -m state –state ESTABLISHED -j ACCEPT

# SMTP/SMTPS接続を許可

iptables -A OUTPUT -o $EXTIF -p tcp –sport 25 -j ACCEPT

iptables -A OUTPUT -o $EXTIF -p tcp –sport 465 -m state –state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o $EXTIF -p tcp –sport 587 -m state –state ESTABLISHED -j ACCEPT

# POP3/POP3S接続を許可

iptables -A OUTPUT -o $EXTIF -p tcp –sport 110 -m state –state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o $EXTIF -p tcp –sport 995 -m state –state ESTABLISHED -j ACCEPT

# IMAP/IMAPS接続を許可

iptables -A OUTPUT -o $EXTIF -p tcp –sport 143 -m state –state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o $EXTIF -p tcp –sport 993 -m state –state ESTABLISHED -j ACCEPT

# 上記の何れにもマッチしなかったOUTPUTパケットを廃棄

iptables -A OUTPUT -j LOG-DROP

# — (FORWARDチェイン) —

# 既存の接続に結び付けられていないパケットを破棄

iptables -A FORWARD -i $EXTIF -m state –state INVALID -j LOG-INVALID

# 不正なフラグを持つパケットをチェック

iptables -A FORWARD -p tcp -j CHK-BADFLAG

# 外部I/FのSMBパケットをチェック

iptables -A FORWARD -o $EXTIF -j CHK-SMB

# 各サービスのルールをここに入れます

# 内部LANの非特権ポートから外部への転送を許可

iptables -A FORWARD -i $INTIF -o $EXTIF -s $INTLAN -p tcp –sport $UNPRIVPORTS -j ACCEPT

iptables -A FORWARD -i $INTIF -o $EXTIF -s $INTLAN -p udp –sport $UNPRIVPORTS -j ACCEPT

iptables -A FORWARD -i $INTIF -o $EXTIF -s $INTLAN -p icmp -j ACCEPT

# 外部から内部LANの非特権ポートへの転送を許可

iptables -A FORWARD -i $EXTIF -m state –state ESTABLISHED -j ACCEPT

iptables -A FORWARD -i $EXTIF -p tcp –dport $UNPRIVPORTS -m state –state RELATED -j CHK-SYNFLOOD

iptables -A FORWARD -i $EXTIF -p udp –dport $UNPRIVPORTS -m state –state RELATED -j ACCEPT

iptables -A FORWARD -i $EXTIF -p icmp -m state –state RELATED -j ACCEPT

# 上記の何れにもマッチしなかったFORWARDパケットを廃棄

iptables -A FORWARD -j LOG-DROP

# — (POSTROUTING) —

iptables -A POSTROUTING -t nat -o $EXTIF -j MASQUERADE

# — (ルールを保存する) —

service iptables save

# chmod 700 firewall.sh

# ./firewall.sh

ファイアウォールのルールを /etc/sysconfig/iptables に保存中[ OK ]

●ファイアウォールの設定
# mkdir /usr/local/sbin/firewall# cd /usr/local/sbin/firewall

# vi white_ip_a.sh

#!/bin/sh

for IP_ADDR in $(dig a $1 | grep “^$1″ | sed “s/[[:blank:]]\+/ /g” | cut -d ” ” -f 5); do

iptables -A CHK-COUNTRY -s $IP_ADDR -j RETURN

done

# chmod 700 white_ip_a.sh

# vi white_ip_spf.sh

#!/bin/sh

# DNS の MX レコードからファイアウォールの White IP 設定を行う関数

function mx_record {

for MX_NAME in $(dig mx $1 | grep “^$1″ | sed “s/[[:blank:]]\+/ /g” | cut -d ” ” -f 6); do

./white_ip_a.sh $MX_NAME

done

}

for SPF_TEXT in $(dig txt $1 | grep v=spf1 | sed “s/^.*\”\(.*\)\”.*$/\1/”); do

KEYWORD=$(echo $SPF_TEXT | cut -d “:” -f 1 -s)

case $KEYWORD in

include)

INCLUDE_SPF=$(echo $SPF_TEXT | cut -d “:” -f 2)

./white_ip_spf.sh $INCLUDE_SPF

;;

ip4)

IP_ADDR=$(echo $SPF_TEXT | cut -d “:” -f 2)

iptables -A CHK-COUNTRY -s $IP_ADDR -j RETURN

;;

a)

INCLUDE_A=$(echo $SPF_TEXT | cut -d “:” -f 2)

./white_ip_a.sh $INCLUDE_A

;;

mx)

INCLUDE_MX=$(echo $SPF_TEXT | cut -d “:” -f 2)

mx_record $INCLUDE_MX

;;

esac

done

# chmod 700 white_ip_spf.sh

# vi country_check.sh

#!/bin/sh

cd /usr/local/sbin/firewall

# 国別IPアドレスリストを取得する

wget -q http://nami.jp/ipv4bycc/cidr.txt.gz

if [ ! -f cidr.txt.gz ]; then

echo “Could not get the cidr.txt.gz from http://nami.jp/” \

| mail -s “iptables CHK-COUNTRY Chain Rule Setup Script” root

exit 1

fi

gzip -df cidr.txt.gz

# CHK-COUNTRYルールを初期化する

iptables -F CHK-COUNTRY

# WHITE_IPをルールに追加する(以下、空白行までは適宜、追加・削除してください)

./white_ip_spf.sh microsoft.com # Microsoft

./white_ip_spf.sh google.com # Google

./white_ip_spf.sh amazon.com # Amazon

./white_ip_spf.sh dmx1.bfi0.com # Dell

./white_ip_spf.sh notify-customer.com # DigiRock

./white_ip_spf.sh worldcommunitygrid.org # BOINC(WCG)

./white_ip_a.sh www.boincstats.com # BOINC(stats/BAM!)

./white_ip_a.sh verifier.port25.com # SPF/Sender ID/DomainKeys Check

if [ -s white_ip_list ]; then

for IP_ADDR in $(cat white_ip_list | sed -e “/^#/d” -e “s/^\([^[:blank:]]*\).*/\1/”); do

iptables -A CHK-COUNTRY -s $IP_ADDR -j RETURN

done

fi

# 国別アクセスルールをiptablesのルールに追加する

if [ -s rule_list ]; then

for RULE in $(cat rule_list | sed -e “/^#/d” -e “s/^\([^[:blank:]]*\).*/\1/”); do

CONTRY=$(echo $RULE | cut -d “|” -f 1)

TARGET=$(echo $RULE | cut -d “|” -f 2)

if [ “$TARGET” = “RETURN” ]; then

TARGET=”-j $TARGET”

else

TARGET=”-p tcp -m state –state NEW -j $TARGET”

fi

if [ “$CONTRY” != “**” ]; then

for IP in $(cat cidr.txt | grep “^$CONTRY” | sed “s/$CONTRY[^0-9]*\(.*\)/\1/”); do

iptables -A CHK-COUNTRY -s $IP $TARGET

done

else

iptables -A CHK-COUNTRY $TARGET

fi

done

fi

# ルールを保存する

service iptables save

# chmod 700 country_check.sh

# vi rule_list

CN|DROP

KR|DROP

TW|DROP

# vi /etc/crontab

# firewall

02 5 * * 0 root /usr/local/sbin/firewall/country_check.sh > /dev/null 2>&1

  • 6月 24 / 2009
  • 0
CentOS, サーバ, 覚書

CentOS5.3 インストールと初期設定

●基本インストール

■言語選択

「Japanese(日本語)」を選択

■ディスクパーティション設定

「選択したドライブ上のすべてのパーティションを削除してデフォルトのレイアウトを作成します。」を選択

■パーティションの設定

VolGroup00のLogVol00を1024MB小さくする
※DRBDの利用の為、メタデータ領域を確保

■ネットワークデバイス設定

環境に合わせて設定する

■地域設定

「システムクロックでUTCを使用」のチェックをはずす

■インストールパッケージ選択

開発
->開発ツールをチェック
ベースシステム
->システムツールをチェック
->ベースをチェックして、オプションパッケージの中の「firstboot-tui」をはずす

●ユーザの追加と管理者設定

# useradd USER

# passwd USER
Changing password for user USER.
New UNIX password: ********
Retype new UNIX password: ********
passwd: all authentication tokens updated successfully.

# usermod -G wheel USER ← 管理者ユーザをwheelグループに追加

# vi /etc/pam.d/su

 :
#auth required pam_wheel.so use_uid
 ↓
auth required pam_wheel.so use_uid ← コメント解除
 :

●シェルの設定

# vi /etc/profile

 :
HISTSIZE=1000
 ↓
bind '"\e[A": history-search-backward'
bind '"\e[0A": history-search-backward'
bind '"\e[B": history-search-forward'
bind '"\e[0B": history-search-forward'

HISTSIZE=1000
HISTFILESIZE=1000
HISTCONTROL=ignoredups
export HISTSIZE HISTFILESIZE HISTCONTROL
 :

# source /etc/profile

●yumの設定
# /etc/rc.d/init.d/yum-updatesd stop ← yum-updatesd停止
yum-updates を停止中:                                      [  OK  ]

# yum -y remove yum-updatesd ← yum-updatesd削除
 :

# yum -y install yum-fastestmirror ← fastestmirrorプラグインインストール
 :

# yum -y update ← インストール済パッケージのアップデート

●SELinuxの無効化

# getenforce ← SELinux状態確認
Enforcing

# setenforce 0 ← SELinux無効化

# getenforce ← SELinux状態確認
Permissive

# vi /etc/sysconfig/selinux ← SELinux設定ファイル編集

 :
SELINUX=enforcing
 ↓
SELINUX=disabled ← 変更
 :

●SSHの設定

# vi /etc/ssh/sshd_config

 :
#PermitRootLogin yes
 ↓
PermitRootLogin no ← rootでのログインを禁止
 :
PasswordAuthentication yes
 ↓
PasswordAuthentication no ← パスワードでのログインを禁止
 :
ChallengeResponseAuthentication no

ChallengeResponseAuthentication yes ← チャレンジレスポンスでのログインを許可
 :

# /etc/init.d/sshd reload
sshd を再読み込み中: [ OK ]

# vi /etc/hosts.allow

以下を最下行に追加
sshd: 127.0.0.1
sshd: 192.168. #自ローカルネットワークアドレス
sshd: xxx.xxx.xxx.xxx #自グローバルネットワークアドレス

# vi /etc/hosts.deny

以下を最下行に追加
sshd: ALL

●NTPの設定

# yum -y install ntp
 :

# vi /etc/ntp.conf

 :
server 0.centos.pool.ntp.org
server 1.centos.pool.ntp.org
server 2.centos.pool.ntp.org
 ↓
server -4 ntp.nict.jp ← NTPサーバの変更
server -4 ntp.jst.mfeed.ad.jp ← NTPサーバの変更
 :

# /etc/rc.d/init.d/ntpd start
ntpd を起動中: [ OK ]

# chkconfig ntpd on

# chkconfig –list ntpd
ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

  • 6月 15 / 2009
  • 0
CentOS, サーバ, 覚書

Postgreyのインストール

□事前準備
# yum -y install perl-Net-Server perl-IO-Multiplex perl-BerkeleyDB

□インストール
# cd /usr/local/src/
# wget http://postgrey.schweikert.ch/pub/postgrey-1.32.tar.gz
# tar zxvf postgrey-1.32.tar.gz
# cd postgrey-1.32
# wget http://k2net.hakuba.jp/pub/targrey-0.31-postgrey-1.32.patch
# patch -p0 < targrey-0.31-postgrey-1.32.patch # rm -rf targrey-0.31-postgrey-1.32.patch # cp -fv postgrey /usr/local/sbin/ # mkdir /etc/postfix # cp -fv postgrey_whitelist_* /etc/postfix/ # groupadd -g 95 postgrey # useradd -M -u 95 -g postgrey -s /sbin/nologin -d /var/spool/postfix/postgrey postgrey # mkdir -p /var/spool/postfix/postgrey # chown postgrey.postgrey /var/spool/postfix/postgrey # vi /etc/rc.d/init.d/postgrey postgrey_init.txt # chmod 755 /etc/rc.d/init.d/postgrey # chkconfig postgrey on # service postgrey start

  • 6月 15 / 2009
  • 0
CentOS, サーバ, 覚書

RPMforgeリポジトリの追加

# yum -y install yum-priorities
# vi /etc/yum.repos.d/CentOS-Base.repo
 :
[base]
name=CentOS-$releasever – Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
priority=1 ←追加

#released updates
[updates]
name=CentOS-$releasever – Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
priority=1 ←追加

#packages used/produced in the build but not released
[addons]
name=CentOS-$releasever – Addons
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=addons
#baseurl=http://mirror.centos.org/centos/$releasever/addons/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
priority=1 ←追加

#additional packages that may be useful
[extras]
name=CentOS-$releasever – Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
priority=1 ←追加
 :

# rpm –import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
# rpm -ivh http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

  • 5月 19 / 2009
  • 0
CentOS, サーバ, 覚書

Apcupsdのインストール

APC Smart-UPS 1500 RM をUSB接続する

UPS
 |USBケーブル
サーバ(マスター)---サーバ(スレーブ)
           LAN

マスターとスレーブそれぞれにapcupsdをインストール
# yum -y install apcupsd

マスター側apcupsd.conf修正
# vi /etc/apcupsd/apcupsd.conf
 :
#UPSCABLE smart ←コメントアウト
 ↓
UPSCABLE usb ←追加
 :
#UPSTYPE apcsmart ←コメントアウト
 ↓
UPSTYPE usb ←追加
#DEVICE /dev/ttyS0 ←コメントアウト
 ↓
DEVICE /dev/hiddev0 ←追加
 :
#TIMEOUT 0 ←コメントアウト
 ↓
TIMEOUT 300 ←追加
 :
#KILLDELAY 0 ←コメントアウト
 ↓
KILLDELAY 180 ←追加

スレーブ側apcupsd.conf修正
# vi /etc/apcupsd/apcupsd.conf
 :
#UPSCABLE smart ←コメントアウト
 ↓
UPSCABLE ether ←追加
 :
#UPSTYPE apcsmart ←コメントアウト
 ↓
UPSTYPE  net←追加
#DEVICE /dev/ttyS0 ←コメントアウト
 ↓
DEVICE マスターのIPアドレス ←追加
 :
#TIMEOUT 0 ←コメントアウト
 ↓
TIMEOUT 300 ←追加

# /etc/init.d/apcupsd start
# chkconfig apcupsd on
# apcaccess status

  • 5月 12 / 2009
  • 0
CentOS, サーバ, 覚書

ClamSMTPのインストール

○ClamSMTPのインストール
# cd /usr/src/redhat/SRPMS/
# wget http://www.inet.lt/clamsmtp/clamsmtp-1.10-1.src.rpm
# rpmbuild –rebuild clamsmtp-1.10-1.src.rpm
# rpm -ivh ../RPMS/i386/clamsmtp-1.10-1.i386.rpm
# rm -f clamsmtp-1.10-1.src.rpm

# vi /etc/clamsmtpd.conf
 :
# Address to listen on (defaults to all local addresses on port 10025)
#Listen: 0.0.0.0:10025
Listen: 127.0.0.1:10025 ←追加

# The address clamd is listening on
ClamAddress: /var/run/clamav/clamd.sock
 ↓
ClamAddress: /var/run/clamav/clamd.socket ←変更

# A header to add to all scanned email
Header: X-Virus-Scanned: ClamAV using ClamSMTP ←コメント解除

# Directory for temporary files
TempDirectory: /tmp ←コメント解除
 :
# Whether or not to keep virus files
#Quarantine: off
Quarantine: on ←追加
 :
# User to switch to
#User: clamav
User: clamav ←コメント解除
 :
#VirusAction: /path/to/some/script.sh
VirusAction: /usr/local/etc/email_virus_action.sh ←追加
 :

# vi /usr/local/etc/email_virus_action.sh

#!/usr/bin/perl
#
# ClamSMTP Virus検出時の実行Script
#
# 2008/07/16 System House ACT

use Encode qw(from_to);

$FROM = ‘ClamSMTP ‘;
$TO = ‘virusalert’;
$MAILER = ‘/usr/sbin/sendmail -t’;
$LINE = “-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-n”;

$hdr = < From: $FROM
To: $TO
Subject: ウィルスメール受信通知($ENV{VIRUS})
EOM

$body = < 以下のメールからウィルス($ENV{VIRUS})が検出されました。
メールおよびウィルスはメールサーバが削除しました。

発信元:$ENV{SENDER}

宛先 :$ENV{RECIPIENTS}

メールのヘッダ情報:
EOM

open(F, “|$MAILER”) || die “$MAILER: $!”;
Encode::from_to($hdr, ‘utf8’, ‘iso-2022-jp’);
Encode::from_to($body, ‘utf8’, ‘iso-2022-jp’);
print F $hdr;
print F $body;
open(H, “formail -X ” < $ENV{EMAIL} |”) || die;
@hdrinf = ;
close(H);
print F $LINE;
foreach (@hdrinf) { print F “$_”; }
print F $LINE;
close(F);

unlink($ENV{EMAIL});

# chmod 755 /usr/local/etc/email_virus_action.sh

メールのヘッダ情報を抽出するため procmail 付属の formail を使用していますので、procmail をインストールします。
# yum -y install procmail

# cd /etc/rc.d/init.d
# wget http://memberwebs.com/stef/software/clamsmtp/contrib/clamsmtpd
# chmod 755 /etc/rc.d/init.d/clamsmtpd
# chkconfig clamsmtpd on
# service clamsmtpd start

  • 5月 12 / 2009
  • 0
CentOS, サーバ, 覚書

ClamAVのインストール

○ClamAVのインストール
# yum -y install clamav clamd
# vi /etc/clamd.conf
 :
#LogSyslog yes ←コメントアウト
 :
TemporaryDirectory /tmp ←変更
 :
LocalSocket /var/run/clamav/clamd.socket ←変更
 :
#TCPSocket 3310 ←コメントアウト
 :
#TCPAddr 127.0.0.1 ←コメントアウト
 :
ScanPDF yes ←コメント解除
 :

# vi /etc/freshclam.conf
 :
#LogFileMaxSize 2M
LogFileMaxSize 0 ←変更
 :
# Use system logger (can work together with UpdateLogFile).
# Default: no
#LogSyslog yes ←コメントアウト
 :
#PidFile /var/run/freshclam.pid
PidFile /var/run/clamav/freshclam.pid ←変更
 :
#AllowSupplementaryGroups yes
AllowSupplementaryGroups yes ←コメント解除
 :

# vi /etc/rc.d/init.d/freshclam ←作成

#! /bin/bash
#
# freshclam Start/Stop the freshclam daemon.
#
# chkconfig: – 71 40
# description: freshclam is an update daemon for Clam AV database.
#
# processname: freshclam
# config: /etc/freshclam.conf
# pidfile: /var/run/clamav/freshclam.pid

# Source function library
. /etc/init.d/functions

# Get network config
. /etc/sysconfig/network

RETVAL=0

# See how we were called.

prog=”freshclam”
progdir=”/usr/bin”

start() {
echo -n $”Starting $prog: ”
daemon $progdir/$prog -d
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/freshclam
return $RETVAL
}

stop() {
echo -n $”Stopping $prog: ”
killproc $prog
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/run/clamav/freshclam.pid /var/lock/subsys/freshclam
return $RETVAL
}

restart() {
stop
start
}

reload() {
echo -n $”Reloading DB: ”
killproc freshclam -ALRM
RETVAL=$?
echo
return $RETVAL
}

case “$1″ in
start)
start
;;
stop)
stop
;;
status)
status freshclam
;;
restart)
restart
;;
condrestart)
[ -f /var/lock/subsys/freshclam ] && restart || :
;;
reload)
reload
;;
*)
echo $”Usage: $0 {start|stop|status|restart|condrestart|reload}”
exit 1
esac

exit $?

# chmod 755 /etc/rc.d/init.d/freshclam
# chkconfig freshclam on

# service freshclam start
# service clamd start

ページ:12345