리눅스 시스템 커널 튜닝

시스템 튜닝

1. 개요

sysctl은 kernel parameter값들을 조절하기 위한 utility 이다.

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

sysctl 을 이용하여 값을 변경할 경우에 시스템이 crash되어질 위험요소가 많이 있다.

2.  /etc/sysctl.conf 파일 설정

커널차원에서 보안 및 최적화 관련 설정

# Disables packet forwarding

# 방화벽을 구성하거나 시스템을 게이트웨이로 설정한 경우 사용

net.ipv4.ip_forward = 0

# Enables source route verification

net.ipv4.conf.all.rp_filter = 1

# Disables automatic defragmentation (needed for masquerading, LVS)

net.ipv4.ip_always_defrag = 0

# Disables the magic-sysrq key

kernel.sysrq = 0

# Enable ignoring ping request

# ping 막음

net.ipv4.icmp_echo_ignore_all = 1

# Enable ignoring broadcasts ping request

# 브로드캐스브, 멀티캐스트 주소에 ping 사용 막음

# smurf 공격 방지용

net.ipv4.icmp_echo_ignore_broadcasts = 1

# Disables IP source routing

# 기본값이 0임

net.ipv4.conf.all.accept_source_route = 0

# Enable TCP SYN Cookie Protection

# 시스템에서 수용할 수 있는 최대 접속 SYN 패킷의 개수는 backlog queue 와 관련이 있다.

# 즉 backlog_queue를 크게 늘렸을 경우에는 그만큼 많은 SYN 패킷을 수용할 수 있다.

# 리눅스뿐 만 아니라 대부분의 시스템에는 이 값(kb 단위)이 매우 낮게 설정되어 있는데,

# 적절히 재설정할 필요가 있다.

# 현재 설정치 확인 #sysctl –a |grep backlog

# 일반적으로는 RAM이 128M 이상일 경우 1024로 설정하고 이하일 경우에는 128로 설정한다.

# 이 값을 1024 이상으로 설정할 경우에는 include/net/tcp.h를 수정해야 한다.

# 커널에서 설정이 되어 있어야 한다.

net.ipv4.tcp_syncookies = 1

# Disable ICMP Redirect Acceptance

net.ipv4.conf.all.accept_redirects = 0

# Disables automatic defragmentation (needed for masquerading, LVS)

# ip 마스커레이딩시에는 필요함.

net.ipv4.ip_always_defrag = 0

# Enable bad error message Protection

net.ipv4.icmp_ignore_bogus_error_responses = 1

# Enable IP spoofing protection , turn on Source Address Verification

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

net.ipv4.conf.all.rp_filter = 1

# Log Spoofed Packets, source Routed Packets, Redirect packets

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

net.ipv4.conf.all.log_martians = 1

# Improve file system performance

# 가상 메모리(VM) 서브시스템의 활동에 관련이 있음

# disk 액세스 시간을 줄여서 성능을 높임

vm.bdflush = 100 1200 128 512 15 5000 500 1884 2

# Improve virtual memory performance

# 전체 메모리에서 버퍼 메모리 사용량 조정

vm.buffermem = 80 10 60

# Allowed local port range

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

net.ipv4.ip_local_port_range = 32768 61000

# 시스템 전체에서 열수 있는 파일수(file-max)

# 4M당 256개

# 128M일 경우 8192, inode는 8192 * 4 = 32768

# 512M일 경우 32768, inode는 32768 * 4 = 131072

# inode는 file-max * 3,4배

# Improve the number of open files

# 하나의 프로세서에서 열 수 있는 파일 개수 등 조정은 커널소스 변경

# (fs.h INR_OPEN / limits.h NR_OPEN)

fs.file-max = 8192

# Improve the number of inodes opened

fs.inode-max = 32768

## tcp 관련 세팅

# 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

# Increases the size of the socket queue (effectively, q0).  

# 운영체제에서 네트웍을 통한 접속을 허용해 주는 system call인 listen()의 Maximum queue size

# of pending connection을 가급적 높여준다

# 만일 접속을 기다리는 수가 위의 수치를 벗어날 경우 나머지들은 “다시 재접속 해보라는” 에러

# 메시지를 받게 된다.

# netstat -n | grep SYN_RCVD로 확인

# netstat에서 나오는 회선 상황은 man netstat

# 기본은 128임

net.ipv4.tcp_max_syn_backlog=1280

## Redirects

net.ipv4.conf.all.send_redirects=0

net.ipv4.conf.all.accept_redirects=0

# Do not forward source routed frames.

net.ipv4.conf.all.forwarding=0

net.ipv4.conf.all.mc_forwarding=0

커널 2.4 버전에서의 설정

다음은 Kernel 2.4에서 사용할 만한  kernel parameter 값들을 정의해 놓은 sysctl.conf의 내용이다.

# Virtual Memory Section

# bdflush kernel daemon의 작동을 조절한다.

——————————————————–

# 이 파일의 구성과 기본값은 /linux/mm/buffer.c에서 확인을 할 수 있으며

# 아래와 같이 bdflush는 9개의 정수 값이 있지만 커널에서 실제 적용은 6개의 값이다.

# From linux/fs/buffer.c:

# union bdflush_param{

#   struct {

#     int nfract;   /* Percentage of buffer cache dirty to activate bdflush */

#     int ndirty;   /* Maximum number of dirty blocks to write out per wake-cycle */

#     int nrefill;    /* Number of clean buffers to try to obtain each time we call refill */

#     int nref_dirt;  /* Dirty buffer threshold for activating bdflush when trying to refill buffers. */

#     int dummy1;     /* unused */

