Skip to content

sysctl 커널 파라미터

조회 수 21920 추천 수 0 2009.06.04 02:34:58
출처 : http://www.lug.or.kr/docs/LINUX/others/kernel/a2547.html


sysctl 값

/proc 디렉터리 아래에는 하드웨어와 시스템 사용 목적에 더 적합하도록 커널을 조율하는 패러미터가 몇 가지 있습니다. 대체로(99%) 패러미터의 기본값을 그대로 두어도 나쁘지 않지만, 여러 패러미터들이 있고 그 값을 바꿀 수도 있다는 것을 알아둘 필요는 있습니다.

관련된 정보는 다음 파일들에 있습니다:

linux/net/TUNABLE linux/Documentation/networking/ip-sysctl.txt

어떤 패러미터들은 sysctl 인터페이스를 통해 접근할수 있습니다: 예를 들어 아래에서처럼 ARP와 관련된 값들을 손쉽게 열어보고 또 바꿀수도 있습니다:

# cat /proc/sys/net/ipv4/arp_timeout
6000
# echo 7000 > /proc/sys/net/ipv4/arp_timeout
# cat /proc/sys/net/ipv4/arp_timeout
7000

관련된 사용자 프로그램들을 통해 엑세스하기도 합니다. 예를 들어, MAX_WINDOW는 기본 값으로 32 k를 가지는데, 이 값은 최근 하드웨어에는 잘 어울리지만 여러분이 느린(8 bit) 이더넷 카드나 머신을 가지고 있다면 좋지 않습니다. 같은 네트워크에 있는 빠른 머신에서 보내는 트래픽을 느린 머신에서 처리하기에는 너무 큰 값이라 과부하(overruns)와 수신 에러를 일으킬 것입니다. 약 4 k 정도 값이 더 적당할 것입니다. route 명령으로 그 값을 다시 설정해봅시다:

# route add -net 192.168.3.0 window 4096

여러분이 편집증적인 리눅서라면 관련된 헤더 파일에서 #define 값을 바꾸는 방법도 있습니다. #define 값을 바꾼 다음에는 새 설정값을 적용하기 위해 다시 컴파일해야겠지요.

A.1. network

/proc/sys/net/ipv4/아래에 있는 파일들입니다. 여러분 머신에 설정된 값들을 보고싶다면 다음 명령을 사용하세요:

# cd /proc/sys/net/ipv4/
# grep [0-9] *

A.1.1. Global Parameters:

ip_forward - BOOLEAN

0 - disabled (default)

not 0 - enabled

인터페이스들 사이에서 패킷을 전달합니다.

이 변수는 특별해서, 값을 바꾸면 관련된 모든 패러미터들을 기본값으로 바꿉니다 (호스트는 RFC1122, 라우터는 RFC1812)

ip_default_ttl - INTEGER

TTL(Time To Live)은 IP 패킷 안에 들어있는 (대개 0부터 255 사이) 정수값으로 TTL이라는 말 그대로 패킷의 수명을 카운트합니다. 라우터 하나를 지날때마다 초기값에서 1 (혹은 그 이상)을 빼는데 값이 0이 되면 라우터는 그 패킷을 버리고 재전송을 요청하는 ICMP 메시지를 발신지 호스트에 보냅니다. 리눅스는 그 값이 255이나 윈도우95나 98의 TTL 기본 값은 32 홉으로 운영체제마다 다를 수 있습니다.

ping과 traceroute 유틸리티는 TTL 값을 사용하는 대표적인 프로그램인데 사용자가 TTL 값을 조정할 수 있으며 traceroute는 TTL 기본값을 30으로 낮추어 패킷을 전송합니다.

