패킷이 특정 포트에서 나오지 않는 한 규칙이 무시되는 IPTABLES 체인을 생성하시겠습니까?

패킷이 특정 포트에서 나오지 않는 한 규칙이 무시되는 IPTABLES 체인을 생성하시겠습니까?

다음 사항을 확인하고 싶습니다. 첫 번째 규칙이 다음과 같은 체인을 생성한다면:

iptables -I INPUT -p tcp -m multiport --dports 25,465 -j name

이는 패킷이 해당 포트에서 나오지 않는 한 체인에 추가로 지정된 규칙이 확인되지 않음을 의미합니까?

을 사용하고 있는데 fail2ban, 을 사용하여 포트 25, 465를 지정하는 금지 규칙이 포함된 필터를 만들었습니다 -m multiport --dports 25,465. 그러나 이 필터는 때때로 ksoftirqd프로세스가 많은 CPU를 사용하고 네트워크가 느려지는 충분한 수의 규칙을 생성하게 되었습니다 . 서버의 다른 포트에서 많은 I/O가 발생했을 때 이런 현상이 발생했다는 것을 알았습니다.

나는 각 패킷이 내 체인의 모든 규칙을 보고 있다고 가정합니다. 위에서 본 첫 번째 규칙을 추가하여 포트 25 및 465에 대한 패킷이 해당 체인의 나머지 규칙을 확인하지 않도록 하여 이 문제를 피할 수 있기를 바랍니다. 그래도 문제가 해결되지 않으면 다른 가능한 해결 방법을 알고 싶습니다.

답변1

'부터'가 아니라 '~으로'입니다. --dports기울기목적지포트. 귀하가 작성한 규칙은 "패킷이 TCP 포트 25 또는 465에서 수신 대기하는 내 서비스로 전송된 경우 체인에서 처리 name"를 의미합니다. 처리 방법은 해당 체인의 내용에 따라 다릅니다. 하나도 일치하지 않는 경우최종 조치( ACCEPT, REJECT, DROP) 규칙이 해당 체인에 있거나 규칙과 작업이 일치하는 경우 해당 처리는 호출 체인( )에서 이 규칙 다음의 규칙과 함께 RETURN계속됩니다 .INPUT

기본적으로 fail2ban특정 포트로 향하는 패킷에 대해서만 체인을 호출하는 체인과 규칙을 생성합니다( ...-allports기본값이 아닌 작업을 사용하지 않는 한). 해당 체인에 금지된 각 IP에 대한 DROP 규칙을 추가합니다. 따라서 예를 들어 웹 서버 패킷은 sshd제공된 감옥 용으로 생성된 체인으로 처리를 위해 전송되지 않습니다 . 따라서 귀하가 제안한 방식으로 Fail2ban 처리에서 특정 포트를 의도적으로 "제외"하는 것은 생산적이지 않습니다. 이미 이렇게 작동합니다.

Fail2ban을 사용하여 규칙이 너무 많은 체인을 생성하지 않으려면 다음을 조사하십시오.IP세트관련 작업. 체인을 f2b-jailname생성하는 대신IP 세트그리고 ipset을 참조하는 일치하는 단일 규칙이 있습니다. 체인에 별도의 규칙을 생성하는 대신 차단된 각 IP가 ipset에 추가됩니다. ipset은 O(1) 복잡도 특성을 가지고 있습니다. 이는 처리 속도가 포함된 항목 수에 의존하지 않는다는 것을 의미합니다. 최대 65536개의 항목을 포함할 수 있습니다.

간단히 말해서 이를 사용하려면 감옥에 대한 기본값 banaction = iptables을 재정의해야 합니다 . banaction = iptables-ipset배포판에서 제공하는 구성 파일을 절대로 수정해서는 안 됩니다. 대신 /etc/fail2ban/jail.local재정의를 추가하는 파일을 만듭니다.

[postfix]
bantime = 1h
enabled = true
banaction = iptables-ipset

(이것은 제공된 postfix메일 필터를 사용하고 모든 smtpd유형의 서비스에 반응합니다. 다른 메일 서버를 사용하는 경우 적절하게 조정하십시오.)

더 나은 방화벽 효율성을 달성하는 다른 방법은 다음을 사용하는 것입니다.nftablesiptables. 프레임워크 대신 . IP 세트의 기능을 가지고 있습니다.통합, 를 사용하여 실패2반과 함께 사용할 수 있습니다 banaction = nftables. 대규모 세트의 효율성 향상은 거의 동일합니다.

관련 정보