728x90

[1,2교시 - 데이터베이스 보안 구축]

/ 보안 데이터베이스의 테스트 및 점검
- 데이터베이스 접근제어 보안적용을 시험한다.
    > 로그인 제어
    > SQL 통제
    > 로깅(감사)
    > 경보
    > SQL 마스킹
    > 모니터링
    > 보안 정책 관리
    > 보고서
    > 장애 대응
    > 로그 관리
- 패킷 손실 시험을 실시한다.
- Long SQL 시험
- 성능 시험

- 데이터베이스 작업결재 보안 적용을 시험한다.
- 시험 항목
    > 결재 시스템
    > 작업 결재 통제
    > 로깅(감사)
    > 모니터링
    > 보안 정책 관리
    > 보고서
    > 로그 관리

- 데이터베이스 취약점 분석
- 모의 해킹 실시
- 내부 보안감사 실시

- 데이터베이스 취약점 체크리스트 점검

 

더보기

Q. 데이터베이스 작업결재 테스트 항목 중 보안 정책 관리에 대한 사항으로 옳지 않은 것은 무엇인가?
1) 장기 미사용 정책, 미사용 사용자를 식별할 수 있는 기능이 있는지 여부
2) 감사 정보에 대하여 백업 및 복구가 가능한지 여부 
3) 작업결재 정책에 대한 변경 이력을 관리하는지 여부
4) 작업결재 정책에 대한 백업 및 복구가 가능한지 여부

답 : 2번
해설 : 2번은 로그관리에 대한 내용이다.

 

 

 


[3,4,5교시 - 시스템 보안 구축]

잠깐 log

/ /var/log의 하위 파일 및 폴더
- boot.log: 부팅이 되면서 데몬들이 잘 올라왔나 기록
- dmesg
    > 리눅스 부팅 메시지, 리눅스 부팅 로그
    > 부팅시 드라이버 오류 등을 확인할 수 있다.
    > 커널 관련된 로그도 기록된다.
- glusterfs(GFS) : 서버 여러개를 묶는것
- messages : 해당 운영체제가 돌고 있는 온갖 정보를 기록
- samba : 리눅스 서버와 윈도우 서버간의 디렉토리 자원을 공유(nfs는 리눅스들 끼리)
- secure : 보안인증/권한에 대한 기록

- btmp : cat으로 읽을 수 없다. Data파일, 바이너리 파일이기 때문, 명령어로 읽어야 한다.
    > 명령어 : lastb, 로그인 실패 이력
- lastlog : cat으로 읽을 수 없다. Data파일, 바이너리 파일이기 때문, 명령어로 읽어야 한다.
    > 명령어 : lastlog, 마지막 로그인 기록
    > lastlog -t 7 : 7일동안 로그인한 기록을 보여줘
- wtmp : cat으로 읽을 수 없다. Data파일, 바이너리 파일이기 때문, 명령어로 읽어야 한다.
    > 명령어 : last, 로그인/로그아웃/리부팅 기록, 옵션으로 '-n 숫자'를 하면 최근 몇건의 행적을 알 수 있다.
* /var/run/utmp : cat으로 읽을 수 없다. Data파일, 바이너리 파일이기 때문, 명령어로 읽어야 한다.
    > 명령어 : who, w, finger, 현재 로그인 이력

* 각 명령어와, 결과화면, 사용방법, 파일이 어디에 있는지 등등을 잘 알고 있어야 한다.

/ pts
- Pseudo terminal Server

/ 히스토리 파일(history)
- /root/.bash_history에 있다.
- 바로 저장을 하진 않고 메모리에 저장했다가 나중에 반영된다.
- 'history -a'를 하면 메모리에 있던 내용이 .bash_history에 저장된다.

/ 어카운트의 프로세스와 관련된 로그
- /var/account/pacct
- 활성화를 시켜줘야 파일에 로그가 쌓인다.
- 활성화 명령어 : accton /var/account/pacct
- pacct도 Data파일이라 읽는 명령어가 따로 있다.
- 읽는 명령어 : lastcomm, acctcom(centos에서는 되지 않는다..)

/ sulog
- 위치 : /var/log/sulog
- 먼저 활성화를 시켜야 파일이 있다.
- 활성화 시키기
# vi /etc/login.defs
- 아래 이미지는 중요한 부분

- 맨 밑에 내용을 적을것이다.
# SULOG_FILE /var/log/sulog
- 확인

- /etc/rsyslog.conf을 수정해준다.
# vim /etc/rsyslog.conf
- RULE 쪽에 수정해준다.
- info 이상 레벨일때 저장하도록 세팅한다.

- 작업 후 'systemctl restart rsyslog'를 해준다.
- 확인 (sulog가 생겼다.)

- 테스트
# su - centos 했다가 #exit
- cat /var/log/sulog

* 여담 : Ctrl+f - 한페이지 앞으로 / Ctrl+b - 한페이지 뒤로


다시 rsyslog

 

/ rsyslog.conf 수정
# vi /etc/rsyslog.conf
- ModLoad immark부분의 #지우기

- 수정 후 systemctl restart rsyslog
참고 링크

/ 잠시 RULES 부분설명
- 작성 규칙
    > 점(.)으로 구분되어 있다.
    > 점(.)앞에는 파실리티(facility)라고 한다. 서비스, 메시지의 종류이다.  ex) mail.none에서 mail / authpriv.*에서 authpriv
    > auth : 사용자 인증(로그인)
    > authpriv : 인증(보안, 승인, 권한)
    > 파실리티 중에 local은 0~7까지 있다.
    > 점(.)뒤에는 로그 우선순위의 이름이 들어간다. (*은 모든 로그를 다 포함한다는 뜻이다.)
    > *.info 라면 info레벨 부터 쌓으라는 말이다.
    > mail.none이라면 쌓지 말라는 뜻이다.
    > 따라서 *.info;mail.none;authpriv.none;cron.none는 모든것에 대해 info이상 다 쌓되, mail/authprivcron는 제외라는 뜻
    > omusermsg : 사용자에게 보내는 메시지

/ local 로그가 기록되는 레벨
- local0 : 로그를 작성하지 않음
- local1 : FATAL
- local2 : ERROR
- local3 : WARN
- local4 : INFO
- local5 : DEBUG
- local6 : TRACE
- local7 : ALL

/ 로그의 우선순위
- 5,6,7은 일상적인 레벨이다.
- 3,4는 그냥 오류, 경고
- 0,1,2는 뭔가 심각함


/ 계속 설명
- kern.crit                        @name(호스트이름) : 특정 호스트 pc에 보내라
- kern.crit                         /dev/console : 저 위치에 로그를 남겨라
- kern.info;kern.!err         /dev/console : !는 제외라는 뜻. info위에 다보내고 err위로는 제외해라
- *.*                                  /var/log/messages : 모든 서비스 메시지, 모든 레벨을 기록해라
- *.info;mail.none            /var/log/messages : 모든 서비스의 info레벨위에 다 보내는데 mail관련은 빼라
- *.=info                           /var/log/messages : 모든 서비스의 info만 기록해라
- mail.*;mail.!=info          /var/log/maillog : mail 관련된 메시지 중에서 info수준의 메시지 제외
- mail.!=info,!=debug        /var/log/maillog : info, debug수준의 메시지는 제외하고 기록해라
- *.notice                          @192.168.111.101 : udp로 전달을 해라
- *.notice                          @@192.168.111.101 : tcp로 전달을 해라
- *.notice                          @john.com:514 : udp포트 514로 전달을 해라tcp로 전달을 해라
- mail.*                             ~ : 모든 종류의 로그를 버려라 (~는 틸트로 읽는다.)
- mail.*                             KIM & @192.168.111.101 : KIM이라는 로컬 사용자에게 보내고 그리고 UDP로도 전달을 해라.

더보기

/ 예시 문제 1
- 문제 : 모든 emerg수준의 문제가 발생 /etc/rsyslog.conf 이고 /log/emerg.log에 저장해라
- 답 : *.emerg /log/emerg.log

더보기

