애플리케이션(AceStream Player)의 IP 트래픽을 제한하고 싶습니다. 문제는 IP 연결이 너무 많이 이루어지면 연결이 끊어진다는 것입니다.
iptables를 사용하여 연결을 10/초로 제한하는 방법을 아는 사람이 있습니까?
아래 답변에서 영감을 받아 다음을 시도했습니다.
$iptables -A OUTPUT -p tcp --dport 8621 -m limit --limit 10/s -j ACCEPT
$iptables -A OUTPUT -p tcp --dport 8621 -j DROP
이는 연결을 제한하는 것처럼 보이지만 어떻게든 2-3/초와 같은 하한에 도달합니다. 제한 규칙은 연결 또는 패킷을 10/초로 제한합니까?
DROP 대신 QUEUE를 사용하여 연결을 지연시키는 것도 가능합니까?
답변1
이는 이 옵션을 통해 쉽게 수행할 수 있습니다 --limit
.
예를 들어, iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/s -j ACCEPT
좋은 출발점이 되어야 합니다.
또한 Gregor Purdy의 Linux iptables 포켓 참조(ISBN: 0-596-00569-5)도 확인해 보시기 바랍니다. 저는 iptables에 관해 질문이 있을 때마다 이것을 사용합니다.
답변2
새로운 연결이 설정되는 속도를 제한해야 합니다. 그냥 -m limit
사용하면패킷 속도 제한, 새로운 연결 패킷인지 기존 연결에 대한 패킷인지 여부.
~에 따르면이 문제당신은 그것을 사용할 수 있습니다 -m state
. 전체 iptables 규칙 세트는 다음과 같습니다.
iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j REJECT
어떤 일이 일어나든 일치하도록 이 규칙을 약간 조정하는 것이 좋습니다.
예를 들어, 이런 방식으로 tcp 연결만 제한하고 다른 모든 것은 그대로 두려면 다음과 같이 하세요.
iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -j REJECT
마지막 규칙만 변경했으며 다른 모든 규칙은 기본적으로 적용되거나 다른 규칙으로 축소됩니다.
더 나아가려면 실제로 iptables를 배워야 합니다. @sailor님이 이 주제에 관한 훌륭한 책을 추천해 주셨습니다. 가지다충분한~의좋은 온라인 리소스게다가. iptables 처리의 개념(체인, 테이블, 규칙, 정책)을 이해하면 man 8 iptables
모든 답을 찾을 수 있습니다.
iptables를 깊이 이해할 시간이 없다면 iptables 프런트 엔드를 사용하는 것도 좋은 선택입니다. 나는 사용한다부두 벽내가 관리하는 대부분의 방화벽에 대해.