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 들은
[root@host ~]$ sysctl -a
명령으로 확인을 할 수가 있다. 그리고 특정값을 수정하기 위해서는 /etc/sysctl.conf
에 해당 키(이건 sysctl -a 명령에서 리스트를 확인 할수 있다)와 키값을 지정한 다음
[root@host ~]$ sysctl -p
명령으로 바로 적용을 시킬수 있다. 물론 sysctl.conf 에 기입이 되면 부팅시 마다 자
동으로 적용이 된다. 만약 잠시만 바꾸어 보고 싶다면
[root@host ~]$ 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://oops.org >
# 참고 문서 : http://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)
#
# 정확하지는 않지만 커널 2.4.20 이 후부터는 커널이 직접 관리하도록 설정을 하지
# 않는 것이 좋다. 메가바이트당 64M 로 설정하는 것도 변경이 된 듯 싶다.
#
#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
# panic 의 값은 panic 상태에서 rebooting 하기전 kernel 이 얼마나 기다리는 값을
# 초단위로 나타낸다. watchdog 을 사용할때 60 으로 설정하는 것을 추천함. 0은 이
# 기능을 비활성화 시킴.
#
#kernel.panic = 0
# shmmax 는 공유 메로리를 사용할 때 공유 메모리 segment 의 최대 크기를 질의 하
# 는데 사용이 되어질 수 있으며, 또는 공유 메모리 segment 의 최대 크기를 설정할
# 수도 있다. shared memory segment 를 1 GB 이상으로 올리는 것을 커널에서 지원
# 을 한다. 이 값은 SHMMAX 의 기본값이 된다.
#
#kernel.shmmax = value
# core dump 시 파일 이름에 PID 를 덧붙일 것인지를 조정한다. multi-thread 어플
# 리케이션들을 디버깅 하는데 유용하게 사용한다.
#
kernel.core_uses_pid = 1
##############################################################################
## TCP Section
##############################################################################
# interface들 사이에 패킷들을 교환시키는 것을 허락. 사내에서 방화벽을 구성하는
# 경우에나 사용
#
net.ipv4.ip_forward = 0
# SRR 옵션으로 패킷들을 수용한다. IP source routing 을 제어한다. 보통 호스트로
# 향하게 하는 것을 권장한다. TRUE (router) FALSE (host)
#
net.ipv4.conf.all.accept_source_route = 0
# 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
# 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
net.ipv4.conf.default.rp_filter = 1
# Log Spoofed Packets, source Routed Packets, Redirect packetes
# ip주소를 스푸핑한다고 예상되는 경우 로그에 기록하기
#
net.ipv4.conf.all.log_martians = 0
# TCP 와 UDP 에 의해 사용될 local 포트 범위를 정의한다. 첫번째 숫자는 사용 할
# 영역의 가장 앞부분 포트 번호를 지정하고 두번째는 마지막 포트번호를 지정한다.
# 기본값은 시스템의 사용가능한 메모리의 양에 의해 결정이 된다: 메모리가 128 Mb
# 보다 많을 경우 32768-61000 메모리가 128Mb 보다 적을 경우 1024-4999 또는 이보
# 다 적게 지정한다. 이 값은 TCP 확장을 지원하지 않는 시스템으로 동시에 발생이
# 될수 있는 활성화된 접속들의 수를 결정한다. tcp_tw_recycle 을 가능하게 함으로
# 서 (기본적 으로) 1024-4999 영역은 timestamps를 지원하는 시스템들에 초당 2000
# 개의 접 속 정도를 가능하게 하 는데 충분하다.
#
# 커널 2.4.20 부터는 커널에서 메모리양을 자동으로 계산하여 지정하므로, 따로 설
# 정을 할 필요는 없음
#
#net.ipv4.ip_local_port_range = 32768 61000
# 세팅되면 프로세스가 로컬 IP 가 아닌 주소에 bind() 할 수 있다. 매우 유용한 기
# 능이지만 어떤 어플리케이션에서는 나쁠 수 있다. 기본값: 0
#
net.ipv4.ip_nonlocal_bind = 0
# 0 이 아닌 값을 세팅하면 동적 주소를 (dynamic addresses) 지원한다. 1 보다 큰
# 값을 세팅하면 동적주소가 다시 쓰여질 때마다 로그 메시지가 출력될 것이다.
#
# 이 값은 부팅시에 rc.sysinit 에서 /etc/sysconfig/network-scripts/ifcfg-eth*
# 를 파싱하여 자동으로 설정함
#
net.ipv4.ip_dynaddr = 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
# 어떤 router 들은 broadcast frame 들로 거짓 응답을 보냄으로서 RFC 1122를 위반
# 한다. 이러한 위한들은 보통 커널 경고를 통해 로깅이 된다. 이것을 TRUE 로 설정
# 을 할경우 커널은 이러한 경고를 하지않을 것이며, 로그 파일이 지저분해 지는 것
# 을 피할수 있다. 기본값은 FALSE 이다
net.ipv4.icmp_ignore_bogus_error_responses = 1
# 1/100 초 동안에 받아들이는 igmp memberships의 수
#
net.ipv4.igmp_max_memberships = 20
# 활성화된 TCP 접속이 재전송을 시도하게 하기 위한 최초 SYN시간의 값을 정한다.
# 255 보다 높아서는 안된다. 기본값은 5이며, 180 초에 대응이 된다.
#
net.ipv4.tcp_syn_retries = 2
# passive TCP 접속시도가 재접속을 하기 위한 SYNACKs의 값을 정한다. 255 보다 높
# 게 지정할 수 없다. 기본값은 5이며, 180초에 대응이 된다.
#
net.ipv4.tcp_synack_retries = 2
# keepalive 가 활성되 되어 있을 경우, 얼마나 자주 TCP 가 keepalive 메세지를 보
# 내게 할 것인지를 설정. 기본값은 2시간 이다.
#
net.ipv4.tcp_keepalive_time = 600
# 연결이 끊어졌다고 판단할 때까지, 얼마나 keepalive probe 를 보낼지 결정. 기본
# 값 9회
#
net.ipv4.tcp_keepalive_probes = 5
# keepalive_probes 를 보낼 간격을 정함. probe 를 보낸 후, probes * intvl 의 시
# 간이 지나도록 응답이 없으면 연결이 해제된 것으로 간주하게 됨. 기본 값의 사용
# 시 11분 15초 동안 재시도를 하고 연결을 취소함. 값은 초단위
#
net.ipv4.tcp_keepalive_intvl = 10
# 서버 쪽에서 닫은 TCP 연결을 끊기 전에 확인하는 횟수를 정한다. 기본 값은 7 로
# RTO 50 초에서 16 분 사이에 해당한다. 웹 서버가 운영 중 이라면 이 값을 줄여서
# 소켓 등이 귀한 리소스를 소비하지 않도록 할 수도 있다.
#
net.ipv4.tcp_orphan_retries = 2
# 무언가 잘못되었을 경우, 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 = 20
# 동시에 유지 가능한 timewait 소켓의 수. 지정된 숫자를 초과할 경우 timewait 소
# 켓이 없다는 경고 메세지 출력. 64M 당 180000 으로 계산을 하면 됨.
# 64M -> 180000
# 128M -> 360000
# 256M -> 720000
# 512M -> 1440000
# 1G -> 2880000
# 2G -> 5760000
#
# 이 값은 부팅시에 자동으로 감지하여 설정이 됨. 고정을 하고 싶을 경우에는
# /etc/sysconfig/kernel-parameter 의 MEM_AMOUNT=램사이즈 를 설정하면 됨.
# 램사이즈는 Mbyte 단위로 1G 는 1024M 로 계산을 함.
#
net.ipv4.tcp_max_tw_buckets = 2700000
# 빠른 재생 TIME-WAIT 소켓을 사용한다. 기본값은 1이다. 전문가의 조언 / 요청이
# 없다면 절대 바꾸지 마라.
#
net.ipv4.tcp_tw_recycle = 1
# 프로토콜 관점에서 안전하다고 판단될 때 새로운 연결에 대하여 TIME-WAIT 소켓을
# 재사용하는 것을 허락한다. 기본값은 0 이다. 이 값은 기술 전문가의 조언이나 요
# 청이 없이 변경하지 않는 것이 좋다.
#
net.ipv4.tcp_tw_reuse = 0
# 리스닝 서비스가 새로운 연결을 수락하기에 너무 느리다면 그 서비스를 리셋한다.
# 기본값은 FALSE 이다. 이 것은 갑자기 오버플로가 발생 하더라도 연결이 복구된다
# 는 뜻이다. 리스닝 데몬이 연결을 더 빨리 수락하도록 자리잡지 못하는게 정말 확
# 실할 때에만 이 옵션을 활성화 한다. 이 옵션을 활성화하면 서버에서 손상된 클라
# 이언트라도 리슨 하게 된다.
#
net.ipv4.tcp_abort_on_overflow = 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
# TCP urg 포인터 필드 해석기가 필요할 때에 사용한다. 대부분 오래된 BSD 해석기
# 를 사용하는데, 리눅스가 그런 것들과 제대로 소통하지 못한다고 판단될 경우, 활
# 성화를 해 볼만하다. 기본값은 FALSE 이다.
#
net.ipv4.tcp_stdurg = 1
# 접속한 client 들 중 승인을 받지 못하는 접속 요청들의 최대값을 지정 한다. 만
# 약 승인을 받지 못하고 기다리는 접속 요청들이 이 수를 벗어나는 경우에는 "다시
# 재접속을 해 보라" 라는 메세지를 받게 된다. 128 Mb 의 메모리에서는 기본값으로
# 1024를 사용할수 있으며, 이보다 적은 메모리를 가지고 있을 경우에는 128을 사용
# 하기를 권장한다. 만약 서버에 부하가 많이 걸리게 된다면 이값을 증가해 보기 바
# 란다. 주의할 것은, 1024 보다 크게했을 경우 include/net/tcp.h 에서
# (TCP_SYNQ_HSIZE*16)이 tcp_max_syn_backlog 와 같거나 이보다 작게
# TCP_SYNQ_HSIZE 를 변경해 줘서 커널을 다시 빌드 해야 한다. 커널을 수정하지 않
# 았을 경우의 최대값은 8192 정도 까지 지정할 수 있다.
#
# 이 값은 부팅시에 자동으로 감지하여 설정이 됨. 고정을 하고 싶을 경우에는
# /etc/sysconfig/kernel-parameter 의 MEM_AMOUNT=램사이즈 를 설정하면 됨.
# 램사이즈는 Mbyte 단위로 1G 는 1024M 로 계산을 함.
#
net.ipv4.tcp_max_syn_backlog = 1024
# RFC1323 에 정의된 window scaling 을 가능하게 한다.
#
net.ipv4.tcp_window_scaling = 1
# RFC1323 에 정의된 timestamp 들을 가능하게 한다.
#
net.ipv4.tcp_timestamps = 1
# SYN 패킷을 전송한 후에 로스가 발생을 하여 ACK 를 일부 받지 못했을 경우, 선택
# 적으로 (selected) 받지못한 ACK 만 받도록 요청하는 것을 허락한다. 로스가 많은
# 네트워크에서는 상당히 중요한 역할을 한다.
#
net.ipv4.tcp_sack = 1
# FACK 밀집 회피와 빠른 재전송을 가능하게 한다. tcp_sack 이 활성화가 되어 있지
# 않으면 이 값은 사용되지 않는다.
#
net.ipv4.tcp_fack = 1
# TCP가 중복된 SACK 들을 보내는 것을 가능하게 한다.
#
net.ipv4.tcp_dsack = 1
# TCP 에 명백한 혼잡 공지(Explicit Congestion Notification) 를 가능하게 한다.
#
net.ipv4.tcp_ecn = 0
# TCP stream 에 패킷들의 최대 재 요청을 설정. 기본값은 3 이다.
#
net.ipv4.tcp_reordering = 3
# Socket Buffer Turning
# 메모리가 1G 이상이면 사용해 보도록 한다.
#
# 이 값은 부팅시에 자동으로 감지하여 설정이 됨. 고정을 하고 싶을 경우에는
# /etc/sysconfig/kernel-parameter 의 MEM_AMOUNT=램사이즈 를 설정하면 됨.
# 램사이즈는 Mbyte 단위로 1G 는 1024M 로 계산을 함.
#
#net.ipv4.tcp_rmem = 4096 25165824 25165824
#net.ipv4.tcp_wmem = 4096 65536 25165824
#net.core.rmem_default = 25165824
#net.core.rmem_max = 25165824
#net.core.wmem_default = 65536
#net.core.wmem_max = 25165824
# 세팅되면 TCP 스택은 RFC1337을 따른다. 해제되면 RFC를 따르지 않지만 TCP
# TIME_WAIT asassination 은 막아준다. 기본값은 0 이다.
#
net.ipv4.tcp_rfc1337 = 1
-----------------------> CUT HERE <----------------------------
다음은 sysctl.conf 에서 사용할 kernel parameter 들에 대해 다루겠다. 다음 부터 나
오는 문서들은 kernel doc 에서 sysctl 에 관련된 문서들을 번역한 것들이다.
>> 이전 : Kernel 2.4.x Installation
>> 다음 : Sysctl for Virtaul Memory in Kernel
|