Sysctl Configuration for Kernel parameters

sysctl은 Redhat 6.2 부터 포함된 kernel parameter 값들을 조절하기 위한 utility 이

다. sysctl 이 조절할수 있는 값들은 /proc/sys/ 아래에 있는 list 들이다.

sysctl 에 대해서 언급을 하기전에 아주 강력하게 주의를 요할 것은 sysctl 을 이용하

여 값을 변경할 경우에는 시스템이 crash 되어질 위험요소가 많이 있다는 것을 명심해

야 한다. 즉 자기의 시스템에 무리한 값을 넣었을 경우 그 즉시 시스템이 멈출수도 있

기 때문에 충분한 테스트와 시스템이 crash 가 될 수 있음을 명심하고 책임을 질수 있

을 경우에만 만지기를 권장한다.

[ sysctl 사용법 ]

보통 커널의 파라미터를 조정할때 proc 에서 echo 를 이용하여 redirect 로 직접 쓰는

경우가 많았다. 이렇게 조정을 할 경우에는 또 rc.local 같은 파일에 따로 기입을 해

줘야 하는 불편함이 있었다.

RedHat 6.2 이후 배포판에는 procps package 에 sysctl 이라는 utility가 추가되어 이

것들을 관리를 할수 있게 되었다. 일단 조정할수 있는 모든 parameter 들은

$ sysctl -a

명령으로 확인을 할 수가 있다. 그리고 특정값을 수정하기 위해서는 /etc/sysctl.conf

에 해당 키(이건 sysctl -a 명령에서 리스트를 확인 할수 있다)와 키값을 지정한 다음

$ sysctl -p

명령으로 바로 적용을 시킬수 있다. 물론 sysctl.conf 에 기입이 되면 부팅시 마다 자

동으로 적용이 된다. 만약 잠시만 바꾸어 보고 싶다면

$ sysctl -w net.ipv4.icmp_echo_ignore_all=0

과 같이 직접 값을 넣어 줄수도 있다. 이럴 경우에는 부팅이 되어 있는 순간만 적용이

된다. -p 옵션은 sysctl.conf 가 아닌 다른 파일을 설정 파일로 지정을 할 수 있게 한

다. 옵션값이 없으면 default 로 /etc/sysctl.conf 를 읽어 들이며 따로 path 를 지정

하면 해당 path 에 있는 파일을 읽어 들인다.

다음의 설정들은 Kernel 2.4 에서 사용할 만한 kernel parameter 값들을 정의해 놓은

sysctl.conf 의 내용이다.

———————–> CUT HERE <—————————-

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

# SysCTL Configuration For Kernel 2.4

# 작성일 2000.4.18

# 김정균 < http://www.oops.org >

# 참고 문서 : http://www.oops.org/?t=lecture&sb=kernel&n=3

#

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

## File System Section

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

# 시스템전체에서 열수 있는 파일수(file-max) : file-max=램용량/4*256

# 4M당 256 개

# 128M -> 8192 개

# 256M -> 13684 개

# 512M -> 32768 개

# 1G -> 65536 개

# 2G -> 131072 개

# Improve the number of open files 즉, 하나의 프로세서에서 열수 있는 파일 갯수

# 등 조정은 커널소스에서 해야함(fs.h INR_OPEN / limits.h NR_OPEN)

#

fs.file-max = 8192

# inode-max 는 file-max 의 3~4 배를 지정하나 kernel 2.4 에서는 inode-max 를 사

# 용하지 않는듯 함

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

## Kernel Section

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

# 값이 0 일 경우, ctrl-alt-del 은 프로그램들을 일시 정지 시키고, init(1) 로

# restart 신호을 보내게 된다. 하지만 이 값이 1 보다 클경우, OS 는 dirty buffer

# 의 동기화 없이 바로 reboot을 하게 된다. (이것은 저장한 것들을 모두 날릴수 있

# 다)

#

# 주의: dosemu 같은 프로그램이 ‘raw’ mode 에 keyboard 를 가질때, ctrl-alt-del

# 은 커널 tty layer에 도달하기 전에 그리고 이것이 무엇을 할지 결정하기 위해 프

# 로그램에 도달하기 전에 프로그램에 의해서 중단이 될 것이다.

#

# reboot 시 정보들을 안전하게 저장하기 위해 0으로 설정

#

kernel.ctrl-alt-del = 0

# the magic-sysrq key 사용여부. 커널에서 magic key 지원 여부를 넣어 줘야 함

#

kernel.sysrq = 1

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

## TCP Section

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

# interface들 사이에 패킷들을 교환시키는 것을 허락. 사내에서 방화벽을 구성하는

# 경우에나 사용

#

net.ipv4.ip_forward = 0

# ICMP ECHO 요청을 처리. Ping 과 관련이 있음. 이 값을 이용하여 PING 을 막는 것

# 보다 iptables 를 이용해서 icmp_request 를 막는 것이 효과적

#

net.ipv4.icmp_echo_ignore_all = 0

# 브로드캐스브, 멀티캐스트 주소에 ICMP ECHO 요청을 막음. smurf 공격 방지용

#

net.ipv4.icmp_echo_ignore_broadcasts = 1

# SRR 옵션으로 패킷들을 수용한다. IP source routing 을 제어한다. 보통 호스트로

# 향하게 하는 것을 권장한다. TRUE (router) FALSE (host)

#

net.ipv4.conf.all.accept_source_route = 0

# kernel 을 CONFIG_SYNCOOKIES 를 설정 하여 생성을 하였을 때만 사용이 유효하다.