/ 예시 문제 2
- 문제 : syslog를 대체하는 시스템 로그 및 커널 메시지 관련 데몬으로 최근 리눅스는 이 로그 데몬을 사용한다. 무엇일까?
- 답 : rsyslog

 

 

 

 

 

 

 

 

 

 

728x90
728x90

[1,2교시 - 데이터베이스 보안 구축]

-- 테이블 생성
create table case_hp(hp varchar2(16));
commit;

-- 확인
select * from case_hp;

-- 데이터 삽입
insert into case_hp values ('010-1111-1111');
insert into case_hp values ('010-2222-2222');
insert into case_hp values ('010-3333-3333');
insert into case_hp values ('010-444-4444');
commit;

-- substr로 010-****-0000 형태로 표시하기
select hp, substr(hp,1,4)||'****'||substr(hp,-5) as "masking" from case_hp;

 


[3,4,5교시 - 시스템 보안 운영]

rsyslog

- CentOS 5.6 에 syslog라는것이 있었다. 로그관리를 하는 것. initd
    > 이때쓰던 명령어 'service snmpd restart'
    > /etc/syslog.conf
- CentOS 7에서는 rsyslog를 쓴다. systemd
    > 지금쓰는 명령어 'systemctl restart snmpd'
    > /etc/rsyslog.conf
- 로그관리 : 어떤 내용이 어디에 저장될지 정해주는게 rsyslog이다.
- 보통 소규모에서는 로그 서버를 구축하지는 않고, 수천대의 장비를 운영하는 회사에서 로그서버를 구축한다.
- 네트워크 장비, 보안장비 등 장비를 가리지 않는다.
- 로그서버에서 로그 관리를 받는다.

/ 준비
- 101번 : 로그 수집서버
- 클라이언트 : 로그 수집 대상서버
- 실습 
    > Messages : 리눅스 커널 로그 및 기본 로그
    > secure : 원격으로 로그인할때 성공실패여부, su를 할때도 저장된다.

/ 패키지 설치
- 기본으로 설치되어 있다.
# rpm -qa | grep rsyslog

- 더 높은 패키지 버전이 있나 확인
# yum list rsyslog
* 버전정보 : (8.24.0-57)주.부.패치-릴리즈

- 업데이트
# yum -y update rsyslog
* install과 update의 차이점 : install은 이전에 설정했던 설정파일이 다 날라간다.

 

/ /var/log로 이동
#cd /var/log
- 백업관리를 해주는 프로세스 : logrotate(/etc/logrotate.conf)

 

/ 설정파일 확인
# rpm -qc rsyslog

/ /etc/rsyslog.conf 파일 변경
- 크게 3부분으로 나뉘어 진다.
- 모듈, GLOBAL DIRECTIVES, RULES
- ROLES 부분은 시험에 짱 많이 나옴

- 15행, 16행 주석을 푼다.

- $udpServerRun 아래에 아래의 내용을 붙여넣는다.

$template TmplMsg,"/var/log/rsyslog/%fromhost-ip%_messages_%$YEAR%-%$MONTH%-%$DAY%.log"  
$template TmplAuth,"/var/log/rsyslog/%fromhost-ip%_secure_%$YEAR%-%$MONTH%-%$DAY%.log"  

authpriv.* ?TmplAuth 
*.info;mail.none;authpriv.none;cron.none ?TmplMsg

- 파일의 생성되는 형식에 대해 서술하고 있다.

- 로그를 어디에 저장할것인지 서술되고 있다.

- authpriv : 인증 권한에 관련된 모든 내용
- authpriv.* ?TmplAuth : 인증관련된 내용은 TmpAuth에 남겨라
- *.info : info보다 상위 개념 내용들
- mail.none : 메일에 관련된 내용은 남기지마라
- authpriv.none: 인증에 관련된 내용은 남기지 마라
- cron.none : 크론과 관련된 내용도 남기지 마
-  ?TmplMsg : 여기에다가.

 

/ 설정파일을 수정하였으니 restart를 한다.
# systemctl restart rsyslog

/ ps -ef 확인
# ps -ef | grep rsyslog

/ netstat 확인
# netstat -antup | grep rsyslog

 

/ 방화벽 열기(514)
# firewall-cmd --permanent --add-port=514/udp
# firewall-cmd --reload 
# firewall-cmd --list-all

 

/ cd /var/log로 들어가면 rsyslog폴더가 생겨있다.

 

[클라이언트]

/ rsyslog 설정파일 수정
- 로그 서버의 아이피:포트를 넣는다.
- *.* : 클라이언트의 모든 정보를
- @@ : tcp , @ : udp -> udp로
- 192.168.111.101에 던지겠다.
- 맨 밑에 넣을것이다.
# vi + /etc/rsyslog.conf

- 바로 재시작하려고 하면 재시작이 안된다.(일단 root가 아니면 재시작이 안된다.)

[서버]
/ 로그 파일이 생기는것 확인
# /var/log/rsyslog

- 아직 secure로그는 안 올라왔는데 이유는 client에서 계정과 관련된 액션이 없었기 때문이다.

- 클라이언트에서 centos로 로그인을 하거나 sshd등을 하면 서버쪽에 secure로그가 생성된다.
- 클라이언트

클라이언트

- 서버

서버

 

/ 클라이언트에서 작업하는 내용이 서버 로그에 잘 나오는지 확인해본다.
- 실습용 패키지 설치
# yum -y install mc

- 서버에서 바로 로그가 올라온다.

 

 

728x90
728x90

[1,2교시 - 데이터베이스 구축 보안]

/ 데이터베이스 보안 테스트 계획서 및 케이스 작성

/ 데이터베이스 보안 접근제어 적용 테스트

/ 데이터베이스 보안 작업결재 적용 테스트

/ 결함 관리

 


 

[3,4,5교시 - 시스템 보안 운영]

snmp

- 네트워크 장비의 성능과 핵심 기능의 현 상태, 기능 정보를 수집하고 관리, 저장할 수 있는 프로토콜
- 관리자는 SNMP를 통해 수집한 정보를 바탕으로 네트워크 장비의 현재 기능 상태와 성능 정보, 장애 발생 부분을 확인하고 대처할 수 있다.
- 162/udp 사용
- Agent는 161/udp 사용
- Manager와 Agent간 SNMP 버전이 일치해야 한다.
참고링크2

/ snmp가 설치되어 있는지 확인
# rpm -qa | grep net-snmp

/ ps -ef 확인
# ps -ef | grep snmpd

/ netstat 확인
# netstat -antup | grep snmpd

- udp쪽에는 LISTEN이 붙지 않는다.

 

/ SNMP 통신방식(polling)
- 161/udp
- agent랑 Manager랑 왔다갔다하는것
- 폴링의 반대말의 인터럽트이다. 근데 snmp에서는 폴링의 반대말을 trap으로 사용한다.
- 정기적으로 신호를 주고 받는다.

/ SNMP 통신방식(trap)
- 162/udp
- Event Reporting
- agent가 Manager한테 일방적으로 전달
- 요청이 없어도 이벤트가 발생하면 내용을 전달한다.
- polling때문에 간섭이 생기지 않도록 trap을 이용한다.

/ 신호를 주고 받는 체계
- 4가지 신호체계라고 한다.
- GET : 매니저가 요청을 하면 에이전트의 정보를 긁어오는데 요청을 하는것
- GET Next : 정보를 받아오는 것
- SET : 관리자가 에이전트한테 세팅을 하는것
- Trap : 비정기적인 이슈가 발생했을때 관리자에게 이벤트를 전달하기 위한 신호

/ 설정파일 찾기
# rpm -qc net-snmp

/ 설정파일 수정
# cp /etc/snmp/snmpd.conf /etc/snmp/snmpd_bk.conf : 복사
# vim snmpd.conf
- 크게 4부분으로 나뉘어져 있다.
- 문서구조를 어느정도 파악하는것이 필요하고, 실습에서는 63행을 넘어가지 않으니 유의하자.

 

/먼저 First
- com2sec : snmp 문법 중 일부. 항상 들어가 있어야 한다.
- sec name : 임의의 값. 이름
- source : 대역
- community : 문자열

