예전것/시스템 보안2009. 5. 31. 17:09
문제:
관리자 이씨는 솔라리스 서버를 관리하는 초보 관리자이다.
훌륭한 관리자가 되기 위해서는 서버의 설치 관리뿐만 아니라 보안에도 많은 신경을
써야한다는 것을 알게 되었다. 그래서 보안에 관한 공부를 하던 도중 해킹 기법 중에
일반 사용자가 root권한을 얻기 위해 crontab을 이용하여 race condition과 같은
해킹 기법을 할 수 있다는 것을 알고 root가 아닌 일반 사용자의 접근제어가 필요하다
는 사실을 알게 되었다.

crontab 명령어를 사용하는데 있어 백업 관리자(dump_admin)를 제외한 일반 계정의
접근 권한을 제한 하시오.


crontab

crontab 은 윈도우의 스케줄러와 같은 역할을 하는 명령어입니다.

CRONtab

crontab -l
-> 현재 crontab에 등록된 작업보기

crontab -e
-> crontab 편집하기

------------------------------------------------------------------------------------

CRONtab
/etc/cron, /usr/spool/cron/crontabs/*

“/etc/cron" 프로그램 은 주기적으로 어떤 프로그램을 수행시키는데 사용된다.

이때 주기적으로 수행되어질 프로그램은 "/usr/spool/cron/crontabs" 디렉토리

밑에 각 사용자의 사용자명과 같은 이름으로 생성된다.

이 화일은 만드는 방법은 아래 명령을 사용하면 된다.

% crontab -l root : /var/spool/cron/crontabs/root 내용 display

% crontab -e root :

이 명령을 root가 수행했으면 /var/spool/cron/crontabs/ DIR 하위에

"root" 라는 이름의 화일이 생성된다)

또는 vi 로 편집

--------------------------------------------------------------------------------

예)

# more /var/spool/cron/crontabs/root

# minute hour day month week

# 0~59 0~23 1~31 1~12 0~6 (0=sunday, 1=monday)

#

15,45 3 * * * find / -name .nfs\* -mtime +7 -exec rm -f {} \; -o -fstype nfs -prune

5 9 * * 6 /usr/lib/newsyslog >/dev/null 2>&1

15 0,8 16 * * find /var/preserve/ -mtime +7 -a -exec rm -f {} \;

--------------------------------------------------------------------------------

crontab 화일의 맨 앞의 5번째 칼럼까지에는 각 명령이 수행되어질 일시와 요일이다.

지정한 것들은 아래와 같은 의미를 갖는다.

분 시간 날짜 달 요일 : 구분은 Space

15,45 3 * * * : 매일 3시 15분관 45분에 수행

5 9 * * 6 : 매주 금요일 9시 5분에 수행

15 1,18 16 * * : 매달 16일 1시15분과 오후 6시 15분에 수행



1) /var/spool/cron/crontabs/root (root계정으로 가정할때..)

위 파일을 편집하여 원하는 스케쥴을 설정/편집 한다.

2) ps -ef|grep cron : 현재 cron deamon이 돌고 있는지 확인

3) kill -9 "pid of cron" : cron deamon kill

4) rm /usr/lib/cron/FIFO : lock파일제거(/usr/lib/cron directory는 /etc/cron.d와 링크되어있음)

5) /usr/sbin/cron : deamon 재실행(위 편집한 명령대로 수행함)



예) vi /var/spool/cron/crontabs/root

###############################

#Min Hour Day Month Day Command

###############################

15 4 * * * find /var/preserve/ -mtime +7 -a -exec rm -f {} \;

0 23 * * * sh `sed -n 1p /etc/Alis`/janitor

0 * * * * /usr/lib/acct/ckpacct

10 12 * * 1-6 /usr/lib/acct/dodisk

20 12 1 * * /usr/lib/acct/monacct

30 12 * * 1-6 /usr/lib/acct/runacct 2> /var/adm/acct/nite/fd2log

※ log는 /var/cron/..... 에 생성됨
------------------------------------------------------------------------------------

1. 개요 (cron이 뭐하는 것인지 전혀 모르는 분들만)

cron(크론)은 원하는 시간에 명령(프로그램)을 시키기 위한 데몬이다.
서버는 늘 깨어있다는 것을 이용한 최대한의 활용법이 될 수 있다.

- 내가 새벽 3시에 서버에 특정 작업을 해줘야하는데 그 때 깨어있을 수 있는가?
- 또는 30분간격으로 HDD의 사용량을 운영자에게 알리도록 해야한다면?
- 매월 초에 자료를 백업 받고 싶다면?

바로 이럴 때 cron은 최고의 해결책을 제시한다.
cron은 항상 지정한 시간이 되었는지 확인을 하여 해당 명령어을 실행하는 것이다.

2. cron 설정

1) crontab 파일 위치 및 조회

작업 설정 파일을 crontab 파일이라고 부르며, 이 파일의 위치는 OS별로 차이가 있다.
리눅스는 /var/spool/cron/ID, 솔라리스는 /var/spool/corn/crontabs/ID 에 위치한다.
그럼 이 파일을 직접 수정해야 하는가? 그렇지 않다. crontab 명령을 통해 설정과 조회를 한다.

설정 내용을 조회해 보자. (-l 옵션)

$ crontab -l
no crontab for truefeel

설정한 적이 없어 아직 비어있다.

2) crontab 파일 형식
------ -------- ---------------------------------------------------
필 드 의 미 범 위
------ -------- ---------------------------------------------------
첫번째 분 0-59
두번째 시 0-23
세번째 일 0-31
네번째 월 1-12
다섯번째 요일 0-7 (0 또는 7=일요일, 1=월, 2=화,...)
여섯번째 명령어 실행할 명령을 한줄로 쓴다.
------ -------- ---------------------------------------------------


- 한 줄당 하나의 명령 (두줄로 나눠서 표시할 수 없음)
- # 으로 시작하는 줄은 실행하지 않는다.

설정을 해보자. (-e 옵션)
crontab -e 을 하면 vi 에디터가 나온다.(환경변수 EDITOR에 따라 다른 에디터를 사용할 수 있다.)

$ crontab -e
# /home 디렉토리를 /BACKUP/home 으로 백업해둠
#
# 30분, 새벽 4시와 낮 12시, 모든 일, 모든 월, 모든 요일
30 4,12 * * * /usr/bin/rsync -avxH --delete /home /BACKUP/home > /dev/null 2>&1
#
# 파일/디렉토리 퍼미션 설정
# 40분, 새벽 1시, 매주 일요일
40 1 * * 0 /root/bin/perm_set.sh > /dev/null 2>&1


위는 매일 4:30분과 12:30분에 rsync 명령을, 매주 일요일 1:40분에 perm_set.sh를 실행함을 의미한다.

vi 에디터를 통해 설정을 하므로 중요한 몇 가지 에디터 사용법은 익혀야 한다.

---- -----------------------------------------------------------------------------
키 의미
---- -----------------------------------------------------------------------------
i 현재 칸에 글을 넣는다.
o 다음줄에 글을 넣는다.
dd 한줄을 삭제한다.
:wq 저장하고 빠져나온다.
ESC 설정중에 명령어 모드(위의 i, o, dd 등을 사용할 수 있는 상태)로 빠져 나온다.
---- -----------------------------------------------------------------------------


3) 설정 예

시간 설정에서 몇가지 의미있는 것들을 알아보자.

- '*'표시는 해당 필드의 모든 시간을 의미한다.
- 3,5,7 와 같이 콤마(,)로 구분하여 여러 시간대를 지정할 수 있다.
- 2-10와 같이 하이픈(-)으로 시간 범위도 지정할 수 있다.
- 2-10/3와 같이 하이픈(-)으로 시간 범위를 슬래쉬(/)로 시간 간격을 지정할 수 있다.
(2~10까지 3간격으로. 즉, 3,6,9를 의미함)


원하는 시간 형 식

매주 토요일 새벽 2:20 20 2 * * 6 명령어

매일 오후 4,5,6시 0 4-6 * * * 명령어

매일 2시간간격으로 5분대에 5 */2 * * * 명령어

