강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

SULINUX를 이용한 리눅스 보안설정 1편

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문


제목 : SULINUX를 이용한 리눅스 보안설정 1편





ㅇ 제작 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 서버관리팀


ㅇ SULINUX  홈페이지 : www.sulinux.net

ㅇ 리눅스포털 홈페이지 : www.superuser.co.kr

SULinux를 이용한 리눅스 보안 설정


리눅스는 다른 OS와 달리 빠른 보안 패치와 공개된 소스 덕분에 시스템의 안정성은 나날이 신뢰감이 쌓이고 있다. 하지만 이렇게 빨리 바뀐다는 장점이 단점으로도 적용된다. 상당히 빨리 바꿔가는 소스 패치와 보안 패치로인해 리눅스 서버 관리자는 지속적인 관심을 가지고 업데이트와 보안의 정보 변화에 민감하게 대쳐하여야 한다는 것이 서버 관리자의 과업이 되어 버렸다. 지금 부터는 SULinux의 보안 설정에 관해 알아 보도록하자.


물리적 보안 설정


보안에 있어 가장 큰 선결조건은 바로 물리적 보안이다. 아무리 소프트웨어적으로 보안을 철저히 하였더라도 시스템 하드웨어에 직접 접근 가능하다면 아무런 소용이 없다. 일단 중요한 시스템이라면 관계자이외의 접근을 막아야 한다.

시스템 접근을 막고 메인보드의 BIOS에 비밀번호를 설정하고, 부팅순서를 하드디스크 부팅우선 순위로 설정을 변경하여 좀더 철저한 시스템 보안성을 유지하여한다.


불필요한 서비스의 제거


리눅스 설치후에 불필요한 서비스를 찾아 제거하는 것이 중요하다. 하지만 SULinux는 최적화 시스템으로 미연에 불필요한 서비스를 제거하여 두었다. 하지만 사용목적에 따라 좀더 세부적인 설정이 필요 할 수도 있으니 한번더 불필요한 서비스를 제거해보기 바란다. 불필요 서비스 제거방법은 ntsysv명령을 이용하여 불필요한 서비스의 체크를 해제하면 된다.

PIC3DC.gif

[그림] ntsysv 실행화면


ntsysv명령어외 pstree명령어를 이용하여 실제 동작중인 프로세스와 데몬을 확인 해보고 불필요한 프로세스는 killall 명령어로 중지시키기 바란다.


PIC3DD.gif

[그림] 프로세스 확인 결과


1. xinetd


독립모드로 동작하는 xinetd는 inetd에 비해 액세스 가능한 호스트나 시간대 설정 기능을 좀더 자세히 설정할 수 있도록 inetd 확장한 데몬이다. 클라이언트의 요청이 있으면 xinetd 설정에 따라 대응하는 서비스 서버 프로그램을 실행 시키고 다시 포트를 감시한다. /etc/init.d/xinetd 실행 스크립트로 xinetd데몬을 시작할 수 있다.


관련 파일

설    명

/usr/sbin/xinetd

데몬

/etc/xinetd.conf

xinetd 설정 파일

/etc/xinetd.d

xinetd로 실행하게 될 각 데몬의 설정 파일을 저장한 디폴트 디렉토리. /etc/xinetd.conf에 위치가 지정되어 있다.

/etc/init.d/xinetd

실행 스크립트

/var/lock/subsys/xinetd

로그 파일

/etc/services

서비스명과 포트번호가 저장되어 있는 테이블

/etc/protocols

프로토콜 이름과 포트번호가 저장되어 있는 테이블


/etc/xinetd.d/ipop3의 설정 예


PIC3DE.gif


"service pop3"는 pop3 서비스에 관한 설정이란 것을 알리는 설정이다.

pop3 관련 서비스 포트는 tcp/udp 포트 110이다. /etc/services 파일을 참고하자.


pop3          110/tcp         pop-3          # POP version 3

pop3          110/udp        pop-3


클라이언트로부터 TCP의 110번 포트에 요청이 있을 때 xinetd는 /etc/services 내용에서 서비스명인 pop3을 가져와서 설정 파일에 설정되어 있는 것을 실행한다.


설정값

설    명

disable = no

설정은 pop3 서비스가 가능할 수 있도록 하는 설정이다. 실행 불가능하게 하기 위해서는 "no"를 "yes"로 설정한다.

socket_type = stream

프로토콜로 TCP를 사용하고 있기 때문에 소켓 타입은 stream이다.

protocol = tcp

프로토콜로 TCP를 지정하고 있다.

wait = no

nowait로 지정되어 있다.

user = root

