RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'sysctl'에 해당되는 글 1

출처 : 대전국제IT교육센터 정성재 강사

 

1. sysctl 이란?
sysctl 명령은 커널 변수의 값을 제어하여 시스템을 최적화할 수 있는 명령이다. sysctl은 시스템의
/proc/sys 디렉토리밑에 있는 커널 매개변수를 제어한다. 이 디렉토리 밑으로 존재하는 디렉토리를
구분하는 '/'는 sysctl 명령이용시에는 '.'으로 대체한다.


2. 일반적인 커널 매개변수의 변경법
(1) 설명: 일반적으로 커널 매개변수를 변경하려면 /proc 디렉토리밑에 있는 항목들을 vi편집기를
          이용하여 값을 변경하거나 echo명령을 이용하여 값을 변경한다.
(2) 예: ping에 응답하지 않도록 설정해보자.
   1) ping과 관련된 파일: /proc/sys/net/ipv4/icmp_echo_ignore_all 이라는 파일이다.
   2) 값 확인
     [root@www root]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
     0
      => 현재 이 파일의 값이 0이다. 파일이름을 해석해보면 icmp 패킷에 대한 응답을 전부 무시할
        것이냐는 뜻인데 값이 0(no)이다. 즉 ping에 대한 응답을 하겠다는 뜻이다. ping에 응답을
        하지 않으려면 이 값을 1로 바꾸어주면 된다.
   3) 값 변경
     [root@www root]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
     [root@www root]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
     1
      => 앞으로 ping에 응답하지 않는다.

3. sysctl 명령어
(1) 설명: /proc 디렉토리밑에 있는 항목들을 직접 편집하거나 echo 명령을 사용하는 것이외에
          sysctl명령을 이용하여 설정할 수 있다.
(2) 사용법
   sysctl option [파일명 or 파일명=값 등]
(3) option
   -a : 현재 커널 매개변수와 값을 보여준다.
   -p : sysctl 환경변수파일(기본값은 /etc/sysctl.conf)의 설정상태를 보여준다.
   -n : 특정키에 대한 값을 보여준다.
   -w variable=value : 변수에 값을 설정한다.
   -A : 테이블형태로 설정가능한 파라미터를 보여준다. -a와 같다.
(4) 사용예
   1) [root@www root]# sysctl  -a
      ------생략----------
      net.ipv4.route.min_delay = 2
      net.ipv4.icmp_ignore_bogus_error_responses = 0
      net.ipv4.icmp_echo_ignore_broadcasts = 0
      net.ipv4.icmp_echo_ignore_all = 1
      ------생략-----------
     => 현재 설정된 커널 매개변수와 값을 출력해준다.
   2) [root@www root]# sysctl -p /etc/sysctl.conf
      net.ipv4.ip_forward = 0
      net.ipv4.conf.default.rp_filter = 1
      kernel.sysrq = 0
      kernel.core_uses_pid = 1
       => 해당파일(/etc/sysctl.conf)에 대한 설정상태를 보여준다. 여기서는 기본값과 같으므로
         -p옵션다음에 /etc/sysctl.conf를 생략해도 결과는 같게 나온다.
   3) [root@www root]# sysctl -n net.ipv4.icmp_echo_ignore_all
      1
       => /proc/sys/net/ipv4/icmp_echo_ignore_all파일의 값을 보여준다.
   4) [root@www root]# sysctl -w net.ipv4.icmp_echo_ignore_all=0
      net.ipv4.icmp_echo_ignore_all = 0
       => /proc/sys/net/ipv4/icmp_echo_ignore_all 파일의 값을 0으로 한다.
(5) 참고: 커널매개변수 변경시 vi를 사용하든지, echo명령을 사용하던지, sysctl명령을 사용하던지
          재부팅하면 값이 초기화된다. 그러므로 계속적으로 값을 반영시키려면 /etc/sysctl.conf
          파일에 등록하면 된다. 물론 쉽게 /etc/rc.d/rc.local파일에 등록해도 된다.

4. 주요항목분석
(1) /proc/sys/net/ipv4/icmp_echo_ignore_all
   1) 설명: ping에 의한 응답을 하지 않게 할 수 있다.
   2) 사용법
     sysctl -w net.ipv4.icmp_echo_ignore_all=1
     echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