#     int age_buffer; /* Time for normal buffer to age before we flush it */

#     int age_super;  /* Time for superblock to age before we flush it */

#     int dummy2;     /* unused */

#     int dummy3;     /* unused */

#   } b_un;

#   unsigned int data[N_PARAM];

#   } bdf_prm = {{40, 500, 64, 256, 15, 30*HZ, 5*HZ, 1884, 2}};

# ———————————-

# 첫번째 필드 nfract값은 buffer cache에 있는  dirty buffer들의 percentage를 결정 한다.

# dirty의 뜻은 디스크에 쓰여지기 위한 buffer들의 목록을 의미하며 이는 곧 buffer에서 지워질

# 내용을 의미하게 된다.

# 이 값을 높게 설정하는 것은 디스크에 쓰여질 내용들을 오래 기다리게 하며 이는 곧 메모리가

# 꽉차게 되었을 때 I/O에 많은 양의 정보를 기록하게 한다.

# 값이 너무 작을 경우에는 I/O로의 접근이 빈번하게 되어 수행 능력을 떨어뜨릴 수 가 있다.

#

# 두번째 필드 ndirty의 값은 한번에 bdflush가 디스크에 적을 수 있는 dirty buffer의 최대값을 제공

# 한다. 500으로 설정돼 있으므로 한번 하드 디스크에 기록을 할 때 500개의 dirty 버퍼가 사라진다.

# 이 값 또한 작을수록 하드 디스크로의 접근이 빈번하게 일어난다.

#

# 3번째 필드 nrefill은 refill_freelist() 함수가 호출 되었을 때 bdflush가 추가할 free buffer의 list 수

# 를 설정한다.

# 높은 값은 더 많은 메모리를 낭비할 수 있으나 refill_freelist()함수를 더 적게 실행을 하기 때문에

# 효율적으로 관리를 할 수도 있다.

# refill_freelist() 함수가 nref_dirt 보다 더 높은 값을 가지게 되면 bdflush 를 호출하게 될 것이다.

#

# 마지막으로 age_buffer와 age_super는 dirty buffer를 디스크에 쓰기 전 Linux가 기다릴 최대

# 시간을 지정 한다. 즉 여기에 지정된 시간이 흐르면 disk에 쓰게 된다는 것을 의미한다.

# 값은 jiffies로 표현되며, alpha machine을 제외하고는 초당 jiffies 의 수는 100 이다.

# (alpha는 1024 이다).  

# age_buffer는 age_super가 filesystem을 통해 metadata를 가지는 동안 data block의 최대 age

#   bdflush 는 9개의 필드를 가지며 실제로 6개의 값만 사용

# nfract

# 9개의 필드로 구성된 bdflush의 설정값 중 가장 앞의 40은 전체 버퍼 캐시의 더티 버퍼(dirty

# buffer)비율을 나타낸다. ‘dirty’는 주로 버퍼에서 비워질 내용을 말하는데, 즉 프로세스에서

# modify돼 하드 디스크에 쓰여질 데이터를 의미한다. 버퍼에서 하드 디스크에 쓸 내용이 담긴

# 바퍼를 더티 버퍼라 한다. 쉽게 말해 하드 디스크에 쓰여질 데이터를 저장한 버퍼다.

# 40으로 설정됐다면 전체 버퍼 캐시의 dirty 버퍼 크기가 40% 이하가 되게 한다.

# 40%가 되면 dirty 버퍼의 내용을 하드 디스크에 기록하고 버퍼를 비우기 위한 시도를 한다.

# 값이 클수록 하드디스크에 쓰여질 데이터는 오래 기다리며, 값이 작을 경우 하드 디스크로의

# 접근이 빈번해 전체 시스템의 수행 속도가 느려질 수 있다.

# ndirty

# 두 번째 값인 500은 하드 디스크에 한번에 기록 하는 버퍼의 크기를 나타낸다.

# 500으로 설정돼 있으므로 한번 하드 디스크에 기록을 할 때 500 개의 더티 버퍼가 사라진다.

# 이 값 또한 작을수록 하드 디스크로의 접근이 빈번하게 일어난다.

#

# nrefill

# 세 번째 값은 사용하지 않는 버퍼들의 리스트 작성에 사용한다. 64로 돼 있는데 이는 한번에

# 64개의 비어 버퍼를 만들라는 것이다. 이 값은 클수록 전체 메모리의 낭비를 가져오지만 입출력 # 버퍼가 증가해 하드 디스크 접근 속도를 높일 수 있다.

#

# 기타 bdflush 설정 항목

# nref_dirt  : bdflush가 동작하는 경계를 나타낸다. 기본값이 256인데 더티 버퍼가 256 이상이면 # bdflush가 동작한다.

# dummy1     : 사용하지 않는 값이다.

# age_buffer : 더티 버퍼 수명을 말한다. 각 더티버퍼는 생성 후 최대 age_buffer에 나타난 시간이 # 지나기 전에 디스크에 기록된다는 의미다.

# age_super  : supper block의 수명을 나타낸다.

# dummy2     : 사용되지 않는 값

# dummy3     : 사용되지 않는 값

——————————————–

# buffer_mem 구조의 값에 대응 하는 3개의 값이 있다.

# 이것은 buffer memory 에 사용 되는 memory를 얼마나 지정할 것인지를 조절 한다.

# 전체 메모리의 percentage처럼 percentage로 계산이 되어진다.

# The values are:

# min_percent     — buffer memory로 사용될 memory의 최소 percentage

# borrow_percent  — 사용안함

# max_percent     — 사용안함

# 기본값 권장

vm.buffermem = 2 10 60

## 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을 하게 된다.