프로세스의 UID에 root를 지정하고 있다.

server = /usr/sbin/ipop3d

telnet 데몬의 절대 경로이다.

xinetd 기동과 중지


① xinetd를 실행한다.

[root@localhost ~]# /etc/init.d/xinetd start


② xinetd를 정지한다.

[root@localhost ~]# /etc/init.d/xinetd stop


③  xinetd의 상황을 표시한다.

[root@localhost ~]# /etc/init.d/xinetd status


④ xinetd를 재시작한다.

[root@localhost ~]# /etc/init.d/xinetd restart


2. TCP Wrapper


TCP Wrapper란 tcpd 및 tcpd를 구성하고 있는 라이브러리 전체를 말하며 주로하는 기능은 접근제어기능이다. xinetd 역시 TCP Wrapper 기능을 이용하여 접근을 제어한다.

TCP Wrapper 관련 파일 파일은 다음과 같다.


관련 파일

설    명

/usr/sbin/tcpd

서버 프로그램을 관리하는 데몬

/etc/hosts.allow

서비스 접근을 허가할 호스트를 지정

/etc/hosts.deny

서비스 접근을 거부할 호스트를 지정


TCP Wrapper에서의 액세스 제어는 /etc/hosts.deny를 이용하여 모든 접근을 먼저 막고, /etc/hosts.allow에서 필요한 접근을 열어주는 방식을 사용하는 것이 좋다.


/etc/hosts.deny 설정


문법 : daemon_list : host_list [: command ]


설정값

설    명

daemon_list

서비스를 거부하려는 데몬 이름. 공백 또는 ","로 구분해서 복수지정 할 수 있다. 또 모든 데몬을 지정할 경우에는 ALL로 설정한다.

host_list

서비스를 거부하고 싶은 호스트명이나 IP 주소. 공백 또는 ","로 구분하여 복수지정 할 수 있다. 또 도메인이나 네트워크 지정도 가능한다. 와일드카드도 사용할 수 있기 때문에 동일한 도메인이나 동일 네트워크는 일괄적으로 지정할 수 있다.


host_list에 올수 있는 값

설정값

설    명

ALL

모든 호스트나 네트워크를 의미

LOCAL

로컬 호스트

UNKNOWN

사용자명이나 호스트명이 불명확한 경우에 적용

KNOWN

사용자명과 호스트명 양쪽 모두 알고 있는 경우에 적용

PARANOID

액세스 소스 주소로부터 역 순으로 호스트명을 점검해서, 그 호스트명에서주소를 다시 읽는다.

EXCEPT 예외 조건

192.168.1. EXCEPT 192.168.1.1 192.168.1.1을 제외한 IP 주소가 192.168.1.X인 호스트를 의미한다

command : tcpd가 실행할 명령어를 절대 경로로 지정한다.


실제 사용의 예

PIC3DF.gif

설명 : "ALL:ALL" 이 설정은 모든 서비스와 접근네트웍크를 막는 설정이다. 이 설정을 한후에는 어떠한 원격접속도 이루어 지지 않으니 주의하면 된다. 접속을 부분적으로 열기위해서는 /etc/hosts.allow 의 설정으로 열고자하는 설정을 열면된다.


/etc/hosts.allow 설정


문법 : daemon_list : host_list [: command ]


설정값

설    명

daemon_list

서비스를 거부하려는 데몬 이름. 공백 또는 ","로 구분해서 복수지정 할 수 있다. 또 모든 데몬을 지정할 경우에는 ALL로 설정한다.

host_list

서비스를 거부하고 싶은 호스트명이나 IP 주소. 공백 또는 ","로 구분하여 복수지정 할 수 있다. 또 도메인이나 네트워크 지정도 가능한다. 와일드카드도 사용할 수 있기 때문에 동일한 도메인이나 동일 네트워크는 일괄적으로 지정할 수 있다.


host_list에 올수 있는 값

설정값

설    명

ALL

모든 호스트나 네트워크를 의미

LOCAL

로컬 호스트

UNKNOWN

사용자명이나 호스트명이 불명확한 경우에 적용

KNOWN

사용자명과 호스트명 양쪽 모두 알고 있는 경우에 적용

PARANOID

액세스 소스 주소로부터 역 순으로 호스트명을 점검해서, 그 호스트명에서주소를 다시 읽는다.

EXCEPT 예외 조건

192.168.1. EXCEPT 192.168.1.1 192.168.1.1을 제외한 IP 주소가 192.168.1.X인 호스트를 의미한다

command : tcpd가 실행할 명령어를 절대 경로로 지정한다.


실제 사용의 예


PIC3E0.gif