- 밑에 복사해서 편집한다.
- sec name을 snmpsec준다. 
- source : 192.168.111.0/24로 대역을 준다.
- community : monday로 문자열을 준다.

 

/ Second
- 이것도 위에꺼 복사해서 써보겠다.
- 퍼스트에서 지정했던 보안이름을 넣어 그룹이름을 지정한다.

- groupName : snmpsecGroup (위에서 지정한 sec name에 Group을 붙임)
- securityName : snmpsec(위에서 지정한 sec name으로 지정)

 

/ Third
- snmp과 관련한 가상의 뷰를 만든다.
- 읽을 수 있는 권한을 주는 가상의 뷰를 만든다.

- name : all (모두 읽기로 권한을 주겠다.)
- subree : .1 (모든것..? 맨위에 값만 사용을 하겠다.)
- mask : 80(그 뒤의 것들은 80으로 덮어버려)

 

/ Finally

- group : snmpsecGroup (위에 지정한 그룹 이름으로 설정)
- read : all (모두 읽기로 함)
- write : none
- notif : none

 

- 전체 코드

####
# First, map the community name "public" into a "security name"

#       sec.name  source          community
com2sec notConfigUser   default                 public
com2sec snmpsec         192.168.111.0/24        monday

####
# Second, map the security name into a group name:

#       groupName      securityModel securityName
group   notConfigGroup  v1              notConfigUser
group   notConfigGroup  v2c             notConfigUser
group   snmpsecGroup    v2c             snmpsec

####
# Third, create a view for us to let the group have rights to:

# Make at least  snmpwalk -v 1 localhost -c public system fast again.
#       name           incl/excl     subtree         mask(optional)
view    systemview      included   .1.3.6.1.2.1.1
view    systemview      included   .1.3.6.1.2.1.25.1.1
view    all             included   .1                   80

####
# Finally, grant the group read-only access to the systemview view.

#       group          context sec.model sec.level prefix read   write  notif
access  notConfigGroup  ""      any       noauth    exact  systemview   none none
access  snmpsecGroup    ""      any       noauth    exact  all          none none

- 수정 후 시스템을 재시작한다.
# systemctl restart snmpd
# systemctl status snmpd


/ 방화벽 열기
# firewall-config
- 런타임을 영구적으로 변경
- 지금 현재 리눅스 버전에서는 서비스가 안보인다.
- 해서 포트로 추가해야 한다.

- 작업 후 옵션에서 파이어월d 다시 불러오기
- firewall-cmd로 하는 코드는 아래와 같다.

firewall-cmd --permanent --add-port=161/udp

firewall-cmd --permanent --add-port=162/udp

firewall-cmd --reload 

firewall-cmd --list-all

 

/ snmp walk
- snmp utils를 설치하면서 같이 설치된 녀석
- 여기에서는 버전1을 사용한다고 했는데 우리는 버전2를 사용해야한다.
- 커뮤니티 스트링이 public으로 되어 있는데 우리는 monday로 지정했었다.

- 사용 명령어
# snmpwalk -v 2c 192.168.111.101 -c monday system
- 버전은 2c를 많이 쓴다. (3은 호환이 안된다.)
- 101 아이피는 111.0/24대역에 포함이 된다.
- 커뮤니티 스트링은 monday로 지정한다.
- 맨끝의 system은 그냥 문법이다.



/ MID, OID
- MID는 뽑아낼 수 있는 정보
- OID : MID에 포함되어 있는 오브젝트 정보, 구별된 개체값

/ 클라이언트에 net-snmp-utils 설치 후 snmpwalk 실행
# yum -y install net-snmp-utils
# snmpwalk -v 2c 192.168.111.101 -c monday system
- 버전을 1이나 3으로 주면 확인이 되지 않는것을 확인할 수 있다.
- 커뮤니티 이름을 monday로 넣지 않으면 확인이 되지 않는다.


- 만약 커뮤니티 스트링을 다른것도 쓰고 싶다면 서버에서 First부분에 항목을 추가해주면 된다.
# vim /etc/snmp/snmpd.conf

- 만약 버전도 특정 버전을 추가하고 싶다면 Second부분에 항목을 추가해주면 된다.
# vim /etc/snmp/snmpd.conf

- conf파일 수정 후 서버를 재시작해준다.

- 이후 커뮤니티 스트링을 추가로 설정했던 것으로 지정하거나 버전도 따로 지정했던것으로 호출하면 확인이 되는것을 확인할 수 있다.

 

/ snmptest프로그램 실습
- 버전을 바꿔가며 테스트 해본다.
- 커뮤니티 스트링을 바꿔가며 테스트해본다.



/ 모니터링 툴(리눅스서버, Windows서버)
- 추후 MRTG(무료), PRTG(유료) 프로그램으로 모니터링을 해볼것이다.
- MRTG : 무료, 트래픽 모니터링, linux/windows
- PRTG : 유료, 사용량, cpu, mem, disk, traffic, ping, port, Windows
- CACTI : 무료, httpd + mysql + php
- Zabbix : 무료, (C/S), httpd+mysql+php
- Nagios : httpd+mysql+php

 

728x90
728x90

/ GNS3 설치

- 다 설치해도 되지만 와이어샤크랑 맨밑에 3개 체크 해제하고 설치 진행
- 윈p캡도 설치
- 솔라리스 스탠다드 툴캣에서는 no

 

 

- 이런 화면이 뜬다..

 

- 앞으로는 D드라이브에 워킹스페이스를 잡을것이다.
- 파일 > 뉴 블랭크 디렉토리에서 원하는 디렉토리를 잡는다.(폴더를 미리 만들면 안됨)

- 여기에서는 스위치나 이런 목록이 있어도 장비에 ios가 설치되어 있지 않아서 인터넷에서 ios를 찾아 설치해줘야 한다.

 

- ios목록이 있을때 bin이 압축이 풀리면 BIN이 된다.
- c1700-adventerprisek9-mz.124-8.bin을 test에 놓고 압축을 푼다음
- BIN으로 나온 파일로 대체한다.

 

 

- GNS3의 아래 표시한 것을 클릭해서 추가한다.
- 계속 넥스트 넥스트하다가 wic-2t를 추가한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
728x90

[1,2교시 - 데이터베이스 보안 구축]

솔직히 강사님이 수업때 무엇을 말씀하려고 하시는것인지 잘 모르겠따..

모듈교재를 개인적으로 읽으면서 공부를 하고 있다..


[3,4,5교시 - 시스템 보안 운영]

- 저번 시간에 네트워크를 재시작 하면 본딩이 풀리는 문제가 있었다.
- 'systemctl restart network'를 해도 안 풀리도록 설정
- 네트워크 매니저와 충돌이 나서 풀리는 것이다.

/ 설정
# gnome-control-center network
- 를 하면 설정>네트워크가 뜨는데 이것을 사용하지 않도록 설정한다.

# systemctl stop NetworkManager
# systemctl disable NetworkManager


- 이제 'nmcli c', 'nmcli d'명령어가 안된다.

- 이제 network를 재시작 해본다.
- 이제는 본딩이 깨지지 않는다.


- 'cat /proc/net/bonding/bond0'도 확인해본다.
# cat /proc/net/bonding/bond0


- 근데 지금 네트워크 매니저를 죽였기때문에 우측상단의 네트워크 아이콘을 누르면 에러메시지가 나온다.



- 네트워크 설정을 자주 하지 않는, 본딩 서비스가 더 중요한 서버들은 이렇게 설정을 한다.

 

/ 본딩모드

0 : 라운드 로빈 방식
1 : 두개중에 하나만 사용
2 : 맥주소를 xor연산해서 결정
3 : 전방위 다 뿌리는거
4, 5, 6 : 그런게 있구나
- 0,1,2,3와 4,5,6이 다른점은 결함이 발생했을때 견딜 수 있는지가 있는지 : 폴트 톨로런스(Fault tolerant)
- 0,12,,3이 있고 4,5,6이 없음

 


 

SNMP(Simple Network Management Protocol)

