Tuesday 21 August 2012

Parallel BZIP2

기존 bzip2를 multicore 환경에서 성능을 더 끌어올리기 위해 만들어진 명령으로 링크에서 다운로드를 받거나 Redhat 계열에서는 다음 명령으로 설치 가능하다

yum install pbzip2

생성한 SSH Key를 다른 서버에 쉽게 적용하기


SSH에는 간단한 명령으로 다른 서버의 authorized_keys에 값을 넣어주는 명령어가 존재한다.

root@b.host.com에 id_rsa.pub 값을 전송하는 명령은 다음과 같다.
ssh-copy-id -i ~/.ssh/id_rsa.pub root@b.host.com

tmp 디렉토리 보안 강화시키기


많은 해킹이 rootkit을 통하여 시스템의 버그나 헛점을 이용하여 /tmp에 파일을 생성, 공격하는 경우가 많다.
여기서는 이 문제점을 해결하는 방법을 설명한다.
  1. /tmp 로 쓰이게될 파일(tmpMnt)을 생성
    # dd if=/dev/zero of=/.tmpMnt bs=1024 count=100000
    tmp에 더 많은 용량을 할당하려면 count의 크기를 늘린다. 예제에서는 100MB를 할당하였다.
  2. 생성된 파일을 ext3 파일 시스템으로 포멧
    # /sbin/mke2fs -j /.tmpMnt
  3. 기존 데이터를 백업
    # mkdir /var/tmp_Backup/
    # rsync -avP /tmp/* /var/tmp_Backup/
    # chmod 1777 /tmp
    기존 데이터를 옮기지 않는 이유
    /tmp는 여러 프로그램들이 공통으로 사용하는 영역이므로 만일 삭제시 특정 서비스나 프로그램에 문제가 발생할 수 있는 소지가 있음으로 삭제하지 않았음
  4. tmpMnt 마운트
    # mount -o loop,noexec,nosuid,rw /.tmpMnt /tmp
    noexec:실행권한 미할당, nosuid:SUID를 사용하지 못하도록 함
  5. 기존자료를 복구 및 삭제
    # rsync -avP /var/tmp_Backup/* /tmp/
    # rm -rf /var/tmp_Backup
  6. fstab 에 추가
    # echo "/.tmpMnt /tmp ext3 loop,noexec,nosuid,rw 0 0" >> /etc/fstab

PowerAdmin


Homepage: PowerAdmin
  1. Install Web Server : 
    # yum install php php-common php-gd php-mbstring php-mcrypt
    1. PostgreSQL을 Backend로 쓸때
      # yum install php-pgsql php-pear-MDB2-Driver-pgsql
    2. MySQL을 Backend로 쓸때
      # yum install php-mysql php-pear-MDB2-Driver-mysql
      EPEL
      php-mcrypt php-pear-MDB2-Driver-pgsql 패키지는 EPEL Repository가 등록되어 있어야 함
  2. PowerAdmin Download : Link
  3. Extract files
    # tar zxvf poweradmin-2.1.5.tgz -C /var/www/html/
    # cd /var/www/html
    # ln -s poweradmin-2.1.5 poweradmin
    # chown -R root:root poweradmin*
    # cp /var/www/html/poweradmin/inc/config-me.inc.php /var/www/html/poweradmin/inc/config.inc.php
    # chcon -R -u system_u -t httpd_sys_content_t poweradmin*
  4. Install
    http://<IP>/poweradmin/install

PowerDNS


PowerDNS는 Authoritative Server와 Recursive Server로 구분하여 제공한다.
  • Authoritative Server
    Authoritative Server 는 자신이 관리하는 도메인 정보를 관리한다.
    만일 DNS 질의가 들어올 경우 자신이 관리하는 도메인 정보일 경우 그 요청에 대한 응답을 제공하며, 그 외의 질의는 응답하지 않는다. 
  • Recursive Server
    Recursive Server는 루트(.) 네임서버의 정보를 통해 각 도메인을 관리하는 DNS 서버들에게 질의하여 해당 호스트의 IP를 알아내는 기능을 한다. 이 때 질의 응답은 당연히 Recursive Server가 하는 것이 아니라 해당 영역의 DNS 서버가 주게 된다. 

PowerDNS Authoritative & recursor 서버 설치

  1. PowerDNS Yum Repository 등록
  2. PowerDNS 설치
    # yum install -y pdns-server
    # yum install -y pdns-recursor pdns-recursor-rrd --skip-broken
    # yum install -y mysql-server pdns-server-backend-mysql pdns-server-tools
    skip-broken
    PDNS-RECURSOR 설치 시 EPEL 저장소와 pdns-recursor-MIND 저장소가 같은 이름의 패키지를 가지고 있음으로 --skip-broken을 사용하여 에러를 무시하고 pdns-recursor-MIND 저장소 패키지를 설치하도록 하였음

