iptables만 사용하여 연결 성공 시 SSH 차단 해제

iptables만 사용하여 연결 성공 시 SSH 차단 해제

현재 중복 SSH 연결을 차단하기 위해 Linux 라우터에 다음과 같은 iptables 규칙이 있습니다.

-A wan_ingress -p tcp --dport 22 -m state --state NEW -m recent --name sshthrottle --set -m comment --comment "Tag incoming SSH requests"
-A wan_ingress -m state --state NEW -m recent --name sshthrottle --rcheck --seconds 300 --reap --hitcount 3 -j logdrop -m comment --comment "Log and drop packets"
-A logdrop -j LOG --log-prefix "sshthrottle:drop "
-A logdrop -j DROP

하지만 문제는 중복도 방지한다는 것입니다.성공적인연결, 5분 이내에 연결과 연결 해제를 세 번 성공하면 나도 차단됩니다. 그런데 5분밖에 안 되어서 지금까지 참을 수가 없었어요.

SSH 무차별 대입 프로그램은 자동으로 자체적으로 제한되므로 이제 제한 시간을 5분에서 1일로 연장하려고 합니다. 하지만 이는 하루에 제한된 횟수만큼만 SSH를 수행할 수 있으며 그렇지 않으면 SSH도 차단된다는 의미입니다.

그래서 SSH 연결이 성공하면 연결 시도 횟수를 계산하는 데 사용되는 목록에서 해당 IP를 제거하는 추가 iptables 규칙을 추가하는 것이 가장 좋은 방법이 무엇인지 궁금합니다.

나는 SSH 세션이 실제로 설정되었는지 확인하기 위해 두 번째 패킷 카운터와 같은 것을 사용할 것이라고 생각했지만 --state ESTABLISHED(오랫동안 실패한 로그인 시도를 설정된 연결로 계산하지 않기 위해) 해당 규칙을 트리거에 적용하는 방법을 잘 모르겠습니다. 원래 목록의 IP입니다.

답변1

나는 항상 높은 포트를 먼저 노크하고 연결을 끊고 포트 22에 로그인한 다음 마지막 순간에 IP가 높은 포트에 도달했는지 확인하도록 ssh를 구성합니다. 먼저 울리지 않는 것은 모두 버려라

답변2

이는 효과가 있는 것처럼 보이는 접근 방식입니다. 이 규칙을 추가했습니다뒤쪽에연결이 이미 차단되지 않은 경우에만 도달할 수 있도록 존재합니다.

-A wan_ingress -p tcp --dport 22 -m state --state ESTABLISHED -m recent \
    --name unblock --set -m comment --comment "Tag successful SSH connections"

-A wan_ingress -p tcp --dport 22 -m state --state ESTABLISHED -m recent \
    --name unblock --rcheck --seconds 10 --reap --hitcount 50 -j unblock \
    -m comment --comment "Remove the IP from the sshthrottle list after successful login"

-A unblock -m recent --name sshthrottle --remove -j LOG --log-prefix "unblock "

이는 설정된 SSH 연결을 통해 전송된 패킷 수를 계산하여 수행됩니다. 10초 내에 50개 이상의 패킷이 전송되면 테이블로 이동하고 unblock해당 IP는 표시된 목록에서 제거되며 해당 사실이 기록됩니다. 연결이 설정되면 --state NEW원래 규칙의 조건에 따라 IP가 태그 목록에 다시 추가되지 않습니다.

설정된 연결을 통과하는 패킷 수에 관계없이 메시지는 메시지만 기록됩니다. IP가 태그 목록에 있는 경우에만 메시지가 기록되기 때문입니다. 존재하지 않으면 로그 메시지가 인쇄되지 않습니다. 일단 연결이 설정되면 --state NEW새 연결만 목록에 추가되도록 보장하는 연결이 존재하지 않습니다.

50개 패킷은 조정이 필요할 수 있습니다. 빠른 SSH 연결은 50개의 패킷에 도달하기 전에 차단되므로 저에게는 효과가 있는 것 같습니다. 로그인 성공 시 아직 50패킷에 도달하지 않은 상태이기 때문에 아무런 조치 없이 로그인 및 로그아웃을 하시면 계속 차단될 수 있습니다. Enter를 수십 번 누르거나 ls로그인 후 실행하면 50개의 패킷이 적중되고 표시된 IP 목록에서 해당 IP가 제거됩니다.

답변3

이는 명백합니다. SSH 키 로그인만 허용되고 비밀번호 로그인은 완전히 금지됩니다. 여기에서는 방화벽을 뒤져볼 필요가 없습니다.

왜 무차별 대입 크래커에게 실수로 올바른 24자 비밀번호를 추측할 가능성이 통계적으로 희박한지를 부여하겠습니까?

연결 실패 후에도 여전히 차단하고 싶다면, 이것이 바로 fall2ban의 목적입니다.

다시 말하지만, 추가 혜택 없이 문제를 요청하고 싶지 않다면 방화벽을 포함할 이유가 없습니다.

관련 정보