리눅스 기본보안설정(11)

by 조쉬 posted May 15, 2014
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
11./etc/systl.conf와 /proc 파일 시스템

리눅스상에는 /proc 파일시스템이라고 불리는 가상파일시스템이 존재한다. 현재 서버에서 운영되고 있는 모든 프로세스들의 정보와 커널이 사용하고 있는 모든 정보들에 대하여 그 속성값을 저장하고 있는 파일시스템이다. 이와같이 /proc 파일시스템에 존재하는 여러가지 설정값들을 수정함으로써 커널상에서 지원하는 여러가지 보안사항을 설정할 수 있다. 이러한 설정값들에 대해 정적으로 설정할 수 있는 환경설정파일이 /etc/sysctl.conf이다.

○/proc파일시스템이란
/proc 파일시스템은 리눅스 커널이 메모리에서 사용하고 있는 모든 자원들에 대한 정보들을 보관하고 있는 파일들로 구성되어 있다. 또한 현재 실행중인 프로세스들의 정보를 PID 숫자로 된 디렉토리로 구성하고 있으며 프로세스가 종료되면 PID로 생성된 파일 또는 디렉토리 모두가 삭제된다.

/proc 파일시스템에서는 리눅스 커널이 사용중인 자원들에 대한 정보를 파일명으로 보관하고 있다. 이러한 파일들은 디스크상에서 실제로 존재하지 않는 파일로서 메모리에서만 임시적으로 존재하기 때문에 가상파일시스템이라고 명명한다. 따라서 리눅스 서버가 종료되면 생성된 모든 파일들은 삭제된다.

/proc 파일시스템에는 커널옵션값을 설정할 수 있도록 /etc/sysctl.conf 파일을 제공하고 있다. 부팅시 매번 정적인 커널옵션을 설정하고자 할 때 이 파일의 설정값을 수정함으로써 재부팅시 커널 옵션 설정값을 적용할 수 있게 되는 것이다.

○/proc 디렉토리에 존재하는 파일 중에서 kcore
p1.png



ls 명령어로 /proc/kcore 파일의 용량을 보면 939528192이다. 이 파일은 현재 리눅스 서버의 실제 메모리양을 의미한다.

하지만 du 명령어로 /proc/kcore 파일의 용량을 확인해보면 용량이 0이다.

p2.png



그 이유는 /proc 디렉토리에 있는 kcore 파일이 디스크상에 물리적으로 존재하는 것이 아니라 리눅스 운영체제가 임의적으로 사용하고 있는 값으로서 메모리상에 존재하는 가상파일이기 때문이다.(/proc 디렉토리에 있는 파일들이 메모리상에 존재하는 가상 파일들이라고 보면 될 듯)  

 

○아래에서 보는 바와같이 /proc 디렉토리 내에 존재하는 숫자로 된 많은 디렉토리들과 각종 파일들은 커널과 연관관계를 가지고 있으며, 커널옵션 정보값들을 저장하고 있는 파일들이다. 아래 파일들의 값을 변경함으로써 커널의 성능, 기능을 수정할 수 있다p3.png


.

 

 

○sysctl 명령을 이용한 커널옵션 설정

sysctl은 런타임 중 커널 파라미터의 환경을 설정하는 프로그램이다.
sysctl을 이용하여 현재 커널의 설정값을 확인하기 →
[root@localhost /]# sysctl -a

p4.png



위 화면같이 무수히 많은 커널 옵션 파라미터가 나올 것이다. 이 커널 옵션들 중에서 하나를 변경하여 ping 테스트에 응답하지 않도록 해보겠다. → ping과 관련된 커널 옵션은 net.ipv4.icmp_echo_ignore_all = 0이다. → ping에 응답하지 않도록 하려면 맨 끝에 숫자 0을 1로 변경해주면 된다. 

[root@localhost /]# sysctl -w net.ipv4.icmp_echo_ignore.all=1

***그러나 이러한 설정은 일시적으로만 적용되고 재부팅을 하면 다시 원래 상태로 되돌아 온다.(설정을 완전히 고정시킬 수 있는 영역은 etc/sysctl.conf 이다.) 

 

그리고 확인하기 

[root@localhost /]# sysctl -a | grep icmp_echo_ignore_all

p5.png



 

 

○특정 네트워크의 브로트캐스트 주소를 대상으로 하는 ping 테스트 막기
먼저 /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 파일 설정이 0인지 1인지 확인한다.
[root@localhost /]# cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
0(또는 1)
확인 후 설정이 0일 경우 1로 바꿔준다.
[root@localhost /]# sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1

