리눅스 sysctl
IT위키
더 많은 작업
- 실행 중인 리눅스 커널의 매개변수(커널 변수)를 조회하고 바꾼다.
- 리눅스에서만 지원
- 경로 : /usr/sbin/sysctl (예전 배포판은 /sbin/sysctl)
- 패키지 : procps-ng (데비안 계열은 procps)
커널 변수는 /proc/sys 아래에 파일 하나씩으로 드러나 있다. sysctl 이 쓰는 변수 이름은 그 경로에서 /proc/sys/ 를 빼고 / 를 . 으로 바꾼 것이다.
| sysctl 변수 이름 | /proc 파일 |
|---|---|
| net.ipv4.ip_forward | /proc/sys/net/ipv4/ip_forward |
| net.ipv4.tcp_keepalive_time | /proc/sys/net/ipv4/tcp_keepalive_time |
그래서 같은 값을 바꾸는 방법이 두 가지다. 둘 다 곧바로 적용되지만 재부팅하면 원래 값으로 돌아간다.
# sysctl -w net.ipv4.ip_forward=1 # echo 1 > /proc/sys/net/ipv4/ip_forward
재부팅 뒤에도 남기려면 /etc/sysctl.conf 나 /etc/sysctl.d/*.conf 에 변수 = 값 꼴로 적고 sysctl -p(또는 sysctl --system)로 읽어 들인다.
sysctl [옵션] [변수[=값]] ...
- -a, --all : 모든 커널 변수와 값을 출력한다.
- -w, --write :
변수=값으로 값을 바꾼다. - -p [파일], --load : 파일(기본 /etc/sysctl.conf)에 적힌 설정을 읽어 적용한다.
- --system : /etc/sysctl.d, /run/sysctl.d, /usr/lib/sysctl.d 와 /etc/sysctl.conf 를 모두 읽어 적용한다.
- -n : 변수 이름 없이 값만 출력한다.
- -e : 모르는 변수에 대한 오류를 무시한다.
| 변수 | 뜻 | 기본값 |
|---|---|---|
| net.ipv4.ip_forward | 1 이면 다른 호스트로 가는 패킷을 넘겨준다(라우터 역할) | 0 |
| net.ipv4.icmp_echo_ignore_all | 1 이면 모든 ping(ICMP Echo 요청)에 응답하지 않는다 | 0 |
| net.ipv4.icmp_echo_ignore_broadcasts | 1 이면 브로드캐스트 ping 에 응답하지 않는다(스머프 공격 방어) | 1 |
| net.ipv4.tcp_syncookies | 1 이면 SYN 쿠키로 SYN 플러딩을 막는다 | 1 |
| net.ipv4.tcp_max_syn_backlog | SYN_RECV 상태로 기다릴 수 있는 연결 수 | 메모리 크기에 따라 다르다 |
| net.ipv4.tcp_keepalive_time | 데이터가 오가지 않는 연결을 확인 없이 유지하는 시간. 이 시간이 지나면 상대가 살아 있는지 묻는 keepalive 패킷을 보낸다. 단위는 초 | 7200 (2시간) |
| net.ipv4.tcp_keepalive_intvl | keepalive 패킷에 응답이 없을 때 다시 보내는 간격(초) | 75 |
| net.ipv4.tcp_keepalive_probes | 응답이 없을 때 몇 번 더 보내고 연결을 끊을지 | 9 |
| net.ipv4.tcp_fin_timeout | 먼저 연결을 끊은 쪽이 FIN_WAIT2 상태로 상대의 FIN 을 기다리는 시간(초). 열린 연결을 유지하는 시간이 아니다 | 60 |
| kernel.hostname | 호스트 이름 | |
| fs.file-max | 시스템 전체에서 열 수 있는 파일 수 | |
| vm.swappiness | 스왑을 얼마나 적극적으로 쓸지. 클수록 일찍 스왑한다 | 60 |
3시간은 10800 초이므로 tcp_keepalive_time 에 10800 을 넣는다.
# echo 10800 > /proc/sys/net/ipv4/tcp_keepalive_time # sysctl -w net.ipv4.tcp_keepalive_time=10800 # sysctl net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_time = 10800