# socket으로 syn backlog queue 가 넘칠때 syncookies 를 보낸다. 이것은 일반적인

# ‘syn flood attack’ 이라는 공격을 방어 하기 위해 사용이 된다. 기본 값은 FALSE

# 이다.

#

# syncookies 는 대체 방법일 뿐 이라는 것을 명심해야 한다. 이것은 정상적인 접속

# 에 대해 더 좋은 성능을 내게하는 것에 사용이 되는 것은 아니다. 만약 로그에서

# synflood 경고를 보게 된다면, 하지만 이것들이 정상적인 접속들이 넘쳐서 발생한

# 것들 이라면 이 경고가 사라지기 전에 tcp_syncookies 가 아닌 다른 파라미터들을

# 조절해야 한다.tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow

# 를 참고를 하라.

#

# syncookies는 TCP 프로토콜에 심각하게 어긋나며, TCP 확잗들을 사용하는 것을 허

# 락하지 않으며, (SMTP relaying 같은) 특정서비스들의 심각한 손상의 결과가 될수

# 있다. 만약 실제 넘치지 않음에도 불구하고 로그에 synflood경고가 계속 발생한다

# 면, 서버의 설정이 심각하게 잘못되어 있는 것이다.

#

net.ipv4.tcp_syncookies = 1

# ICMP redirect message 들을 불허

#

net.ipv4.conf.all.accept_redirects = 0

net.ipv4.conf.lo.accept_redirects = 0

net.ipv4.conf.default.accept_redirects = 0

net.ipv4.conf.eth0.accept_redirects = 0

# 어떤 router 들은 broadcast frame 들로 거짓 응답을 보냄으로서 RFC 1122를 위반

# 한다. 이러한 위한들은 보통 커널 경고를 통해 로깅이 된다. 이것을 TRUE 로 설정

# 을 할경우 커널은 이러한 경고를 하지않을 것이며, 로그 파일이 지저분해 지는 것

# 을 피할수 있다. 기본값은 FALSE 이다

net.ipv4.icmp_ignore_bogus_error_responses = 1

# RFC182에 따른 IP spoof 방지를위한 설정(커널 2.2이상 버전)

#

net.ipv4.conf.eth0.rp_filter = 1

net.ipv4.conf.lo.rp_filter = 1

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.all.rp_filter = 1

# Log Spoofed Packets, source Routed Packets, Redirect packetes

# ip주소를 스푸핑한다고 예상되는 경우 로그에 기록하기

#

net.ipv4.conf.all.log_martians = 1

# Allowed local port range

# tcp, udp에서 사용할 로컬 포트 지정

#

net.ipv4.ip_local_port_range = 32768 61000

# 무언가 잘못되었을 경우, network layer로 이 현상을 reporting 하기전 다시 확인

# 을 하기 위한 횟수를 지정한다. 최소 RPC 값은 3 이며, 이는 RTO 상에서 3 초에서

# 8 분 사이에 응답을 하도록 하는 것이 기본값이다.

#

net.ipv4.tcp_retries1 = 3

# tcp 연결해제 시간을 줄이며 불필요한 ip확장기능을 사용하지 않음

#

# Decrease the time default value for tcp_fin_timeout connection

# 소켓이 항상 close 되기 전에 마지막 FIN을 기다리는 시간

#

net.ipv4.tcp_fin_timeout = 30

# Decrease the time default value for tcp_keepalive_time connection

# tcp가 KeepAlive 메시지를 보내는 시간 간격

#

net.ipv4.tcp_keepalive_time = 1800

# Turn off the tcp_window_scaling

#

net.ipv4.tcp_window_scaling = 0

# Turn off the tcp_sack

#

net.ipv4.tcp_sack = 0

# Turn off the tcp_timestamps

#

net.ipv4.tcp_timestamps = 0

# 접속한 client 들 중 승인을 받지 못하는 접속 요청들의 최대값을 지정 한다. 만

# 약 승인을 받지 못하고 기다리는 접속 요청들이 이 수를 벗어나는 경우에는 “다시

# 재접속을 해 보라” 라는 메세지를 받게 된다. 128 Mb 의 메모리에서는 기본값으로

# 1024를 사용할수 있으며, 이보다 적은 메모리를 가지고 있을 경우에는 128을 사용

# 하기를 권장한다. 만약 서버에 부하가 많이 걸리게 된다면 이값을 증가해 보기 바

# 란다. 주의할 것은, 1024 보다 크게했을 경우 include/net/tcp.h 에서

# (TCP_SYNQ_HSIZE*16)이 tcp_max_syn_backlog 와 같거나 이보다 작게

# TCP_SYNQ_HSIZE 를 변경해 줘서 커널을 다시 빌드 해야 한다.

#

net.ipv4.tcp_max_syn_backlog=1024

# 동시에 유지 가능한 timewait 소켓의 수. 지정된 숫자를 초과할 경우 timewait 소

# 켓이 없다는 경고 메세지 출력. 64M 당 180000 으로 계산을 하면 됨.

# 64M -> 180000

# 128M -> 360000

# 256M -> 720000

# 512M -> 1440000

# 1G -> 2880000

# 2G -> 5760000

#

net.ipv4.tcp_max_tw_buckets = 1440000

# 1/100 초 동안에 받아들이는 igmp memberships의 수

#

net.ipv4.igmp_max_memberships = 20

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

1 Response

  1. 2024년 11월 3일

    … [Trackback]

    […] Read More on that Topic: nblog.syszone.co.kr/archives/3056 […]

페이스북/트위트/구글 계정으로 댓글 가능합니다.