○keep alive 시간 변경하기
먼저 /proc/sys/net/ipv4/tcp_keepalive_time 파일 설정의 수치를 확인한다.(확인은 해도 되고 안 해도 될 듯)
[root@localhost /]# cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
확인  후 바꾸고 싶은 시간으로 바꿔준다.
[root@localhost /]# sysctl -w net.ipv4.tcp_keepalive_time=3600

○서버내에서 로컬 포트 범위를 지정하고 있는 파일 확인하기
[root@localhost /]# cat /proc/sys/net/ipv4/ip_local_port_range

○포워딩을 지정하는 파일 확인하기
[root@localhost /]# cat /proc/sys/net/ipv4/ip_forward

○서버의 날짜 정보를 외부의 네트워크로부터 막기(설정을 0으로 해준다.)
[root@localhost /]# sysctl -w net.ipv4.tcp_timetamps=0

 

○Syn Flooding 공격 막기
Syn Flooding 공격이란 TCP세션이 연결될 때 존재하는 취약성을 이용한 서버 공격이다. 일종의 서비스 거부공격(DOS)이다. TCP 세션을 맺기 위해서는 패킷을 보낼 서버와 받을 서버 사이에 몇 단계의 작업을 수행하는데 SYN과 ACK 패킷을 이용하여 송신, 수신 준비를 한다. SYN 패킷을 받은 목적지 서버는 SYN과 ACK패킷을 보낸 다음 소스서버에서 ACK 패킷을 보내기를 기다린다. 이러한 상태에서 계속적으로 기다리는 것이 아니라 백로그큐가 허용하는 공간에 연결정보를 보관하게 된다. 이러한 상태가 지속적으로 요청되어 로그가 쌓이게 되면 목적지 서버의 특정 서비스가 마비될 수도 있다. 이런 공격을 DOS 공격의 일종인 SYN Flooding 공격이라고 부른다. 이러한 공격을 차단하기 위해서는 tcp_syncookies 값을 1로 설정하는 방법과 백로그큐 사이즈를 늘려주는 방법이 있다.
[root@localhost /]# sysctl -w net.ipv4.tcp_syncooklies=1
[root@localhost /]# sysctl -w net.ipv4.tcp_max_syn_backlog=(늘려줄 수치)

 

○ICMP redirect의 변조된 accept 패킷 차단(설정을 0으로 해주면 차단된다.)
[root@localhost /]# sysctl -w net.ipv4.conf.default.accept_redirects=0

○ICMP redirect의 변조된 send 패킷 차단(설정을 0으로 해주면 차단된다.)
[root@localhost /]# sysctl -w net.ipv4.conf.default.send_redirects=0

○DOS공격의 소스서버로 사용되는 것을 차단(IP 스푸핑 방지. 설정을 1로 해주면 차단된다.)
[root@localhost /]# sysctl -w net.ipv4.conf.default.rp_filter=1

○스푸핑 패킷에 로그 생성하기(설정을 1로 하면 로그가 남게 된다.)
[root@localhost /]# sysctl -w net.ipv4.conf.default.log_martians=1

○source route 패킷허용 막기(설정을 0으로 하면 막을 수 있다.)
[root@localhost /]# sysctl -w net.ipv4.conf.default.accept_source_route=0

○커널에서 사용할 수 있는 최대 파일의 수 설정하기
[root@localhost /]# sysctl -w fs.file-max=(설정할 수치)
 

○CPU 정보 보기
[root@localhost /]# cat /proc/cpuinfo

○서버의 메모리 정보 보기
[root@localhost /]# cat /proc/meminfo

○서버의 디바이스 장치 알아보기
[root@localhost /]# cat /proc/devices

○커널에서 인식할 수 있는 파일시스템 알아보기
[root@localhost /]# cat /proc/filesystems

○현재 사용되고 있는 메모리 번지값 알아보기
[root@localhost /]# cat /proc/iomem

○서버에 장착된 입출력 포트들의 번지값 알아보기
[root@localhost /]# cat /proc/ioports

○서버의 평균 부하율 알아보기
[root@localhost /]# cat /proc/loadavg
(이 외에 uptime, top 명령어에 의해 부하율 정보를 보는 방법도 있다.
[root@localhost /]# uptime
[root@localhost /]# top
)

○커널에 로드되어 있는 모듈 알아보기
[root@localhost /]# cat /proc/modules

○현재 리눅스 시스템에 마우트된 장치디바이스 정보 알아보기
[root@localhost /]# cat /proc/mounts

○파티션 정보 알아보기
[root@localhost /]# cat /proc/partitions

○커널 버전 알아보기
[root@localhost /]# cat /proc/version

○장치들의 IRQ 값 알아보기
[root@localhost /]# cat /proc/interupts

 

*****지금까지 설정한 내용들을 재부팅시에도 적용이 되도록 하려면 각 옵션의 값들을 /etc/sysctl.conf 파일에 정의해 주어야 한다.