멀티캐스팅에서는 TTL 값이 패킷이 전달되어야 하는 범위나 구역을 가리킵니다.

  • 0은 같은 호스트로 제한된다.

  • 1은 같은 서브넷으로 제한된다.

  • 32는 같은 사이트로 제한된다.

  • 64는 같은 지역으로 제한된다.

  • 128은 같은 대륙으로 제한된다.

  • default 64

    ip_no_pmtu_disc - BOOLEAN

    MTU(Maximum Transmission Unit)는 프레임이나 패킷이 한번에 하나씩 전송될 때 통과할 수 있는 크기로 프로토콜마다 그 크기가 다릅니다. 예를 들어 이더넷에서는 1500이지만 X.25에서는 576입니다. Path MTU는 두 호스트사이 경로(path)에서 가장 작은 MTU 값입니다.

    호스트가 같더라도 라우팅 경로나 프로토콜은 매번 바뀌므로 MTU 값도 계속 달라지게됩니다. 현재 패킷보다 작은 MTU 값을 가진 라우터를 통과할 때 패킷은 그 라우터 MTU에 맞춰 잘게 쪼개집니다. 수신하는 호스트에서는 그렇게 쪼개진 조각들을 모두 받아서 다시 재조립하는데, 그 가운데 한 조각이라도 drop되면 모든 조각을 다시 전송받아야 합니다. 이런 경우 라우터는 조각을 나누느라 바쁘고, 호스트는 재조립하느라 바빠지며, 재전송이 많아지는 등 퍼포먼스를 떨어트리게 됩니다.

    이럴 때 pmtu discovery를 사용합니다. 먼저 패킷을 발송할 때 헤더에 DF(Don't Fragment) 비트를 설정해서 조각내지 말라고 알립니다. DF 비트가 설정된 패킷을 받은 라우터는 자신의 MTU보다 큰 경우 조각화하는 대신 Can't Fragment 에러와 MTU값을 돌려보냅니다. 그 값을 돌려받는 호스트가 라우터의 MTU 값에 맞추어 패킷을 다시 전송합니다. 조각나는 것을 피하면서 가장 큰 패킷을 보내기 위해 pmtu discovery를 사용하는 것입니다.

    단, 이 기능을 사용하기 위해서는 ICMP 메시지 타입 3 가운데 code 4(Fragmentation Needed and Don't fragment)를 허용해야합니다.

    default FALSE

    A.1.2. IP Fragmentation:

    ipfrag_high_thresh - INTEGER

    IP 조각들을 재조합할 때 사용할 최대 메모리를 지정합니다. ipfrag_high_thresh 값이 지정되어 있으면, 프래그먼트 핸들러는 ipfrag_low_thresh에 다다를 때까지 패킷을 토스합니다.

    ipfrag_low_thresh - INTEGER

    ipfrag_high_thresh를 보세요

    ipfrag_time - INTEGER

    메모리에 IP 조각을 담아두는 시간을 초 단위로 설정합니다.

    A.1.3. TCP variables:

    tcp_syn_retries - INTEGER

    활성 TCP 연결에서 재전송을 위해 지정한 시간만큼 지난 뒤에 초기화 SYN 패킷을 보냅니다. 255보다 클 수 없습니다. 기본값은 5인데 180초에 해당합니다.

    tcp_synack_retries - INTEGER

    Passive TCP 연결에서 재전송을 위해 지정한 시간만큼 지난 뒤에 초기화 SYNACK 패킷을 보냅니다. 255보다 클 수 없습니다. 기본값은 5인데 180초에 해당합니다.

    tcp_keepalive_time - INTEGER

    keepalive가 활성화되었을 때 얼마나 자주 keepalive 메시지를 내보낼 것인지 정합니다. 기본값은 2 시간입니다.

    tcp_keepalive_probes - INTEGER

    연결이 끊어졌다고 여길 때까지 keepalive probe를 얼마나 내보낼지 정합니다. 기본값은 9입니다.

    tcp_keepalive_interval - INTEGER

    얼마나 자주 probe를 내보낼지 정합니다. probe가 출발한 뒤에 tcp_keepalive_probes에 tcp_keepalive_interval을 곱한 만큼 시간이 지나면 응답하지 않는 연결을 죽입니다. 기본값은 75초입니다. 예를 들어 기본 값들을 그대로 두었을 때 11분 15초동안 재시도한 다음 연결을 취소할 것입니다.

    tcp_retries1 - INTEGER

    무언가 잘못되었고, 이런 의심스런 면을 네트워크 레이어에 알리는 것이 좋겠다고 판단하기 전에 몇번 확인해 볼지 정합니다. 최소 RFC 값은 3으로, RTO에서 3초에서 8분 사이에 해당합니다.

    tcp_retries2 - INTEGER

    살아있는 TCP 연결을 끊기 전에 확인하는 횟수를 정합니다. RFC1122는 100초보다 길게 제한하라 이릅니다. 하지만 너무 작은 값입니다. 기본값은 15로 RTO 13-30분에 해당합니다.

    tcp_orphan_retries - INTEGER

    우리 쪽에서 닫은 TCP 연결을 끊기 전에 확인하는 횟수를 정합니다. 기본값은 7로 RTO 50초에서 16분 사이에 해당합니다. 여러분 머신에 웹 서버가 올라와 있다면 이 값을 줄여서 소켓 등이 귀한 리소스를 소비하지 않도록 할 수도 있습니다.

    tcp_fin_timeout - INTEGER

    우리 쪽에서 닫을 때 FIN-WAIT-2 상태인 소켓을 잡아둘 시간을 정합니다. 상대편은 깨어진 뒤에 스스로 닫지 못하거나 뜻하지 않게 죽어버릴 수도 있습니다. 기본 값은 60초입니다. 2.2에서 일반적인 값은 180초였는데 2.4에서도 이 값을 그대로 사용할 수 있지만, 여러분 머신이 웹 서버로 부하가 많다면 죽은 소켓들이 그대로 엄청나게 쌓여 메모리가 넘쳐나는 문제가 생길 것입니다. FIN-WAIT-2 소켓은 최대 1.5K 메모리만 잡아 먹으므로 FIN-WAIT-1 소켓보다는 덜 위험합니다. 그러나 더 오래 버티는 경향이 있습니다.

    tcp_max_tw_buckets - INTEGER

    시스템에서 동시에 잡아두는 timewait 소켓의 수를 정합니다. 이 값이 time-wait 소켓을 넘어서면 바로 파괴되고 경고가 출력됩니다. 이 제한은 단순한 DoS 공격을 방어하기 위해서만 필요하며, 기본값보다 작게해서는 절대 안됩니다. 네트워크 환경이 기본값보다 큰 값을 요구한다면 늘려도 됩니다 (아마, 설치된 메모리를 증설한 다음)

    tcp_tw_recycle - BOOLEAN

    빠른 재생 TIME-WAIT 소켓을 사용합니다. 기본값은 1입니다. 전문가의 조언/요청이 없다면 절대 바꾸지 마세요.

    tcp_max_orphans - INTEGER

    시스템에 고정되었거나, 사용자 파일 핸들에 연결되지 않은 TCP 소켓의 최대 값을 지정합니다. 고아 연결이 이 값을 초과하면 즉시 리셋되고 경고를 출력합니다. 이 제한은 단순한 DoS 공격을 방어하기 위해서만 필요하며, 기본값보다 작게해서는 절대 안됩니다. 네트워크 환경이 기본값보다 큰 값을 요구하거나 오래 버티어서 그런 문제들은 더 공격적으로 죽이기 위해 네트워크를 조율한다면 늘려도 됩니다 (아마, 설치된 메모리를 증설한 다음) 한번 더 당부하자면: 고아 연결들은 스왑할 수 없는 메모리를 각자 64K 이상 잡아먹습니다.

    tcp_abort_on_overflow - BOOLEAN

    리스닝 서비스가 새로운 연결을 수락하기에 너무 느리다면 그 서비스를 리셋합니다. 기본값은 FALSE입니다. 이 것은 갑자기 오버플로가 발생하더라도 연결이 복구된다는 뜻입니다. 리스닝 디먼이 연결을 더 빨리 수락하도록 자리잡지 못하는게 정말 확실할 때에만 이 옵션을 활성화하세요. 이 옵션을 활성화하면 여러분 서버에서 손상된 클라이언트라도 리슨합니다.

    tcp_syncookies - BOOLEAN

    커널을 컴파일할 때 CONFIG_SYNCOOKIES 를 활성화했을 때에만 사용가능합니다. 일반적으로 'syn flood attack'로 알려진 공격을 방어합니다. 기본값은 FALSE

    syncookie는 예비 기능임을 기억해 두세요. 이 옵션은 합법적인 연결로 많은 부하가 걸리는 서버에서는 절대 사용하지 마세요. 여러분 로그에서 synflod 경고가 뜨지만, 알고보니 정상적인 연결이 과중해서 생긴거라면 경고 메시지가 사라질 때까지 다른 패러미터를 조율해보세요.

    See: tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow.

    syncookies 는 TCP 프로토콜에 심각하게 어긋나며, TCP 확장을 사용할 수 없으며, 특정 서비스(f.e. SMTP relaying)에 심각한 손상을 가져올 수 있습니다. 여러분에게 보이지 않더라도, 클라이언트들은 연계되어 여러분에게 닿아 있습니다. 로그에 synflood 경고가 남지만 진짜로 넘쳐난 것이 아니라면, 여러분 서버 설정이 아주 엉터리일 것입니다.

    tcp_stdurg - BOOLEAN

    TCP urg 포인터 필드 해석기가 필요할 때에 사용하세요. 대부분 오래된 BSD 해석기를 사용하는데, 리눅스가 그런 것들과 제대로 소통하지 못하는 듯 하다면 켜세요. 기본값은 FALSE

    tcp_max_syn_backlog - INTEGER

    연결한 클라이언트로부터 응답 패킷을 받지 못하고 있는 접속 요청을 몇 개나 기억하고 있을지 정합니다. 기본값은 1024로 128MB 이상 메모리를 가져야합니다. 그보다 작을 때에는 128을 사용하세요. 서버가 과부하에 허덕인다면 이 값을 늘리세요. 다만 1024 보다 크게 하려면 include/net/tcp.h 파일을 열어 TCP_SYNQ_HSIZE 값을 TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog 공식에 맞추어 설정한 다음 커널을 다시 컴파일해야 합니다.

    tcp_window_scaling - BOOLEAN

    Enable window scaling as defined in RFC1323.

    tcp_timestamps - BOOLEAN

    Enable timestamps as defined in RFC1323.

    tcp_sack - BOOLEAN

    Enable select acknowledgments (SACKS).

    tcp_fack - BOOLEAN

    FACK 혼잡 회피와 빠른 재선송을 가능하게 합니다. tcp_sack가 활성화되지 않았다면 값이 사용되지 않습니다.

    tcp_dsack - BOOLEAN

    Allows TCP to send "duplicate" SACKs.

    tcp_ecn - BOOLEAN

    명백한 혼잡 공지(Explicit Congestion Notification).

    tcp_reordering - INTEGER

    Maximal reordering of packets in a TCP stream. Default: 3

    tcp_retrans_collapse - BOOLEAN

    망가진 프린터에 Bug-to-bug 호환. 더 큰 패킷을 다시 전송해서 어떤 TCP 스택에 있는 버그를 피해갑니다.

    tcp_wmem - vector of 3 INTEGERs: min, default, max

    min: TCP 소켓에서 send 버퍼를 위해 예약된 메모리 크기.Default: 4K

    default: 이 값은 다른 프로토콜들에 의해 사용되는 net.core.wmem_default 값에 우선합니다. Default: 16K

    max: TCP 소켓에서 자동으로 선택된 send 버퍼를 위한 최대 메모리 크기. 이 값보다 net.core.wmem_max 값이 우선합니다. Default: 128K

    tcp_rmem - vector of 3 INTEGERs: min, default, max

    min: TCP 소켓에 의해 사용되는 receive 버퍼의 최소 크기. Default: 8K

    default: 이 값은 net.core.rmem_default에 우선합니다. Default: 87380 바이츠.

    max: receiver 버퍼에서 사용할 수 있는 최대 크기. 이 값보다 net.core.rmem_max 가 우선합니다. Default: 87380*2 bytes.

    tcp_rfc1337 - BOOLEAN

    세팅되면 TCP 스택은 RFC1337을 따릅니다. 해제되면 RFC를 따르지 않지만 TCP TIME_WAIT asassination은 막아줍니다.

    Default: 0

    ip_local_port_range - 2 INTEGERS

    TCP나 UDP에서 로컬 포트로 선택할 포트 범위를 정합니다. 첫 숫자가 첫 번호이고, 두번째 숫자가 마지막 로컬 포트번호입니다. 기본값은 시스템에서 사용할 수 있는 메모리에 따라 정해집니다.

    128Mb 보다 큰 경우 32768-61000,

    128Mb 보다 작은 경우 1024-4999 혹은 더 조금.

    이 숫자는 TCP 확장(timestamp) 없이 동시에 열 수 있는 접속 수를 뜻합니다. tcp_tw_recycle을 설정했다면 timestamp 지원으로 1024-4999 범위로도 초당 2000 연결이 충분합니다.

    ip_nonlocal_bind - BOOLEAN

    세팅되면 프로세스가 로컬 IP가 아닌 주소에 bind()할 수 있습니다. 매우 유용한 기능이지만 어떤 어플리케이션에서는 나쁠 수 있습니다.

    Default: 0

    ip_dynaddr - BOOLEAN

    0이 아닌 값을 세팅하면 동적 주소를(dynamic addresses) 지원합니다. 1보다 큰 값을 세팅하면 동적 주소가 다시 쓰여질 때마다 로그 메시지가 출력될 것입니다.

    Default: 0

    icmp_echo_ignore_all - BOOLEAN, icmp_echo_ignore_broadcasts - BOOLEAN

    둘 가운데 하나라도 참이면 커널은 그 장비나 브로드캐스트/멀티캐스트 주소로 오는 모든 ICMP ECHO을 무시합니다. 만약 boardcast/multicast 주소의 ICMP ECHO 요청을 받아들이면 denial of service(DOS) packet flooding 공격에 이용 될 수 있습니다.

    icmp_ratelimit - INTEGER

    아래 icmp_ratemask와 일치하는 곳에서 ICMP 패킷을 보낼 수 있는 최대 빈도를 제한합니다.

    0은 제한을 없애며 그 밖의 값은 최대 빈도를 의미합니다.

    Default: 1

    icmp_ratemask - INTEGER

    매스크는 빈도를 제한할 ICMP 타입를 만듭니다.

    Default: 6168

    Note: 6168 = 0x1818 = 1<<ICMP_DEST_UNREACH + 1<<ICMP_SOURCE_QUENCH +1<<ICMP_TIME_EXCEEDED + 1<<ICMP_PARAMETERPROB, which means dest unreachable (3), source quench (4), time exceeded (11) and parameter problem (12) ICMP packets are rate limited (check values in icmp.h)

    icmp_ignore_bogus_error_responses - BOOLEAN

    어떤 라우터들은 브로드캐스트 프레임에 거짓 응답(bogus responses)을 해서 RFC 1122를 위반합니다. 그런 경우 일반적으로 커널 경고를 통해 기록됩니다. 이 값이 참이면 커널은 그런 경고를 남기지 않습니다. Default: FALSE

    (1) Jiffie:

    커널을 위한 내부 타임유닛입니다. i386에서 1/100 초, 알파에서 1/1024 초입니다. 여러분 시스템에 딱 맞는 값이 궁금하면 /usr/include/asm/param.h 에서 HZ define을 보세요.

    igmp_max_memberships - INTEGER

    멀티캐스트 그룹에 참여할 수 있는 최대 값을 바꿉니다.

    Default: 20

    conf/interface/*:

    conf/all/* 아래 있는 것들은 모든 인터페이스에 적용할 값들입니다.

    log_martians - BOOLEAN

    불가능한 주소를 가진 패킷들을 커널 로그에 기록합니다.

    accept_redirects - BOOLEAN

    ICMP redirect 메시지를 허용합니다.

    TRUE (host) FALSE (router)

    forwarding - BOOLEAN

    지정한 인터페이스에서 IP 포워딩을 허용합니다.

    mc_forwarding - BOOLEAN

    멀티캐스트 라우팅을 지원합니다. CONFIG_MROUTE 옵션을 넣어 커널을 컴파일해야 하며 mrouted 등 멀티캐스트 라우팅 디먼이 필요합니다.

    proxy_arp - BOOLEAN

    프록시 ARP 는 지정한 인터페이스와 연결된 다른 호스트의 ARP 주소를 대신 뿌려주고, 받습니다. 투명하게 동작하는 네트워크 장비에 반드시 필요합니다.

    shared_media - BOOLEAN

    RFC1620 미디어 공유 리다이렉트를 보내거나(라우터) 수락(호스트)합니다. 이 옵션 값이 0이면 한 장치에 설정된 서로 다른 서브넷을 직접 통신할 수 없습니다.

    default TRUE

    secure_redirects - BOOLEAN

    디폴트 게이트웨이 목록에 올라있는 게이트웨이에만 ICMP 리다이렉트 메시지를 허용합니다.

    default TRUE

    send_redirects - BOOLEAN

    라우터라면 다른 호스트로 ICMP 리다이렉트를 보냅니다. Default: TRUE

    bootp_relay - BOOLEAN

    BOOTP 릴레이 디먼이 있어야합니다

    default FALSE

    Not Implemented Yet.

    accept_source_route - BOOLEAN

    SRR 옵션으로 소스 라우팅 패킷들을 허용합니다.

    default TRUE (router) FALSE (host)

    이 값이 참이면 패킷 경로를 출발지에서 조작할 수 있으므로 IP 스푸핑 등에 악용될 수 있습니다

    rp_filter - BOOLEAN

    1 - RFC1812 권고에 따라 한쪽 네트워크만 연결된 호스트나 쪼개진 네트워크에서 라우터는 역경로 추적을 통해 출발지가 유효한지 판단합니다. 네트워크에서 네트워크로 연결하는 라우터에서 이 옵션을 1로 설정하면, 방화벽 규칙을 더 추가하지 않고, 내부 네트워크에서 시도하는 스푸핑 공격을 막습니다 (외부 스푸핑과 상관 없습니다).

    느리고 불안정한 프로토콜을(RIP 따위) 사용하는 통짜 네트워크나 고정 라우트에서는 문제를 일으킬 수 있습니다.

    기본값 0 - 소스 경로를 검사하지 않습니다.

profile

일요일은 짜빠게뤼~ 먹는날~^^

엮인글 :
http://adminplay.com/1816/0d1/trackback
List of Articles
번호 제목 글쓴이 날짜 조회 수sort

rsync 에러

리눅스에서 일정기간 이상된 파일 삭제하기

FreeBSD CPU 개수 확인 등.(mptable, sysctl)

콘솔에 남는 메세지로그파일로 남기기

vim 편집기 색상변경

ethtool 사용법

grep 옵션~!

find 찾아바꾸기

서버로그 관리

MRTG 로그 데이터 시간확인하기

실시간 접근정보 확인

iscsi-target 설정 에러 모음

hdparm - 하드디스크의 자세한 정보 보기

아파치 모듈 mod_status file

특정 디랙토리 인증걸기 htpasswd, htaccess

syslogd : 콘솔에 남는 메세지 로그파일로 남기기

apm설치시 configure error

리눅스 언어 인코딩 설정

sysctl 커널 파라미터

제로보드4의 데이터를 XE 로 이전하는 방법 file

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234