설명 : sshd, httpd, vsftpd,saslauthd,sendmail,ipop3d, named(ssh서버스, 웹서비스, ftp서비스, 메일서비스, DNS서버스에 필요한 데몬이다) 라는 설정만 모든 네트워크(ALL)에 열는 설정이다. 이런 설정은 주로 호스팅 서비스를 하는 서버에서 많이 사용하는 설정이다.

3. su 사용자 제한(wheel group 이용)


대부분의 리눅스에서 su 명령은 일반사용자 모두가 사용가능 하도록 되어 있다. 리눅스에서는 인증 모듈인 PAM을 사용하여 wheel 그룹에 포함된 사용자만 su 명령을 사용할 수 있도록 제한할 수 있다.


설정파일 : /etc/pam.d/su

설명 : /etc/pam.d/su파일 안에 “#auth       required     /lib/security/$ISA/pam_wheel.so use_uid” 기본적으로 주석처리(#) 되어 있으며 사용자계정을 wheel 그룹에 포함시켜야만 su 명령을 내릴 수 있도록 한다.


실제 사용의 예


1) /etc/pam.d/su

#auth       required     /lib/security/$ISA/pam_wheel.so use_uid

부분의 주석(#)을 제거한다.


2) usermod명령을 사용하거나 혹은 /etc/group파일의 wheel그룹에 su 명령을 사용가능 하게 할 사용자의 ID를 추가한다.

[root@localhost ~ ]# usermod -G wheel nemo

[root@localhost ~ ]# grep wheel /etc/group

wheel:x:10:root,nemo


PIC3E1.gif

[그림] 실제 적용 화면

4. iptables


iptables의 개요


SULinux에서는 커널 단계에서 사용하는 보안을 지원한다. SELinux와 iptables가 그것이다. 이번 장에서는 iptables에 관해 간략하게만 살펴보도록하자.


iptables의 기본구조


기본 필터링은 논리적인 3개의 사슬(chains)으로 구성되어 있고, 그 사슬의 각 명칭은 영문 대문자로 표기되는 INPUT, OUTPUT, FORWOARD라 부른다. 그외 사용자가 직접 별도의 사슬을 정의하여 사용 할 수 있다.


INPUT 사슬

➡ 리눅스 박스를 향해 들어오는 패킷들이 거치는 설정

FORWARD 사슬

➡ 리눅스 박스를 거쳐 output체인을 향하는 설정

OUTPUT 사슬

➡ 리눅스 박스를 나가는 패킷들이 들어가는 설정


기본 문법

iptables [-t table] action chain pattern [-j target]


항  목

설    명

table

크게 nat와 filter로 나누며, 기본값이 filter이므로 filter인 경우에는 생략한다.

action

전체 사슬에 대한 정책을 지정한다. -A, -L, -D, -F 등 대문자 옵션이 이에 해당한다.

chain

일반적인 필터링에 속하는 INPUT, OUTPUT, FORWARD가 있다.

pattern

세부규칙을 지정하는 것으로 소문자 옵션(-s, -p, -d 등)이 이에 해당한다.

target

정책을 지정하는 것으로 DROP, ACCEPT, LOG 등이 해당한다.


iptables의 정책


iptables의 정책이라는 것은 패킷을 어떻게 처리할 것인지를 말한다. 패킷의 처리는 보통 거부와 허가 두가지뿐이다. 이 두가지 정책을 ACCEPT, DENY, DROP 옵션으로 정책을 수립니다.


기본정책

설    명

ACCEPT

패킷을 허용하는 옵션이다.

DENY

패킷을 허용하지 않는다는 메시지를 보내면서 거부한다. 사슬 전체 정책 설정(-P)에서는 사용할 수 없다.

DROP

패킷을 완전히 무시한다.


iptables는 조작하는 방법은 크게 두가지로 나눌 수 있다.


첫번째 전체사슬에 대한 설정

두번째 각 사슬에 대한 규칙을 조작하는 방법


※ 사슬에 대한 동작 설정은 대문자 옵션(-P, -L 등)을 사용하고 사슬에 대한 세부규칙은 소문자옵션( -s,-p 등)을 사용한다.


전체사슬에 대한 작동

-N

새로운 사슬을 만든다.

-X

비어있는 사슬을 제거한다. (3개의 기본 사슬은 제거할 수 없다.)

-P

사슬의 정책을 설정한다.

-L

현재 사슬의 규칙을 나열한다.

-F

사슬으로부터 규칙을 제거한다.

-Z

사슬내의 모든 규칙들의 패킷과 바이트의 카운트를 0으로 만든다.

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,853 개
  • 현재 접속자 :  78 명