(2) /proc/sys/net/ipv4/tcp_syncookies
   1) 설명: SYN Flooding 공격을 막을 때 유용한 항목으로 SYN패킷의 도착빈도가 일정한 횟수보다
           많을 때 해당 요청을 허용하지 않을 때 사용한다.
   2) 사용법
     sysctl -w net.ipv4.tcp_syncookies=1
     echo 1 > /proc/sys/net/ipv4/tcp_syscookies
   3) 참고: SYN FLOODING 공격
     TCP 프로토콜에서 두 시스템이 연결이 되려면 클라이언트에서 서버로 연결을 하기위해서 "연결
    을 요청합니다."라는 의미의 SYN패킷을 보낸다. 서버는 이것에 대한 응답으로 SYN/ACK패킷을
    클라이언트에게 보내고, 클라이언트는 서버에게 ACK패킷을 보냄으로서 연결이 된다. 이것을 3
    WAY HANDSHAKING이라고 부른다. SYN Flooding 공격은 이 3 Way Handshaking의 약점을 이용한다.
    공격 시나리오는 다음과 같다.
      ㄱ. 존재하지 않는 IP주소를 소스 어드레스로 사용하여 SYN패킷을 Target에 전송한다.
      ㄴ. Target은 SYN/ACK패킷을 보내고 SYN_RCVD상태로 전환한다.
      ㄷ. ACK로 응답하는 시스템이 없으므로 Target은 일정시간동안 계속 패킷을 보내고, SYN_RCVD
        상태에서 대기한다.
      ㄹ. 공격자는 target의 TCP Connection pool이 꽉차게 되므로 새로운 커넥션을 형성하지 못하
         게 된다.
(3) /proc/sys/net/ipv4/tcp_max_syn_backlog=1024
   1) 설명: TCP프로토콜에서 한 소켓이 동시에 SYN요청을 처리하기에기는 한계가 있는데 이 한계가
           백로그(backlog)이다. 백로그는 연결 요청이 아직 완전히 처리되지 아니한 대기상태에
           있는 큐의 길이이다. 이 백로그 큐가 꽉차게 되면 이후 들어오는 SYN요청은 무시되며
           이러한 공격이 위에서 말한 SYN Flooding공격이다. 그러나, 백로그를 무조건 늘리는 것이
           꼭 좋은 것만은 아니다. 또한 1024이상으로 설정하려면 커널소스를 수정해야 한다.
   2) 사용법
     echo 1024 > /proc/sys/net/ipv4/tcp_max_syn_backlog
     sysctl -w net.ipv4.tcp_max_syn_backlog=1024
(4) /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
   1) 설명: 브로드캐스트 주소에 ping을 쏘는 것을 막는다. smurf공격을 막을 수 있다. 이 공격을
           막기 위해서 값을 1로 한다.
   2) 사용법
      sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
      echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
   3) 참고: Smurf 공격
     과거 유행했던 DoS 공격의 한 방법으로 공격자가 Source IP Address를 Target으로 위장하여
    네트워크로 ICMP echo request를 보내어 Target이 정상적으로 서비스를 할 수 없도록 만드는
    기법이다.
(5) /proc/sys/net/ipv4/conf/all/accept_source_route
   1) 설명: 라우팅과 라우팅 프로토콜은 몇가지 문제점을 생성해 내는데 목적지의 경로에 대한
           세부적인 내용을 담고 있는 IP 소스 라우팅은 목적지 호스트에서도 같은 경로를 따라
           반응을 해야 한다는 문제점이 있다. 크래커가 특정 네트워크에 소스 라우팅 패킷을 보낼
           수 있다면 돌아오는 반응을 가로채서 상대방의 호스트와 신뢰받은 호스트처럼 속일 수
           있게된다. 이 기능을 사용하지 못하게 값을 0으로 한다.
   2) 사용법
     echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
     sysctl -w  net.ipv4.conf.all.accept_source_route=0
(6) /proc/sys/net/ipv4/conf/all/rp_fiter
   1) 설명: IPv4는 인증 매카니즘을 가지고 있지 않기 때문에 Source IP Address를 조작할 수 있다.
           rp_filter는 패킷이 들어오는 인터페이스와 나가는 인터페이스가 같은 지를 검사한다.
           값을 1로 하면 된다.
   2) 사용법
     echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
     sysctl -w net.ipv4.conf.all.rp_filter=1
   3) 참고: Spoofed IP 패킷
    ㄱ. 외부에서 오는 패킷이 사설 IP인 경우
    ㄴ. 들어오는 인터페이스와 나가는 인터페이스가 다른 경우
    ㄷ. IANA(Internet Assigned Numbers Authority, 인터넷 할당 번호 관리 기관)에서 예약한 IP
       Address가 로컬 IP인 경우
    ㄹ. 로컬에서 나가는 패킷의 Source IP Address가 로컬 IP가 아닌 경우
(7) /proc/sys/net/ipv4/conf/all/log_martians
   1) 설명: 이 파일은 스푸핑 패킷과 redirect된 패킷의 기록을 남길 지 여부를 지정하는 파일이다.
           기본값은 '0'으로 기록을 남기지 않는다. 값을 '1'로 바꾸면 패킷을 기록한다.
   2) 사용예
     echo 1 > /proc/sys/net/ipv4/conf/all/log_martians
     sysctl -w net.ipv4.conf.all.log_martians=1