# (이것은 저장한 것들을 모두 날릴 수 있다)

# 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를 참고를 하라.

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 packets

# 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

섹션별 설정 파일

/proc/sys/vm에 있는 파일들은 리눅스 커널의 가상메모리(VM) 서브시스템의 작동을 설정하기 위해 사용되며, (bdflush) 파일들의 어떤 것들은 디스크 사용에 조금의 영향을 미칠 수도 있다.

이 파일들의 기본값과 초기화 방법은 mm/swap.c 에서 확인할수 있다.

현재, 이 파일들은 /proc/sys/vm 에 있다.

– bdflush

– buffermem

– freepages

– kswapd

– overcommit_memory

– page-cluster

– pagecache

pagetable_cache

buffermem:

1) buffermem

이 파일에는 buffer_mem구조의 값에 대응하는 3개의 값이 있다. 이것은 buffer memory에 사용이 되는 memory 를 얼마나 지정할 것인지를 조절한다. 전체 메모리의 퍼센트지처럼 퍼센테이지로 계산이 되어진다.

The values are:

min_percent     — buffer memory 로 사용될 memory 의 최소 퍼센테이지

borrow_percent  — 사용안함

max_percent     — 사용안함

2) freepages:

이 파일은 freepage 구조의 값을 포함 하고 있다. 이 구조는 min, low, high의 3개의 값을 포함한다. 설정 값의 뜻은 다음과 같다:

freepages.min

; system 의 free page 의 수가 이 숫자에 도달할 때, kernel 은 더 많은 메모리를 위치 시킨다.

freepages.low

; free page 의 숫자가 이 값보다 낮을 경우 kernel 은 swapping 을 시작한다.

freepages.high

; kernel 은 이 값이 지정된 만큼의 양을 남겨 놓게 된다. 메모리가 이 값이 도달을 하게 되면, kernel은 실제로 적극적인 swapping 을 행하는 것은 아니고 할 수 있으면 자연스럽게 swapping 을 시작하게 된다.

3) kswapd:

kswapd 는 kernel swapout daemon 이다.  kswapd 는 kernel 의 전체 또는 조각을 얻게 되었을 때 남아 있는 메모리 조각을 의미 한다. 모든 시스템이 다르며, 이 시스템의 조각으로서 원하는 조정을 할 수가 있을 것이다.

이 page의 수들은 tries_base, tries_min, swap_cluster 와 같은 struct pager_daemon의 수들에 일치한다. tries_base 와 swap_cluster는 아마 system 성능에 큰 영향을 미칠 것이다.

tries_base

; kswapd 가 한번에 시도하기 위한 free page 의 최대값은 이 값으로부터 계산되어 진다.

; 보통 이 값은 4또는 8로 나누어 지며 (mm/vmscan.c를 참조), 이것은 보이는 만큼 크지는 않다.

; swap 으로 또는 swap으로 부터의 대역폭을 증가할 필요가 있을때, 이 수를 증가 시킬수 있다.

tries_min

; kswapd 가 매번 호출을 하기 위한 하나의 free page 의 최소값 이다.

; 기본적으로 kswapd 은 최소 순위로 호출이 되어 질 때 어떤 page 들을 자유롭게 하는 것이 확인 되었다.

swap_cluster

; 이것은 한번에 kswapd 가 쓸수 있는 page 의 값이다.  kswapd 가 I/O에 많은 양의 데이터를

넣고 disk를 자주 읽지 않게 하기 위해 이 값을 크게 하기를 원할 것이다.

하지만 이 값이 너무 크면 요청 queue가 넘치게 될지도 모른다.

3) overcommit_memory:

이 값은 memory overcommitment 를 가능하게 하는 falg 를 포함하고 있다. 이 flag가 0 일 경우,  kernel 은 각 malloc() 함수를 호출하기 전에 memory 가 얼마나 충분하게 남았는지를 체크를 하게 된다. 만약 flag 가 0 이 아니라면, system은 항상 충분한 메모리를 확보 하려고 하게 된다.

이 요소는 수많은 프로그램이 malloc() 함수를 사용함으로 해서 메모리를 잠식하는 것을 방지 하기 위해 아주 유용하게 사용을 할수가 있다.

4) page-cluster:

Linux 가상 메모리 subsystem은 디스크 결함에 의한 다중 page 를 읽어 들임으로 인한 과도한 디스크 seek 를 회피한다. page 의 수는 기계의 메모리의 양에 따라 읽어 들이게 된다.

커널이 한번에 읽을수 있는 page 의 수는 2 ^ page-cluster 와 같다. 2 ^ 5 이상의 값은 32-page group 안에서만 swap date 를 cluster 할수 있기 때문에 사용할수 없다.

5) pagecache:

이 파일은 버퍼 메모리와 같이 정확하다. 이 파일은 오직 struct page_cache를 조절하고 앞서 말한바와 같이 page cache 를 위해 사용되어지는 memory 의 양을 조절한다.

커널 2.2 에서, page cache 는 3 개의 주 목적에 사용이 되어 진다:

caching read() data from files

caching mmap()ed data and executable files

swap cache

시스템이 swap 과 cache 가 둘다 가중할 때,  아마도 swap 되어진 data 가 caching 이 되어서 일것이다. 이것은 커널 2.0 에서 가능한 효과적인 swapping 보다 더 많이 기록을 할수 있기 때문이다.

6) pagetable_cache:

커널은 각 프로세서 캐쉬 에서 page table의 수를 지킨다. (이것은 SMP 시스템에서 도움을 받는다) 각 프로세서를 위한 캐쉬 크기는 log 와 high 값 사이에서 지정된다.