- 161/udp, 162/udp
- 모니터링 대상 161/udp polling, trap 162/udp
- 설정 : /etc/snmpd.conf -> 문자열 커뮤니티 스트링
- RO public을 주로 쓰고, RW private는 잘 안쓴다.
- 근데 또 RO도 너무 널리 알려져있어서 임의값으로 변경해서 쓴다.
- snmptester라는 툴을 이용한다.

/ 버전
- v1 : 32bit, 암호화 안됨
- v2 : v2c, 64bit, 초기 암호화있었다가 성능이 떨어져서 기능이 빠졌음, 제일 많이 쓰인다.
- v3 : 64bit, 암호화 기능, 원격 설정, 인증, 기밀성, 무결성, 너무 무거워서 잘 안씀

/ 리눅스에서 nmspd통신이 잘 되는지 확인
- snmpwalk명령어로 확인한다.
- ex) snmpwalk -v 2c -c 문자열 이름 | ip system : 버전 2c

/ snmptester 실행화면
- local ip : 구동하는 쪽 ip, VMware가 돌아가는 호스트 pc
- Device ip : VMware의 서버
- SNMP Version : 버전2부터 c가 붙는다.
- 커뮤니티 : 관리자가 변경할 수 있다.

 

/ 프로세스 이름 및 패키지 이름
- 프로세스 이름 : snmpd
- 패키지 이름 : net-snmp

/ 설치 및 실행
# yum -y install net-snmp, net-snmp-utils
# systemctl start snmpd
# systemctl enable snmpd

 

[여담]
kill 종류
1 SIGHUP
2 SIGINT
3 SIGQUIT
9 SIGKILL
11 SEGV
15 SIGTERM
18 SIGCONT
19 SIGSTOP
20 SIGTSTP

/ 구동된것 확인
# systemctl status snmpd
# ps -ef | grep snmpd

- 포트확인
# netstat -antup | grep snmpd

 

728x90
728x90

[1,2교시 - 데이터베이스 구축 보안]

SELECT * FROM DBA_SYS_PRIVS;
SELECT * FROM DBA_ROLE_PRIVS;

DESC DBA_SYS_PRIVS;

SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'CONNECT';

 

 


 

[3,4,5교시 - 시스템 운영 보안]

/ ifconfig -a
- 사용안하는 인터페이스가 있으면 보여죠라

- NAT : 사설IP를 공인아이피로 바꾸는 것

리눅스 본딩

/ 세팅
- vmware에서 서버의 세팅 > Add... > Network Adapter 선택 finish

- 서버에서 ifconfig로 확인해본다.

 

/ nmcli
- 옵션 c : 커넥션 정보
- 옵션 d : 연결된 디바이스
# nmcli connection

- UUID : 유니버셜 유니크 아이디. 유니크한 값이다.
- nmcli device

 

/blkid
- 하드디스크에 할당된 정보를 보여준다. (block id)

/ nmtui
- 이름이 한글로 '유선연결'이었는데 밑에있는 'eno33554960'으로 변경햇다.

 

/ centos의 네트워크 설정이 있는곳으로 이동
# cd /etc/sysconfig/network-scripts/
- 아래이미지에서 체크한것이 네트워크 설정이 있는 파일이다.

- 그 외의 파일들은 실행파일들이다.


/ ifcfg-eno16777728파일내용 확인해보기
# cat ifcfg-eno16777728
- BOOTPROTO : 가 none로 되어있음을 확인할 수 있다.
- ONBOOT : 부팅할때 해당 인터페이스가 자동으로 on인지 여부
- PREFIX0 : 프리픽스

 

/ ifcfg-eno33554960 파일내용 확인해보기
# cat # cat ifcfg-eno16777728
- BOOTPROTO : 가 dhcp로 되어있음을 확인할 수 있다.

 

/ 우분투에서 네트워크 설정이 기록된 파일
- /etc/network/interfaces
- centos 는 디렉토리로 되어있고 우분투는 파일로 되어있다.

 

/ 인터페이스 재 설정
# nmcli c
- 로 인터페이스 목록 확인 후
# nmcli c delete eno33554960
# nmcli c delete eno16777728 
- 로 기존 인터페이스를 삭제한다.

- 확인
# nmcli c
# nmcli d


# reboot

- 재부팅 하고 다시 네트워크설정에 보면 다시 다 올라와 있다.
- nmcli c, nmcli d에서는 그대로 보이고
- /etc/sysconfig/network-scripts에서는 보이지 않는다.

 

- 다시 nmcli로 삭제하기
# nmcli c delete "유선 연결 2"
# nmcli c delete "유선 연결 1"

- 삭제하고 나면 오른쪽 위에가 비활성화 된다.



/ 본딩 구성하기
- 네트워크 설정 > + 클릭 > 본딩 > 연결이름을 bond0으로 입력(인터페이스 이름을 그대로 사용)


- 추가 > 연결 종류는 이더넷 > 연결이름은 bond0_slave1 > 장치 MAC주소에서 1677로 시작하는 것을 선택

- 추가 > 연결 종류는 이더넷 > 연결이름은 bond0_slave1 > 장치 MAC주소에서 3355로 시작하는 것을 선택

- 모드를 '액티브 백업'으로 선택
- 감시주기 : slave1과 slave2가 죽었나 감시

- 터미널에서 ifconfig를 하면 물리주소만 있고 아이피 주소는 없을것이다.

- IPv4설정 > 방식을 수동으로 설정 > 추가 > 주소를 192.168.111.99, 게이트웨이는 192.168.111.2, DNS서버는 192.168.111.1로 설정

- 다 하고나면 저장
- 네트워크 설정에서 본딩을 확인할 수 있다.


 

* 라운드로빈 - 여러개가 있을때 순서대로 차례로 분배하는 방식

- 터미널에서 ifconfig 확인 - bond0이 생성되어 있다.

- /etc/sysconfig/network-scripts에서 파일 목록을 확인해도 bond0이 생성되어 있다.

- cat으로 ifcfg-bond0확인

- vi 로 slave1, 2 수정
# vi ifcfg-bond0_slave_1
# vi ifcfg-bond0_slave_2
- ONBOOT를 yes로 수정

- 윈도우의 cmd에서 'ping 192.168.111.99 -t'를 띄워놓고 서버를 재부팅한다.
- ping이 안가다가 재부팅하면 ping이 간다.

- 서버 재부팅 후 ifconfig를 하면 bond0은 마스터, 나머지 인터페이스는 SLAVE로 표시된다.


# ls /etc/sysconfig/network-scripts/


- 오른쪽 상단의 네트워크 매니저 확인

 

- 네트워크 재시작을 하면 본딩이 날라간다.(나중에 세팅할것임)

 

- 네트워크 정보가 저장되는 곳
# cd /proc/net/bonding
- 안에 bond0가 있다.
# cat bond0
- 기존의 1677로 시작하는 것이 Active가 되어 있다.
- 1677이 Primary Slave가 되어잇다.

 

/ 테스트!
- 윈도우의 cmd에서 ping을 '192.168.111.99'에  -t옵션으로 계속 날린다.
- vmware 오른쪽 하단의 네트워크 아답터를 하나씩 끊었다가 연결했다가 해본다.
- 서버에서 'cat bond0'하면 인터페이스의 활성화 여부를 확인할 수 있다.
- NAT1을 끊으면 NAT2가 Active되고, NAT2를 끊고 NAT1을 연결하면 NAT1이 Active된다.
- ping은 1개정도 빠졌다가 바로 다시 들어간다. 

 

- systemctl restart network를 하면 어덯게 될까?
- 본딩이 날라가서 ping이 빠진다.

- cat bond0을 하면 내용을 확인할 수 없다. 본딩 설정했던게 모두 날라갔기 때문이다.

- 우측 상단의 네트워크는 모두 꺼져있고

- 네트워크 설정에서도 모두 날라간것을 확인할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

728x90
728x90

[1,2교시 - 데이터베이스 보안 구축]

/ 프로시저(Procedure)
- 특정한 로직을 처리하기만 하고 결과 값은 반환하지 않는다.

