IP를 영구적으로 금지할 때 fall2ban의 이상한 동작

IP를 영구적으로 금지할 때 fall2ban의 이상한 동작

문서에 따르면 감옥 금지 시간을 음수 값으로 설정하면 영구적으로 금지됩니다. 그러나 일단 완료되면 bantime을 양의 정수로 설정할 때와 비교하여 다음 동작이 변경됩니다.

1) ipset listFail2ban-sshd 해시 테이블이 표시되지 않습니다.

2) firewall-cmd --direct --get-all-rules비어있다

3) /var/log/fail2ban.log한 줄이 됩니다. 흥미로운 항목

sshd[25772]: 93.174.89.88 포트 37477의 잘못된 사용자 ubuntu', 'ip': '93.174.89.88', 'ipmatches': 0x7f4588f9dc08>, 'ipfailures': 0x7f4588f9daa0>, 'time': 153630184 2.088076, '실패 ': 1443, 'ipjailfailures': 0x7f4588f9dd70>})': 93.174.89.88을 금지하는 중 오류가 발생했습니다.

4) /var/log/messages다음이 있습니다

Firewalld[916]: 경고: '/usr/sbin/iptables-restore --wait=2 -n' 실패: iptables-restore v1.4.21: set fall2ban-sshd가 존재하지 않습니다.#012#012행에서 오류가 발생했습니다: 2#012자세한 내용은 'iptables-restore -h' 또는 'iptables-restore --help'를 사용해 보세요. 방화벽[916]: 오류: COMMAND_FAILED

예상대로 작동하는 유일한 명령은 이지만 fail2ban-client status sshd금지된 것으로 표시된 IP는 여전히 연결을 시도합니다. 모든 문제의 근본 원인은 정수가 음수이면 어떤 이유로든 ipset이 생성되지 않는다는 것입니다.

어떤 아이디어가 있나요? 또한 이 명령은 새 구성을 적용할 때 fail2ban-client reload와 동일한 영향을 미치 나요?systemctl restart fail2ban.service

내 경우에는 /etc/fail2ban/jail.d/local.conf

[sshd]
enabled = true
bantime = -1
findtime = 3600
maxretry = 5
action = %(action_)s

답변1

이것은 이전 버전의 fall2ban의 버그였습니다. 이후 문제가 해결되었지만 Linux 배포판에 여전히 이전 버전이 제공되는 경우 해결 방법이 필요할 수도 있습니다.

그만큼GitHub 문제여기에는 문제가 설명되어 있으며 해결 방법도 포함되어 있습니다.

이 문제는 최신 버전에서 수정되었습니다. 0.9의 경우 감옥 내에서 작동 중인 bantime(시간 초과) 매개변수를 간단히 덮어쓸 수 있습니다(ipset 영구 규칙의 매개변수 시간 초과는 0입니다).

[sshd]
bantime = -1
action = %(banaction)s[name=%(__name__)s, bantime=0, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]

답변2

ipset은 최소 시간 초과 0 또는 최대 시간 초과 2147483만 가질 수 있습니다.http://ipset.netfilter.org/ipset.man.html

timeout 모든 세트 유형은 세트를 생성하고 항목을 추가할 때 선택적 timeout 매개변수를 지원합니다. create 명령의 timeout 매개변수 값은 새 항목에 대한 기본 시간 초과 값(초)을 의미합니다. 시간 초과 지원이 포함된 세트가 생성된 경우 항목을 추가할 때 동일한 시간 초과 옵션을 사용하여 기본이 아닌 시간 초과 값을 지정할 수 있습니다. 0 시간 초과 값은 항목이 세트에 영구적으로 추가되었음을 의미합니다. -exist 옵션을 사용하여 요소를 다시 추가하면 이미 추가된 요소의 시간 초과 값을 변경할 수 있습니다. 가능한 최대 시간 초과 값은 2147483(초)입니다.

ipset의 시간 초과 생성에 사용되는 값은 conf 값 bantime입니다. bantime conf 값에 -1이 있으므로, 시스템이 다음과 같이 실행되도록 하기 때문에 생성된 ipset가 없기 때문에 Fail2ban의 감옥에 대한 ipset을 생성하는 동안 시스템에 오류가 발생합니다.

ipset create fail2ban-sshd hash:ip timeout -1

허용되는 시간 초과 값 범위는 0~2147483초입니다. 그 후 다음과 같이 실행되는 실패2ban-sshd라는 ipset 없이:

firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 -p tcp -m multiport --dports http,https -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable

또는:

iptables -t filter -I INPUT_direct 1 -p tcp -m multiport --dports http,https -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable

생성된 fall2ban-sshd라는 IPset이 없기 때문에 확실히 실패할 것입니다. -1 금지 시간을 0으로 변경해야 합니다.

관련 정보