(8) /proc/sys/net/ipv4/tcp_fin_timeout
   1) 설명: 이 파일은 TCP 세션 종료후에 얼마나 세션연결을 유지하고 있을지를 초단위로 값으로
           설정되어 있는 파일이다. 기본값은 60초이다. telnet이나 ftp등을 이용하여 서버에 접속
           하다가 예기치 못한 상태에서 연결이 종료되는 경우가 있다. 이런 경우에 TCP 세션의
           연결 상태 지속여부를 결정하는 값이다. 10-20초 정도로 설정해도 무방하다.
   2) 사용법
     echo 20 > /proc/sys/net/ipv4/tcp_fin_timeout
     sysctl -w  net.ipv4.tcp_fin_timeout=20
(9) /proc/sys/net/ipv4/tcp_keepalive_time
   1) 설명: TCP 연결상태를 계속 유지시키기 위한 시간 설정이다. 기본 초단위로 7200, 즉 2시간이
           기본값이다. 20-30분정도로 설정하는 것도 서버의 자원을 효율적으로 이용한다는 측면에
           서 매우 유익하다.
   2) 사용법
     echo 1800 > /proc/sys/net/ipv4/tcp_fin_timeout
     sysctl -w  net.ipv4.tcp_keepalive_time=1800
(10) /proc/sys/net/ipv4/ip_forward
   1) 설명: 인터넷 공유나 IP 마스커레이드등 하나의 서버에서 IP를 공유하여 포워딩을 가능하게
           할 것인지 여부를 지정하는 파일이다. 기본값은 '0'으로 포워딩이 불가능하다. 포워딩
           이 가능하게 하려면 값을 '1'로 지정한다.
   2) 사용법
     echo 1 > /proc/sys/net/ipv4/ip_forward
     sysctl -w  net.ipv4.ip_forward=1
(11) /proc/sys/net/ipv4/ip_local_port_range
   1) 설명: 서버내의 TCP와 UDP에서 사용할 수 있는 포트범위의 값을 지정하고 있는 파일이다.
   2) 사용법
     echo 32768   61000 > /proc/sys/net/ipv4/ip_local_port_range
     sysctl -w net.ipv4.ip_local_port_range='32767   60999'
(12) /proc/sys/net/ipv4/tcp_timestamps
   1) 설명: 이 값은 외부에서 서버의 날짜정보를 확인가능하게 할 것인지를 지정하고 있는 파일이
           다. 기본값은 '1'로 외부에서 날짜정보확인이 가능하다. 날짜정보를 확인 불가하게 하려
           면 값은 '0'으로 바꾼다.
   2) 사용법
     echo 0 > /proc/sys/net/ipv4/tcp_timestamps
     sysclt -w net.ipv4.tcp_timestamps=0
(13) /proc/sys/net/ipv4/conf/all/accept_redirects
   1) 설명: 이 파일은 redirect 관련 패킷을 허가할 것인지를 결정하는 파일로 기본값은 '1'로 허가
           하도록 되어 있다. 다시 설명하면 ICMP redirect 패킷은 서버의 routing 경로를 확인하는
           역할은 한다. 이러한 패킷을 차단할 수 있다.
   2) 사용예
     echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
     sysctl -w net.ipv4.conf.all.accept_redirects=0
(14) /proc/sys/net/ipv4/conf/all/send_redirects
   1) 설명: 이 파일은 서버에서 나가는 ICMP redirect패킷을 허가할 것인지를 결정하는 파일로 기본
           값은 '1'로 허가하도록 되어 있다. 이 값을 '0'으로 설정하면 ICMP redirect이 나가는 것
           을 막을 수 있다.
   2) 사용예
     echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
     sysctl -w net.ipv4.conf.all.send_redirects=0
(15) /proc/sys/fs/file-max
   1) 설명: 커널에서 최대로 사용가능한 파일 수를 지정하는 파일이다. 적당히 조절할  수 있다.
   2) 사용예
     echo 52422 > /proc/sys/fs/file-max
     sysctl -w fs.file-max=50000
(16) /proc/sys/fs/file-nr
   1) 설명: 현재 커널에서 사용중인 파일 수등을 기록하고 있는 파일이다.
   2) 확인
     [root@www fs]# cat /proc/sys/fs/file-nr
     1653    191     52422
      => 첫번째값은 커널에서 현재 오픈가능한 최대 파일 수를 나타내고, 두번째값은 커널에서 현재
        사용중인 파일 수이며, 세번째값은 커널에서 최대로 오픈할 수 있는 파일 수를 나타낸다.

우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
OperatingSystem (5)
Databases (4)
Tips! (1)
OpenSource (1)
«   2018/01   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
  1. 2012/12 (2)
  2. 2012/04 (3)
  3. 2012/03 (6)
  4. 2012/02 (6)
  5. 2012/01 (2)