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」へアクセスする。

[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」へアクセスする。

[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/
    

[Debian]Debian lennyで1からサーバーを作ってみる – logwatchをインストール

  • logwatchをインストール
    # aptitude install logwatch

    デフォルトでroot宛へメールが送られる。変えたければ以下を編集。(私はデフォルトのまま)

    # vi /usr/share/logwatch/default.conf/logwatch.conf
    
    MailTo = root
    ↓
    MailTo = hogehoge@gmail.com
    

[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
    

[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設定(サーバー)
    1. 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/
      
    2. サーバー証明書・秘密鍵作成
      # ./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/
      
    3. DH(Diffie Hellman)パラメータ作成
      # ./build-dh
      # cp keys/dh1024.pem /etc/openvpn/
      
    4. 証明書廃止リスト作成
      # ./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
      
    5. 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
      
    6. ./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
      
    7. 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 ← ファイル最終行へ追加
      
    8. 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
    9. 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
    10. openvpn起動 && iptablesスクリプト起動
      # /etc/init.d/openvpn start
      # ./iptables.sh
      
    11. ルーター側で、宛先がVPN(例:10.8.0.0/24)のアクセスはVPNサーバー(例:192.168.0.2)を経由するようにルートを追加する。
  • OpenVPN設定(クライアント)
    1. クライアント証明書・秘密鍵作成
      # cd /etc/openvpn/easy-rsa/
    2. 証明書/鍵作成用環境変数設定ファイル内容をシステムに反映
      # source vars
    3. クライアント名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
      
    4. /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設定※クライアント側作業
    1. クライアント設定ファイルサンプル(C:\Program Files\OpenVPN\sample-config\client.ovpn)を設定ファイル格納フォルダ(C:\Program Files\OpenVPN\config)へコピーする。
    2. クライアント設定ファイル(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/
    

[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"
    fi
    
    chmod 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

[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」へアクセスする。

[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

[Debian]Debian lennyで1からサーバーを作ってみる – xcacheをインストール

  • xcacheをインストール
    # aptitude install php5-xcache
    
  • xcacheを設定
    1. シンボリックリンクを作成
      # ln -s /usr/share/xcache /var/www/admin/
    2. コマンドラインからxcache.admin.passの値を求めてメモしておく。(******は各自適当に)
      # echo -n '******' | md5sum
    3. コマンドラインからxcache.countの値を求めてメモしておく。
      # cat /proc/cpuinfo |grep -c processor
    4. /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"
      
    5. /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」へアクセスする。

Home > Tags > Debian

Search
Feeds
Meta

Return to page top