2017-12-12 4 views
0

컨텍스트를 설정하기 위해 다수의 클라이언트에서 들어오는 연결을 서비스하는 레거시 서버가 있습니다. 연결은 tcp이며 2 진 프로토콜을 사용합니다. 최근에 클라이언트가 증가함에 따라 서버는 특히 서버가 다시 시작될 경우 들어오는 모든 연결을 처리 할 수없는 것처럼 보입니다. 이 경우 서버는 CLOSE_WAIT에서 연결이 끊어져 일부 일치하지 않는 상태가됩니다.iptables 속도 제한 연결 요청

클라이언트 연결 요청이 엇갈리게 처리되면 서버가 결국로드됩니다. 우리는 도커에서 클라이언트를 시뮬레이션하여이를 확인했습니다.

서버에 속도 제한이 없으므로 iptables에서 속도 제한 기능을 사용하여 들어오는 연결 요청을 비틀어 사용할 수 있는지 알아보기 위해 iptables를 시험해보기로 결정했습니다. 연결은 동일한 IP 또는 다른 IP에서 시작될 수 있습니다.

속도 제한은 기존 연결에 영향을 미치지 않고 새로운 연결 (3 방향 핸드 셰이크)에만 영향을 주어야합니다. 클라이언트는 재시도 논리를 가지므로 결국에는 다시 연결됩니다. 따라서 같은 소스 IP에서라도 모든 연결이 결국 연결을 방해하지 않고 연결해야하기 때문에 IP로 제한 속도를 원하지는 마십시오.

이것은 iptables 규칙입니다. 이것이 올바른 방법일까요?

iptables -A INPUT -i eth0 -p tcp --dport 9000 -m state --state NEW,ESTABLISHED -m recent --set -j ACCEPT 

    iptables -A INPUT -i eth0 -p tcp --dport 9000 -m state --state NEW -m recent --update --seconds 600 --hitcount 11 -j REJECT --reject-with tcp-reset 

저는 iptables에 익숙하지 않고 현재 Ubuntu 14.04에서 ufw 래퍼를 사용하고 있습니다. 위 아이디어는이 링크 https://www.cyberciti.biz/tips/howto-limit-linux-syn-attacks.html에서 유래되었습니다.

의도는 SYN 플러드를 방지하지만 속도가 느려지고 모든 클라이언트가 연결을 설정할 수 있도록하기위한 것입니다.

답변

0

오랜 시행 착오 끝에이 점을 알아 냈습니다. 해결책은 iptables 제한 모듈을 사용하여 새로운 들어오는 연결을 연결 속도로 제한하는 것입니다.

9000 -m 상태를 --state RELATED --dport,

-A-UFW 사전 입력 TCP -p /etc/ufw/before.rules의 다음 체인 첨가 종료까지 동의 -j 설립 -a ufw-before-input -p tcp -dport 9000 -m state --state NEW -m limit --limit 4/min --limit-burst 4 -j ACCEPT -A 입력 전의 ufw -p tcp --dport 9000

참조