커피닉스, 시스템 엔지니어의 쉼터 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
* HanIRC의 #coffeenix 방
[ 장비 및 회선 후원 ]
HOME > 네트워크(network) 도움말
검색 : 사이트 WHOIS 웹서버 종류

TCP/IP, 프로토콜, 포트 (11, 글 2, 자료 25)
인터넷 접속 (1, 글 3)
웹 서버(web, httpd, apache) (48, 글 42, 자료 31)
메일 서버(mail) (31, 글 42, 자료 23)
네임서버(name server, dns, bind) (15, 글 18, 자료 4)
FTP 서버 / rsync / 미러링 / CVSup (12, 글 13, 자료 9)
망관리 / SNMP / QoS (13, 자료 16)
삼바 (samba) (4, 글 1, 자료 5)
프락시 서버(프록시, proxy server) (6, 글 3, 자료 2)
네트워크 툴 (15, 글 1, 자료 11)
클러스터링(cluster) (6, 자료 1)
장비 / 라우터 / 스위칭 (8, 글 3, 자료 8)
IRC (Internet Relay Chat) / 메신저 (6)
ssh / telnet (10, 글 3, 자료 2)
NFS / SHFS (5, 자료 2)
VPN 서버, FreeS/WAN (4)
DHCP (1, 자료 1)
LDAP (3, 자료 1)
SAN / NAS / 스토리지 (4, 글 2, 자료 6)
음악방송 / icecast (3, 글 1)

  FreeBSD에서 Limiting open port RST response... 처리 작성일 : 2007/07/11 17:06
 
  • 글쓴이 : 좋은진호 ( http://coffeenix.net/ )
  • 조회수 : 8709
          [ 이전화면 / 수정 ]   비밀번호 :     인쇄용 화면
      제  목 : FreeBSD에서 Limiting open port RST response... 처리
    작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
    작성일 : 2007.1.4(목)
    정리일 : 2007.7.10(화)

    FreeBSD 서버에 'Limiting (open|closed) port RST response from ??? to 200 packets per second' 의 로그가 많이 쌓여있다면 외부로 부터 SYN 패킷이 과도하게 들어와 RST 응답을 서버에서 보낸 것이다. 200이란 숫자는 FreeBSD에서 1초당 RST 응답을 200개까지 보내지도록 제한되어 있기 때문이다. 'open port'로 표시되면 열려진 포트로, 'closed port'이면 닫혀진 포트로의 요청이 들어온 것이다. 이러한 공격성 패킷을 차단해보자.

     
    Jan  3 16:08:03 ??? /kernel: Limiting open port RST response from 257 to 200 packets per second
    Jan  3 16:08:35 ??? /kernel: Limiting open port RST response from 380 to 200 packets per second
    Jan  3 16:08:37 ??? /kernel: Limiting open port RST response from 238 to 200 packets per second
    Jan  3 16:08:38 ??? /kernel: Limiting open port RST response from 253 to 200 packets per second
     


    1. tcpdump로 IP 확인하기

    tcpdump( http://www.tcpdump.org/ )로 패킷을 살펴보자.

     
    # tcpdump -pn 'tcp[tcpflags] & (tcp-rst|tcp-syn) != 0'
    # tcpdump -pn 'tcp[tcpflags] & tcp-syn != 0'
    # tcpdump -pn 'tcp[tcpflags] & (tcp-rst|tcp-syn) != 0' and dst host 서버_IP
     


    -p 옵션은 promiscuous  mode로 전환하지 않고, -n 은 DNS loookup을 하지 않는다. 그 다음 표현이 중요한 부분으로 TCP flags중에 RST, SYN flags가 set되어 있는 패킷의 해더만 표시하라는 것이다. SYN 패킷을 보려면 'tcp[tcpflags] & tcp-syn != 0' 과 같이 하면 된다. 패킷이 서버로 들어오는 것만 보면 되므로 'and dst host 서버_IP' 를 추가하여 보다 세밀한 조건을 부여할 수가 있다.

     
    09:49:52.225313 xxx.127.127.158.1837 > xxx.xxx.xxx.19.80: S 4062745060:4062745060(0) win 17520 <mss 1460> (DF)
    09:49:52.225322 xxx.127.127.158.1839 > xxx.xxx.xxx.19.80: S 3793924840:3793924840(0) win 17520 <mss 1460> (DF)
    09:49:52.225329 xxx.127.127.158.1840 > xxx.xxx.xxx.19.80: S 2084655461:2084655461(0) win 17520 <mss 1460> (DF)
    09:49:52.225336 xxx.127.127.158.1841 > xxx.xxx.xxx.19.80: S 1957858169:1957858169(0) win 17520 <mss 1460> (DF)
    09:49:52.225343 xxx.127.127.158.1842 > xxx.xxx.xxx.19.80: S 2017006258:2017006258(0) win 17520 <mss 1460> (DF)
    09:49:52.225350 xxx.127.127.158.1843 > xxx.xxx.xxx.19.80: S 672739116:672739116(0) win 17520 <mss 1460> (DF)
    09:49:52.225357 xxx.127.127.158.1844 > xxx.xxx.xxx.19.80: S 3202839341:3202839341(0) win 17520 <mss 1460> (DF)
     


    tcpdump로 살펴본 패킷 해더를 파일로 저장한다. 몇 분동안만 저장하고 Ctrl+C로 중단한다.

     
    # tcpdump 조건 > tcpdump_2007_0104.txt
     


    2. ipfw로 차단하기

    다음 스크립트는 tcpdump 결과 파일을 이용하여 SYN 패킷을 보낸 IP목록만 뽑아내는 스크립트이다.

     
    #!/bin/sh
    #
    # ip_list.sh

    if [ "$1" = "" ]; then
       echo "조회할 tcpdump 결과 파일명을 지정하세요."
       exit
    else
       FILE=$1
    fi

    awk '{print $2}' $FILE | awk -F. '{print $1 "." $2 "." $3 "." $4}' | sort > ${FILE}_ip
    uniq -c ${FILE}_ip | sort -n
     


    저장한 파일명이 tcpdump_2007_0104.txt 이라고 할 때 다음과 같이 실행하면 결과를 확인할 수 있다.

    # ./ip_list.sh tcpdump_2007_0104.txt
    ... 생략 ...
    137 xxx.113.1.176
    183 xxx.138.55.217
    294 xxx.xxx.xxx.254
    16260 xxx.187.218.50
    115010 xxx.127.127.158

    xxx.187.218.50 IP와 xxx.127.127.158는 의심이 가는 IP로, SYN 패킷 이외에 전송되는 데이터가 있는지 ngrep 등의 확인을 해본다. 만약 전송되는 데이터가 없이 SYN패킷만 보낸 것이라면 스캐닝이나 SYN 플러딩 공격일 가능성이 있으므로 ipfw 등의 방화벽 툴로 IP를 차단한다.

     
    # ipfw add deny ip from xxx.127.127.158 to any
    #
    # ipfw list
    00100 deny ip from xxx.127.127.158 to any
    65535 allow ip from any to any
     


    덛붙여서 열려있지 않는 포트로의 접속시도가 있을 때 로그가 남도록  /etc/sysctl.conf에 다음 2줄을 추가해준다.
    리부팅없이 sysctl net.inet.tcp.log_in_vain=1 처럼 shell에서 명령을 직접 입력해줘도 된다.

     
    net.inet.tcp.log_in_vain=1
    net.inet.udp.log_in_vain=1
     


    3. 참고자료

    * Re: [KFUG] dmesg .. [.../kernel: Limiting open port RST response from 333 to 200 packets per second]
      http://www.kr.freebsd.org/ml//questions/2003/11/msg00069.shtml
    * Prevent Port scaning
      http://lists.freebsd.org/pipermail/freebsd-questions/2003-December/030489.html
    * A basic guide to securing FreeBSD 4.x-STABLE
      http://draenor.org/securebsd/secure.txt

      커피닉스 카페 최근 글
    [01/26] Re: wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/25] wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/11] 특정 안드로이드 WebView 버전에서 SSL 문제 (WebView 버그)
    [08/01] DNS forwarder (전달자) 서버를 통해서 쿼리하면 역방향을 받아오질 못합니다.
    [05/16] (주)후이즈 시스템엔지니어 (경력자) 모집
    [02/15] [AWS] Cloudfront edge 확인하기
    [01/20] Mobile Service/eCommerce 기업에서 Server / Java / PHP 개발자 구인
    [01/11] 탄탄한 퍼블리싱 모바일기업에서 Mobile 개발자를 모십니다.
    [01/11] 탄탄한 퍼블리싱 모바일기업에서 Web Front 개발자를 모십니다.
    [01/11] 탄탄한 퍼블리싱 모바일기업에서 Server 개발 팀장을 모십니다.
    [12/21] 브라우저별 SHA1 퇴출 시점
    [09/15] [구인] 시스템엔지니어 (경력)
    [08/05] Re: 칼리리눅스 텔넷관련
    [08/04] 칼리리눅스 텔넷관련
    [06/29] 또 다른 무료 SSL 인증서, Let's Encrypt
      New!   최근에 등록한 페이지
      KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
      오픈캐스케이드 캐드 (OpenCASCADE CAD)
      QCad for Windows --- GNU GPL (Free Software)
      The Hello World Collection
      IPMI를 활용한 리눅스 서버관리
      DNS 설정 검사
      nagiosgraph 설치 방법
      Slony-I 설치 방법 (postgresql replication tool)
      Qmail기반의 Anti spam 시스템 구축하기
      clusterssh

    [ 함께하는 사이트 ]




    운영진 : 좋은진호(truefeel), 야수(yasu), 범냉이, sCag
    2003년 8월 4일~