CREATE OR REPLACE PROCEDURE 프로시저이름
(
   파라메터1 IN 타입,
   파라메터n IN 타입
)
IS
변수1 타입(길이)  := 초기화될값;
변수n 타입(길이);

BEGIN

INSERT문이든 UPDATE문이든 SELECT문이든 뭔갈 하는 로직

COMMIT;

END 프로시저이름;

 

/ 함수(Function)
- 특정 연산을 수행한 뒤 결과 값을 반환한다.
- SELECT절에서 변수에 담을 컬럼은 INTO를 이용한다.
- 파라메터에서 특정 테이블 컬럼과 같은 변수타입으로 지정하려면 '테이블명.변수명%type'으로 지정한다.

CREATE OR REPLACE FUNCTION 함수이름
(
    파라메터1 타입,
    파라메터N 타입,
    EX) P_BB NUMBER
) 
RETURN 반활될변수타입
IS 
    변수1 타입(길이)  := 초기화될값;
    변수n 타입(길이);
    EX) V_AA VARCHAR2(10);
BEGIN 
    SELECT문이든 무엇인가를 하는 로직;
    EX) SELECT AA INTO V_AA FROM DEPT WHERE DEPTNO = P_BB; 

    RETURN 반환할변수; 
    EX) V_AA;
END;

 

/ 오늘 보여주셨던 내용

select * from tab;
select * from employees;
desc employees
create or replace procedure up_sal
        (vempid employees.employee_id%type )
is 
--
    begin
        update employees set salary=4000
        where employee_id = vempid; 
    end ;
/
   
exec up_sal(206);    

select employee_id, salary from employees
where employee_id=206;

desc user_source
select text from user_source where name ='UP_SAL';

CREATE or replace function max_sal
 (s_deptno employees.department_id%type)
 return number
as 
    max_sal employees.salary%type ;
begin
    select max(salary) into max_sal from employees
    where department_id=s_deptno;
    return max_sal;
end;
/

select max_sal(50) from dual;

 


 

[3,4,5교시 - 시스템 보안 운영]

 

/ DHCP
- 아이피를 자동으로 할당받는 서비스
- Dynamic Host Configuration Protocol
- 서버에서는 67/udp, 클라이언트는 68/udp로 실습할것이다.
- tftp 69/udp - 연관은 없지만 걍 같이 기억해보자. 인증없이 ftp를 하는것(라우터/스위치에 구동 이미지를 받을 때 사용하는 프로토콜)

/ 설치
# yum -y install dhcp

/ 실행을 하려고 하면 실행이 안된다.
# systemctl start dhcpd

# systemctl status dhcpd로 이유를 확인해본다.

- 설정파일을 확인해본다.
- 이동

# vi /etc/dhcp/dhcpd.conf

- 아무내용도 없어서 새로 만들어야 할것 같다.

 

/ dhcp 설정 파일 수정
- 게이트웨이
- 서브넷 마스트
- 아이피 할당 범위
- dns 서버
- dns 세팅(있다면)
- 아이피 렌탈 시간
- 최대 아이피 렌탈 시간

#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#

# dynamic update permit? interim : 0 / none : X
ddns-update-style interim;

subnet 192.168.111.0 netmask 255.255.255.0 {
        option routers 192.168.111.2;                           # gateway
        option subnet-mask 255.255.255.0;                       # subnet mask
        range dynamic-bootp 192.168.111.55 192.168.111.99;      # ip range
        option domain-name-servers 168.126.63.1,8.8.8.8;        # dns   
        option domain-name "john.com";                          # domain setting
        default-lease-time 10000;                               # lease time
        max-lease-time 50000;                                   # max lease time
}

 

/ 실행 & 활성화
- 이제 실행이 된다.
# systemctl restart dhcpd
# systemctl enable dhcpd
# systemctl status dhcpd

- 프로세스 확인
# ps -ef | grep dhcpd
# netstat -antup | grep dhcpd

 

/ dhcp가 되는 과정
- pc가 서버를 찾는 과정(브로드캐스트) : 디스커버(Discover)
- dhcp가 제안하는 과정 : 오퍼(Offer)
- pc가 아이피를 할당해달라고 요청 : 리퀘스트(Request)
- dhcp가 아이피를 주는것 : Ack(Acknowledgement)
- 'DORA'는 위 과정의 준말

/ dhcp 갱신 과정
- 절반정도 기간일때 갱신 할건지 확인하고 갱신
- 임대기간이 거의 다 되었는데 응답없으면 아이피 회수(끝날때)

 

/ 방화벽 열기
- firewall-config에서 서비스(dhcp)fmf 추가하거나
# firewall-cmd --permanent --add-service=dhcp
- 를 해준다.
# firewall-cmd --list-all

 

/ vmware의 네트워크 설정 변경
- vmware에서 할당받으며 안되기 때문에 설정변경(임시)
- vmware의 Edit > Virtual Network Editor > VMnet8 선택 후 'Use local DHCP' 어쩌고를 선택 해제한다.

 

/ 할당받은 내역 확인
# cat /var/lib/dhcpd/dhcpd.leases

 

 

[클라이언트]
/ 할당받은 아이피를 초기화
# ifconfig : 확인
# systemctl restart network
# ifconfig : 재확인

[서버]
/ 할당한 내역 다시 확인
# cat /var/lib/dhcpd/dhcpd.leases

 

/ 로그확인
[서버]
# cat /var/log/messages | grep DHCP


[클라이언트]
# cat /var/log/messages | grep DHCP

 

/ 클라이언트에서 할당받은 아이피를 반납하고 새로 할당받고 싶을때
- 윈도우에서
# ipconfig /release : 반납
# ipconfig /renew : 재할당
# ipconfig /displaydns : dns 왔다갔다 한거 확인하기(여담)
# ipconfig /flushdns : dns 왔다갔다 한거 초기화(여담)

- 리눅스에서
- dhclient -r -아이피버전 인터페이스이름
- -r : 반납 (-r을 안하면 그냥 할당만 다시 받는다.)
# dhclient -r -4 eno16777728
- 인터페이스 이름은 아래 그림의 빨간줄이다.

 

/ 클라이언트에서 반납하고 다시 할당한 내역을 서버에서 확인
# cat /var/lib/dhcpd/dhcpd.leases

# cat /var/log/messages | grep DHCP

 

/ 특정 아이피로 할당을 해줘야 할때
[서버]
- 서버에서 dhcpd.conf 설정
- 할당을 해줘야 하는 pc의 mac address
- 할당을 해줘야 하는 아이피 (60번으로 주기로 함)

- 수정 후 재시작
# systemctl restart dhcpd

[클라이언트]
# dhclient -r -4 eno16777728 : 반납
# dhclient -4 eno16777728 : 재할당
# ifconfig : 확인

 

/ dhcpd.conf에 그룹핑 세팅하는 법
- 아래처럼 여러개를 설정해야 한다고 하자

더보기

host jinsang1 {
    hardware ethernet 00:0c:29:43:be:c1;
    fixed-address 192.168.111.60;
}

host jinsang2 {
    hardware ethernet 00:0c:29:43:be:c2;
    fixed-address 192.168.111.60;
}
host jinsang3 {
    hardware ethernet 00:0c:29:43:be:c3;
    fixed-address 192.168.111.60;
}

 

- 이때 group을 쓰면 묶을 수 있다.

더보기

group {

    host jinsang1 {
        hardware ethernet 00:0c:29:43:be:c1;
        fixed-address 192.168.111.60;
     }
     host jinsang2 {
         hardware ethernet 00:0c:29:43:be:c2;
         fixed-address 192.168.111.60;
     }
     host jinsang3 {
        hardware ethernet 00:0c:29:43:be:c3;
         fixed-address 192.168.111.60;
     }
}

 

/ 할당 범위를 그룹으로 처리하는 법
- 그룹으로 묶으면 그 부분으로 범위가 설정된다.

더보기

