리눅스 커널 설정 sysctl 명령어
리눅스 시스템은 핵심적인 역할을 수행하는 커널(Kernel)과 관련된 다양한 매개변수를 제공 하고 있다.
리눅스 관리자는 sysctl 명령어를 사용하여 커널의 매개변수 값을 변경함으로써 시스템의 성능을 향상시키고, 보안을 강화할 수 있다.
또한 /proc/sys 디렉터리에서 커널 제어를 위한 매개변수들을 보관하고, 하위 디렉터리에 있는 항목들을 echo 명령과 > 기호를 이용해 변경할 수 있다.
시스템의 성능과 보안 관련된 디렉터리는 kernel, fs, net, vm이다.
kernel은 IPC와 관련된 Internal Message Queue, Semaphore 등 설정하는 매개변수
fs는 파일 시스템 관련 매개변수
net은 TCP, ICMP 등 네트워크 관련 매개변수
vm은 메모리 관련 변수가 들어있다.
주요 매개변수
서버로 사용되는 경우가 많은 리눅스 특성 상 네트워크 관련 커널 매개변수가 상당히 많은 편으로 몇 개만 정리하려고 한다. 커널 매개 변수는 /proc/sys/net 디렉터리에 위치해있고 주요 디렉터리에는 core, ipv4, ipv6, netfilter가 있다.
core : 네트워크 기본 설정 관련 커널 매개변수
ipv4 : ipv4 관련 커널 매개 변수
ipv6 : ipv6 관련 커널 매개 변수
netfilter : 네트워크 필터링 관련 매개 변수
수치형 매개변수
커널 매개변수 | 기본값 | 설명 |
ipv4/tcp_keepalive_time | 7200 | TCP연결 상태를 계속 유지하기 위한 시간설정, 초 단위 |
ipv4/tcp_max_syn_backlog | 128 | TCP 프로토콜에서 하나의 소켓이 동시에 SYN요청의 한계인 백로그(backlog) 설정, 백로그 큐가 다차면 이 후 SYN요청 무시 |
ipv4/tcp_fin_timeout | 60 | TCP 세션 종료 후에 얼마나 세션 유지할지 초단위 설정 |
ipv4/tcp_synack_retries | 5 | 일정 시간 내에 IP주소별로 보내고 SYN패킷의 재시도 횟수 제한 |
활성/비활성 매개변수
커널 매개변수 | 기본값 | 설명 |
ipv4/icmp_echo_ignore_all | 0 | ping과 같은 ICMP 패킷에 대한 응답 여부결정 매개변수 값이 0이면 응답, 1이면 응답하지 않음 |
ipv4/tcp_syncookies | 1 | SYN Flooding 공격을 막을 때 유용한 항목, 기본값 1로 설정 |
ipv4/ip_forward | 1 | 하나의 서버에서 ip를 공유하여 포워딩 가능할 것 인지 여부 설정 1이면 가능, 0이면 불가능 |
커널 매개변수 제어 명령어 (sysctl)
sysctl [option] [변수]
sysctl [option] [변수=값]
-a, -A : 커널 매개변수와 값을 모두 출력 (--all)
-p [파일명] : 환경 변수 파일에 설정된 값 출력 , 파일명 미 지정시 /etc/sysctl.conf 파일 적용 (--load=파일명)
-n : 특정 매개 변수에 대한 값 출력 (--values)
-w [변수=값] : 매개변수의 값 설정(--write)
sysctl 명령어는 커널 매개변수(Kernel parameter) 의 값을 제어하여 시스템을 최적화하는 명령이다.
즉, /proc/sys 디렉터리에 존재하는 매개변수 제어하는 명령으로 /proc/sys 를 최상위 디렉터리(root)로 인식한다.
해당 설정을 재부팅 시에도 계속적으로 반영하기 위해서는 /etc/stsctl.conf 파일에 등록해야 한다.
[사용 예시]
# sysctl -w net.ipv4.icmp_echo_ignore_all=1
-> ping 명령에 대한 응답을 거부하도록 설정한다.