[LINUX] iptables의 nf_conntrack: table full, dropping packet 에러 해결하기

SHARE:

리눅스 서버의 로그에서 "IPTABLES nf_conntrack: table full, dropping packet." 경고 메세지를 발견했을 때 대처 방법을 알아보고, 실습을 통해 쉽게 설정하고 사용할 수 있습니다.



[LINUX] iptables의 nf_conntrack: table full, dropping packet 에러 해결하기


리눅스 서버의 로그에서 "IPTABLES nf_conntrack: table full, dropping packet." 경고 메세지를 발견했을 때 대처 방법을 알아보고, 실습을 통해 쉽게 설정하고 사용할 수 있습니다.
  • 목차



  • nf_conntrack: table full, dropping packet 커널 메시지를 발생시키며 패킷이 드롭되는 증상과 해결 방법을 설명합니다.

    nf_conntrack: table full, dropping packet.
    nf_conntrack: table full, dropping packet. 에러 로그






    3월 1일 마스크 대란으로 방문자 폭주 현상이 발생했습니다.
    Jennifer 모니터링으로 이상 현상을 확인하고 아래와 같은 NGINX 웹 서버의 에러 로그를 다수 확인했습니다.
    • OS : CentOS 6.10
    • Kernel: 2.6.32-754.2.1.el6.x86_64
    • 로그 파일 : /var/log/messages
    • 에러 로그 : Mar 1 02:16:40 HOSTNAME kernel: [28476780.603173] nf_conntrack: table full, dropping packet.
    로그를 보니 nf_conntrack의 테이블의 용량이 꽉차서 패킷이 DROP 되고 있는 것을 알 수 있습니다.
    빠른 장애 처리를 위해 IPTABLES 서비스 종료 후 해결되었습니다.

    iptables 서비스를 사용하면서 위와 같은 장애 방지를 위해 커널 파라미터 설정을 알아보겠습니다.

    nf_conntrack이란?

    nf_conntrack은 ip_conntrack의 후속 커널 모듈로 netfilter가 네트워크에서 발생하는 커넥션에 대한 내용을 기록하고 추적하기 위한 모듈 입니다.
    일반적으로 활성화되지는 않지만 iptables를 이용한 NAT 환경에서 사용되며, 아래와 같은 경우 활성화됩니다.
    • iptables -t nat -L 같은 NAT 테이블 추가 및 확인 명령을 실행한 경우
    • docker와 같이 iptables의 NAT 기능이 필요한 어플리케이션을 사용 할 경우
    단순히, 해당 모듈이 활성화된다고 해서 문제가 되지는 않지만 접속량이 많은 네트워크 서비스를 제공하는 경우에는 nf_conntrack의 설정을 기본 값으로 사용할 경우 연결을 기록하는 테이블의 크기를 기본 값인 65536를 사용하기 때문에 문제가 발생할 수 있습니다.

    따라서, 해당 값을 서버의 환경에 맞추어 충분히 늘려주는 게 좋으며 적절한 값을 알아보겠습니다.





    네트워크 관련 커널 파라미터 설정


    nf_conntrack_max

    nf_conntrack_max는 nf_conntrack 모듈이 기록 할 최대 연결 개수를 지정하는 파라미터 입니다. [ 커널 문서 참조 ] nf_conntrack_max - INTEGER Size of connection tracking table. Default value is nf_conntrack_buckets value * 4
    nf_conntrack_buckets는 bucket들의 개수이며 다시 말해 해시 테이블의 크기를 의미합니다. 커널 문서에서는 해시 테이블 크기의 4배로 max 값을 지정하는 걸 기본으로 하고 있기 때문에 각 해시 테이블의 bucket은 4개의 노드를 갖는 연결 리스트로 구성됩니다. [ 메모리 크기에 따른 적정값 계산 ] 계산식 : RAM SIZE(in bytes) / 16384 / (ARCH/32) ex) 메모리 8GB 일 때 (8 * 1073741824) / 16384 / (64/32) = 262144
    아래 명령을 통해 실시간 적용 가능합니다.
    echo "최대 연결 개수" > /proc/sys/net/nf_conntrack_max

    nf_conntrack_buckets

    [ 커널 문서 참조 ] nf_conntrack_buckets - INTEGER Size of hash table. If not specified as parameter during module loading, the default size is calculated by dividing total memory by 16384 to determine the number of buckets but the hash table will never have fewer than 32 and limited to 16384 buckets. For systems with more than 4GB of memory it will be 65536 buckets. This sysctl is only writeable in the initial net namespace.
    4GB 메모리에는 65536이 적합하며, 해시 테이블 크기를 지정하지 않고 모듈을 올리면 기본값인 16384로 설정됩니다. 이 상태에서 nf_conntrack_max 값을 늘리게 되면 연결 리스트가 길어지며 해시 테이블의 속도가 느려집니다. 또한 nf_conntrack_buckets 값을 크게 설정하게 되면, 그만큼 해시 테이블을 생성할 때 많은 메모리를 사용하게 됩니다.
    따라서 적절한 크기를 할당해야 하며, 해시 테이블 크기에 대한 모듈 파라미터는 docker나 iptables에 의해서 자동으로 로딩 되므로 이 값을 변경해 주어야 하는데, 모듈이 올라가게 되면 sysctl을 이용해서 커널 파라미터 값을 변경 할 수 없고 sysfs를 통해서만 변경이 가능합니다.
    sudo echo 65536 > /sys/module/nf_conntrack/parameters/hashsize

    nf_conntrack_generic_timeout

    [ 커널 문서 참조 ] nf_conntrack_generic_timeout - INTEGER (seconds) default 600 Default for generic timeout. This refers to layer 4 unknown/unsupported protocols.
    Layer 4 기반 타임아웃 설정값으로 기본 값은 600초입니다. 이 값이 너무 길기 때문에 조정하는 것이 좋습니다. ex) 120 또는 300

    nf_conntrack_tcp_timeout_established

    [ 커널 문서 참조 ] nf_conntrack_tcp_timeout_established - INTEGER (seconds) default 432000 (5 days) 활성화 된 연결에 대한 타임아웃 파라미터로 기본 값은 432000초(5일)입니다. 이 값 또한 조정하는 것이 좋습니다. ex) 54000(15시간)





    nf_conntrack 관련 정보 확인


    nf_conntrack module 확인

    sudo lsmod | grep nf_conntrack

    nf_conntrack 최대값 확인

    sudo cat /proc/sys/net/nf_conntrack_max

    nf_conntrack 현재 접속 카운트

    sudo cat /proc/sys/net/netfilter/nf_conntrack_count

    nf_conntrack 기록 내용 확인

    sudo cat /proc/net/nf_conntrack


    nf_conntrack 추천 설정


    nf_conntrack_max = (메모리용량(GB) * 1073741824) / 16384 / (64/32)
    nf_conntrack_buckets = 메모리 4GB 미만이거나 초과 시 (nf_conntrack_max /4 설정)
                                           메모리 4GB 일 때 (65536 설정)



    참고 자료

    https://www.kernel.org/doc/Documentation/networking/nf_conntrack-sysctl.txt

    COMMENTS

    이름

    #/boot,1,#가상 머신 만들기,1,#가상 머신 자동 시작,2,#가상화,1,#게이트웨이 프로세스,1,#그라파나,1,#그라파나 패스워드 초기화,1,#데이터 시각화,1,#데이터베이스 설치,1,#로컬 ISO 저장소 만들기,1,#리눅스,18,#리눅스 명령어,3,#리눅스 명령어 자동 완성,1,#리눅스 서버 보안 취약점 점검,1,#리눅스 설치,1,#리눅스 한글 설정,1,#리눅스에서 php-fpm 설치,1,#마리아db,1,#모니터링,1,#모바일 페이지,1,#모바일 페이지 보여주기,1,#모바일 페이지 연동,1,#백업 자동화,1,#버추얼박스,1,#버추얼박스 설치,1,#사설 인증서,1,#사설 인증서 생성,1,#서버 가상화,1,#쉘 스크립트,1,#스크립트,1,#스크립트 개발,2,#슬랙,1,#슬랙 가이드,1,#슬랙 가입,1,#슬랙 로그인,1,#슬랙 매뉴얼,1,#슬랙 활용법,1,#시작 오류,1,#시트릭스,1,#시트릭스 하이퍼바이저,1,#오픈 소스 가상화,1,#원격 데스크톱 클립보드 차단 레지스트리,1,#원격데스크톱 클립보드 차단,1,#웹서버,2,#윈도우,2,#윈도우 10,3,#윈도우 10 전원 옵션,1,#윈도우 10 환경변수 추가,1,#윈도우10 환경변수 바로 적용,1,#자동 완성,1,#자체 서명,1,#자체 서명 인증서,1,#자체 서명 인증서 만들기,1,#전원 옵션 비활성화,1,#커널 삭제,1,#태블로,1,#파이썬,1,#파이썬 3.7.6,1,#파이썬 설치,1,#파일 업로드,1,#파일 업로드 용량 제한,1,#파티션 용량 부족,1,#프록시 설정,1,#하이퍼바이저,1,#한글 깨짐,1,#환경변수 편집창,1,#환경변수 path 여러개,1,#admin,1,#admin password reset,1,#apm,1,#Auth_basic,1,#backup,1,#bash,2,#bash shell,1,#bash-compilation,1,#centos,12,#centos 6,5,#centos 6에서 python 3설치,1,#centos 8,6,#centos 8 설치,1,#centos 8 한글,1,#centos 8 한글 설정,1,#centos 8 character set,1,#centos 8 install,1,#centos 8 locale set,1,#centos 설치,1,#centos repo,1,#centos-base.repo,1,#citrix,1,#citrix hyperviosr install,1,#citrix hypervisor,2,#Cmd 경로 설정,1,#Command autocomplete,1,#ctirix,1,#ctrix,1,#database,1,#db,1,#db 설치,1,#dropping packet,1,#grafana admin reset,1,#host key verification fail,1,#host only network,1,#http 기본 인증,1,#http 인증,1,#http authentication,1,#https,1,#hypervisor,1,#iptables,1,#isms,1,#iso 저장소,1,#jennifer 5,1,#jennifer 5 admin,1,#jennifer admin,1,#jennifer admin password,1,#jennifer password reset,1,#linux,3,#local ISO storage,1,#maria,1,#mariadb 설치,1,#mariadb install,1,#monitoring,1,#mysql,1,#nf_conntrack,1,#nginx 1.16,1,#nginx 1.16 install,1,#nginx 1.18,1,#Nginx 로그인,1,#nginx 로그인 페이지,1,#nginx 모바일,1,#nginx 모바일 연동,1,#nginx 설치,2,#nginx 접속 제한,1,#nginx 최신 버전,1,#Nginx basic auth login form,1,#Nginx basic auth security,1,#nginx basic http authentication,1,#Nginx check basic auth,1,#nginx htpasswd,1,#nginx http authentication,1,#nginx install,2,#nginx mobile redirect,1,#nginx reverse proxy setting#nginx 리버스 프록시 설정,1,#nginx ssl,1,#Ngx_http_auth_basic_module,1,#only sftp account,1,#password reset,1,#php-fpm,1,#php-fpm 설치,1,#php-fpm install,1,#proxy,1,#putty 눈아픔,1,#putty 파란색,1,#putty 환경설정,1,#python 3.7.6,1,#python install,1,#RDP 파일 복사 차단,1,#rdp접속시 클립보드 사용제한,1,#reverse proxy,1,#rsync,1,#rsync 백업,1,#security,1,#sftp,1,#sftp 계정,1,#shell script,2,#ssh,3,#ssh 배치모드,1,#ssh 자동 로그인,1,#ssh 자동화 스크립트,1,#sshpass,3,#sshpass 로그인,1,#sshpass 자동 로그인,1,#ssl,1,#swap,1,#swap 메모리 사용,1,#swap 메모리 확인,1,#swap check,1,#swap memory,1,#table full,1,#tableau 시각화,1,#tmux,1,#tmux 명령어,1,#tmux 명령어 옵션,1,#tmux 설치,2,#tmux 소스 컴파일,1,#tmux 자동 완성,1,#tmux bash autocomplete,1,#tmux install,2,#tmux source install,1,#tmux soure,1,#Virtualization,6,#vm,3,#vm 운영,1,#vm 자동 시작,2,#vm auto start,1,#vm create,1,#was monitoring,1,#web,4,#windows 10,2,#Windows path 추가,1,#xencenter,1,#xenserver 설치,1,#xenserver install,1,#yum install tmux,1,#yum.conf,1,#zabbix 그래프 한글 깨짐,1,#zabbix 5.0,1,#zabbix 그래프,1,#zabbix 한글 깨짐,1,리눅스,1,메모리,1,사용법,1,서버 관리,1,슬랙 사용법,1,윈도우 10 암호분실,1,윈도우 10 administrator 암호,1,윈도우 로컬 계정 비밀번호,1,윈도우 로컬 계정 비밀번호 분실,1,윈도우 비밀번호 변경,1,프로세스,1,한국어 설정,1,한글 설정,1,backup,1,CentOS 8,1,grafana,1,htpasswd,1,jennifer,1,linux,24,linux#tmux rpm,1,mariadb,1,nginx,8,php,1,putty,1,python,1,SLACK,1,ssl 인증서,1,tableau,1,tmux,3,virtualbox,3,virtualbox install,1,windows,6,Windows 10,5,xcp-ng,2,xenserver,3,zabbix,1,
    ltr
    item
    시스템 엔지니어의 세상: [LINUX] iptables의 nf_conntrack: table full, dropping packet 에러 해결하기
    [LINUX] iptables의 nf_conntrack: table full, dropping packet 에러 해결하기
    리눅스 서버의 로그에서 "IPTABLES nf_conntrack: table full, dropping packet." 경고 메세지를 발견했을 때 대처 방법을 알아보고, 실습을 통해 쉽게 설정하고 사용할 수 있습니다.
    https://1.bp.blogspot.com/-W4x5GXSvalE/X79ef5dBSMI/AAAAAAAAMs8/JygyIBRXqnkc3RWxWCHw9N3clrL4rP2igCLcBGAsYHQ/s0/%255BLINUX%255D%2Biptables%25E1%2584%258B%25E1%2585%25B4%2Bnf_conntrack-%2Btable%2Bfull%252C%2Bdropping%2Bpacket%2B%25E1%2584%258B%25E1%2585%25A6%25E1%2584%2585%25E1%2585%25A5%2B%25E1%2584%2592%25E1%2585%25A2%25E1%2584%2580%25E1%2585%25A7%25E1%2586%25AF%25E1%2584%2592%25E1%2585%25A1%25E1%2584%2580%25E1%2585%25B5%2B%25281%2529.png
    https://1.bp.blogspot.com/-W4x5GXSvalE/X79ef5dBSMI/AAAAAAAAMs8/JygyIBRXqnkc3RWxWCHw9N3clrL4rP2igCLcBGAsYHQ/s72-c/%255BLINUX%255D%2Biptables%25E1%2584%258B%25E1%2585%25B4%2Bnf_conntrack-%2Btable%2Bfull%252C%2Bdropping%2Bpacket%2B%25E1%2584%258B%25E1%2585%25A6%25E1%2584%2585%25E1%2585%25A5%2B%25E1%2584%2592%25E1%2585%25A2%25E1%2584%2580%25E1%2585%25A7%25E1%2586%25AF%25E1%2584%2592%25E1%2585%25A1%25E1%2584%2580%25E1%2585%25B5%2B%25281%2529.png
    시스템 엔지니어의 세상
    https://www.runit.cloud/2020/03/iptables-nfconntrack-table-full-dropping-packet.html
    https://www.runit.cloud/
    https://www.runit.cloud/
    https://www.runit.cloud/2020/03/iptables-nfconntrack-table-full-dropping-packet.html
    true
    7559506062450536879
    UTF-8
    Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content