
다음 사항을 확인하고 싶습니다. 첫 번째 규칙이 다음과 같은 체인을 생성한다면:
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
유형의 서비스에 반응합니다. 다른 메일 서버를 사용하는 경우 적절하게 조정하십시오.)
더 나은 방화벽 효율성을 달성하는 다른 방법은 다음을 사용하는 것입니다.nftables
iptables
. 프레임워크 대신 . IP 세트의 기능을 가지고 있습니다.통합, 를 사용하여 실패2반과 함께 사용할 수 있습니다 banaction = nftables
. 대규모 세트의 효율성 향상은 거의 동일합니다.