매월 1일 새벽 1:15 15 1 1 * * 명령어

1,7월 1일 새벽 0:30 30 0 1 1,7 * 명령어




3. FAQ

1) cron 설정한 후에는 crond 데몬을 재실행해야 하나요?

아닙니다. crontab -e 으로 설정 후 빠져나오면 바로 적용됩니다.

2) truefeel 사용자는 cron을 못 쓰게 하고 싶습니다.

/etc/cron.allow : 허용할 사용자 ID 목록
/etc/cron.deny : 거부할 사용자 ID 목록

cron.allow 파일이 있으면 이 파일에 들어있는 ID만 사용 가능
cron.deny 파일이 있으면 이 파일에 들어있는 ID는 사용 불가

따라서 cron.deny에 truefeel ID를 추가해주면 됩니다.

3) > /dev/null 2>&1 이 무슨 뜻입니까?

지정한 명령어 처리 결과와 발생할지 모르는 에러메시지를 출력하지 않고 모두 버린다는(/dev/null)는
뜻입니다. 만약 결과와 에러를 파일로 저장하려면 /dev/null 대신 파일명을 적어주면 됩니다.
예전것/시스템 보안2009. 5. 31. 16:27
문제:
UNIX 시스템의 /data 디렉토리 전체를 ufsdump 명령어를 사용하여
/data_bak/data.dump 파일로 가장 낮은 수준의 전체 백업을 하고, 백업한 데이터에서
/data/test.data 파일을 ufsrestore 명령을 사용하여 /data_bak/data.dump 파일로
복구하시오.