low-memory 에서, single CPU 시스템은 메모리 낭비 없이 이 값을 안전하게 0 으로 설정할수 있다. 다중 CPU 시스템들에서는 kernel memory lock 이 요구되는 것 없이 fast pagetabel 할당을 하기 위해 사용하고는 한다.

대형 시스템들을 위해서, 설정값은 아마 OK 일것이다. 일반적인 시스템들을 위해서는 조각을 낼 필요는 없다. 소형 시스템들 (램의 용량이 16M 보다 작을 경우) 에서는 두 값을 모두 0 으로 하는 것이 더 낳을 것이다.

2. sysctl 사용법

Linux에서 IP Stack을 관리하는 명령어는 sysctl이다.

커널의 parameter를 조정할 때 /proc에서 echo를 이용하여 redirect로 직접 쓰는 경우가 많다.

이렇게 조정을 할 경우 rc.local 파일에 따로 설정을 해줘야 한다.

RedHat 6.2 이후 procps package에 추가된 sysctl이라는 utility로 관리가 가능하다.

일단 조정할 수 있는 모든 parameter들은 $sysctl –a 명령으로 확인을 할 수 있다.

그리고 특정 값을 수정하기 위해서는 /etc/sysctl.conf에 해당 키(sysctl –a로 list확인)와 키값을

지정한 다음 $sysctl –p 명령으로 바로 적용 시킬 수 있다.

물론 sysctl.conf 에 설정이 되면 부팅시 마다 자동으로 적용이 된다.

일시적으로 지정한다면 $sysctl -w net.ipv4.icmp_echo_ignore_all=0으로 설정할 수 있다.

이 경우 부팅이 되어 있는 순간만 적용이 된다.

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

옵션값이 없으면 default로 /etc/sysctl.conf를 읽어 들이며 따로 path를 지정하면 해당 path에 있는 파일을 읽어 들인다.

usage:

#sysctl -w variable=value …  ; 설정

#sysctl -a                   ; 조회

SYN attack 관련

#sysctl -w net.ipv4.tcp_max_syn_backlog=1280

; socket queue 증가

현재 설정치 확인

#sysctl –a | grep backlog

#sysctl -w net.ipv4.tcp_syncookies=1

; enable

Routing table 변경

#sysctl -w net.ipv4.conf.all.send_redirects=0

; disable

#sysctl -w net.ipv4.conf.all.accept_redirects=0

Source Routing 관련

#sysctl -w net.ipv4.conf.all.accept_source_route=0

; source route 패킷 드롭

#sysctl -w net.ipv4.conf.all.forwarding=0

; forwarding disable

#sysctl -w net.ipv4.conf.all.mc_forwarding=0

Timewait 값 조절 (DDOS 관련)

#sysctl -w net.ipv4.vs.timeout_timewait=60

; 60초 이하로 설정 권장

: vs는 Virtual Server의 뜻으로 clustering등을 구성할 때 필요한 커널 패치이다.

Broadcast ECHO Response (smurf Attack 관련)

#sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1

; 응답안함

연결이 취소될 때까지의 시간

#sysctl –w net.ipv4.vs.timeout_synrecv = 10

; syn 패킷을 받은 후 half open 상태 대기는 10초가 적당(커널 패치를 적용)

3. Sysctl for File System in Kernel

/proc/sys/fs/*의 설정  

/proc/sys/fs  디렉토리에 있는 파일들은 리눅스 커널의 작동에 대한 일반적인 정보들을 설정하고

모니터링 하는데 사용 된다.

[root @edu00 /proc/sys/fs]#ls

dentry-state

dquot-max

dquot-nr

file-max

file-nr

inode-max

inode-nr

inode-state

overflowuid

overflowgid

super-max

super-nr

/proc/sys/fs/binfmt_misc의 파일들에 대해서는 Documentation/binfmt_misc.txt을 참조

1) dentry-state

From linux/fs/dentry.c:

———————————

struct {

        int nr_dentry;

        int nr_unused;

        int age_limit;           /* age in seconds */

        int want_pages;        /* pages requested by system */

        int dummy[2];

} dentry_stat = {0, 0, 45, 0,};

———————————–

dentry는 동적으로 할당되고, 재할당되며, nr_dentry는 언제나 0으로 된다.

이후 버전에서는 nr_unused, age_limit, want_pages만 사용될 것 같다.

age_limit은 dcache entry들에 의해 shrink_dcache_pages()가 호출되고 dcache가 아직 삭제되지

않았을 경우 memory가 작고 want_pages가 0이 아닐 때 재요구되는 시간의 한계이다.

2) dquot-max & dquot-nr

dquot-max는 cache disk의 quota 목록들의 최대값을 보여준다.

dquot-nr은 할당된 disk quota목록들과 사용하지 않는 disk quota목록들의 값을 보여준다.

사용되지 않는 cached disk quota의 수는 대단히 적고, 동시에 로그인해 있는 유저들의 수가 엄청

나게 많을 경우 이 값의 제한을 올려 줄 수 있다.

3) file-max & file-nr

커널은 동적으로 file handle들을 할당한다. 하지만 무제한적은 아니다.

file-max의 값은 Linux커널이 할당할 수 있는 file-handle 의 최대값을 나타낸다.

File handle 에 대한 수많은 메시지를 볼 경우, 이 값의 제한을 올려줄 수 있다.

file_nr의 3 값은 file handle의 할당 수와 file handle에 사용되는 값 그리고 file handle의 최대값을

나타낸다. 할당된 file handle들이 최대값에 다가가지만 실제 사용되는 값들이 얼마 되지 않는다면, file handle의 사용량이 최정점에 이르더라도 최대값을 증가할 필요는 없다.

