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