crontab에서 매분마다 실행되는 스크립트가 있습니다.
스크립트는 시스템 로그를 스캔하고 서버에 로그인하려고 할 때마다 dovecot, exim 또는 ssh에 실패한 IP를 가져와 ipset에 추가하여 IP를 영원히 차단합니다.
문제는 이 스크립트가 1분마다 실행되고 공격자의 IP를 가져와 ipset에 추가하는 작업을 훌륭하게 수행하지만 시스템을 공격하려고 시도하는 동일한 IP의 로그 항목이 여전히 있다는 것입니다.
다시 말해서. 이제 누군가가 시스템을 공격하려고 한다고 가정해 보겠습니다. 1분 이내에 스크립트가 실행되어 3회 이상의 비밀번호 오류가 있는 모든 IP를 가져와서 IPset에 추가합니다. 그럼에도 불구하고 여전히 사이트에 무차별 대입을 시도하는 몇 시간의 IP 로그가 있으며 연결이 중단되지 않습니다.
내 가설은 다음과 같습니다. ipset은 테이블에 IP를 추가하여 작동하며 다음에 IP가 서버에 도달하면 IP가 차단되지만 해당 IP가 공격하려는 서버에 이미 연결되어 있으면 연결이 되지 않습니다. 떨어졌다. 이 올바른지? 그렇다면 진행 중인 연결을 중단할 수 있는 방법이 있습니까?
참고: 기록을 위해: iptables에 차단이라는 이름의 ipset을 추가하는 데 사용한 명령은 다음과 같습니다.
iptables -A INPUT -p tcp --dport XX -m set --set blocking src -j DROP
여기서 XX는 차단하려는 포트입니다.
답변1
iptables -A
에 추가하다끝연결됨(긴 형식 -A
은 입니다 --append
). iptables -A INPUT -p tcp --dport XX -j ACCEPT
규칙이 위에서 아래로 실행될 때 먼저 일치하기 때문에 방해하는 규칙이 위쪽 근처에 있을 수 있습니다 .
이 문제를 해결하는 두 가지 확실한 방법이 있습니다.
서비스의 승인 규칙 이전에 호출되는 별도의 블록체인을 사용합니다.블록체인으로의 점프가 적절하게 규제되면 이러한 모든 규칙이 필요하지 않으면 테스트되지 않기 때문에 이것이 제가 사용하는 방법입니다. 어떤 블록체인에 추가하고 싶은지 파악해야 합니다. 또 다른 이점은
iptables -F smtp-blocks
필요한 경우 포트 25의 각 블록을 수동으로 찾아서 제거하는 것보다 훨씬 쉽다는 것입니다. (세트를 사용하고 있다는 사실이 이 문제를 다소 완화할 수 있습니다. 저는 규칙 세트 등에 대해 잘 알지 못합니다.) 세트를 사용하여 수행할 수 있습니다. )바꾸다
iptables -A
그리고iptables -I
.-I
맨 위(또는 지정된 경우 인덱스 이전)에 삽입을 사용하면 서비스에서 규칙을 수락하기 전에 차단 규칙이 실행됩니다.
내 가설은 다음과 같습니다. ipset은 테이블에 IP를 추가하여 작동하며 다음에 IP가 서버에 도달하면 IP가 차단되지만 해당 IP가 공격하려는 서버에 이미 연결되어 있으면 연결이 되지 않습니다. 떨어졌다. 이 올바른지? 그렇다면 진행 중인 연결을 중단할 수 있는 방법이 있습니까?
규칙에 따라 다릅니다. TCP 프로토콜 규칙이 SYN 패킷에서만 일치하도록 지정하는 경우( --syn
) 연결이 시작될 때만 일치하지만 기본값은 모든 패킷과 일치하는 것입니다. UDP에는 연결 시작 개념이 없습니다.길비슷한 목적으로. 즉, 명시적으로 아무것도 지정하지 않으면제대로 배치했다면새로 추가된 규칙은 다음 수신 패킷과 일치하며 관련 규칙에 따라 처리됩니다. 규칙에 따라 -j DROP
원격 당사자의 관점에서 보면 네트워크 케이블을 방금 뽑은 것과 거의 같습니다.