4) inode-max, inode-nr & inode-state

file handle에 따라 커널은 동적인 inode structure를 할당한다. 하지만 free상태는 아니다.

inode-max의 값은 inode handler의 최대값을 나타낸다. 이 값은 stdin, stout 그리고 network

소켓들을 위한 inode struct들도 필요로 하게 되므로 file-max보다 보통 3-4 배 정도가 커야 한다. 일반적으로 inode가 할당이 된다면 이 값을 증가시킬 필요는 없다.

inode-nr은 inode-state로 부터 처음 2개의 item을 포함한다.

inode-state는 3개의 실제값과 4개의 사용하지 않는 값을 포함한다. 실제로 사용되는 3개의 값은 nr_inodes, nr_free_inodes 그리고 preshrink를 나타낸다.

nr_inodes는 inode의 수를 나타내며, 시스템은 nr_inodes > inode-max로 설정하고 더 많이 할당된 것들 대신 inode list를 줄일 필요가 있을 때 preshrink의 값을 0이 아닌 값을 가지게 된다.

5) overflowgid & overflowuid

UID와 GID가 32 bit인 Linux라도 어떤 filesystem들은 오직 16bit UID와 GID만 지원한다.

이런 filesystem들 중 하나가 쓰기가 가능한 상태로 마운트가 되어 있을 경우, 65535를 넘어서는 UID 또는 GID는 disk에 쓰여지기 전에 고정된 값으로 변환이 된다.

sysctl은 고정되어 있는 UID와 GID를 변경하는 것을 가능하게 한다. 기본값은 65534 이다.

6) super-max & super-nr

이 값들은 super block들의 최대값을 조절하고, 따라서 kernel에 마운트 되어진 파일 시스템들의

최대값을 조절하는 의미도 된다. super-max에 지정되어 있는 현재값 보다 더 많은 filesystem을

마운트할 필요가 있다면 super-max를 증가 시켜야 한다.

4. sysctl in kernel in kernel

