Jump to content

sysctl

From DawoumWiki, the free Mathematics self-learning

sysctl
Written inC
Operating systemUnix-like (BSD)
TypeSystem configuration

sysctl은 버전 번호, 최대 제한, 및 보안 설정과 같은 시스템 커널의 속성을 읽고 수정하는 일부 유닉스-계열 운영 시스템의 소프트웨어 유틸리티입니다.[1] 그것은 컴파일된 프로그램에 대한 시스템 호출과 대화식 사용과 스크립팅을 위한 관리자 명령 둘 다로 사용할 수 있습니다. 리눅스는 추가로 sysctl을 가상 파일 시스템으로 노출합니다.

Linux

리눅스에서, sysctl 인터페이스 메커니즘은 /proc/sys 디렉토리 아래에 procfs의 일부로 내보내집니다 (/sys 디렉토리와 혼동해서는 안됩니다). 이 차이는 일부 매개변수의 값을 확인하려면 가상 파일 시스템에서 파일을 열고, 내용을 읽고, 구문 분석하고, 파일을 닫아야 함을 의미합니다. sysctl 시스템 호출은 리눅스에 존재하지만, 더 이상 사용되지 않고 glibc래퍼 함수를 가지지 않습니다; CONFIG_SYSCTL_SYSCALL 없이 커널을 구성하는 많은 배포판 때문에 일반적으로 사용할 수 없습니다; 따라서 사용을 권장하지 않습니다.[2]

kernel tuning

보통 /etc/sysctl.conf에 쓰인 내용을 적용합니다. 게다가, 특정 프로그램이 설치되면서, 해당 프록그램에 최적화되도록 설정이 일부 수정되는데, /etc/sysctl.d/ 디렉토리 아래의 파일에 기록됩니다:

# Virtual Memory Tweaks
vm.swappiness = 1
vm.dirty_ratio = 3
vm.dirty_background_ratio = 2
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000
vm.vfs_cache_pressure = 60
vm.dirty_background_bytes = 4194304
vm.dirty_bytes = 4194304

# filesystem
fs.file-max = 65535

# Exec Shield
kernel.randomize_va_space = 0

# Networking Tweaks
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 65536 
net.core.optmem_max = 65536
net.core.rmem_default = 1048576
net.core.wmem_default = 1048576
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.udp_rmem_min = 16384
net.ipv4.udp_wmem_min = 16384
net.ipv4.tcp_rmem = 4096 12582912 16777216
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240 65535
net.ipv4.tcp_fastopen = 3

# icmp redirects를 보내지 않는다.
net.ipv4.conf.enp4s0.accept_redirects=0
net.ipv4.conf.lo.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.enp4s0.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.send_redirects = 0
 
# proxy arp를 설정하지 않는다.
net.ipv4.conf.enp4s0.proxy_arp=0
net.ipv4.conf.lo.proxy_arp=0
net.ipv4.conf.default.proxy_arp=0
net.ipv4.conf.all.proxy_arp=0
 
# 게이트웨이로부터의 redirect를 허용하지 않음으로써 스푸핑을 막기 위해 설정한다.
net.ipv4.conf.enp4s0.secure_redirects=0
net.ipv4.conf.lo.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0
net.ipv4.conf.all.secure_redirects=0
 
# 스푸핑을 막기 위해 source route 패킷을 허용하지 않는다.
# 소스 라우팅을 허용할 경우 악의적인 공격자가 IP 소스 라우팅을 사용해서 목적지의
# 경로를 지정할 수도 있고, 원래 위치로 돌아오는 경로도 지정할 수 있다. 이러한 소스 라우팅이
# 가능한 것을 이용해 공격자가 마치 신뢰받는 호스트나 클라이언트인 것처럼 위장할 수 있는 것이다.
net.ipv4.conf.enp4s0.accept_source_route=0
net.ipv4.conf.lo.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.conf.all.accept_source_route=0
 
# Broadcast로부터 오는 핑을 차단함(Smurt 공격을 차단함).
net.ipv4.icmp_echo_ignore_broadcasts=1
 
# IP 나 TCP 헤더가 깨진 bad icmp packet을 무시한다.
net.ipv4.icmp_ignore_bogus_error_responses = 1
 
# 자신의 네트워크가 스푸핑된 공격지의 소스로 쓰이는 것을 차단한다.
# 모든 인터페이스에서 들어오는 패킷에 대해 reply를 하여 들어오는 인터페이스로 나가지 못하는 패킷을 거부한다.
net.ipv4.conf.enp4s0.rp_filter = 2
net.ipv4.conf.lo.rp_filter = 2
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
 
# bootp 패킷을 허용하지 않는다.
net.ipv4.conf.enp4s0.bootp_relay=0
net.ipv4.conf.lo.bootp_relay=0
net.ipv4.conf.default.bootp_relay=0
net.ipv4.conf.all.bootp_relay=0
 
# 스푸핑된 패킷이나 소스라우팅, Redirect 패킷에 대해 로그파일에 정보를 남긴다.
net.ipv4.conf.enp4s0.log_martians = 1
net.ipv4.conf.lo.log_martians = 1
net.ipv4.conf.default.log_martians = 1
net.ipv4.conf.all.log_martians = 1
 
