iptables의 connlimit는 어떻게 작동하나요?

iptables의 connlimit는 어떻게 작동하나요?

내 웹 서버에서 허용되는 동시 연결 수에 제한을 설정하고 싶었습니다. filter테이블 아래 INPUT 체인에 대한 기본 DROP 정책을 사용하여 iptables(v1.4.19.1) 커널 3.14.4-200.fc20.x86_64에서 다음 규칙을 시도했습니다 .

-A INPUT -p tcp --dport 80 -m connlimit --connlimit-upto 10 -j WEB
-A WEB -j ACCEPT

그런 다음 Apache 벤치마크를 사용하여 50개의 동시 연결이 있는 서버에 도달했습니다.

$ ab -kc 50 -t 10 http://mysite.com/

하지만 서버 액세스 로그를 보면 여전히 수백 줄의 성공적인 요청을 볼 수 있습니다. 나는 connlimit규칙이 시작되어 모든 연결을 끊을 것으로 기대하고 있습니다. 내 규칙이나 동시 연결에 대한 해석에 문제가 있습니까?

답변1

많은 테스트를 거친 후 기본 삭제 정책만으로는 충분하지 않다는 것을 알았습니다.

*filter
-F
-X
:INPUT DROP [0:0]

그것이 따를 것이라고 가정하지 않는 것이 매우 중요합니다. 규칙 connlimit은 다음과 같은 경우에만 시작됩니다.명시적으로체인 끝에 삭제 규칙을 추가합니다.

-A INPUT -j DROP

이제 지정된 제한보다 낮은 동시성에서도 작동합니다.

$ ab -kc 7 -t 6 http://mysite.com/
This is ApacheBench, Version 2.3 <$Revision: 1554214 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking mysite.com (be patient)
apr_pollset_poll: The timeout specified has expired (70007)

중요한 것은 테스트하는 것입니다. 하지만 이것을 버그로 분류할지 확실하지 않습니다.

관련 정보