ufsdump, ufsrestore에 대해 자세히 나옴
http://study.ibluerain.com/entry/ufsdump%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-Backup

http://serings.tistory.com/tag/ufsrestore

문제 풀이
ufsdump 0uf /data_bak/data.dump /data  <== 가장 낮은 수준의 전체백업 인 0uf ,
유의 :: cp나 mv 명령과는 다르게 백업대상이 나중에오고 백업 되는 장소가 처음에 옴...

일부만 풀고싶을때 /data_bak_data.dump 에서 /data/test.data만
ufsrestore xvf /data_bak/data.dump /data/test.data






예전것/시스템 보안2009. 5. 30. 04:05

문제:
학교 연구실에 있는 실험용 서버인 Linux 7.0 서버는 학생들이 많이 출입하는 실습실에 설치되어 있다.
Linux 시스템의 물리적 보안을 위하여 BIOS에 암호를 설정한 상태이며 학생들이 싱글 유저 모드로 부팅하여
root 패스워드를 바꾸지 못하도록 미리 패스워드를 sislilo로 설정하여라.

리눅스에도 윈도우즈 처럼 안전모드의 개념이 있는데,
이를 싱글모드라고 한다. 리눅스에서 싱글모드로 부팅하는 방법은 다음과 같다.

보통의 경우 부팅시에 GRUB부팅 메뉴에서 e를 눌러주면 부팅 편집 모드가 되어 다음과 같은 3줄이 뜨게 된다.

root ...
kernel ...
initrd ...

2번째 줄인 kernel 부분에서 다시 e키를 눌러 다시 편집 모드로 들어간 다음 (한 칸 띄고) single이라고 입력한 후 enter를 치고,b키를 눌러 부팅을 해주면 된다.