subnet 192.168.111.0 netmask 255.255.255.0 {
option routers 192.168.111.2; # gateway
option subnet-mask 255.255.255.0; # subnet mask

group {

    host jinsang1 {
        hardware ethernet 00:0c:29:43:be:c1;
        fixed-address 192.168.111.60;
     }
     host jinsang2 {
         hardware ethernet 00:0c:29:43:be:c2;
         fixed-address 192.168.111.60;
     }
     host jinsang3 {
        hardware ethernet 00:0c:29:43:be:c3;
         fixed-address 192.168.111.60;
     }
}

option domain-name-servers 168.126.63.1,8.8.8.8; # dns
option domain-name "john.com"; # domain setting
default-lease-time 10000; # lease time
max-lease-time 50000; # max lease time
}

 

/ 퀴즈
- DHCP IP 임대 default 기간? 8일
- 재 갱신 시점? 1/2 시점 -> 4일
- dhcp ip 예약시 어떤 주소를 이용하는가? MAC Address(FF:FF:FF:FF:FF:FF)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
728x90

[1,2교시 - 데이터베이스 보안 구축]

-- 1. department 테이블 생성
create table department(
deptno number(2) NOT NULL,
hname varchar2(20) NOT NULL,
ename varchar2(40)
);

-- 1-1. PK_department라는 이름으로 deptno을 primary key로 지정
alter table department
add constraint PK_department primary key(deptno);

-- 2. instructor 테이블 생성
create table instructor (
instid number(4) NOT NULL, 
hname char(10) NOT NULL, 
deptno number(2) NOT NULL, 
instorder varchar2(10),
locate char(4),
telno varchar2(20),
email varchar2(40)
);

-- 2-1. PK_instructor 이름으로 instid primary key로 지정
alter table instructor
add constraint PK_instructor primary key(instid);

-- 2-2. deptno가 department테이블의 deptno을 참조하도록 외래키 생성
ALTER TABLE instructor
ADD CONSTRAINT FK_instructor_department foreign KEY(deptno) references department (deptno);

-- 3. department 데이터 insert
insert into department values (10, '교양과', 'Arts');
insert into department values (20, '건축과', 'Architectural Engineering');
insert into department values (30, '토목과', 'Civil Engineering');
insert into department values (40, '경영과', 'Business Management');
insert into department values (50, '전자과', 'Electronics');
insert into department values (60, '정보통신과', 'Information and Communications');
insert into department values (70, '식품영양과', 'Food Science and Nutrition');

-- 4. instructor 데이터 insert
insert into instructor values (1001, '이준상', 10, '교수', '02', '346-2766', 'skchoi@kkkk.ac.kr');
insert into instructor values (1003, '이강호', 20, '교수', '02', '283-3465', 'khlee@kkkk.ac.kr');
insert into instructor values (1005, '주연강', 30, '부교수', '02', '732-2308', 'ykju@kkkk.ac.kr');
insert into instructor values (1007, '강성호', 10, '강사', '032', 465-3350, NULL);
insert into instructor values (1009, '나경상', 40, '강사', NULL, NULL, NULL);
insert into instructor values (1012, '김선수', 60, '강사' , '031', '975-5778', ' ');

-- department 테이블 조회
select * from department;

-- instructor 테이블 조회
select * from instructor;

-- instructor, department 조인(join) 조회
select inst.*, dept.*
from instructor inst, department dept
where inst.deptno = dept.deptno;

 

 


 

[3,4,5교시 - 시스템 보안 구축]

/ dig로 사용하는 bind의 버전을 확인
# dig @아이피 ch txt version.bind
* named 서버의 버전을 숨기는 이유 : 취약점을 가지고 있는 버전인 경우가 있을 수 있고 나중에 취약점이 발견될 수도 있다. 쨋든 보안을 위해서

/ 클라이언트에서 slaves폴더내의 파일 확인
# ll /var/named/slaves/

 

/ named.conf에 notify 추가
# vi /etc/named.conf
# notify yes;

/ john.com.db에 ns2추가
# IN NS ns2.john.com

$TTL    3H
@       SOA     ns.john.com.    root.john.com. (3 1D 1H 1W 1H)
        IN      NS              ns.john.com.
        IN      NS              ns2.john.com.
        IN      A               192.168.111.101

ns      IN      A               192.168.111.101
ns2     IN      A               192.168.111.136
WWW     IN      A               192.168.111.110
ftp     IN      A               192.168.111.111
web     IN      CNAME           www

- john.com.db 파일 체크
* 파일 체크를 하려면 /var/named위치에서 하거나 파일명을 경로까지 모두 써줘야 한다.
# named-checkzone john.com /var/named/john.com.db 
# systemctl restart named

 

/ 시리얼 번호를 1올려보자
# vi /var/named/john.com.db

- 설정 문제있는지 확인
# named-checkzone john.com /var/named/john.com.db
# systemctl restart named : 재시작
- 전송 내용이 있나 확인
# cat /var/log/messages | grep transfer
- 변경이 된것이 없음..(로그에 안 보임)

/ 클라이언트에서도 확인해보자
# systemctl restart named
# cat /var/log/messages | grep transfer
- 여기에서도 확인이 안된다.
- 클라이언트에도 설정이 필요할것 같다.

/ 클라이언트의 named.rfc1912.zones파일 수정
# vi /etc/named.rfc1912.zones
- 맨밑의 zone "111.168.192.in-addr.arpa" IN부분에 allow-notify추가

- named 재시작
# systemctl restart named

/ 클라이언트의 방화벽 설정 추가
- 53/tcp, dns 서비스 추가
# firewall-cmd --permanent --add-port=53/tcp
# firewall-cmd --permanent --add-service=dns
# firewall-cmd --reload

/ 방화벽 추가하고 allow-notify추가 했으니 슬레이브즈 파일 동기화되는지 확인
#  ll /var/named/slave

 

/ 클라이언트에서 자동으로 확인하기 위해 작성
- 동기화가 되면 자동으로 띄워진다.
# while true
# do
# ll /var/named/slaves
# clear
# done

/ 서버에서 버전 다시 올려보기
# vi /var/named/john.com.db


/ 클라이언트에서 확인
# cat /var/named/slaves/john.com.db

 

/ 로그에서도 확인해보기(서버/클라이언트)
# cat /var/log/messages | grep transfer

서버
클라이언트

 

/ 정리
1. master
- 방화벽 오픈설정(dns | 53/tcp | 53/udp)
- /etc/named.conf : notify yes;
- /etc/named.rfc1912.zones
    > allow-update{ 2차서버ip; };
    > allow-transfer{ 2차서버ip; };

2. slave
- 방화벽 오픈설정(dns | 53/tcp | 53/udp)
- /etc/named.rfc1912.zones
    > allow-notify{ 1차서버ip; };

 

 

 

 

 

 

 

 

 

728x90
728x90

[1,2교시 - 데이터베이스 보안 구축]

/ 인덱스 정의서
- 인덱스
    > 속도
    > 데이터를 정렬
    > 단점 : 지속적인 유지가 힘들다.
    > insert, update를 하게되면 다시 업데이트가 되어야 한다.

/ 뷰 정의서

/ 테이블 용량 산정서
- 용량 산정 방법

select * from tab;

select table_name, sum(DATA_LENGTH)
FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'EMPLOYEES'
GROUP BY TABLE_NAME;

DESC USER_TAB_COLUMNS;

/*
-- (가정) 하루 등록되는 예상 건수
-- 5,000건 발생
-- 용량 산정
-- 일일 적재 예상 용량(mb) : 
-- (산식) = col전체길이 x 적재예산건수/1024kb/1024mb
*/

 

SELECT TABLE_NAME,
round(SUM(DATA_LENGTH) * 5000/1024/1024, 2) as "1day", 
round(SUM(DATA_LENGTH) * 5000/1024/1024 * 30, 2) as "30 month", 
round(SUM(DATA_LENGTH) * 5000/1024/1024 * 365, 2) as "1 year", 
round(SUM(DATA_LENGTH) * 5000/1024/1024 * 365 * 10, 2) as "10 year"
FROM USER_TAB_COLUMNS 
WHERE TABLE_NAME = 'EMPLOYEES' 
GROUP BY TABLE_NAME;

 

/ 테이블 용량 확인

