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)

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

관련 정보