/proc/sys/kernel/* 의 설정

현재 이 파일들은 (설정에 따라 다를 수도 있다) /proc/sys/kernel 에서 볼 수 있다:

acct

ctrl-alt-del

dentry-state

domainname

hostname

htab-reclaim                [ PPC only ]

java-appletviewer            [ binfmt_java, obsolete ]

java-interpreter              [ binfmt_java, obsolete ]

l2cr                         [ PPC only ]

modprobe                   ==> Documentation/kmod.txt

osrelease

ostype

overflowgid

overflowuid

panic

powersave-nap               [ PPC only ]

printk

real-root-dev                 ==> Documentation/initrd.txt

reboot-cmd                  [ SPARC only ]

rtsig-nr

rtsig-max

sg-big-buff                  [ generic SCSI device (sg) ]

shmmax                     [ sysv ipc ]

version

zero-paged                  [ PPC only ]

1) acct

highwater lowwater frequency

BSD-style process accounting이 가능하다면, 이 값들로 이 행동들을 조절하는 것이 가능하다.

로그가 남는 filesystem의 남은 공간이 <lowwater>%보다 적을 경우 accounting을 일시 정지 한다.

남은 공간이 <highwater>% 보다 많게 되면 accounting 은 다시 시작된다.

<Frequency> 는 얼마나 자주 남은 공간의 양을 체크할 것인지를 결정한다 (초단위로 지정).

기본값은 4 2 30 이다.

남은 공간이 2%이거나 이보다 적게 남았을 경우 accounting을 일시 정지 시키며, 4% 이거나

이보다 많이 남았을 경우 accounting을 재시작 시킨다는 것을 의미하며 30초 간격으로 남은 공간의 양에 대한 정보를 고려하게 한다.

2) ctrl-alt-del

이 file의 값이 0일 경우, ctrl-alt-del은 프로그램들을 일시 정지시키고, init(1)로 restart 신호를

보내게 된다. 하지만 이 값이 1보다 클 경우, OS는 dirty buffer의 동기화 없이 바로 reboot 을

하게 된다. (이것은 저장한 것들을 모두 날릴 수 있다)

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

도달하기 전에 그리고 이것이 무엇을 할지 결정하기 위해 프로그램에 도달하기 전에 프로그램에

의해서 중단이 될 것이다.

3) domainname & hostname

이 파일들은 system에 NIS/YP domainname과 hostname을 지정하는데 사용하며 다음과 같이

지정할 수 있다.

#echo “myhost” > /proc/sys/kernel/hostname

#echo “mydomain” > /proc/sys/kernel/domainname

위의 설정은 아래와 같이 할 수도 있다.

#hostname “myhost” > /proc/sys/kernel/hostname

#domainname “mydomain” > /proc/sys/kernel/domainname

4) htab-reclaim: (PPC only)

Setting this to a non-zero value, the PowerPC htab (see Documentation/powerpc/ppc_htab.txt) is pruned each time the system hits the idle loop.

5) l2cr: (PPC only)

This flag controls the L2 cache of G3 processor boards. If 0, the cache is disabled.

Enabled if nonzero.

6) osrelease, ostype & version:

#cat osrelease

2.1.88

#cat ostype

Linux

#cat version

#5 Wed Feb 25 21:49:24 MET 1998

osrelease와 ostype file은 명확한 정보를 가지고 있다.

Version에서 ‘#5’는 이 source 기반에서 5 번째 커널 빌드가 이루어 졌음을 의미하며, 나머지는

kernel이 만들어진 시간을 나타낸다. 이 값들을 조정하기 위해서는 커널을 재빌드 하는 방법 외에는

없다.

7) overflowgid & overflowuid:

시스템이 32-bit UID를 지원하지 않는다면 (예를 들어 arm, i386, m68k, sh, sparc32) 실제 UID

또는 GID가 65536를 넘어설 경우, 고정된 UID와 GID는 이전 16 bit UID/GID system 호출에서

사용되는 application으로 변환이 될 것이다.

sysctl은 고정되어 있는 UID와 GID를 변경하는 것이 가능하다. 기본값은 65534이다.

8) panic:

panic의 값은 panic 상태에서 rebooting하기 전 kernel이 기다리는 값을 초 단위로 나타낸다.

watchdog을 사용할 때 60으로 설정하는 것을 추천한다.

9) powersave-nap: (PPC only)

If set, Linux-PPC will use the ‘nap’ mode of powersaving, otherwise the ‘doze’ mode will be used.

10) printk:

printk에는 각각 console_loglevel, default_message_loglevel, minimum_console_level,

default_console_loglevel과 같이 4개의 값이 있다.

이 값들은 error 메시지들을 logging하거나 출력할 때 printk()함수가 작동을 하는데 영향을 미친다.

서로 다른 loglevel들에 대한 더 많은 정보를 얻으려면 ‘man 2 syslog’ 명령을 참조한다.

console_loglevel: console에 출력되는 것들 보다 더 우선되는 메시지들

default_message_level: 명시적인 우선권이 없는 메시지들이 이 값에 지정된 우선순위로 출력

minimum_console_loglevel: console_loglevel을 설정할 가장 작은 값, 즉 가장 높은 loglevel,  

loglevel은 값이 낮을수록 우선순위

default_console_loglevel: console_loglevel 의 기본값

주의: linux/kernel/printk.c에서 보여지는 quick은 이 값들이 구조 안에 들어가지 않는 것을 보여줄

것이며, 그러므로 이 값들은 compiler를 변경했을 경우, 내부 코어는 형식적으로 보증되지 않으며,

불필요한 값들이 발생할 것이다. (???)

11) reboot-cmd: (Sparc only)

??? This seems to be a way to give an argument to the Sparc ROM/Flash boot loader.

Maybe to tell it what to do after rebooting. ???

12) rtsig-max & rtsig-nr:

rtsig-max는 시스템에서 해결 되지 않는 POSIX realtime(queued) signal들의 최대값을 설정하는데

사용이 되어진다.

rtsig-nr은 현재 대기하고 있는 RT signal들의 숫자를 보여준다.

13) sg-big-buff

sg-big-buff는 일반적인 SCSI buffer의 크기를 보여준다. 이 파일의 값은 아직 변경할 수 없다.

하지만 include/scsi/sg.h에서 SG_BIG_BUFF의 값을 변경하여 다시 컴파일을 한다면 이 값을

변경시킬 수 있다.

14) shmmax

shmmax는 공유 메모리를 사용할 때 공유 메모리 segment의 최대 크기를 질의 하는데 사용이

될 수 있으며, 또는 공유 메모리 segment의 최대크기를 설정할 수도 있다

shared memory segment를 1Gb 이상으로 올리는 것을  커널에서 지원을 한다.

이 값은 SHMMAX의 기본값이 된다.

15) zero-paged: (PPC only)

When enabled (non-zero), Linux-PPC will pre-zero pages in the idle loop, possibly speeding up

get_free_pages. Since this only affects what the idle loop is doing, you should enable this and see

if anything changes.

5. Sysctl For Networking in Kernel  

1) ip_forward

0과 1로 연산하며 0일 경우 사용하지 않는다는 의미이고 기본값으로 제공된다. 0 이 아닐 경우

사용한다는 의미이며 interface들 사이에 패킷들을 교환하는 것을 허락한다.

이 변수의 변경은 기본적인 상태로 모든 설정 파라미터들을 리셋시킨다.

(RFC1122 for hosts, RFC1812 for routers)

2) ip_default_ttl

정수로 설정하며 기본값은 64이다.

3) ip_no_pmtu_disc

0과 1로 연산하며 MTU discorery 경로를 나타내는데 기본값 0을 지정하면 사용함을 의미한다.

4) IP Fragmentation

4.1) ipfrag_high_thresh

정수로 설정하며 Maximum memory는 IP 조각들을 재조합한다. 메모리의 ipfrag_high_thresh byte가

이결과를 통해 재할당 된다면, fragment handler는 ipfrag_low_thresh가 도달하기 전에 패킷들을

전달을 할 것이다.

4.2) ipfrag_low_thresh

정수로 설정한다.

4.3) ipfrag_time

정수로 설정되며 메모리에서  IP fragment를 초단위로 유지하는 시간을 나타낸다.

5) INET peer storage

5.1) inet_peer_threshold

정수로 설정하며 스토리지의 대략적인 크기이다. 이 threshold 목록들로 부터 시작하는 것은

침입의 요소를 안게 될 것이다. 이 threshold는 garbage collection passes 사이에서 목록들의

time-to-live와 time intervals를 한정을 한다. 또 다른 정보를 얻고 싶다면 #less time-to-live나

#less GC interval을 이용한다.

5.2) inet_peer_minttl

정수로 설정

5.3) inet_peer_maxttl

5.4) inet_peer_gc_mintime

5.5) inet_peer_gc_maxtime

6) TCP variables

6.1) tcp_syn_retries

정수로 설정하며 활성화된 TCP 접속이 재전송을 시도하게 하기 위한 최초 SYN시간의 값을 정한다. 255 보다 높아서는 안된다. 기본값은 5이며, 180초에 대응이 된다.

6.2) tcp_synack_retries

정수로 설정하며 passive TCP 접속 시도가 재접속을 하기 위한 SYNACKs의 값을 정한다.

255 보다 높게 지정할 수 없다. 기본값은 5이며, 180초에 대응이 된다.

6.3) tcp_keepalive_time

정수로 설정하며 keepalive가 활성화되어 있을 경우 얼마나 자주 TCP가 keepalive 메시지를 보내게

할 것인지를 설정. 기본값은 2시간 이다.

6.4) tcp_keepalive_probes

정수로 설정하며 접속이 끊어지는 것을 결정하기 전까지 keepalive가 TCP send out을 얼마나

살피게 할지 지정한다. 기본값은 9 이다.

6.5) tcp_keepalive_interval

정수로 설정하며 얼마나 자주 send out을 체크할 지를 정한다. tcp_keepalive_probes에 의해

증가되어진 probes는 probes가 시작된 후에는 responding connection 을 죽일 수 없다.

기본값은 75초 이다.

6.6) tcp_retries1

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

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

하도록 하는 것이 기본값이다.

6.7) tcp_retries2

정수로 설정하며 How may times to retry before killing alive TCP connection. RFC1122 says that

the limit should be longer than 100 sec. It is too small number. Default value 15 corresponds to

~13-30min depending on RTO.

6.8) tcp_orphan_retries

정수로 설정하며 How may times to retry before killing TCP connection, closed by our side. Default

value 7 corresponds to ~50sec-16min depending on RTO. If you machine is loaded WEB server, you should think about lowering this value, such sockets may consume significant resources. Cf.

tcp_max_orphans.

6.9) tcp_fin_timeout

정수로 설정하며 서버에 의해 닫혀질 때 FIN_WAIT-2 상태의 소켓을 유지 시킬 시간을 지정한다.

peer는 파괴될 수 있지만 결코 스스로 닫지 않고, 에상치 못하게 죽을 수는 있다.

기본값 60초이다. 보통 커널 2.2에서는 180 초를 사용 하지만 수정을 할 수는 있다.

하지만 시스템이 웹 서버의 용도라면 수많은 죽은 소켓들로 인해 메모리가 폭주할 위험도 있다. FIN-WAIT-2 소켓들은 최고 1.5K 정도의 메모리를 사용하기 때문에 FIN_WAIT-1 보다 덜 위험

하지만 tcp_max_orphans 값보다 더 오래 유지되려는 경향이 있다.

6.10) tcp_max_tw_buckets

정수, Maximal number of timewait sockets held by system simultaneously. If this number is

exceeded time-wait socket is immediately destroyed and warning is printed. This limit exists only

to prevent simple DoS attacks, you _must_ not lower the limit artificially, but rather increase it

(probably, after increasing installed memory), if network conditions require more than default value.

6.11) tcp_tw_recycle

0과 1의 연산으로 설정되며 Enable fast recycling TIME-WAIT sockets. Default value is 1. It should

not be changed without advice/request of technical experts.

6.12) tcp_max_orphans

정수, Maximal number of TCP sockets not attached to any user file handle, held by system. If this

number is exceeded orphaned connections are reset immediately and warning is printed. This limit

exists only to prevent simple DoS attacks, you _must_ not rely on this or lower the limit artificially,

but rather increase it (probably, after increasing installed memory), if network conditions require

more than default value, and tune network services to linger and kill such states more aggressively.

Let me to remind again: each orphan eats up to ~64K of unswappable memory.

6.13) tcp_abort_on_overflow

0과 1의 연산으로 이루어지며 If listening service is too slow to accept new connections, reset them.

Default state is FALSE. It means that if overflow occurred due to a burst, connection will recover.

Enable this option _only_ if you are really sure that listening daemon cannot be tuned to accept

connections faster. Enabling this option can harm clients of your server.

6.14) tcp_syncookies

0과 1의 연산으로 이루어지며 kernel에서 CONFIG_SYNCOOKIES를 설정하여 생성을 하였을 때만

사용이 유효하다. 소켓으로 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 경고가 계속 발생한다면, 서버의 설정이 심각하게 잘못되어

있는 것이다.

6.15) tcp_stdurg

0과 1의 연산으로 이루어지며 Use the Host requirements interpretation of the TCP urg pointer field.

Most hosts use the older BSD interpretation, so if you turn this on Linux might not communicate

correctly with them. Default: FALSE

6.16) tcp_max_syn_backlog

정수로 설정하며 접속한 client들 중 승인을 받지 못하는 접속 요청들의 최대값을 지정 한다.

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

보라” 라는 메시지를 받게 된다. 128Mb의 메모리에서는 기본값으로 1024를 사용할 수 있으며,

이보다 적은 메모리를 가지고 있을 경우에는 128 을 사용하기를 권장 한다. 만약 서버에 부하가

많이 걸리게 된다면 이 값을 증가해 보기 바란다. 주의할 것은, 1024 보다 크게 했을 경우 include/net/tcp.h에서 (TCP_SYNQ_HSIZE*16)이 tcp_max_syn_backlog 와 같거나 이보다 작게

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

6.17) tcp_window_scaling

0과 1의 연산으로 이루어지며 RFC1323에 정의된 window scaling 을 가능하게 한다.

6.18) tcp_timestamps

0과 1의 연산으로 설정되며 RFC1323에 정의된 timestamp 들을 가능하게 한다.

6.19) tcp_sack

0과 1로 연산하며 SACK 인지를 선택하는 것을 가능하게 한다.

6.20) tcp_fack

0과 1로 연산하며 FACK 밀집 회피와 fast restransmission을 가능하게 한다. tcp_sack이 활성화가

되어 있지 않으면 이 값은 사용되지 않는다.

6.21) tcp_dsack

0과 1로 연산하며 TCP가 중복된 SACK들을 보내는 것을 가능하게 한다.

6.22) tcp_ecn

0과 1로 연산하며 TCP에 Explicit Congestion Notification을 가능하게 한다.

6.23) tcp_reordering

정수로 연산하며 TCP stream에 패킷들의 최대 재 요청을 설정. 기본값은 3 이다.

6.24) tcp_retrans_collapse

0과 1로 연산하며 Bug-to-bug compatibility with some broken printers. On retransmit try to send

bigger packets to work around bugs in certain TCP stacks.

6.25) ip_local_port_range

2와 정수로 값을 설정하며 TCP와 UDP에 의해 사용될 local 포트 범위를 정의한다.

첫번째 숫자는 사용할 영역의 가장 앞부분 포트 번호를 지정하고 두번째는 마지막 포트번호를

지정한다. 기본값은 시스템의 사용 가능한 메모리의 양에 의해 결정이 된다. 메모리가 128Mb 보다

많을 경우 32768-61000, 메모리가 128Mb 보다 적을 경우 1024-4999 또는 이보다 적게 설정한다.

이 값은 TCP 확장을 지원하지 않는 시스템으로 동시에 발생이 될 수 있는 활성화된 접속들의 수를

결정한다. tcp_tw_recycle 을 가능하게 함으로서 (기본적으로) 1024-4999 영역은 timestamps를

지원하는 시스템들에 초당 2000개의 접속 정도를 가능하게 하는데 충분하다.

6.26) icmp_echo_ignore_all

0과 1로 연산하며 이 값을 1로 할 경우 kernel은 모든 ICMP ECHO 요청을 무시해 버린다.

즉 ping 이 안되게 한다.

6.27) icmp_echo_ignore_broadcasts

0과 1로 연산하며 만약 모든 ICMP ECHO 요청을 커널이 무시하게 하거나, ICMP ECHO 요청 중 broadcast와 multicast 주소에만 무시하게 할 때 1의 값은 무시, 0의 값은 리턴을 하게 된다.  

만약 boardcast/multicast 주소의 ICMP ECHO 요청을 수용하게 한다면, network가 다른 호스트로

denial of service(DOS) packet flooding 공격을 하는데 이용이 될 수가 있다.

6.28) icmp_destunreach_rate

정수로 설정한다.

6.29) icmp_paramprob_rate

정수

6.30) icmp_timeexceed_rate

정수

6.31) icmp_echoreply_rate

정수 (not enabled per default), Limit the maximal rates for sending ICMP packets to specific

targets. 0 to disable any limiting, otherwise the maximal rate in jiffies(1).

6.32) icmp_ignore_bogus_error_responses

0과 1로 연산하며 어떤 router들은 broadcast frame들로 거짓 응답을 보냄으로써 RFC 1122를 위반

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

이러한 경고를 하지 않을 것이며, 로그 파일이 지저분해 지는 것을 피할 수 있다.

기본값은 FALSE 이다

6.33) log_martians

0과 1로 연산하며 불가능한 주소들을 지닌 패킷을 kerenl log에 기록한다. IP soppfing packet을

체크하는데 유용하다.

6.34) accept_redirects

0과 1로 연산하며 ICMP redirect message 들을 허용한다. 기본값  TRUE (host), FALSE (router)

6.35) forwarding

0과 1로 연산하며 이 interface로 IP forwarding을 가능하게 한다.

6.36) mc_forwarding

0과 1로 연산하며 multicast routing을 가능하게 한다. 이 값을 사용하기 위해서는 커널 config에서

CONFIG_MROUTE를 설정해서 빌드를 해야 하며, multicast routing이 가능한 데몬이 요구되어 진다.

6.37) proxy_arp

0과 1로 연산하며 proxy arp를 실행한다.

6.38) shared_media

0과 1로 연산하며 Send(router) or accept(host) RFC1620 shared media redirects.

Overrides ip_secure_redirects. default TRUE

6.38) secure_redirects

0과 1로 연산하며 Accept ICMP redirect messages only for gateways, listed in default gateway list.

default TRUE

6.39) send_redirects

0과 1로 연산하며 router로 사용이 된다면 redirect를 보낸다. 기본값은 TRUE 이다.

6.40) bootp_relay

0과 1로 연산하며 Accept packets with source address 0.b.c.d destined not to this host as local

ones. It is supposed, that BOOTP relay daemon will catch and forward such packets.

default FALSE, Not Implemented Yet.

6.41) accept_source_route

0과 1로 연산하며 Accept packets with SRR option. SRR 옵션으로 패킷들을 수용한다. IP source

routing 을 제어한다. 보통 호스트로 향하게 하는 것을 권장한다.

기본값은 TRUE (router)이고 FALSE (host)설정을 권장한다.

6.42) rp_filter

0과 1로 연산하며 1로 설정하면 집에서 사용하는 싱글 호스트나 몇 개의 서브넷으로 나뉘어진

네트워크 같이 RFC1812에 지정되어진 역경로에 의한 소스 유효성을 체크한다. 분석하기 어려운

네트워크에서 느리고 신뢰할 수 없는 프로토콜 또는 정적인 네트워크를 통해 문제를 야기할 수도

있다. 보통은 IP spoofing 을 방지하기 위해 많이 사용을 한다. 0으로 설정하면 소스 유효성을

체크를 하지 않는다. 기본값은 0 이다.  startup 스크립트에서 이를 가능하게 해 놓은 배포판도

있으니 주의해야 한다.

서진우

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

You may also like...

1 Response

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