Authoritative Server Configuration

  1. MySQL Database 설치
    # yum install mysql mysql-server -y
    # mysql_install_db
    # service mysqld start
    # mysqladmin -u root password '<암호>'
  2. PowerDNS Database 설정
    1. Database 및 User 생성
      mysql> CREATE DATABASE powerdns character set utf8;
      mysql> GRANT ALL ON powerdns.* TO 'poweradmin'@'localhost' IDENTIFIED BY '*******';
      mysql> FLUSH PRIVILEGES;
      주의
      DNSSEC 활성화시키려 한다면 powerdns 데이터베이스의 Character set을 latin1으로 반드시 설정한다.
    2. Tables 생성
      USE powerdns;
       
      create table domains (
       id      INT auto_increment,
       name        VARCHAR(255) NOT NULL,
       master      VARCHAR(128) DEFAULT NULL,
       last_check  INT DEFAULT NULL,
       type        VARCHAR(6) NOT NULL,
       notified_serial INT DEFAULT NULL,
       account         VARCHAR(40) DEFAULT NULL,
       primary key (id)
      ) Engine=InnoDB;
       
      CREATE UNIQUE INDEX name_index ON domains(name);
       
      CREATE TABLE records (
        id              INT auto_increment,
        domain_id       INT DEFAULT NULL,
        name            VARCHAR(255) DEFAULT NULL,
        type            VARCHAR(10) DEFAULT NULL,
        content         VARCHAR(255) DEFAULT NULL,
        ttl             INT DEFAULT NULL,
        prio            INT DEFAULT NULL,
        change_date     INT DEFAULT NULL,
        primary key(id),
        CONSTRAINT `records_ibfk_1` FOREIGN KEY (`domain_id`) REFERENCES `domains`
      (`id`) ON DELETE CASCADE
      )Engine=InnoDB;
       
      CREATE INDEX rec_name_index ON records(name);
      CREATE INDEX nametype_index ON records(name,type);
      CREATE INDEX domain_id ON records(domain_id);
       
      create table supermasters (
        ip VARCHAR(25) NOT NULL,
        nameserver VARCHAR(255) NOT NULL,
        account VARCHAR(40) DEFAULT NULL
      ) Engine=InnoDB;
       
      GRANT SELECT ON supermasters TO pdns;
      GRANT ALL ON domains TO pdns;
      GRANT ALL ON records TO pdns;
    3. DNSSEC
      create table domainmetadata (
          id INT auto_increment ,
          domain_id INT NOT NULL ,
          kind VARCHAR(16),
          content TEXT ,
          primary key(id )
      );
      create table cryptokeys (
          id INT auto_increment ,
          domain_id INT NOT NULL ,
          flags INT NOT NULL ,
          active BOOL ,
          content TEXT ,
          primary key(id )
      );
       
      alter table records add ordername VARCHAR(255);
      alter table records add auth bool ;
      create index orderindex on records(ordername);
       
      create table tsigkeys (
          id INT auto_increment ,
          name VARCHAR(255),
          algorithm VARCHAR(255),
          secret VARCHAR(255),
          primary key(id )
      );
       
      create unique index namealgoindex on tsigkeys ( name, algorithm );
       
      alter table records change column type type VARCHAR(10);
  3. PowerDNS Authoritative Server 설정 파일 수정
    # vi /etc/powerdns/pdns.conf
    # Daemon Settings
    daemon=yes
    guardian=yes
    local-address=<서버 IP>
    
    # Recursor Settings
    lazy-recursion=yes
    recursor=127.0.0.1
    
    # MySQL Backend Setting
    launch=gmysql
    gmysql-host=127.0.0.1
    gmysql-port=3306
    gmysql-dbname=powerdns
    gmysql-user=poweradmin
    gmysql-password=<암호>
    

Recursor Server Configuration

  • PowerDNS Recursor Server 설정 파일 수정
    # vi /etc/pdns-recursor/recursor.conf
    # Daemon Settings
    allow-from=127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, ::1/128, fe80::/10
    local-address=127.0.0.1
    quiet=yes
    

PowerDNS 서비스 등록 및 실행

# chkconfig pdns on
# chkconfig pdns-recursor on
# service pdns start
# service pdns-recursor start

PowerDNS 기타 설정

    1. Webserver
      PowerDNS는 현재 서비스 상태를 볼 수 있도록 웹 UI를 제공한다. 기본적으로 127.0.0.1 주소로만 개방되어있으며 암호가 Plain Text 방식이므로 보안에 취약할 수 있으므로 가급적 사용을 자제한다.
      다음은 서버의 모든 IP에 서비스를 Binding 시키는 예제이다.
      # vi /etc/pdns/pdns.conf
      webserver
      webserver-address=0.0.0.0
      webserver-password=<암호>
      
      기본적으로 8081 포트로 서비스가 Binding되어있다.
    2. Logging
      # vi /etc/pdns/pdns.conf
      logging-facility=0
      
      # vi /etc/rsyslog.conf
      # Save PowerDNS messages also to pdns.info, pdns.warn, pdns.err
      local0.info                                              -/var/log/pdns/pdns.info
      local0.warn                                              -/var/log/pdns/pdns.warn
      local0.err                                               /var/log/pdns/pdns.err
      
      # service rsyslog restart
    3. Security
      PowerDNS의 보안성을 강화시키기 위해 chroot 옵션을 설정한다.
      chroot=/var/spool/powerdns
      
      # mkdir /var/spool/powerdns
      # chown powerdns:powerdns /var/spool/powerdns