/****** 글 발췌 : http://www.ibm.com/developerworks/forums/thread.jspa?threadID=218871 
싱글모드로 부팅을 했다면 su명령으로 루트권한을 획득할 필요가 없지요.
왜냐? 싱글모드자체가 루트권한으로 접근이 된거니깐요..

그리고, 싱글모드로 부팅을 하려면 님처럼
/etc/inittab의 runlevel을 1로 바꾸어도 되지만.. 매년 싱글모드로 접근을 할 필요가 있을까요??

필요시 그래픽리로로 부팅시 ctrl + x로 해서
boot: linux 1 (or linux single) 로 부팅을 하면 되겠지요..

그리고, 싱글모드로 부팅을 해서 루트권한을 획득하지 못하게 하려면
/etc/lilo.conf 에 패스워드를 넣어주면 되겠지요.
password=xxxxxxx
그런데, 이렇게 넣어두면 ctrl + x로 부팅시 마다 매번 패스워드를 물어봅니다.

단지 싱글모드로만 부팅을 할때 패스워드를 물어보게 하려면
restricted을 패스워드 아래에 넣어주면 되겠군요..

또, /etc/lilo.conf를 일반계정에서도 접근이 가능하므로 접근하지 못하도록 하려면
# chmod 600 /etc/lilo.conf 를 하면 되겠군요..

참, lilo.conf를 바꾸면 항상
# lilo (or /sbin/lilo) 를 실행해 주어야 하는거 아시죠??

예전것/시스템 보안2009. 5. 29. 12:02

문제:
솔라리스의 NFS(Network File System)을 이용하여 NFS서버로부터 파일시스템을
마운트하는 NFS클라이언트 시스템을 구축하고 싶다.
현재 네트웍에 존재하는 NFS서버의 hostname은 nserver 이며
NFS서버에서 제공하는 파일시스템은 /export/share이다.
그런데 위 NFS서버에서는 kerberos를 이용한 암호화 NFS만을 제공한다고 하며,
본 시스템(hostname은 nclient)은 이미 위 NFS서버의 principal에 등록이 된
상태이며, NFS서버로부터 kerberos ticket도 이미 받은 상태이다.
Kerberos의 암호화 옵션을 이용하여
위 NFS서버의 파일시스템을 본 시스템의 /home2로 mount하시오.
단, 이문제에서는 현재 접속된 쉘 상태에서 일회성으로 mount하면 되며,
시스템이 부팅될때마다 항상 mount되도록 설정할 필요는 없다.

NFS란? (http://www.terms.co.kr/NFS.htm 참조)


NFS는 컴퓨터 사용자가 원격지 컴퓨터에 있는 파일을 마치 자신의 컴퓨터에 있는 것처럼 검색하고, 마음대로 저장하거나 수정하도록 해주는 클라이언트/서버형 응용프로그램이다. 사용자 시스템에는 NFS 클라이언트가 있어야하며, 다른 컴퓨터 (원격지의 컴퓨터)에는 NFS 서버가 설치되어 있어야 한다. 또한, 둘 모두 TCP/IP 프로토콜이 설치되어 있어야 하는데, 왜냐하면, NFS 서버와 클라이언트가 파일을 보내거나 수정하는 프로그램으로 TCP/IP를 사용하기 때문이다 (그러나, 초기버전의 NFS에서는 TCP 대신에 UDP가 사용되기도 한다).

NFS는 썬마이크로시스템즈에 의해 개발되었으며, 파일서버의 표준으로 정착되었다. 이 프로토콜은 컴퓨터들 간의 통신 방법으로서 RPC를 사용한다. 윈도우 95와 썬(Sun)의 Solstice Network Client와 같은 제품을 사용하는 일부 운영체계에 NFS를 설치할 수 있다.

NFS를 이용하여, 사용자나 시스템관리자는 파일시스템의 전부 또는 일부를 설치할 수 있다. 설치된(액세스할 수 있도록 지정된) 파일시스템은 각 사용자들의 권한에 따라 개개의 파일을 액세스할 수 있게된다.

NFS는 인터넷 기술이 가미된 WebNFS로 확장되었으며, 이 제품과 제시된 표준안은 현재 넷스케이프 커뮤니케이터 브라우저의 일부이다. WebNFS는 썬마이크로시스템즈가 웹 페이지와 다른 인터넷 파일들을 빠르게 액세스할 수 있는 방법이라고 믿고 있는 바로 그것을 제공한다.

kerberos란? (http://www.terms.co.kr/Kerberos.htm 참조)

커베로스는 개방된 컴퓨터 네트웍 내에서 서비스 요구를 인증하기 위한 안전한 방법이다. 커베로스는 미국 MIT의 Athena 프로젝트에서 개발되었다. 이 이름은 그리스 신화에서 따왔는데, 커베로스는 저승의 신 하데스의 문을 지키는 머리가 셋 달린 개이다. 커베로스는 사용자가 인증 과정으로부터 암호화된 "티켓"을 요청할 수 있게 해주는데, 이 티켓은 서버에 특정 서비스를 요구하는데 사용될 수 있다. 사용자의 암호는 네트웍을 지나가야 할 필요가 없다. 커베로스의 클라이언트서버 버전은 MIT로부터 다운로드 하거나, 또는 상용 버전을 구입할 수 있다.

아래에 커베로스의 동작원리를 간단하게 설명하였다.

  1. 당신이 지금 텔넷이나 기타 이와 비슷한 로그인 요청을 통해, 다른 컴퓨터에서 서버에 액세스하기 원한다고 가정해 보자. 이 서버는 당신의 요청을 받아들이기 전에, 커베로스 "티켓"을 요구한다.
  2. 티켓을 받기 위해, 당신은 먼저 인증 서버에 인증을 요구한다. 인증 서버는 당신이 입력한 패스워드에 기반하여 "세션 키"와, 서비스 요구를 나타내는 임의의 값을 만든다. 세션 키는 사실상 "티켓을 부여하는 티켓"이다.
  3. 그 다음에 세션 키를, 티켓 부여 서버, 즉 TGS (ticket-granting server)에 보낸다. TGS는 인증 서버와 물리적으로는 동일한 서버에 있을 수 있지만, 그러나 지금은 다른 서비스를 수행한다. TGS는 서비스를 요청할 때 서버에 보낼 수 있는 티켓을 돌려준다.
  4. 그 서비스는 티켓을 거절하거나, 또는 받아들여서 서비스를 수행한다.
  5. TGS로부터 받은 티켓은 발송일자와 시간이 적혀있기 때문에, 일정 시간 동안 (대체로 8시간 동안) 내에는 재인증 없이도 동일한 티켓으로 다른 추가 서비스를 요청할 수 있다. 티켓을 제한된 시간 동안에만 유효하게 만듦으로써, 후에 어떤 사람이 그것을 사용할 수 없도록 만든다.
실제의 과정은 위에 설명한 것보다 더 복잡하며, 사용자 절차도 구현 내용에 따라 다소 달라질 수 있다.

mount 명령은 mount될 file system type의 지정을 위한 -F option을 갖고 있다.

예전것/시스템 보안2009. 5. 29. 00:58
문제:
Solaris시스템에 해커가 침입하여 root 권한을 빼앗기는 보안사고가 발생하였다.
해커가 침입을 한 상태에서 설치한 백도어를 찾아내야 한다. 그런데 이번
해킹패턴을 보면 /usr/sbin/ 디렉토리 있는 네트웍서비스 프로그램중에 하나가
백도어로 바뀐것으로 강하게 의심된다. 다행히도 해킹사고가 발생하기 이전에
/backup/usr/sbin 이라는 디렉토리를 만들어서 원본파일들을 이미 복사해 놓았다.
원본파일과 비교하여 백도어 프로그램을 찾아내시오.
(찾아낸 후에 정답확인 프로그램을 실행하여 백도어 프로그램 파일명을
입력하시오).

diff 명령어를 활용하자. diff명령어는 두 파일사이에 다른것이 있나 확인하는 명령어

#diff /usr/sbin /backup/usr/sbin
다른것이 하나있다.

#cksum ...
#cksum ...
찾은 파일의 체크섬 값을 비교해보자 - 다르다

예전것/시스템 보안2009. 5. 28. 22:37

csh를 사용하는 솔라리스 시스템 로그인을 한 상태에서 파일을 새로 생성할때마다
파일모드가 -rw-r-r-- (644)로 된다. 하지만 이 파일모드는 다른 유저가 파일
내용을 열람할 수 있는 취약점이 있기 때문에 좋지 않아서 일일이 생성된 파일에
대해서 chmod명령어를 통하여 -rw------- (600)으로 바꿔줘야만 했다.
이 작업은 번거롭기 때문에 쉘환경변수를 적절히 변경하여 새로 파일을
생성할때마다 default 파일모드가 -rw------- (600)이 되도록 설정하시오.
단, 이문제에서는 현재 접속되어 있는 쉘에 대해서만 일회성으로 바로잡으면 되며,
쉘환경변수 값을 영구적으로 바로잡기 위해 resource파일을 변경할 필요는없다.


umask에 관한 링크
http://ttongfly.net/zbxe/?mid=linux&page=3&document_srl=43500
http://unix.co.kr/bbs/board.php?bo_table=03_4&wr_id=279

umask를 변경하는문제인데 파일의 경우 기본 666 디렉토리의 경우 기본 777에서 umask값을 뺀값을 권한으로 지정해준다.

chmod의 정반대라고 생각하면 된다 .chmod는 권한을 주는것이지만 umask는 권한을 박탈하는것

따라서
#umask 077 이라고하면 그룹과 다른사용자의 읽기,쓰기,실행 권한을 박탈한다는 뜻이된다.
 q7hint에 자세히 나와있다.

예전것/시스템 보안2009. 5. 28. 21:34
문제:
 회사의 홈페이지 서버로 사용하기 위한 용도로 Linux시스템을 인스톨 하였다.
하지만, 인스톨하는 과정에서 일부 네트웍서비스가 같이 인스톨되었다.
이중, named 같은 네트웍서비스는 불필요한 것이므로 disable시켜야 된다.
시스템 설정을 변경시켜서 이 서비스가 영구적으로 제공되지 않도록 하시오.
(단, 나중에 다시 이 네트웍서비스가 필요하게 될지 확실치 않기 때문에
서비스 관련 파일들을 완전히 삭제해서는 안된다.)

#ps
#pkill named

#cd /etc/rc.d/rc3.d/   ( default run level이 3이므로 여기서 변경)

#mv S45named B45named (K로 해줘도 됨.)

S는 부팅시에 시작하기 위한것이다. 그뒤에 나오는 숫자는 우선순위를 의미합니다. 즉, 어떤것을 먼저 시작하는가에 대한 것이다. 그리고, K로 시작하는 것은 서버를 종료할때에 종료할 스크립트들이다. 즉, K로 시작하는 모든 파일들은 종료를 위한 스크립트이다. 뒤에 나오는 숫자는 종료시의 우선순위를 의미한다.


-- 리눅스는 부팅시에 런레벨에 따라 /etc/rc.d/rc?.d/로 들어가고 여기서 실행할것을 /etc/init.d에서 스크립트를 실행한다.
예전것/시스템 보안2009. 5. 28. 19:32
TTY란?
- The name of the program comes from teletypewriter, abbreviated "TTY"

TTY는 프로세스가 실행된 터미널 포트를 가리킨다.
TTY와 PTS로 표시가 되는데 의미는 다음과 같다

-로컬 시스템 로그인시 : tty + 가상터미널 수
-원격 시스템 로그인시 : pts/번호

가) netstat
시스템이 사용중인 프로토콜과 소켓에 대한 정보를 보여주는 명령으로 주요 사용법은 다음과 같다.

netstat -na
LISTEN - 연결대기
ESTABLISHED - 연결됨

lsof ('List Open File')에 관한 글.
http://www.superuser.co.kr/security/certcc/secu_certcc_15.htm



문제: 리눅스 시스템 커널버전2.4에서 제공하는 방화벽 (iptables)을 이용하여
호스트기반 방화벽을 구축하려한다. 이때에 보안정책은 모든 들어오는 패킷에
대해서 drop시키는 것을 원칙으로하고, 일부 허용된 패킷에 대해서만
통과시키는 것이다. 이에 필요한 /etc/sysconfig/iptables의 설정을 완성시키시오.
현재 허용되는 패킷은 IP주소에 관계없이 destination port 가 22/tcp (ssh) 인
것으로 한정되어 있으며, 여기에 80/tcp (www)를 추가하시오.

http://unix.co.kr/HOWTO/Packet_Filtering-KLDP/Packet_Filtering-KLDP-6.html 참조 함.
                     _____
                     /           \
   -->[ 라우팅 ]--->|포워딩 |------->
       [ 판  정 ]         \_____/        ^
           |                        |
           v                       ____
          ___                     /    \
         /   \                   | 출력 |
        |입력 |                   \____/
         \___/                      ^
           |                        |
            ----> Local Process ----

  1. 패킷이 커널에 도탁하면 그 패킷의 목적지를 확인한다. 이것은 '라우팅' 이라고 한다.
  2. 이것의 목적지가 이곳이면, 패킷은 위 그림에서 아래쪽 방향으로 전달 되어 입력 체인에 도달한다. 이것이 이 체인을 통과하면 패킷을 기다리 고있던 어떤 프로세서도 그것을 받게 된다.
  3. 그렇지 않으면, 커널이 포워딩 불능으로 되어있던가, 패킷을 어떻게 포 워딩해야 하는가를 알지 못하면, 그 패킷은 DROP 된다. 포워딩이 가능하 게 되어있고 다른 곳이 목적지이면 패킷은 그림의 오른쪽 방향으로 전달 되어 포워딩 체인으로 간다. 이 체인이 ACCEPT 하게 되면 이것은 포워딩 할 네트워크로 보내진다.
  4. 마지막으로, 이곳에서 돌아가던 프로그램은 네트워크 패킷을 전송할 수 있 게 된다. 이 패킷은 즉시 출력 체인에 보내진다. 이 체인이 ACCEPT 하게 되면 이 패킷은 그 목적지가 어디든지 보내진다.

 풀이 :
#vi /etc/sysconfig/iptables
여기에 22번 포트 만 허용해 놓았는데
-A INPUT -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -p tcp -m tcp --dport 80 -j ACCEPT
라고 적어주자

iptables의 사용법에 대해서는 좀더 공부가 필요한듯..


문제
네임서버 간에는 Secondary NS 측에 의하여 Primary NS측 도메인의 Zone에 대한
복사본을 얻기위해, Zone 데이터베이스를 끌어오는 Zone Transfer작업이
주기적으로 이루어지게 된다. 하지만 이 Zone Transfer를 무제한으로 허용할
경우에는 내부 네트웍의 정보가 필요이상으로 외부에 유출되는 결과가 된다.
Primary NS측 입장에서 Zone Transfer를 오직 203.239.110.1 으로부터만
접근가능하도록 DNS 구성을 변경설정 하시오.
단, named 버전은 9.x 이며, 구성파일은 /etc/named.conf이다

zone transfer란? (http://www.superuser.co.kr/home/lecture/files/sbHong/securing_zone_transfer.pdf 참조)
zone-transfer, 우리말로 zone전송이라고도 하는 이것은 master와 slave간
에 또는 1차와 2차간에, primary와 secondary DNS간에 zone 파일을 동기
화하기 위한 용도로 사용되는 기술이다. 많은 관리자들이 1차와 2차 DNS를
마치 active/standby처럼, 2차를 백업의 용도로 생각하여 1차가 서비스를 하
다가 만약 1차가 다운되면 대신 2차 DNS가 서비스하는 것으로 생각하지만
이는 잘못된 것이다. 1차와 2차는 백업이 아닌 로드발랜싱의 개념이며 따라
서 1차와 2차가 똑같이 DNS lookup을 서비스하는 것이다. 따라서 양 서버
간에 zone 파일을 동기화하기 위해서는 zone 파일을 NFS등으로 연결하여
사용하는 방법도 있겠지만 DNS 자체에 zone-transfer라는 기능을 제공하고
있어 주로는 이 기능을 이용하고 있다. 참고로 해당 서버간 Zone-transfer
시에는 해당 zone 파일의 SOA필드에 있는 Serial 필드를 보아 갱신할 것인
지 여부를 결정하게 된다.


풀이
/etc/named.conf 에서 option을 준다.

options {
allow-transfer {192.168.1.3; };
};

* allow-transfer 안의 ip주소는 허용할 ip주소 - secondary DNS