Home > Tags > Debian
Debian
[Debian]Debian lennyで1からサーバーを作ってみる – IPTables log analyzerをインストール
- IPTables log analyzerをインストール
# cd /usr/local/src
最新版をここから探す。http://sourceforge.net/project/showfiles.php?group_id=63361
# wget http://jaist.dl.sourceforge.net/sourceforge/iptablelog/iptablelog-v0.9.tar.gz # tar -zxvf iptablelog-v0.9.tar.gz # mv iptablelog /var/www/admin # chown -R root.root /var/www/admin/iptablelog # cd # mysql -u root -p mysql> create database iptablelog; mysql> grant all on iptablelog.* to iptablelog_user@localhost identified by '******'; mysql> exit # cat /var/www/admin/iptablelog/conf/iptables.mysql | mysql -u iptablelog_user -p iptablelog
- ulogdインストール
# aptitude install ulogd ulogd-mysql # vi /etc/ulogd.conf
# # ulogd_BASE.so - interpreter plugin for basic IPv4 header fields # you will always need this plugin="/usr/lib/ulogd/ulogd_BASE.so" plugin="/usr/lib/ulogd/ulogd_LOCAL.so" ← 追加 plugin="/usr/lib/ulogd/ulogd_LOGEMU.so" ↓ #plugin="/usr/lib/ulogd/ulogd_LOGEMU.so" #plugin="/usr/lib/ulogd/ulogd_MYSQL.so" ↓ plugin="/usr/lib/ulogd/ulogd_MYSQL.so" [MYSQL] pass="changeme" ↓ pass="******" user="laforge" ↓ user="iptablelog_user" db="ulogd" ↓ db="iptablelog"
# /etc/init.d/ulogd start
- /root/iptables.shを編集
# vi /root/iptables.sh
・・・ ・・・ # ↓この行の下へ追加する # 上記のルールにマッチしなかったアクセスはログを記録して破棄 iptables -A INPUT -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES INPUT] : ' iptables -A INPUT -m limit --limit 1/s -j ULOG --ulog-nlgroup 1 --ulog-prefix 'INPUT' ← 追加 ・・・ ・・・
- IPTables log analyzer設定
# cp /var/www/admin/iptablelog/conf/config.php.default /var/www/admin/iptablelog/conf/config.php # vi /var/www/admin/iptablelog/conf/config.php
$db_password="changeme"; ↓ $db_password="******"; $file_base="/path/to/iptablelog"; ↓ $file_base="/var/www/admin/iptablelog";
# cp /var/www/admin/iptablelog/conf/iptables_resolve.default /etc/cron.hourly/iptables_resolve # vi /etc/cron.hourly/iptables_resolve
$iptablelog_path = "/var/www/html/iptablelog"; ↓ $iptablelog_path = "/var/www/admin/iptablelog"; db_connect("localhost","dbname","dbuser", "dbpass"); ↓ db_connect("localhost","iptablelog","iptablelog_user", "******"); - ブラウザで「http://admin.サーバー名/iptablelog」へアクセスする。
- Comments: 0
- Trackbacks: 1
[Debian]Debian lennyで1からサーバーを作ってみる – Visitorsをインストール
- Apacheアクセスログ解析にVisitorsをインストール。
# aptitude install visitors nkf
- アクセスログ解析結果出力ティレクトリ作成。
# mkdir /var/www/admin/log
- 所有者を一般ユーザーへ変更(hogeは一般ユーザーへ)
# chown hoge.hoge /var/www/admin/log
- visitors.shを作成(hogeは一般ユーザーへ)
# vi visitors.sh
#!/bin/bash # ユーザーネームを記載 username=hoge # アクセス解析用ディレクトリを記載 addlog=/var/www/admin/log/ # このスクリプトのログファイル名を記載 logfile=/var/log/logsearch.log function logsearch { date '+%Y/%m/%d(%a) %T' for a in `find /var/log/apache2/* -mtime -4` do log=`basename $a` visitors -A -m 30000 $a -o html > $addlog$log nkf -w -m0 $addlog$log > $addlog$log.html rm -f $addlog$log done } logsearch >> $logfile 2>&1 echo "" >> $logfile; echo "" >> $logfile; chown -R $username:$username $addlog - 実行権を付与 && Cronへ登録
# chmod +x visitors.sh # mv visitors.sh /etc/cron.hourly
- .htaccessを作成
# vi /var/www/admin/log/.htaccess
Options Indexes Includes ExecCGI FollowSymLinks MultiViews
hogeは一般ユーザーへ
# chown hoge.hoge /var/www/admin/log/.htaccess
- ブラウザで「http://admin.サーバー名/log」へアクセスする。
- Comments: 0
- Trackbacks: 1
[Debian]Debian lennyで1からサーバーを作ってみる – pflogsummをインストール
- Postfixのログ解析にpflogsummをインストール。
# aptitude install pflogsumm
- pflogsumm_report用にスクリプト作成
# vi pflogsumm_report
#!/bin/bash LANG=C MAILLOG=`mktemp` for log in `ls /var/log/mail.log*|sort -r` do cat $log >> $MAILLOG done REPORT=`mktemp` pflogsumm --problems_first --verbose_msg_detail --mailq -d yesterday $MAILLOG > $REPORT cat $REPORT | mail -s "`head -1 $REPORT` in `uname -n`" postmaster rm -f $MAILLOG $REPORT# chmod 700 pflogsumm_report # ./pflogsumm_report # mv pflogsumm_report /etc/cron.daily/
- Comments: 0
- Trackbacks: 0
[Debian]Debian lennyで1からサーバーを作ってみる – logwatchをインストール
- logwatchをインストール
# aptitude install logwatch
デフォルトでroot宛へメールが送られる。変えたければ以下を編集。(私はデフォルトのまま)
# vi /usr/share/logwatch/default.conf/logwatch.conf
MailTo = root ↓ MailTo = hogehoge@gmail.com
- Comments: 0
- Trackbacks: 0
[Debian]Debian lennyで1からサーバーを作ってみる – サーバーバックアップ設定
サーバーバックアップ設定
- bzip2をインストール
# aptitude install bzip2
- バックアップスクリプト作成
# vi backup.sh
#!/bin/bash # # ローカル内でバックアップ # LANG=C # # 設定開始 # # バックアップ対象リスト名 # ※バックアップ対象をフルパスで記述したリスト BACKUPLIST=/root/backuplist [ ! -s $BACKUPLIST ] && echo "$BACKUPLIST is not found" && error_exit # バックアップ対象外リスト名 # ※バックアップ対象外をフルパスで記述したリスト BACKUPNOLIST=/root/backupnolist # バックアップ先ディレクトリ名 BACKUPDIR=/backup mkdir -p $BACKUPDIR # バックアップ保存世代数 # ※当日分を含めた過去分バックアップを保存する世代数 # ※過去分バックアップを保存しない場合は1を指定する BACKUPGEN=8 # 暗号化・復号化パスフレーズ # ※指定がないときは暗号化しない PASS='' # バックアップログファイル名 BACKUPLOG=/var/log/backup.log # # 設定終了 # # 異常終了処理関数定義 error_exit () { rm -f $TMPBACKUPNOLIST exit 1 } # バックアップファイルをバックアップ対象外リストに追加 # ※バックアップ先ファイルをバックアップしないようにする TMPBACKUPNOLIST=`mktemp` [ -s $BACKUPNOLIST ] && cat $BACKUPNOLIST > $TMPBACKUPNOLIST echo "$BACKUPDIR/*backup.tar.bz2" >> $TMPBACKUPNOLIST # 前回バックアップをリネーム cd $BACKUPDIR OLDBACKUPFILE=`ls backup.tar.bz2* 2>/dev/null` if [ -f $OLDBACKUPFILE ]; then TIMESTAMP=`ls --full-time $OLDBACKUPFILE|awk '{print $6}'|tr -d -` mv $BACKUPDIR/$OLDBACKUPFILE $BACKUPDIR/${TIMESTAMP}$OLDBACKUPFILE > /dev/null 2>&1 fi # バックアップログファイル作成 rm -f $BACKUPLOG touch $BACKUPLOG chmod 400 $BACKUPLOG # バックアップ実行 echo "`date` backup start" >> $BACKUPLOG tar cjvfP $BACKUPDIR/backup.tar.bz2 -T $BACKUPLIST -X $TMPBACKUPNOLIST >> $BACKUPLOG 2>&1 code=$? if [ $code -ne 0 ]; then cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root rm -f $BACKUPDIR/backup.tar.bz2 error_exit fi echo "`date` backup end" >> $BACKUPLOG # バックアップ暗号化(暗号化・復号化パスフレーズ指定時のみ) if [ ! -z $PASS ]; then echo "`date` encrypt start" >> $BACKUPLOG mkdir -p $HOME/.gnupg echo $PASS|gpg --passphrase-fd 0 --batch -c $BACKUPDIR/backup.tar.bz2 > /dev/null 2>&1 code=$? if [ $code -ne 0 ]; then cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root rm -f $BACKUPDIR/backup.tar.bz2* error_exit fi rm -f $BACKUPDIR/backup.tar.bz2 echo "`date` encrypt end" >> $BACKUPLOG fi # バックアップ保存世代を超えた古いバックアップを削除 if [ $(ls $BACKUPDIR/*backup.tar.bz2*|wc -l) -gt $BACKUPGEN ]; then OLDBACKUPCNT=`expr $(ls $BACKUPDIR/*backup.tar.bz2*|wc -l) - $BACKUPGEN` for file in `ls -t $BACKUPDIR/*backup.tar.bz2*|tail -n $OLDBACKUPCNT` do rm -f $file done fi # バックアップ対象外リスト削除 rm -f $TMPBACKUPNOLIST - 実行権を付与
# chmod 700 backup.sh
- バックアップ対象リスト作成
# echo "/home" >> backuplist # echo "/root" >> backuplist # echo "/var/www" >> backuplist # echo "/backup/mysql" >> backuplist # echo "/var/lib/postgresql/8.3/main/backups/pgsql-backup" >> backuplist
- バックアップ対象外リスト作成
# echo "/var/www/admin" >> backupnolist
- cronへ登録(mysqlのバックアップ後、サーバーバックアップを行う様に編集。)
# crontab -e
0 5 * * * /root/mysql-backup.sh; /root/backup.sh
- Comments: 0
- Trackbacks: 0
[Debian]Debian lennyで1からサーバーを作ってみる – OpenVPNをインストール
- OpenVPNをインストール
# aptitude install openvpn openssl
- もし /dev/net/tun が存在しなかったら以下を行って作成する↓
# mkdir /dev/net # mknod /dev/net/tun c 10 200
- IPフォワード設定
# vi /etc/sysctl.conf
#net.ipv4.ip_forward=1 ↓ net.ipv4.ip_forward=1
# sysctl -p /etc/sysctl.conf
1が表示されるかの確認
# cat /proc/sys/net/ipv4/ip_forward
- OpenVPN設定(サーバー)
- CA証明書・秘密鍵作成
# cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ /etc/openvpn/easy-rsa # cd /etc/openvpn/easy-rsa/ # chmod +x * # vi vars
export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="me@myhost.mydomain" ↓ export KEY_COUNTRY="JP" export KEY_PROVINCE="Tokyo" export KEY_CITY="Edogawa" export KEY_ORG="saizensen.net" export KEY_EMAIL="root@saizensen.net"
# source vars # ./clean-all # ./build-ca
↑を実行すると色々聞いてくるが全て空ENTERでおk。
# cp keys/ca.crt /etc/openvpn/
- サーバー証明書・秘密鍵作成
# ./build-key-server server
Generating a 1024 bit RSA private key ....................++++++ ............................++++++ writing new private key to 'server.key' ----- 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) [JP]: ← 空ENTER State or Province Name (full name) [Tokyo]: ← 空ENTER Locality Name (eg, city) [Edogawa]: ← 空ENTER Organization Name (eg, company) [saizensen.net]: ← 空ENTER Organizational Unit Name (eg, section) []: ← 空ENTER Common Name (eg, your name or your server's hostname) [server]: ← 空ENTER Email Address [root@saizensen.net]: ← 空ENTER Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: ← 空ENTER An optional company name []: ← 空ENTER Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName : PRINTABLE:'JP' stateOrProvinceName : PRINTABLE:'Tokyo' localityName : PRINTABLE:'Edogawa' organizationName : PRINTABLE:'saizensen.net' commonName : PRINTABLE:'server' emailAddress : IA5STRING:'root@saizensen.net' Certificate is to be certified until Aug 11 09:04:37 2019 GMT (3650 days) Sign the certificate? [y/n]:y ← yキー 1 out of 1 certificate requests certified, commit? [y/n]y ← yキー Write out database with 1 new entries Data Base Updated
# cp keys/server.crt /etc/openvpn/ # cp keys/server.key /etc/openvpn/
- DH(Diffie Hellman)パラメータ作成
# ./build-dh # cp keys/dh1024.pem /etc/openvpn/
- 証明書廃止リスト作成
# ./build-key dmy
enerating a 1024 bit RSA private key ..............................................................++++++ ..++++++ writing new private key to 'dmy.key' ----- 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) [JP]: ← 空ENTER State or Province Name (full name) [Tokyo]: ← 空ENTER Locality Name (eg, city) [Edogawa]: ← 空ENTER Organization Name (eg, company) [saizensen.net]: ← 空ENTER Organizational Unit Name (eg, section) []: ← 空ENTER Common Name (eg, your name or your server's hostname) [dmy]: ← 空ENTER Email Address [root@saizensen.net]: ← 空ENTER Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: ← 空ENTER An optional company name []: ← 空ENTER Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName : PRINTABLE:'JP' stateOrProvinceName : PRINTABLE:'Tokyo' localityName : PRINTABLE:'Edogawa' organizationName : PRINTABLE:'saizensen.net' commonName : PRINTABLE:'dmy' emailAddress : IA5STRING:'root@saizensen.net' Certificate is to be certified until Aug 11 09:09:41 2019 GMT (3650 days) Sign the certificate? [y/n]:y ← yキー 1 out of 1 certificate requests certified, commit? [y/n]y ← yキー Write out database with 1 new entries Data Base Updated
- openssl.cnfを編集
# vi openssl.cnf
[ pkcs11_section ] ↓ #[ pkcs11_section ] engine_id = pkcs11 ↓ #engine_id = pkcs11 dynamic_path = /usr/lib/engines/engine_pkcs11.so ↓ #dynamic_path = /usr/lib/engines/engine_pkcs11.so MODULE_PATH = $ENV::PKCS11_MODULE_PATH ↓ #MODULE_PATH = $ENV::PKCS11_MODULE_PATH PIN = $ENV::PKCS11_PIN ↓ #PIN = $ENV::PKCS11_PIN init = 0 ↓ #init = 0
- ./revoke-full dmyを実行すると↓みたいに表示されるけど無視して進む。
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Revoking Certificate 02. Data Base Updated Using configuration from /etc/openvpn/easy-rsa/openssl.cnf dmy.crt: /C=JP/ST=Tokyo/L=Edogawa/O=saizensen.net/CN=dmy/emailAddress=root@saizensen.net error 23 at 0 depth lookup:certificate revoked
# ./revoke-full dmy # cp keys/crl.pem /etc/openvpn/ # cd
- OpenVPN設定
# openvpn --genkey --secret /etc/openvpn/ta.key # cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn # gunzip /etc/openvpn/server.conf.gz # vi /etc/openvpn/server.conf
;push "route 192.168.10.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0" push "route 192.168.0.0 255.255.255.0" ← 追加(内部ネットワークアドレス) ;tls-auth ta.key 0 # This file is secret ↓ tls-auth ta.key 0 # This file is secret ;user nobody ;group nogroup ↓ user nobody group nogroup ;log-append openvpn.log ↓ log-append /var/log/openvpn.log management localhost 7505 ← ファイル最終行へ追加 crl-verify crl.pem ← ファイル最終行へ追加
- iptables設定(/etc/openvpn/openvpn-startupを作成)
# vi /etc/openvpn/openvpn-startup
#!/bin/bash # VPNインタフェースiptablesルール削除スクリプト実行※必須 /etc/openvpn/openvpn-shutdown # VPNサーバーからの送信を許可※必須 iptables -I OUTPUT -o tun+ -j ACCEPT iptables -I FORWARD -o tun+ -j ACCEPT # VPNクライアントからVPNサーバーへのアクセスを許可する場合 iptables -I INPUT -i tun+ -j ACCEPT # VPNクライアントからLANへのアクセスを許可する場合 # (例としてVPNクライアントから192.168.0.0/24へのアクセスを許可する場合) iptables -I FORWARD -i tun+ -d 192.168.0.0/24 -j ACCEPT # VPNクライアントからLAN内特定マシンのみへのアクセスを許可する場合 # (例としてVPNクライアントから192.168.0.3へのアクセスを許可する場合) #iptables -I FORWARD -i tun+ -d 192.168.0.3 -j ACCEPT
# chmod +x /etc/openvpn/openvpn-startup
- iptables設定(/etc/openvpn/openvpn-shutdownを作成)
# vi /etc/openvpn/openvpn-shutdown
#!/bin/bash # VPNインタフェース(tun+)用iptablesルール削除関数 delete() { rule_number=`iptables -L $target --line-numbers -n -v|grep tun.|awk '{print $1}'|sort -r` for num in $rule_number do iptables -D $target $num done } # VPNインタフェース(tun+)用iptables受信ルール削除 target='INPUT' delete # VPNインタフェース(tun+)用iptables転送ルール削除 target='FORWARD' delete # VPNインタフェース(tun+)用iptables送信ルール削除 target='OUTPUT' delete# chmod +x /etc/openvpn/openvpn-shutdown
- openvpn起動 && iptablesスクリプト起動
# /etc/init.d/openvpn start # ./iptables.sh
- ルーター側で、宛先がVPN(例:10.8.0.0/24)のアクセスはVPNサーバー(例:192.168.0.2)を経由するようにルートを追加する。
- CA証明書・秘密鍵作成
- OpenVPN設定(クライアント)
- クライアント証明書・秘密鍵作成
# cd /etc/openvpn/easy-rsa/
- 証明書/鍵作成用環境変数設定ファイル内容をシステムに反映
# source vars
- クライアント名saizensen_net-1※のクライアント証明書・秘密鍵作成
※クライアント名は一意であること=既に作成済のクライアント名と重複しないこと# ./build-key-pass saizensen_net-1
Generating a 1024 bit RSA private key .........................................++++++ ..++++++ writing new private key to 'saizensen_net-1.key' Enter PEM pass phrase: ← パスワードを設定する Verifying - Enter PEM pass phrase: ← パスワードを設定する(確認) ----- 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) [JP]: ← 空ENTER State or Province Name (full name) [Tokyo]: ← 空ENTER Locality Name (eg, city) [Edogawa]: ← 空ENTER Organization Name (eg, company) [saizensen.net]: ← 空ENTER Organizational Unit Name (eg, section) []: ← 空ENTER Common Name (eg, your name or your server's hostname) [saizensen_net-1]: ← 空ENTER Email Address [root@saizensen.net]: ← 空ENTER Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: ← 空ENTER An optional company name []: ← 空ENTER Using configuration from /etc/openvpn/easy-rsa/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName : PRINTABLE:'JP' stateOrProvinceName : PRINTABLE:'Tokyo' localityName : PRINTABLE:'Edogawa' organizationName : PRINTABLE:'saizensen.net' commonName : T61STRING:'seizensen_net-1' emailAddress : IA5STRING:'root@saizensen.net' Certificate is to be certified until Aug 11 09:40:24 2019 GMT (3650 days) Sign the certificate? [y/n]:y ← yキー 1 out of 1 certificate requests certified, commit? [y/n]y ← yキー Write out database with 1 new entries Data Base Updated
- /etc/hosts.allowへVPN仮想IPを追加
# echo "ALL: 10.8.0." >> /etc/hosts.allow
- クライアント証明書・秘密鍵作成
- CA証明書、クライアント証明書・秘密鍵、TLS認証鍵設置
サーバー側からCA証明書(/etc/openvpn/ca.crt)、クライアント証明書(/etc/openvpn/easy-rsa/keys /saizensen_net-1.crt)、クライアント秘密鍵(/etc/openvpn/easy-rsa/keys/saizensen_net-1.key)、TLS認証鍵 (/etc/openvpn/ta.key)をクライアント側へ持ち込み、設定ファイル格納フォルダ(C:\Program Files\OpenVPN\config)へ格納する。 - OpenVPN設定※クライアント側作業
- クライアント設定ファイルサンプル(C:\Program Files\OpenVPN\sample-config\client.ovpn)を設定ファイル格納フォルダ(C:\Program Files\OpenVPN\config)へコピーする。
- クライアント設定ファイル(C:\Program Files\OpenVPN\config\client.ovpn)編集
remote my-server-1 1194 ↓ remote saizensen.net 1194 ← VPNサーバー名を指定 cert client.crt ↓ cert saizensen_net-1.crt ← クライアント証明書ファイル名を指定 key client.key ↓ key saizensen_net-1.key ← クライアント秘密鍵ファイル名を指定 ns-cert-type server ← 行頭の;を削除してコメント解除("Man-in-the-Middle"攻撃対策) tls-auth ta.key 1 ← 行頭の;を削除してコメント解除(TLS認証有効化)
- VPNクライアントの削除をする場合
クライアント証明書廃止# cd /etc/openvpn/easy-rsa/ # source vars # ./revoke-full saizensen_net-1 # /bin/cp keys/crl.pem /etc/openvpn/
- Comments: 0
- Trackbacks: 0
[Debian]Debian lennyで1からサーバーを作ってみる – swatchをインストール
- swatchをインストール
# aptitude install swatch
- swatch自動起動スクリプト作成
# mkdir /var/log/swatch # vi /etc/init.d/swatch
#!/bin/sh PATH="/sbin:/bin:/usr/sbin:/usr/bin" NAME="swatch" DAEMON="/usr/bin/swatch" DESC="simple watcher" CONFFILE="/etc/swatch.conf" #LOGFILE="/var/log/secure" LOGFILE="/var/log/auth.log" PIDFILE="/var/run/swatch.pid" SCRIPTDIR="/var/log/swatch" OPTS="--config-file $CONFFILE --tail-file $LOGFILE --pid-file=$PIDFILE \ --script-dir=$SCRIPTDIR --awk-field-syntax --daemon" test -x $DAEMON || exit 0 start() { if [ ! -f "$CONFFILE" ]; then echo "Error: $CONFFILE does not exist." exit 1 fi if [ ! -f "$LOGFILE" ]; then echo "Error: $LOGFILE does not exist." exit 1 fi if [ -f "$PIDFILE" ] then echo "Error: $NAME is already running." else $DAEMON $OPTS fi } stop() { if [ -f "$PIDFILE" ] then PID=`cat $PIDFILE` if ps h $PID > /dev/null then pkill -P $PID else echo "Error: $NAME is not running, but PID file exists. Deleting it." fi rm -f $PIDFILE else echo "Error: $NAME is not running." fi } case "$1" in start) echo "Starting $DESC: $NAME" start ;; stop) echo "Stopping $DESC: $NAME" stop ;; restart) echo "Restarting $DESC: $NAME" stop sleep 1 start ;; *) echo "Usage: $0 start|stop|restart" exit 1 ;; esac exit 0# chmod a+x /etc/init.d/swatch # update-rc.d swatch defaults 99
- swatchアクションスクリプト作成
# vi /usr/local/bin/swatch_action.sh
#!/bin/bash PATH=/bin:/sbin:/usr/bin LANG=C # 規制IPアドレス情報メール通知先設定 # ※メール通知しない場合は下記をコメントアウト mail=root # ログを標準入力から取得 read LOG # ログからIPアドレスを抽出 IPADDR=`echo $LOG|cut -d " " -f $1` echo "$IPADDR"|grep "^[0-9]*\." > /dev/null 2>&1 if [ $? -eq 0 ]; then # IPアドレスから始まる場合 IPADDR=`echo "$IPADDR"|sed -e 's/\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/p' -e d` else # IPアドレス以外から始まる場合 IPADDR=`echo "$IPADDR"|sed -e 's/.*[^0-9]\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/p' -e d` fi # IPアドレスをピリオドで分割 addr1=`echo $IPADDR|cut -d . -f 1` addr2=`echo $IPADDR|cut -d . -f 2` addr3=`echo $IPADDR|cut -d . -f 3` addr4=`echo $IPADDR|cut -d . -f 4` # IPアドレスがプライベートIPアドレスの場合は終了 if [ "$IPADDR" = "127.0.0.1" ]; then exit elif [ $addr1 -eq 10 ]; then exit elif [ $addr1 -eq 172 ] && [ $addr2 -ge 16 ] && [ $addr2 -le 31 ]; then exit elif [ $addr1 -eq 192 ] && [ $addr2 -eq 168 ]; then exit fi # 不正アクセスログメッセージをIPアドレス別ログファイルに記録 echo $LOG >> /var/log/swatch/$IPADDR # IPアドレス別ログファイルから累積不正アクセス数取得 cnt=`cat /var/log/swatch/$IPADDR | wc -l` # 該当IPアドレスからの累積不正アクセス数が3以上の場合または # 引数でlockと指定された場合アクセス規制 if [ $cnt -ge 3 ] || [ $# -eq 2 -a "$2" = "lock" ]; then # 該当IPアドレスからのアクセスを拒否するルールを挿入 iptables -I INPUT -s $IPADDR -j DROP # 上記ルールを24時間後に削除するスケジュールを登録 echo "iptables -D INPUT -s $IPADDR -j DROP > /dev/null 2>&1" | \ at now+24hour > /dev/null 2>&1 # アクセス規制IPアドレス情報をメール通知 [ "$mail" != "" ] && (cat /var/log/swatch/$IPADDR ; \ echo ; whois $IPADDR) | \ mail -s "$IPADDR $cnt lock!" $mail echo "`date` $IPADDR $cnt lock!" else echo "`date` $IPADDR $cnt" fichmod 700 /usr/local/bin/swatch_action.sh
- swatch設定
# vi /etc/cron.daily/logrotate
/etc/init.d/swatch restart > /dev/null ← ファイル最下部へ追加
# vi /etc/swatch.conf
# BINDのバージョン照会を検知したら該当ホストからのアクセスを24時間規制 # ※DNSサーバー(BIND)構築済であること watchfor /query \'VERSION\.BIND\/TXT\/CH\' denied/ pipe "/usr/local/bin/swatch_action.sh 7 lock" throttle=00:00:10 # アクセス無許可ホストからのDNS使用を検知したら該当ホストからのアクセスを24時間規制 # ※DNSサーバー(BIND)構築済であること watchfor /named.*client.*query.*denied/ pipe "/usr/local/bin/swatch_action.sh 7 lock" # アクセス無許可ホストからのSSHログイン失敗を検知したら該当ホストからのアクセスを24時間規制 # ※/etc/hosts.deny、/etc/hosts.allowでアクセス許可ホストを制限していることが前提 watchfor /sshd.*refused/ pipe "/usr/local/bin/swatch_action.sh 10 lock" throttle=00:00:10 # アクセス許可ホストからのSSHログイン失敗を3回以上検知したら該当ホストからのアクセスを24時間規制 watchfor /sshd.*Invalid user/ pipe "/usr/local/bin/swatch_action.sh 10" throttle=00:00:10 - swatch起動
# /etc/init.d/swatch start
- Comments: 0
- Trackbacks: 0
[Debian]Debian lennyで1からサーバーを作ってみる – snortをインストール
- snortインストール
snortインストール時、内部ネットワーク設定を聞いてくるので各自設定する。(例:192.168.0.0/24)
Set up a database for snort-mysql to log to? と聞いてくるので「はい」と答える。# aptitude install snort snort-mysql # aptitude install libio-zlib-perl libwww-perl libarchive-tar-perl
- /etc/snort/snort.confを編集
snortのmysql設定は/usr/share/doc/snort-mysql/README-database.Debianを読むこと。# vi /etc/snort/snort.conf
var HOME_NET any ↓ var HOME_NET DEBIAN_SNORT_HOME_NET var EXTERNAL_NET any ↓ #var EXTERNAL_NET any #var EXTERNAL_NET !$HOME_NET ↓ var EXTERNAL_NET !$HOME_NET output database: log, mysql ↓ output database: log, mysql, user=snort password='snort-db' dbname=snort host=localhost
- snort-mysqlを設定。
# dpkg-reconfigure snort-mysql
- snort用にMySQLへDBを作成する。
# mysql -u root -p mysql> CREATE DATABASE snort; mysql> grant CREATE, INSERT, SELECT, UPDATE on snort.* to snort@localhost; mysql> grant CREATE, INSERT, SELECT, UPDATE on snort.* to snort; mysql> SET PASSWORD FOR snort@localhost=PASSWORD('snort-db'); mysql> flush privileges; mysql> show grants for 'snort'@'localhost'; mysql> exit # cd /usr/share/doc/snort-mysql/ # zcat create_mysql.gz | mysql -u snort -D snort -p snort-db - /etc/snort/db-pending-configを削除する。(snortを起動しようとすると削除しろとおっしゃるので。)
# rm /etc/snort/db-pending-config
- snort起動
# /etc/init.d/snort start
- BASEをインストール
# cd /usr/local/src
最新版をここから探す。http://sourceforge.net/project/showfiles.php?group_id=103348&package_id=128846
# wget http://jaist.dl.sourceforge.net/sourceforge/secureideas/base-1.4.3.1.tar.gz # tar zxvf base-1.4.3.1.tar.gz # mv base-1.4.3.1 /var/www/admin/base
最新版をここから探す。http://sourceforge.net/project/showfiles.php?group_id=42718&package_id=220409
# wget http://jaist.dl.sourceforge.net/sourceforge/adodb/adodb509a.tgz # tar zxvf adodb509a.tgz # mv adodb5 /var/www/admin/base/adodb # chown -R www-data:www-data /var/www/admin/base/ # cd
- BASE設定
# cp /var/www/admin/base/base_conf.php.dist /var/www/admin/base/base_conf.php # vi /var/www/admin/base/base_conf.php
$BASE_Language = 'english'; ↓ $BASE_Language = 'japanese'; $BASE_urlpath = ''; ↓ $BASE_urlpath = '/base'; $DBlib_path = ''; ↓ $DBlib_path = '/var/www/admin/base/adodb'; $alert_dbname = 'snort_log`'; ↓ $alert_dbname = 'snort'; $alert_password = 'mypassword'; ↓ $alert_password = 'snort-db';
- phpのpearをupdate、必要なpearパッケージをインストール。
# pear channel-update pear.php.net # pear install --alldeps Image_Graph-alpha # pear install Mail Mail_Mime
- ブラウザで「http://admin.サーバー名/base」へアクセスする。
- Comments: 0
- Trackbacks: 0
[Debian]Debian lennyで1からサーバーを作ってみる – Sambaをインストール
- Sambaをインストール
インストール時、windowsのグループ名が聞いてくるが通常はデフォルトのまま(WORKGROUP)、DHCPからWINSを使うか?と聞いてくるが「いいえ」を選択。# aptitude install samba
- Sambaサーバーアクセス用ユーザ作成
既存のユーザー以外に新規ユーザを作成する場合はまずユーザーを作成する。# useradd hoge # passwd hoge
- Sambaサーバーアクセス用ユーザへ設定する。
# smbpasswd -a hoge
- ホームディレクトリ作成
新規ユーザー対処# mkdir /etc/skel/samba
既存ユーザー対処
# vi mkhomedir.sh
#!/bin/bash for user in `ls /home` do id $user > /dev/null 2>&1 [ $? -eq 0 ] && \ [ ! -d /home/$user/samba ] && \ mkdir /home/$user/samba && \ chown $user:$user /home/$user/samba && \ echo "/home/$user/samba create" done# sh mkhomedir.sh # rm -f mkhomedir.sh
- 共有ディレクトリ作成
# mkdir /var/samba # mkdir /var/samba/public # mkdir /var/samba/share # chown -R nobody:nogroup /var/samba
- /etc/samba/smb.confを編集
# vi /etc/samba/smb.conf
## [global]セクション編集 [global] unix charset = UTF-8 ← 追加 dos charset = CP932 ← 追加 display charset = UTF-8 ← 追加 hosts allow = 192.168.0. 127. 10.8.0. ← 追加 ## [homes]セクション編集 path = %H/samba ← 追加 read only = yes ↓ read only = no ## ファイル最下部へ追加↓ [public] comment = Read only Directories path = /var/samba/public public = yes guest ok = yes [share] comment = All User shared Directories path = /var/samba/share public = yes read only = no #writable = yes only guest = yes printable = no
- samba再起動
# /etc/init.d/samba restart
- Comments: 0
- Trackbacks: 0
[Debian]Debian lennyで1からサーバーを作ってみる – xcacheをインストール
- xcacheをインストール
# aptitude install php5-xcache
- xcacheを設定
- シンボリックリンクを作成
# ln -s /usr/share/xcache /var/www/admin/
- コマンドラインからxcache.admin.passの値を求めてメモしておく。(******は各自適当に)
# echo -n '******' | md5sum
- コマンドラインからxcache.countの値を求めてメモしておく。
# cat /proc/cpuinfo |grep -c processor
- /etc/php5/conf.d/xcache.iniを編集(hogeは適当な一般ユーザーへ)
# vi /etc/php5/conf.d/xcache.ini
[xcache.admin] xcache.admin.user = "md0" ↓ xcache.admin.user = "hoge" xcache.admin.pass = "" ↓ xcache.admin.pass = "メモした値" [xcache] xcache.size = 16M ↓ xcache.size = 64M xcache.count = 1 ↓ xcache.count = メモした値 xcache.var_size = 0M ↓ xcache.var_size = 8M xcache.var_ttl = 0 ↓ xcache.var_ttl = 600 xcache.var_maxttl = 0 ↓ xcache.var_maxttl = 3600 xcache.mmap_path = "/dev/zero" ↓ xcache.mmap_path = "/tmp/xcache" [xcache.coverager] xcache.coverager = Off ↓ xcache.coverager = On xcache.coveragedump_directory = "" ↓ xcache.coveragedump_directory = "/tmp/pcov"
- /tmp/pcovを作成
# mkdir /tmp/pcov # chown www-data.www-data /tmp/pcov
- シンボリックリンクを作成
- apache再起動
# /etc/init.d/apache2 restart
- ブラウザで「http://admin.サーバー名/xcache/admin」へアクセスする。
- ブラウザで「http://admin.サーバー名/xcache/coverager」へアクセスする。
- Comments: 0
- Trackbacks: 0
Home > Tags > Debian
- Search
- Feeds
- Meta