SELECT 
owner, segment_name, segment_type,
sum(bytes)/1024/1024 as "MB"
FROM dba_segments
WHERE segment_type= 'TABLE' 
AND segment_name = 'EMPLOYEES'
GROUP BY owner, segment_name, segment_type;

 

/ 인덱스 용량 확인

SELECT * FROM USER_INDEXES;

select owner, segment_name, segment_type, sum(bytes)/1024/1024 as "MB"
from dba_segments
where segment_type= 'INDEX'
and segment_name = 'EMP_PK'
GROUP BY OWNER, SEGMENT_NAME, SEGMENT_TYPE;

 

/ 테이블 스페이스 용량 확인

SELECT A.TABLESPACE_NAME,
   ROUND(A.BYTES_ALLOC / 1024 / 1024, 2) CURRENT_SIZE,
   ROUND(NVL(B.BYTES_FREE, 0) / 1024 / 1024, 2) FREE_SIZE,
   ROUND((A.BYTES_ALLOC - NVL(B.BYTES_FREE, 0)) / 1024 / 1024, 2) USED_SIZE,
   ROUND((NVL(B.BYTES_FREE, 0) / A.BYTES_ALLOC) * 100,2) FREE_RATE,
   100 - ROUND((NVL(B.BYTES_FREE, 0) / A.BYTES_ALLOC) * 100,2) USED_RATE,
   ROUND(MAXBYTES/1048576,2) MAX_SIZE
FROM   (
   SELECT F.TABLESPACE_NAME,
   SUM(F.BYTES) BYTES_ALLOC,
   SUM(DECODE(F.AUTOEXTENSIBLE, 'YES',F.MAXBYTES,'NO', F.BYTES)) MAXBYTES
   FROM DBA_DATA_FILES F
   GROUP BY TABLESPACE_NAME) A,
      (SELECT F.TABLESPACE_NAME,
      SUM(F.BYTES)  BYTES_FREE
      FROM DBA_FREE_SPACE F
      GROUP BY TABLESPACE_NAME) B
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME (+)
UNION
SELECT TABLESPACE_NAME,
   ROUND(SUM(BYTES_USED + BYTES_FREE) / 1048576, 2),
   ROUND(SUM(BYTES_FREE) / 1048576,2),
   ROUND(SUM(BYTES_USED) / 1048576,2),
   ROUND((SUM(BYTES_FREE) / SUM(BYTES_USED + BYTES_FREE)) * 100,2) FREE_RATE,
   100 - ROUND((SUM(BYTES_FREE) / SUM(BYTES_USED + BYTES_FREE)) * 100,2) USED_RATE,
   ROUND(MAX(BYTES_USED + BYTES_FREE) / 1048576, 2)
FROM   SYS.V_$TEMP_SPACE_HEADER
GROUP BY TABLESPACE_NAME
ORDER BY 1;

 

--전체 DB 용량 
select sum(bytes) from dba_data_files;
select sum(bytes)/1024/1024/1024 from dba_data_files; --GB로 표시

-- 사용한 DB 용량
select sum(bytes) from dba_segments;
select sum(bytes)/1024/1024/1024 from dba_segments; --GB로 표시

-- 사용 가능한 DB 용량
select sum(bytes) from dba_free_space;
select sum(bytes)/1024/1024/1024 from dba_free_space; --GB로 표시

 

-- 관련 테이블 검색
-- a) DBA_TABLESPACES 테이블스페이스 목록
SELECT TABLESPACE_NAME, STATUS, CONTENTS FROM DBA_TABLESPACES;
 
-- b) DBA_DATA_FILES 테이블스페이스 파일 목록
SELECT FILE_NAME, BYTES, STATUS FROM DBA_DATA_FILES;
 
-- c) DBA_FREE_SPACE 테이블스페이스 잔여 공간
SELECT TABLESPACE_NAME, BYTES, BLOCKS FROM DBA_FREE_SPACE;

 

---데이터 파일 당 할당된 size와 사용중인 size 확인
--- blksize = 35
select file_name,
       ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) smallest,
       ceil( blocks*&&blksize/1024/1024) currsize,
       ceil( blocks*&&blksize/1024/1024) -
       ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) savings
from dba_data_files a,
     ( select file_id, max(block_id+blocks-1) hwm
         from dba_extents
        group by file_id ) b
where a.file_id = b.file_id(+);

 


[3,4,5교시 - 시스템 보안 구축]

/ Master/Slave DNS 서버 구조
- Master DNS 서버 : 서버 1
    > yum -y install bind bind-chroot
    > vi /etc/named.conf >> any none any  -> 여기까진 기본이다!
        >> 페이지 밑에 john.com 부분을 추가
    > touch /var/named/john.com.db >> zone정보 추가

- Slave DNS 서버 : client(IP고정x)
    > yum -y install bind bind-chroot
    > vi /etc/named.conf >> any none any  -> 여기까진 기본이다!

* dns 서버 이중화 검색


/ 마스터 서버에서
# rpm -qc bind : 설정파일 찾기
# vim /etc/named.conf
* allow-query에 특정 아이피나 아이피대역을 써주면 특정 위치에서만 쿼리를 날리도록 할 수 있다.
- 슬레이브에서 마스터 파일과 동기화 할 수 있게 한줄을 추가한다.
- allow-transfer에 넣는 아이피는 클라이언트의 아이피이다.