# 1/100초에 받아들이는 igmp "memberships"의 수
net.ipv4.igmp_max_memberships=1
 
# 매우 복잡한 사이트에서는 이 값을 늘리는 것도 가능하지만 64로 두는 것이 적당하며
# 더 늘렸을 경우에는 큰 문제가 발생할 수도 있다.
net.ipv4.ip_default_ttl=64
 
# 게이트웨이 서버가 아닌 이상 패킷을 포워딩 할 필요는 없다.
net.ipv4.ip_forward=0
 
# fragmented packet이 메모리에 존재하는 시간을 15초로 설정한다.
net.ipv4.ipfrag_time=15
 
# SYN_Flooding 공격에 대한 대비로 백로그큐(Backlog Queue)가 가득차면 다른 접속 요구를 받아들이지 못한다.
net.ipv4.tcp_max_syn_backlog = 65536 
 
net.ipv4.tcp_max_tw_buckets = 65536
net.ipv4.tcp_slow_start_after_idle = 0

# TCP 연결에서 Three-way Handshake가 성공적으로 이루어지지 않으면 더 이상 소스 경로를 거슬러 올라가지 않도록한다.
# 따라서 적절한 연결 요청에 대해서만 연결을 맺는다.
# syncookies가 작동할 때 SYN Flooding 공격이 있으면 messages 파일에 아래와 같은 내용이 출력된다.
# possible SYN flooding on port 80. Sending cookies.
net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_rfc1337 = 1

# 일정한 시간과 IP별로 보내고 받는 SYN 재시도 횟수를 3회로 제한한다.
# 이 옵션은 스푸핑된(위조된) 주소로 오는 SYN 연결의 양을 줄여준다.
# 기본 값은 5(180 초에 대응)이며 255를 넘지 않아야 한다.
net.ipv4.tcp_syn_retries = 3
 
# passive TCP 접속시도가 재접속을 하기 위한 SYNACKs의 값을 정한다. 255 보다 높
# 게 지정할 수 없다. 기본값은 5이며, 180초에 대응이 된다.
net.ipv4.tcp_synack_retries = 3
 
# 무언가 문제가 있을 때 연결을 위해 재시도 할 횟수, 최소 값과 기본 값은 3이다.
net.ipv4.tcp_retries1 = 3
 
# TCP 연결을 끊기 전에 재시도할 횟수.
net.ipv4.tcp_retries2 = 7
  
# 연결을 종료시 소요되는 시간을 줄여준다(기본 설정값: 60).
net.ipv4.tcp_fin_timeout = 20
 
net.ipv4.tcp_window_scaling = 1

net.ipv4.tcp_mtu_probing = 1

# 연결이 끊어졌다고 판단할 때까지, 얼마나 keepalive probe 를 보낼지 결정. 기본값 9회
# 간단한 DoS 공격을 막아준다.
net.ipv4.tcp_keepalive_probes = 6
 
# keepalive 가 활성되 되어 있을 경우, 얼마나 자주 TCP 가 keepalive 메세지를 보
# 내게 할 것인지를 설정.
net.ipv4.tcp_keepalive_time = 60
 
# keepalive_probes 를 보낼 간격을 정함. probe 를 보낸 후, probes * intvl 의 시
# 간이 지나도록 응답이 없으면 연결이 해제된 것으로 간주하게 됨. 기본 값의 사용
# 시 11분 15초 동안 재시도를 하고 연결을 취소함. 값은 초단위
net.ipv4.tcp_keepalive_intvl = 10
 
# 서버 쪽에서 닫은 TCP 연결을 끊기 전에 확인하는 횟수를 정한다. 기본 값은 7 로
# RTO 50 초에서 16 분 사이에 해당한다. 웹 서버가 운영 중 이라면 이 값을 줄여서
# 소켓 등이 귀한 리소스를 소비하지 않도록 할 수도 있다.
net.ipv4.tcp_orphan_retries = 2
 
# SYN 패킷을 전송한 후에 로스가 발생을 하여 ACK 를 일부 받지 못했을 경우, 선택
# 적으로 (selected) 받지못한 ACK 만 받도록 요청하는 것을 허락한다. 로스가 많은
# 네트워크에서는 상당히 중요한 역할을 한다.
net.ipv4.tcp_sack = 1

# for lol
net.ipv4.tcp_timestamps = 0

# disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

다음과 같음 메시지가 출력됩니다.

  • sudo systemctl status avahi-daemon
IP_ADD_MEMBERSHIP failed: No buffer space available
  • sudo vi /etc/sysctl.conf
net.ipv4.igmp_max_memberships=3
  • sudo sysctl -p
  • sudo systemctl restart avahi-daemon
위의 값을 2로 주고 확인한 후에 점차 숫자를 높여서 확인하십시오.

See also

References

  1. ^ "sysctl(7) — system information variables". BSD Cross Reference. NetBSD. {{cite web}}: Unknown parameter |lay-url= ignored (help)
  2. ^ "sysctl(2): read/write system parameters". man7.org. 2017-09-15. Retrieved 2018-01-04.

External links