|
7. Sysctl For Networking in Kernel
/proc/sys/net/ipv4/* 을 위한 문서 kernel version 2.4.25
번역 2004.2.25 김정균 <http://www.oops.org>
* 역주)
이 페이지를 읽기 전에 아주 강력하게 주의를 요할 것은 sysctl을 이용하여 이 값들을
변경할 경우나 직접적으로 변경을 할 경우 시스템이 crash 되어질 위험요소가 많이 있
다는 것을 명심해 야 한다. 즉, 자기의 시스템에 무리한 값을 넣었을 경우 그 즉시 시
스템이 멈출수도 있기 때문에 충분한 테스트와 시스템이 crash가 될 수 있음을 명심하
고 책임을 질수 있을 경우에만 만지기를 권장한다.
* 참조)
http://kldp.org/KoreanDoc/html/Kernel-KLDP/network.html
ip_forward - 01 연산
0 - 사용안함 (기본값)
0 이 아닐 경우 - 사용함
interface 들 사이에 패킷들을 교환시키는 것을 허락.
이 변수의 변경은 기본적인 상태로 모든 설정 파라미터들을 리셋 시킨다.
(RFC1122 for hosts, RFC1812 for routers)
ip_default_ttl - 정수
기본값: 64
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 은 같은 대륙으로 제한된다.
ip_no_pmtu_disc - 01 연산
MTU discorery 경로를 사용안함
기본값 FALSE (사용함을 의미)
MTU (Maximum Transmission Unit) 는 프레임이나 패킷이 한번에 하나 씩 전송
될 때 통과할 수 있는 크기로 프로토콜마다 그 크기가 다르다. 예를들어 이더
넷에서는 1500 이지만, X.25 에서는 576 이다. Path MTU 는 두 호스트사이 경
로 (path) 에서 가장 작은 MTU 값이다.
호스트가 같더라도 라우팅 경로나 프로토콜은 매번 바뀌므로, MTU 값도 계속
달라지게 된다. 현재 패킷보다 작은 MTU 값을 가진 라우터를 통과할 때, 패킷
은 그 라우터 MTU 에 맞춰 잘게 쪼개진다. 수신하는 호스트에서는 그렇게 쪼
개진 조각들을 모두 받아서 다시 재조립하는데, 그 가운데 한조각이라도 드롭
되면 모든 조각을 다시 전송받아야 한다. 이 경우, 라우터는 조각을 나누느라
바쁘고, 호스트는 재조립하느라 바빠지며, 재전송이 많아지는 등 퍼포먼스를
떨어트리게 된다.
이럴 때 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)를 허용해야한다.
IP Fragmentation:
ipfrag_high_thresh - 정수
Maximum memory 는 IP 조각들을 재조합을 한다. 메모리의 ipfrag_high_thresh
byte가 이결과를 통해 재할당 된다면, fragment handler는 ipfrag_low_thresh
가 도달하기 전에 패킷들을 전달을 할것이다.
ipfrag_low_thresh - 정수
ipfrag_high_thresh 를 참고하라
ipfrag_time - 정수
메모리에서 IP fragment 를 유지하는 시간 (초단위)
INET peer storage:
inet_peer_threshold - 정수
스토리지의 대략적인 크기이다. 이 threshold목록들로 부터 시작하는 것은 침
입의 요소를 안게 될 것이다. 이 threshold 는 garbage collection passes 사
이에서 목록들의 time-to-live 와 time intervals를 한정을 한다. 또 다른 정
보를 얻고 싶다면 less time-to-live 나 less GC interval 을 하라.
inet_peer_minttl - 정수
Minimum time-to-live of entries. Should be enough to cover fragment
time-to-live on the reassembling side. This minimum time-to-live is
guaranteed if the pool size is less than inet_peer_threshold.
Measured in jiffies.
inet_peer_maxttl - 정수
Maximum time-to-live of entries. Unused entries will expire after
this period of time if there is no memory pressure on the pool (i.e.
when the number of entries in the pool is very small).
Measured in jiffies.
inet_peer_gc_mintime - 정수
Minimum interval between garbage collection passes. This interval is
in effect under high memory pressure on the pool.
Measured in jiffies.
inet_peer_gc_maxtime - 정수
Minimum interval between garbage collection passes. This interval is
in effect under low (or absent) memory pressure on the pool.
Measured in jiffies.
TCP variables:
tcp_syn_retries - 정수
활성화된 TCP 접속이 재전송을 시도하게 하기 위한 최초 SYN시간의 값을 정한
다. 255 보다 높아서는 안된다. 기본값은 5이며, 180 초에 대응이 된다.
tcp_synack_retries - 정수
passive TCP 접속 시도가 재접속을 하기 위한 SYNACKs의 값을 정한다. 255 보
다 높게 지정할 수 없다. 기본값은 5이며, 180초에 대응이 된다.
tcp_keepalive_time - 정수
keepalive 가 활성되 되어 있을 경우 얼마나 자주 TCP 가 keepalive 메세지를
보내게 할 것인지를 설정. 기본값은 2시간 이다.
tcp_keepalive_probes - 정수
접속이 끊어지는 것을 결정하기 전까지 keepalive 가 TCP send out 을 얼마나
살피게 할지 지정한다. 기본값은 9 이다.
tcp_keepalive_intvl - 정수
얼마나 자주 send out 을 체크할지를 정한다. tcp_keepalive_probes 에 의해
증가되어진 probes 는 probes 가 시작된 후에는 responding connection 을 죽
일수 없다. 기본값은 75초 이다. 기본 값의 사용시 11분 15초 후에 연결이 해
제된 것으로 간주 된다.
tcp_retries1 - 정수
무언가 잘못되었을 경우, network layer 로 이 현상을 reporting 하기전 다시
확인을 하기 위한 횟수를 지정한다. 최소 RPC 값은 3 이며, 이는 RTO상에서 3
초에서 8분 사이에 응답을 하도록 하는 것이 기본값이다.
tcp_retries2 - 정수
살아있는 TCP 연결을 끊기 전에 확인하는 횟수를 정한다. RFC1122 는 100초보
다 길게 제한하라 하지만 너무 작은 값이다. 기본값은 15로 RTO 13-30분에 해
당한다.
tcp_orphan_retries - 정수
우리 쪽에서 닫은 TCP 연결을 끊기 전에 확인하는 횟수를 정한다. 기본값은 7
로 RTO 50 초에서 16 분 사이에 해당한다. 웹 서버가 운영 중 이라면 이 값을
줄여서 소켓 등이 귀한 리소스를 소비하지 않도록 할 수도 있다.
tcp_fin_timeout - 정수
서버에 의해 닫혀질때 FIN_WAIT-2 상태의 소켓을 유지 시킬 시간을 지정한다.
peer는 파괴될수 있지만 결코 스스로 닫지는 않거나, 에상치 못하게 죽을수는
있다. 기본값 60초 이다. 보통 커널 2.2 에서는 180 초를 사용 하지만 수정을
할수는 있다. 하지만 시스템이 웹서버의 용도라면 수많은 죽은 소켓들로 인해
메모리가 폭주할 위험도 있다. FIN-WAIT-2 소켓들은 최고 1.5K 정도의 메모리
를 사용하기 때문에 FIN_WAIT-1 보다 덜 위험 하지만 tcp_max_orphans 값보다
더 오래 유지되려는 경향이 있다.
tcp_max_tw_buckets - 정수
동시에 유지 가능한 timewait 소켓의 수. 지정 숫자를 초과할 경우, timewait
소켓이 없다는 경고 메세지 출력한다. 이 제한은 단순한 DoS 공격을 방어하기
위해서만 필요하며, 기본값보다 작게해서는 절대 안된다. 네트워크 환경이 기
본값보다 큰 값을 요구한다면 늘려도 된다. 보통 램 64M 당 180000 으로 계산
을 하면 된다.
tcp_tw_recycle - 01 연산
빠른 재생 TIME-WAIT 소켓을 사용한다. 기본값은 1이다. 전문가의 조언 / 요
청이 없다면 절대 바꾸지 마라.
tcp_tw_reuse - 01 연산
프로토콜 관점에서 안전하다고 판단될 때 새로운 연결에 대하여 TIME-WAIT 소
켓을 재사용하는 것을 허락한다. 기본값은 0 이다. 이 값은 기술 전문가의 조
언이나 요청이 없이 변경하지 않는 것이 좋다.
tcp_max_orphans - 정수
시스템에 고정 되었거나, 사용자 파일 핸들에 연결되지 않은 TCP 소켓의 최대
값을 지정한다. 고아 연결이 이 값을 초과하면, 즉시 리셋되고 경고를 출력한
다. 이 제한은 단순한 DoS 공격을 방어하기 위해서만 필요하며, 기본 값보다
작게해서는 절대 안된다. 네트워크 환경이 기본값보다 큰 값을 요구하거나 오
래 버텨서 그런 문제들은 더 공격적으로 죽이기 위해 네트워크를 조율 한다면
늘려도 된다 (아마, 설치된 메모리를 증설한 다음) 한번 더 당부하자면: 고아
연결들은 스왑할 수 없는 메모리를 각자 64K 이상 차지하게 된다..
tcp_abort_on_overflow - 01 연산
리스닝 서비스가 새로운 연결을 수락하기에 너무 느리다면, 그 서비스를 리셋
한다. 기본값은 FALSE 이다. 이 것은 갑자기 오버플로가 발생하더라도 연결이
복구된다는 뜻이다. 리스닝 데모이 연결을 더 빨리 수락하도록 자리잡지 못하
는게 정말 확실할 때에만 이 옵션을 활성화 한다. 이 옵션을 활성화하면 서버
에서 손상된 클라이언트라도 리슨 하게 된다.
tcp_syncookies - 01 연산
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 경고가
계속 발생한다면, 서버의 설정이 심각하게 잘못되어 있는 것이다.
tcp_stdurg - 01 연산
TCP urg 포인터 필드 해석기가 필요할 때에 사용한다. 대부분 오래된 BSD 해
석기를 사용하는데, 리눅스가 그런 것들과 제대로 소통하지 못한다고 판단될
경우 활성화를 해 볼만하다. 기본값은 FALSE 이다.
tcp_max_syn_backlog - 정수
접속한 client 들 중 승인을 받지 못하는 접속 요청들의 최대값을 지정 한다.
만약 승인을 받지 못하고 기다리는 접속 요청들이 이 수를 벗어나는 경우에는
"다시 재접속을 해 보라" 라는 메세지를 받게 된다. 128Mb의 메모리에서는 기
본값으로 1024를 사용할수 있으며, 이보다 적은 메모리를 가지고 있을 경우에
는 128 을 사용하기를 권장 한다. 만약 서버에 부하가 많이 걸리게 된다면 이
값을 증가해 보기 바란다.
tcp_window_scaling - 01 연산
RFC1323 에 정의된 window scaling 을 가능하게 한다.
tcp_timestamps - 01 연산
RFC1323 에 정의된 timestamp 들을 가능하게 한다.
tcp_sack - 01 연산
SYN 패킷을 전송한 후에, 로스가 발생을 하여 ACK 를 일부 받지 못했을 경우,
선택적으로 (selected) 받지 못한 ACK 만 받도록 요청하는 것을 허락한다. 로
스가 많은 네트워크에서는 상당히 중요한 역할을 한다.
tcp_fack - 01 연산
FACK 밀집 회피와 빠른 재전송을 가능하게 한다. tcp_sack 이 활성화가 되어
있지 않으면 이 값은 사용되지 않는다.
tcp_dsack - 01 연산
TCP가 중복된 SACK 들을 보내는 것을 가능하게 한다.
tcp_ecn - 01 연산
TCP 에 명백한 혼잡 공지(Explicit Congestion Notification) 를 가능하게 한
다.
tcp_reordering - 정수
TCP stream 에 패킷들의 최대 재 요청을 설정.
기본값: 3
tcp_retrans_collapse - 01 연산
망가진 프린터에 Bug-to-bug 호환. 더 큰 패킷을 재전송해서 어떤 TCP 스택에
있는 버그를 피해간다.
tcp_wmem - vector of 3 INTEGERs: min, default, max
min: TCP 소켓에서 send buffer 에 할당될 메모리 양. 각 TCP 소켓들은 연결
이 유지된 상태에서는 이 메모리를 사용한 권한을 가지게 된다. 기본값은 4K
default: TCP 소켓에서 기본으로 할당이 되는 send 버퍼의 메모리 양. 이값은
다른 프로토콜에서 의해 사용되는 net.core.wmem_default 값 보다 우선 한다.
기본값은 16K
max: TCP 소켓에서 자동으로 선택된 send 버퍼를 위한 최대 메모리 크기. 이
값보다 net.core.wmem_max 값이 우선한다. 기본값은 128K
tcp_rmem - vector of 3 INTEGERs: min, default, max
min: TCP 소켓에서 receive buffer 에 할당될 메모리 양. 각 TCP 소켓들은 연
결이 유지된 상태에서는 이 메모리를 사용할 권한을 가지게 된다. 기본값은 8K
default: TCP 소켓에서 사용되어 지는 receive buffer 의 기본값. 이 값은 다
른 프로토콜에 의해 사용되는 net.core.rmem_default 값 보다 우선한다. 기본
값은 87380 byte 이다. 이 값은 tcp_adv_win_Scale 의 기본 설정과 tcp_app_win:0
과 기본 tcp_app_win 을 위한 bit less 와 함께 65535 의 window 를 가지게된
다.
max: TCP 소켓에 대하여, 자동적으로 최대한 사용할 수 있는 receive buffer
의 최대크기 이 값은 net.core.rmem_max 의 값을 덮어쓰지 못하며, SO_RCVBUF
를 통한 "정적"인 연결은 이 값을 사용하지 않는다. 기본값은 87380*2 byte.
tcp_mem - vector of 3 INTEGERs: min, pressure, max
low: below this number of pages TCP is not bothered about its
memory appetite.
pressure: when amount of memory allocated by TCP exceeds this number
of pages, TCP moderates its memory consumption and enters memory
pressure mode, which is exited when memory consumtion falls
under "low".
high: number of pages allowed for queueing by all TCP sockets.
Defaults are calculated at boot time from amount of available
memory.
tcp_app_win - 정수
Reserve max(window/2^tcp_app_win, mss) of window for application
buffer. Value 0 is special, it means that nothing is reserved.
기본값: 31
tcp_adv_win_scale - 정수
Count buffering overhead as bytes/2^tcp_adv_win_scale
(if tcp_adv_win_scale > 0) or bytes-bytes/2^(-tcp_adv_win_scale),
if it is <= 0.
기본값: 2
tcp_rfc1337 - BOOLEAN
세팅되면 TCP 스택은 RFC1337을 따른다. 해제되면 RFC를 따르지 않지만 TCP
TIME_WAIT asassination은 막아준다.
기본값: 0
tcp_low_latency - BOOLEAN
If set, the TCP stack makes decisions that prefer lower
latency as opposed to higher throughput. By default, this
option is not set meaning that higher throughput is preferred.
An example of an application where this default should be
changed would be a Beowulf compute cluster.
기본값: 0
ip_local_port_range - 2 정수값
TCP 와 UDP 에 의해 사용될 local 포트 범위를 정의한다. 첫번째 숫자는 사용
할 영역의 가장 앞부분 포트 번호를 지정하고 두번째는 마지막 포트번호를 지
정한다. 기본값은 시스템의 사용가능한 메모리의 양에 의해 결정이 된다:
메모리가 128Mb 보다 많을 경우 32768-61000
메모리가 128Mb 보다 적을 경우 1024-4999 또는 이보다 적게..
이 값은 TCP 확장을 지원하지 않는 시스템으로 동시에 발생이 될수 있는 활성
화된 접속들의 수를 결정한다. tcp_tw_recycle 을 가능하게 함으로서 (기본적
으로) 1024-4999 영역은 timestamps를 지원하는 시스템들에 초당 2000개의 접
속 정도를 가능하게 하 는데 충분하다.
정확치는 않지만 2.4.20 이 후 부터는 커널에서 자동으로 감지를 하여 잡으므
로 신경을 쓰지 않아도 상관이 없다.
ip_nonlocal_bind - BOOLEAN
세팅되면 프로세스가 로컬 IP 가 아닌 주소에 bind() 할수 있다. 매우 유용한
기능이지만 어떤 어플리케이션에서는 나쁠 수 있다.
기본값: 0
ip_dynaddr - BOOLEAN
0 이 아닌 값을 세팅하면 동적 주소를 (dynamic addresses) 지원한다. 1 보다
큰 값을 세팅하면 동적주소가 다시 쓰여질 때마다 로그 메시지가 출력될 것이
다.
기본값: 0
icmp_echo_ignore_all - 01 연산
이 값을 1 로 할 경우 kernel 은 모든 ICMP ECHO 요청을 무시해 버린다.
즉 ping 이 안되게 한다.
icmp_echo_ignore_broadcasts - 01 연산
만약 모든 ICMP ECHO 요청을 커널이 무시하게 하거나, ICMP ECHO 요청 중
broadcast 와 multicast 주소에만 무시하게 할때 1의 값은 무시, 0의 값은 리
턴을 하게 된다. 만약 boardcast/multicast 주소의 ICMP ECHO 요청을 수용하
게 한다면, network가 다른호스트로 denial of service(DOS) packet flooding
공격을 하는데 이용이 될수가 있다.
icmp_ratelimit - 정수
아래의 icmp_ratemask 에 지정된 BIT 와 일치하는 타입의 ICMP 패킷을 보내기
위한 최대 빈도를 제한한다.
0 은 제한을 없애며 그 밖의 값은 jiffies(1) 의 최대 빈도를 의미한다.
기본값: 100
icmp_ratemask - 정수
Mask made of ICMP types for which rates are being limited.
Significant bits: IHGFEDCBA9876543210
Default mask: 0000001100000011000 (6168)
Bit 정의 (see include/linux/icmp.h):
0 Echo Reply
3 Destination Unreachable *
4 Source Quench *
5 Redirect
8 Echo Request
B Time Exceeded *
C Parameter Problem *
D Timestamp Request
E Timestamp Reply
F Info Request
G Info Reply
H Address Mask Request
I Address Mask Reply
* These are rate limited by default (see default mask above)
icmp_ignore_bogus_error_responses - 01 연산
어떤 router 들은 broadcast frame 들로 거짓 응답을 보냄으로서 RFC 1122 를
위반한다. 이러한 위한들은 보통 커널 경고를 통해 로깅이 된다. 이것을 TRUE
로 설정을 할경우 커널은 이러한 경고를 하지 않을 것이며, 로그 파일이 지저
분해 지는 것을 피할수 있다.
기본값: FALSE
igmp_max_memberships - 정수
멀티캐스트 그룹에 참여할 수 있는 최대값을 변경한다.
기본값: 20
conf/interface/* changes special settings per interface (where "interface" is
the name of your network interface)
conf/all/* is special, changes the settings for all interfaces
log_martians - 01 연산
불가능한 주소들을 지닌 패킷을 kerenl log 에 기록한다. IP soppfing packet
을 체크하는데 유용하다.
Log packets with impossible addresses to kernel log.
log_martians for the interface will be enabled if at least one of
conf/{all,interface}/log_martians is set to TRUE,
it will be disabled otherwise
accept_redirects - 01 연산
ICMP redirect message 들을 허용한다.
기본값 TRUE (host)
FALSE (router)
Accept ICMP redirect messages.
accept_redirects for the interface will be enabled if:
- both conf/{all,interface}/accept_redirects are TRUE in the case forwarding
for the interface is enabled
or
- at least one of conf/{all,interface}/accept_redirects is TRUE in the case
forwarding for the interface is disabled
accept_redirects for the interface will be disabled otherwise
default TRUE (host)
FALSE (router)
forwarding - 01 연산
이 interface 로 IP forwarding 을 가능하게 한다.
mc_forwarding - 01 연산
multicast routing을 가능하게 한다. 이 값을 사용하기 위해서는 커널 config
에서 CONFIG_MROUTE 를 설정해서 빌드를 해야 하며, multicast routing 이 가
능한 데몬이 요구되어 진다.
medium_id - 정수
Integer value used to differentiate the devices by the medium they
are attached to. Two devices can have different id values when
the broadcast packets are received only on one of them.
The default value 0 means that the device is the only interface
to its medium, value of -1 means that medium is not known.
Currently, it is used to change the proxy_arp behavior:
the proxy_arp feature is enabled for packets forwarded between
two devices attached to different media.
proxy_arp - 01 연산
프록시 ARP는 지정한 인터페이스와 연결된 다른 호스트의 ARP 주소를 대신 뿌
려주고, 받는다. 투명하게 동작하는 네트워크 장비에 반드시 필요하다.
shared_media - 01 연산
RFC1620 미디어 공유 리다이렉트를 보내거나 (라우터) 수락 (호스트)한다. 이
옵션 값이 0 이면 한 장치에 설정된 서로 다른 서브넷을 직접 통신할 수 없다.
기본값: TRUE
secure_redirects - 01 연산
디폴트 게이트웨이 목록에 올라있는 게이트웨이에만 ICMP 리다이렉트 메시지를
허용한다. 기본값은 TRUE
send_redirects - 01 연산
router 로 사용이 된다면 redirect 를 보낸다. 기본값은 TRUE 이다.
Accept ICMP redirect messages only for gateways,
listed in default gateway list.
secure_redirects for the interface will be enabled if at least one of
conf/{all,interface}/secure_redirects is set to TRUE,
it will be disabled otherwise
default TRUE
send_redirects - BOOLEAN
Send redirects, if router.
send_redirects for the interface will be enabled if at least one of
conf/{all,interface}/send_redirects is set to TRUE,
it will be disabled otherwise
기본값: TRUE
bootp_relay - 01 연산
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.
accept_source_route - 01 연산
SRR 옵션으로 패킷들을 수용한다. IP source routing 을 제어한다. 보통 호스
트로 향하게 하는 것을 권장한다. 이 값이 참이면 패킷 경로를 출발지에서 조
작이 가능하므로, IP 스푸핑에 악용될 소지가 있다.
기본값 TRUE (router)
FALSE (host)
rp_filter - 01 연산
1 - 집에서 사용하는 싱글 호스트나 몇개의 서브넷으로 나뉘어진 네트워크 같
이 RFC1812에 지정되어진 역경로에 의한 소스 유효성을 체크한다. 분석하
기 어려운 네트워크에서 느리고 신뢰할 수 없는 프로토콜 또는 정적인 네
트워크를 통해 문제를 야기할수도 있다.
보통은 IP spoofing 을 방지하기 위해 많이 사용을 한다.
0 - 소스 유효성 체크를 하지 않는다.
conf/all/rp_filter must also be set to TRUE to do source validation
on the interface
기본값은 0 이다. startip 스크립트에서 이를 가능하게 해 놓은 배포판도 있
으니 주의해야 한다.
arp_filter - BOOLEAN
1 - Allows you to have multiple network interfaces on the same
subnet, and have the ARPs for each interface be answered
based on whether or not the kernel would route a packet from
the ARP'd IP out that interface (therefore you must use source
based routing for this to work). In other words it allows control
of which cards (usually 1) will respond to an arp request.
0 - (default) The kernel can respond to arp requests with addresses
from other interfaces. This may seem wrong but it usually makes
sense, because it increases the chance of successful communication.
IP addresses are owned by the complete host on Linux, not by
particular interfaces. Only for more complex setups like load-
balancing, does this behaviour cause problems.
arp_filter for the interface will be enabled if at least one of
conf/{all,interface}/arp_filter is set to TRUE,
it will be disabled otherwise
tag - 정수
Allows you to write a number, which can be used as required.
Default value is 0.
(1) Jiffie:
커널을 위한 내부 타임유닛. i386 에서 1/100 초, 알파에서 1/1024 초이다. 알맞은 값
이 궁금하다면 /usr/include/asm/param.h 에서 HZ define을 참고한다.
Alexey Kuznetsov.
kuznet@ms2.inr.ac.ru
Updated by:
Andi Kleen
ak@muc.de
Nicolas Delon
delon.nicolas@wanadoo.fr
/proc/sys/net/ipv6/* Variables:
IPv6 has no global variables such as tcp_*. tcp_* settings under ipv4/ also
apply to IPv6 [XXX?].
bindv6only - BOOLEAN
Default value for IPV6_V6ONLY socket option,
which restricts use of the IPv6 socket to IPv6 communication
only.
TRUE: disable IPv4-mapped address feature
FALSE: enable IPv4-mapped address feature
기본값: FALSE (as specified in RFC2553bis)
conf/default/*:
Change the interface-specific default settings.
conf/all/*:
Change all the interface-specific settings.
[XXX: Other special features than forwarding?]
conf/all/forwarding - BOOLEAN
Enable global IPv6 forwarding between all interfaces.
IPv4 and IPv6 work differently here; e.g. netfilter must be used
to control which interfaces may forward packets and which not.
This also sets all interfaces' Host/Router setting
'forwarding' to the specified value. See below for details.
This referred to as global forwarding.
conf/interface/*:
Change special settings per interface.
The functional behaviour for certain settings is different
depending on whether local forwarding is enabled or not.
accept_ra - BOOLEAN
Accept Router Advertisements; autoconfigure using them.
Functional default: enabled if local forwarding is disabled.
disabled if local forwarding is enabled.
accept_redirects - BOOLEAN
Accept Redirects.
Functional default: enabled if local forwarding is disabled.
disabled if local forwarding is enabled.
autoconf - BOOLEAN
Configure link-local addresses using L2 hardware addresses.
기본값: TRUE
dad_transmits - 정수
The amount of Duplicate Address Detection probes to send.
기본값: 1
forwarding - BOOLEAN
Configure interface-specific Host/Router behaviour.
Note: It is recommended to have the same setting on all
interfaces; mixed router/host scenarios are rather uncommon.
FALSE:
By default, Host behaviour is assumed. This means:
1. IsRouter flag is not set in Neighbour Advertisements.
2. Router Solicitations are being sent when necessary.
3. If accept_ra is TRUE (default), accept Router
Advertisements (and do autoconfiguration).
4. If accept_redirects is TRUE (default), accept Redirects.
TRUE:
If local forwarding is enabled, Router behaviour is assumed.
This means exactly the reverse from the above:
1. IsRouter flag is set in Neighbour Advertisements.
2. Router Solicitations are not sent.
3. Router Advertisements are ignored.
4. Redirects are ignored.
기본값: FALSE if global forwarding is disabled (default),
otherwise TRUE.
hop_limit - 정수
Default Hop Limit to set.
기본값: 64
mtu - 정수
Default Maximum Transfer Unit
기본값: 1280 (IPv6 required minimum)
router_solicitation_delay - 정수
Number of seconds to wait after interface is brought up
before sending Router Solicitations.
기본값: 1
router_solicitation_interval - 정수
Number of seconds to wait between Router Solicitations.
기본값: 4
router_solicitations - 정수
Number of Router Solicitations to send until assuming no
routers are present.
기본값: 3
icmp/*:
ratelimit - 정수
Limit the maximal rates for sending ICMPv6 packets.
0 to disable any limiting, otherwise the maximal rate in jiffies(1)
기본값: 100
IPv6 Update by:
Pekka Savola <pekkas AT netcore.fi>
YOSHIFUJI Hideaki / USAGI Project <yoshfuji AT linux-ipv6.org>
/proc/sys/net/ipv4/아래에 있는 파일들입니다. 여러분 머신에 설정된 값들을 보고싶다면 다음 명령을 사용하세요:
# cd /proc/sys/net/ipv4/
# grep [0-9] *
0 - disabled (default)
not 0 - enabled
인터페이스들 사이에서 패킷을 전달합니다.
이 변수는 특별해서, 값을 바꾸면 관련된 모든 패러미터들을 기본값으로 바꿉니다 (호스트는 RFC1122, 라우터는 RFC1812)
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
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
IP 조각들을 재조합할 때 사용할 최대 메모리를 지정합니다. ipfrag_high_thresh 값이 지정되어 있으면, 프래그먼트 핸들러는 ipfrag_low_thresh에 다다를 때까지 패킷을 토스합니다.
ipfrag_high_thresh를 보세요
메모리에 IP 조각을 담아두는 시간을 초 단위로 설정합니다.
활성 TCP 연결에서 재전송을 위해 지정한 시간만큼 지난 뒤에 초기화 SYN 패킷을 보냅니다. 255보다 클 수 없습니다. 기본값은 5인데 180초에 해당합니다.
Passive TCP 연결에서 재전송을 위해 지정한 시간만큼 지난 뒤에 초기화 SYNACK 패킷을 보냅니다. 255보다 클 수 없습니다. 기본값은 5인데 180초에 해당합니다.
keepalive가 활성화되었을 때 얼마나 자주 keepalive 메시지를 내보낼 것인지 정합니다. 기본값은 2 시간입니다.
연결이 끊어졌다고 여길 때까지 keepalive probe를 얼마나 내보낼지 정합니다. 기본값은 9입니다.
얼마나 자주 probe를 내보낼지 정합니다. probe가 출발한 뒤에 tcp_keepalive_probes에 tcp_keepalive_interval을 곱한 만큼 시간이 지나면 응답하지 않는 연결을 죽입니다. 기본값은 75초입니다. 예를 들어 기본 값들을 그대로 두었을 때 11분 15초동안 재시도한 다음 연결을 취소할 것입니다.
무언가 잘못되었고, 이런 의심스런 면을 네트워크 레이어에 알리는 것이 좋겠다고 판단하기 전에 몇번 확인해 볼지 정합니다. 최소 RFC 값은 3으로, RTO에서 3초에서 8분 사이에 해당합니다.
살아있는 TCP 연결을 끊기 전에 확인하는 횟수를 정합니다. RFC1122는 100초보다 길게 제한하라 이릅니다. 하지만 너무 작은 값입니다. 기본값은 15로 RTO 13-30분에 해당합니다.
우리 쪽에서 닫은 TCP 연결을 끊기 전에 확인하는 횟수를 정합니다. 기본값은 7로 RTO 50초에서 16분 사이에 해당합니다. 여러분 머신에 웹 서버가 올라와 있다면 이 값을 줄여서 소켓 등이 귀한 리소스를 소비하지 않도록 할 수도 있습니다.
우리 쪽에서 닫을 때 FIN-WAIT-2 상태인 소켓을 잡아둘 시간을 정합니다. 상대편은 깨어진 뒤에 스스로 닫지 못하거나 뜻하지 않게 죽어버릴 수도 있습니다. 기본 값은 60초입니다. 2.2에서 일반적인 값은 180초였는데 2.4에서도 이 값을 그대로 사용할 수 있지만, 여러분 머신이 웹 서버로 부하가 많다면 죽은 소켓들이 그대로 엄청나게 쌓여 메모리가 넘쳐나는 문제가 생길 것입니다. FIN-WAIT-2 소켓은 최대 1.5K 메모리만 잡아 먹으므로 FIN-WAIT-1 소켓보다는 덜 위험합니다. 그러나 더 오래 버티는 경향이 있습니다.
시스템에서 동시에 잡아두는 timewait 소켓의 수를 정합니다. 이 값이 time-wait 소켓을 넘어서면 바로 파괴되고 경고가 출력됩니다. 이 제한은 단순한 DoS 공격을 방어하기 위해서만 필요하며, 기본값보다 작게해서는 절대 안됩니다. 네트워크 환경이 기본값보다 큰 값을 요구한다면 늘려도 됩니다 (아마, 설치된 메모리를 증설한 다음)
빠른 재생 TIME-WAIT 소켓을 사용합니다. 기본값은 1입니다. 전문가의 조언/요청이 없다면 절대 바꾸지 마세요.
시스템에 고정되었거나, 사용자 파일 핸들에 연결되지 않은 TCP 소켓의 최대 값을 지정합니다. 고아 연결이 이 값을 초과하면 즉시 리셋되고 경고를 출력합니다. 이 제한은 단순한 DoS 공격을 방어하기 위해서만 필요하며, 기본값보다 작게해서는 절대 안됩니다. 네트워크 환경이 기본값보다 큰 값을 요구하거나 오래 버티어서 그런 문제들은 더 공격적으로 죽이기 위해 네트워크를 조율한다면 늘려도 됩니다 (아마, 설치된 메모리를 증설한 다음) 한번 더 당부하자면: 고아 연결들은 스왑할 수 없는 메모리를 각자 64K 이상 잡아먹습니다.
리스닝 서비스가 새로운 연결을 수락하기에 너무 느리다면 그 서비스를 리셋합니다. 기본값은 FALSE입니다. 이 것은 갑자기 오버플로가 발생하더라도 연결이 복구된다는 뜻입니다. 리스닝 디먼이 연결을 더 빨리 수락하도록 자리잡지 못하는게 정말 확실할 때에만 이 옵션을 활성화하세요. 이 옵션을 활성화하면 여러분 서버에서 손상된 클라이언트라도 리슨합니다.
커널을 컴파일할 때 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 urg 포인터 필드 해석기가 필요할 때에 사용하세요. 대부분 오래된 BSD 해석기를 사용하는데, 리눅스가 그런 것들과 제대로 소통하지 못하는 듯 하다면 켜세요. 기본값은 FALSE
연결한 클라이언트로부터 응답 패킷을 받지 못하고 있는 접속 요청을 몇 개나 기억하고 있을지 정합니다. 기본값은 1024로 128MB 이상 메모리를 가져야합니다. 그보다 작을 때에는 128을 사용하세요. 서버가 과부하에 허덕인다면 이 값을 늘리세요. 다만 1024 보다 크게 하려면 include/net/tcp.h 파일을 열어 TCP_SYNQ_HSIZE 값을 TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog 공식에 맞추어 설정한 다음 커널을 다시 컴파일해야 합니다.
Enable window scaling as defined in RFC1323.
Enable timestamps as defined in RFC1323.
Enable select acknowledgments (SACKS).
FACK 혼잡 회피와 빠른 재선송을 가능하게 합니다. tcp_sack가 활성화되지 않았다면 값이 사용되지 않습니다.
Allows TCP to send "duplicate" SACKs.
명백한 혼잡 공지(Explicit Congestion Notification).
Maximal reordering of packets in a TCP stream. Default: 3
망가진 프린터에 Bug-to-bug 호환. 더 큰 패킷을 다시 전송해서 어떤 TCP 스택에 있는 버그를 피해갑니다.
min: TCP 소켓에서 send 버퍼를 위해 예약된 메모리 크기.Default: 4K
default: 이 값은 다른 프로토콜들에 의해 사용되는 net.core.wmem_default 값에 우선합니다. Default: 16K
max: TCP 소켓에서 자동으로 선택된 send 버퍼를 위한 최대 메모리 크기. 이 값보다 net.core.wmem_max 값이 우선합니다. Default: 128K
min: TCP 소켓에 의해 사용되는 receive 버퍼의 최소 크기. Default: 8K
default: 이 값은 net.core.rmem_default에 우선합니다. Default: 87380 바이츠.
max: receiver 버퍼에서 사용할 수 있는 최대 크기. 이 값보다 net.core.rmem_max 가 우선합니다. Default: 87380*2 bytes.
세팅되면 TCP 스택은 RFC1337을 따릅니다. 해제되면 RFC를 따르지 않지만 TCP TIME_WAIT asassination은 막아줍니다.
Default: 0
TCP나 UDP에서 로컬 포트로 선택할 포트 범위를 정합니다. 첫 숫자가 첫 번호이고, 두번째 숫자가 마지막 로컬 포트번호입니다. 기본값은 시스템에서 사용할 수 있는 메모리에 따라 정해집니다.
128Mb 보다 큰 경우 32768-61000,
128Mb 보다 작은 경우 1024-4999 혹은 더 조금.
이 숫자는 TCP 확장(timestamp) 없이 동시에 열 수 있는 접속 수를 뜻합니다. tcp_tw_recycle을 설정했다면 timestamp 지원으로 1024-4999 범위로도 초당 2000 연결이 충분합니다.
세팅되면 프로세스가 로컬 IP가 아닌 주소에 bind()할 수 있습니다. 매우 유용한 기능이지만 어떤 어플리케이션에서는 나쁠 수 있습니다.
Default: 0
0이 아닌 값을 세팅하면 동적 주소를(dynamic addresses) 지원합니다. 1보다 큰 값을 세팅하면 동적 주소가 다시 쓰여질 때마다 로그 메시지가 출력될 것입니다.
Default: 0
둘 가운데 하나라도 참이면 커널은 그 장비나 브로드캐스트/멀티캐스트 주소로 오는 모든 ICMP ECHO을 무시합니다. 만약 boardcast/multicast 주소의 ICMP ECHO 요청을 받아들이면 denial of service(DOS) packet flooding 공격에 이용 될 수 있습니다.
아래 icmp_ratemask와 일치하는 곳에서 ICMP 패킷을 보낼 수 있는 최대 빈도를 제한합니다.
0은 제한을 없애며 그 밖의 값은 최대 빈도를 의미합니다.
Default: 1
매스크는 빈도를 제한할 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)
어떤 라우터들은 브로드캐스트 프레임에 거짓 응답(bogus responses)을 해서 RFC 1122를 위반합니다. 그런 경우 일반적으로 커널 경고를 통해 기록됩니다. 이 값이 참이면 커널은 그런 경고를 남기지 않습니다. Default: FALSE
커널을 위한 내부 타임유닛입니다. i386에서 1/100 초, 알파에서 1/1024 초입니다. 여러분 시스템에 딱 맞는 값이 궁금하면 /usr/include/asm/param.h 에서 HZ define을 보세요.
멀티캐스트 그룹에 참여할 수 있는 최대 값을 바꿉니다.
Default: 20
conf/all/* 아래 있는 것들은 모든 인터페이스에 적용할 값들입니다.
불가능한 주소를 가진 패킷들을 커널 로그에 기록합니다.
ICMP redirect 메시지를 허용합니다.
TRUE (host) FALSE (router)
지정한 인터페이스에서 IP 포워딩을 허용합니다.
멀티캐스트 라우팅을 지원합니다. CONFIG_MROUTE 옵션을 넣어 커널을 컴파일해야 하며 mrouted 등 멀티캐스트 라우팅 디먼이 필요합니다.
프록시 ARP 는 지정한 인터페이스와 연결된 다른 호스트의 ARP 주소를 대신 뿌려주고, 받습니다. 투명하게 동작하는 네트워크 장비에 반드시 필요합니다.
RFC1620 미디어 공유 리다이렉트를 보내거나(라우터) 수락(호스트)합니다. 이 옵션 값이 0이면 한 장치에 설정된 서로 다른 서브넷을 직접 통신할 수 없습니다.
default TRUE
디폴트 게이트웨이 목록에 올라있는 게이트웨이에만 ICMP 리다이렉트 메시지를 허용합니다.
default TRUE
라우터라면 다른 호스트로 ICMP 리다이렉트를 보냅니다. Default: TRUE
BOOTP 릴레이 디먼이 있어야합니다
default FALSE
Not Implemented Yet.
SRR 옵션으로 소스 라우팅 패킷들을 허용합니다.
default TRUE (router) FALSE (host)
이 값이 참이면 패킷 경로를 출발지에서 조작할 수 있으므로 IP 스푸핑 등에 악용될 수 있습니다
1 - RFC1812 권고에 따라 한쪽 네트워크만 연결된 호스트나 쪼개진 네트워크에서 라우터는 역경로 추적을 통해 출발지가 유효한지 판단합니다. 네트워크에서 네트워크로 연결하는 라우터에서 이 옵션을 1로 설정하면, 방화벽 규칙을 더 추가하지 않고, 내부 네트워크에서 시도하는 스푸핑 공격을 막습니다 (외부 스푸핑과 상관 없습니다).
느리고 불안정한 프로토콜을(RIP 따위) 사용하는 통짜 네트워크나 고정 라우트에서는 문제를 일으킬 수 있습니다.
기본값 0 - 소스 경로를 검사하지 않습니다.