- 맨 밑에 추가했던 내용은 잠시 메모장에 옮겨놓고 저장한다.

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { none; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { any; };
        allow-transfer     { 192.168.111.136; };

        /*
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         - If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.root.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

 

- vi로 /etc/named.rfc1912.zones를 수정한다.
# vi + /etc/named.rfc1912.zones
- 맨밑에 메모장에 옮겨놓았던 내용을 붙여놓고 수정한다.

//new add
zone "john.com" IN {
        type master;
        file "john.com.db";
        allow-update { 192.168.111.136; };
        allow-transfer { 192.168.111.136; };
};

zone "111.168.192.in-addr.arpa" IN {
        type master;
        file "111.168.192.in-addr.arpa.db";
        allow-update { 192.168.111.136; };
        allow-transfer { 192.168.111.136; };
};

# named-checkconf : 설정파일 오류 확인
# systemctl restart named : 재시작

- john.com.db 파일 수정
# vi /var/named/john.com.db
- ns2를 추가해준다. (아이피는 클라이언트의 아이피 번호이다.)

$TTL    3H
@       SOA     ns.john.com.    root.john.com. (2 1D 1H 1W 1H)
        IN      NS              ns.john.com.
        IN      A               192.168.111.101

ns      IN      A               192.168.111.101
ns2     IN      A               192.168.111.136
WWW     IN      A               192.168.111.110
ftp     IN      A               192.168.111.111
web     IN      CNAME           www



- 역방향 파일도 수정해준다.
- 여기에도 ns2에 대한 정보를 추가해준다.
- 클라이언트의 아이피의 끝 번호로 넣어준다.
# vi /var/named/111.168.192.in-addr.arpa.db

$TTL    3H
@       SOA     ns.john.com.    root.john.com. (2 1D 1H 1W 1H)
        IN      NS              ns.john.com.
        IN      A               192.168.111.101

101     IN      PTR             ns.john.com.
136     IN      PTR             ns2.john.com.
110     IN      PTR             www.john.com.
111     IN      PTR             ftp.john.com.



- 확인
# named-checkzone john.com john.com.db 
# named-checkzone 111.168.192.in-addr.arpa 111.168.192.in-addr.arpa.db

 

- 서버 재시작
# systemctl restart named


/ 이제 2차 네임서버로 사용할 클라이언트로 넘어간다.

/ dns서버를 설치한다.
# yum list bind bind-chroot
# yum -y install bind bind-chroot

/ 실행하고 확인한다.
# systemctl start named  : 시작
# systemctl enable named  : 활성화
# systemctl status named  : 상태확인
# ps -ef | gerp named  : 프로세스 확인

 

- 설정정보 수정하러 가기
- any, none, any 작업하기
# vim /etc/named.conf

- 수정 후 'named-checkconf'로 확인

- named.rfc1912.zones파일 수정
- 아래의 내용 추가
# vim + /etc/named.rfc1912.zones

one "john.com" IN {
        type slave;
        file "slaves/john.com.db";
        masterfile-format text;
        masters { 192.168.111.101; };
};

zone "111.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/111.168.192.in-addr.arpa.db";
        masters { 192.168.111.101; };
};

# named-checkconf : 확인
# systemctl restart named : 재시작
# ll /var/named/slaves
- /var/named/slaves위치에 정방향, 역방향 파일이 들어와있는것을 확인해볼 수 있다.

 

/ 마스터서버와 슬레이브서버에서 각각 /var/log/messages | grep transfer를 확인한다.
- 정방향과 역방향 파일이 전송된 내역을 확인할 수 있다.
- AXFR(모든정보 전송), IXFR(부분정보 (incremental늘어난 정보))
- 로그를 보면 뭔가 잘 안되었을때 이유를 알 수 있다.
# cat /var/log/messages | grep transfer
- master

- slave

 


/ named 버전 확인
# named -version
# named -v

- 버전이 안보이게 조치 하는 법
# vi /etc/named.conf

- varsion 하고 문자열을 주면 버전확인 시 설정한 문자열을 표시하게 된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
728x90

[1,2교시 - 데이터베이스 보안 구축]

 

데이터베이스 보안 구현

수행 순서

1. 수립된 구현 계획에 따라 보안성이 강화된 데이터베이스를 구현한다.
- 보안 데이터베이스 구현 및 운영 단계의 주안점을 확인한다.
- 접근제어 부문의 구축 및 운영 주안점을 확인한다.
- 운영 관리 활동 분야를 확인한다.
- 직무의 분리, 로그 검토 등의 체크사항을 확인한다.
- 데이터베이스 암호화 부문의 구축 및 운영 주안점을 확인한다.
- 데이터베이스 작업결재 부문의 구축 및 운영 주안점을 확인한다.
- 데이터베이스 취약점 분석 부문의 구축 및 운영 주안점을 확인한다.

2. 데이터베이스 설계 문서를 기반으로 데이터베이스를 구현한다.
- 데이터베이스 설계 문서를 확인한다.
    > E-R 다이어그램, 테이블 정의서, 인덱스 정의서, 뷰 정의서, 테이블 용량 산정서, 인덱스 용량 산정서, 데이터 파일 용량 산정서, 시스템 파일 용량 산정서
    > ERD 참고 링크1, ERD 참고 링크2
    > 엔티티 도출해보기

엔티티 속성
유통회사 회사코드, 전화, 위치, 담당자
물품 가격, 재고량, 입고일자, 물품명

- 데이터베이스 구축 시나리오를 작성한다.
- 데이터베이스를 구축한다.
- 인덱스를 설정한다.
- 사용자 권한을 설정한다.

 

ER 다이어그램

ERD(Entity-Relation Diagram: 개체 관계도) - ER 모델(개체-관계 모델, Entity-Relationship M...

blog.naver.com

 



 


[3,4,5교시 - 시스템 보안 운영]

/ 2차 네임서버가 있을 경우에 데이터를 허용하는 것
- allow-transfer{ any; };

/ john.com.db 수정
# vi john.com.db

$TTL    3H
@       SOA     @       root. (2 1D 1H 1W 1H)
        IN      NS      @
        IN      A       192.168.111.101

WWW     IN      A       192.168.111.110
ftp     IN      A       192.168.111.111

[두번째 줄]
- root.의 점은 그냥 마침표의 점(.)이다.
- 괄호안의 2 : 시리얼번호
- 1D : 동기화의 간격(하루 마다)(정기적인 업데이트)
- 1H : 동기화가 실패했을경우 리트라이 시간(1시간)
- 1W : 계속 리트라이 하다가 이제 안하는 시간
- 마지막의 1H : 동기화된 데이터를 유지하는 시간(마스터네임서버와 슬레이브서버간의)
[세번째 줄]
- IN : 인터넷에서 주고받는 정보라는 뜻
- NS : 네임서버
- @ : 자기자신이다.
[네번째 줄]
- IN :  인터넷에서 주고받는 정보라는 뜻
- A : IPv4 (AAAA는 IPv6버전이다.)

/ 내용 저장 후 'named-checkzone john.com john.com.db'으로 내용에 이상이 없는지 체크한다.

 

/ 다시한번 john.com.db파일을 수정해본다.
# vi john.com.db

$TTL    3H
@       SOA     ns.john.com.    root.john.com. (2 1D 1H 1W 1H)
        IN      NS              ns.john.com.
        IN      A               192.168.111.101

ns      IN      A               192.168.111.101
WWW     IN      A               192.168.111.110
ftp     IN      A               192.168.111.111
web     IN      CNAME           www

- ns.john.com. : ns.john.com뒤에는 점(.)이 꼭 들어가야 한다.
- 아이피 말고 이름으로 되어 있으면 점으로 끝나야 한다.
- root.john.com. : @가 들어가지 않는다
- cname : 별칭
- 상단의 TTL은 사용자가 이 정보 캐시를 얼마동안 가지고 있을지

/ 다시 내용 저장 후 'named-checkzone john.com john.com.db'으로 내용에 이상이 없는지 체크한다.

/ 서비스를 재시작하여 적용한다.
# systemctl restart named

* 종종 문제에서 CNAME이냐 A이냐를 선택하는게 있는데 아이피면 A이고 문자열이면 CNAME이다.

/ 테스트(정방향)
# nslookup
# server 192.168.111.101
# ftp.john.com
# web.john.com

 

/ cmd에서도 확인해본다.

 

- 지금까지 마스터 DNS서버를 만들어본것이다.

/ 메모
- named.conf
- john.com.db
    > 정방향/역방향이 있다.
    > 정방향 : 이름 -> ip
    > 역방향 : ip -> 이름

/ 역방향 설정
# vi + /etc/named.conf (파일의 맨 끝에서 커서를 열겠다.)
- 맨 끝에 아래의 내용을 추가한다.

zone "111.168.192.in-addr.arpa" IN {
        type master;
        file "111.168.192.in-addr.arpa.db";
        allow-update { any; };
};

- 큰따옴표안의 문자열과 file의 블라블라.db의 블라블라는 맞춰놓는게 나중에 유지보수시에 편하다.
- 저장 후 'named-checkconf'로 확인한다.

/ 아직 재시작을 해도 올라가지 않는다.
# systemctl restart named

- 역방향 파일이 아직 없기 때문이다.
# systemctl status named -l

 

/ 기존의 정방향 파일을 복사해서 역방향 파일을 만든다.
# cp john.com.db 111.168.192.in-addr.arpa.db
- 복사 후 수정한다.
# vi 111.168.192.in-addr.arpa.db
- PTR : 역방향 조회에 사용되는 레코드

$TTL    3H
@       SOA     ns.john.com.    root.john.com. (2 1D 1H 1W 1H)
        IN      NS              ns.john.com.
        IN      A               192.168.111.101

101     IN      PTR             ns.john.com.
110     IN      PTR             www.john.com.
111     IN      PTR             ftp.john.com.

- 저장 후 체크한다.
# named-checkzone 111.168.192.in-addr.arpa 111.168.192.in-addr.arpa.db

- 서버를 재시작한다.
# systemctl restart named

 

/ nslookup으로 확인한다.
# nslookup
# server 192.168.111.101
- 아이피로 조회해본다.




/ nslookup에서 set type
- set type을 ns로 설정해본다.
- ns정보 위주로 조회한다.
# set type=ns
# john.com
# naver.com
# google.com


- set type을 soa로 설정해본다.
- 속성정보로 조회한다.

- set type을 mx로 설정해본다.
# set type=mx
- 메일 서버의 정보를 보여준다.
- john.com은 아직 메일서버가 없어서 데이터가 나오지 않는다.

- 메일서버는 우선순위를 10단위로 지정한다.(10이 제일 작다)

 

- set type을 A로 지정해본다.
- 기본으로 지정되어 있는 타입이다.

 

- 윈도우에서는 -type으로 지정한다.
# nslookup -type=ns google.com

 

내일은 dns서버를 이중화하는것을 배운다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

+ Recent posts