커널이 금지된 IP를 확인하려고 시도하는 이유를 이해하려고 합니다(Debian 10 VPS).

커널이 금지된 IP를 확인하려고 시도하는 이유를 이해하려고 합니다(Debian 10 VPS).

VPS에서 실행되는 Debian 10 서버가 있습니다. 내가 설치한 유일한 소프트웨어는tinyproxy(http 프록시) 및fail2ban입니다.

나는 다음을 포함했습니다:

  • nmap을 이용한 포트 스캐닝 결과
  • Fail2ban jam.local 파일의 특정 설정입니다.
  • failure2ban failure2ban.local 파일의 특정 설정입니다.
  • 확인 로그에서 샘플을 완성하세요.
  • Fail2ban 로그의 전체 샘플.
  • 내 IpTables 샘플 스캔 결과.

문제의 결론:

  • auth.log에는 192.241.141.43이 거의 매분마다 입력을 시도하는 것으로 표시됩니다.
  • failure2ban.log에 192.241.141.43이 금지되었음을 표시합니다.
  • iptables는 192.241.141.43이 금지되었음을 보여줍니다.

IP가 차단되어 있어 악의적인 사용자가 로그인을 시도할 수 없을 것으로 생각됩니다. 그러나 커널은 (pam_unix(sshd:auth)) 로그인 시도를 허용하는 것 같습니다.

내 두 가지 질문:

  1. 악의적인 사용자가 금지되었음에도 불구하고 커널에서 로그인 시도를 허용하는 이유는 무엇입니까?
  2. Iptables 항목에 "tcp" 대신 "icmp"가 표시되는 이유는 무엇입니까? 예, "ping"이 icmp 패킷이라는 것을 알고 있지만 tcp 로그인 시도를 차단하고 싶습니다.

매우 감사합니다!

nmap 스캔 결과

# Nmap 7.80 scan initiated Sat Jan 27 15:25:04 2024 as: nmap -sS -oG out.txt 

107.174.156.124

Host: 107.174.156.124 (107-174-156-124-host.colocrossing.com)   
Status: 
Up
Host: 107.174.156.124 (107-174-156-124-host.colocrossing.com)   
Ports: 
139/filtered/tcp//netbios-ssn///, 
445/filtered/tcp//microsoft-ds///, 
8888/open/tcp//sun-answerbook///    
Ignored State: closed (997)

# Nmap done at Sat Jan 27 15:25:06 2024 
-- 1 IP address (1 host up) scanned in 2.20 seconds

이것은 jam.local에 있는 내 항목입니다.

SSHD 포트를 63xxx 범위로 옮겼습니다. 마지막 3자리를 xxx로 가렸어요

#
# JAILS
#

#
# SSH servers
#

[sshd]

# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode   = normal
enabled = true
mode = aggressive
port = 63xxx
filter = sshd
logpath = /var/log/auth.log
bantime = 2000000
findtime = 7200
maxretry = 2
backend = %(sshd_backend)s
action = iptables-multiport[name=sshd, port="ssh", protocol=tcp]

fail2ban.local

# Options: dbpurgeage
# Notes.: Sets age at which bans should be purged from the database
# Values: [ SECONDS ] Default: 86400 (24hours)
dbpurgeage = 2100000

샘플 인증 로그

예를 들어 192.241.141.43은 여러 번 시도되었으며 거의 ​​1분마다 반복되었습니다!

Jan 27 15:54:55 racknerd-64d010 sshd[2232]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.241.141.43  user=root
Jan 27 15:54:57 racknerd-64d010 sshd[2232]: Failed password for root from 192.241.141.43 port 54798 ssh2
Jan 27 15:54:57 racknerd-64d010 sshd[2232]: Received disconnect from 192.241.141.43 port 54798:11: Bye Bye [preauth]
Jan 27 15:54:57 racknerd-64d010 sshd[2232]: Disconnected from authenticating user root 192.241.141.43 port 54798 [preauth]

Fail2ban 예시

예를 들어, fall2ban은 192.241.141.43이 금지되었음을 의미합니다.

2024-01-27 15:55:50,928 fail2ban.actions        [29992]: WARNING [sshd] 82.102.12.130 already banned
2024-01-27 15:55:50,929 fail2ban.actions        [29992]: WARNING [sshd] 192.241.141.43 already banned
2024-01-27 15:55:50,929 fail2ban.actions        [29992]: WARNING [sshd] 159.75.161.40 already banned

Iptables 스캔 결과

IP 192.241.141.43은 금지되어 있습니다.

    0     0 REJECT     all  --  *      *       61.231.64.170        0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       192.241.141.43       0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  *      *       104.250.34.177       0.0.0.0/0            reject-with icmp-port-unreachable

추가 정보 1+2, 완전한 규칙 세트

다음은 전체 규칙 세트 파일에 대한 링크입니다.

=== 추가 정보 요약

여기에 Chris Davis의 주요 의견을 요약했습니다. 나는 이 글을 읽는 미래의 독자들이jail.local 파일의 SSHD Jail 섹션에 무엇을 추가해야 할지에 대한 명확한 아이디어를 가지도록 이렇게 합니다.

또한 Fail2ban.local 파일에 변경된 텍스트 한 줄을 포함시켰습니다. Chris에게 다시 한 번 감사드립니다.

=== 이것은jail.local입니다.

#
# 감옥
#

#
# SSH 서버
#

[sshd]

# 보다 공격적인 sshd 모드를 사용하려면 Jail.local에서 필터 매개변수 "mode"를 설정하세요.
# 일반(기본값), DDoS, 추가 또는 공격적(모든 조합).
# 사용 예와 자세한 내용은 "tests/files/logs/sshd" 또는 "filter.d/sshd.conf"를 참조하세요.
#모드=일반
활성화 = 사실
모드=공격적
포트 = 22
필터=sshd
로그 경로 = /var/log/auth.log
교대 시간 = 2000000
찾기 시간 = 7200
최대 재시도 = 2
백엔드 = %(sshd_backend)s
banaction_allports = iptables-allports
action_ap = %(banaction_allports)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", 프로토콜="%(protocol)s", chain="% (체인)"]
작업 = %(action_ap)s

=== 이것은 Fail2ban.local입니다.

# 옵션: dburgege
# 참고: 데이터베이스에서 차단이 삭제되어야 하는 연령을 설정하세요.
# 값: [ SECONDS ] 기본값: 86400(24시간)
데이터베이스 지우기 = 2100000

답변1

대답은 그것과 매우 유사합니다나는 그것을 당신에게 주었다이것다른 날.

이 경우 서비스에 대한 사용자 정의 인바운드 포트 가 ssh아닌 해당 포트만 차단합니다.ssh

action = iptables-multiport[name=sshd, port="ssh", protocol=tcp]

개인적으로는 문제가 되는 IP 주소의 모든 연결 요청을 차단하는 것이 좋습니다. 귀하의 버전에서 다음 정의를 사용하거나 jail.local귀하의 버전에서 동등한 정의를 사용하여 이를 수행하십시오 fail2ban.

banaction_allports = iptables-allports
action_ap = %(banaction_allports)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
action = %(action_ap)s

여기에는 정의된 계층 구조가 있습니다. 동사는 action각 부분의 기본값입니다 [jail-name]. 저는 그것을 에서 로 변경했는데 action = %(action_)s, 좀 더 자세히 살펴보면 jail.conf로 정의되어 있는 것을 볼 수 있습니다 action_ = %(banaction)s[port="%(port)s", protocol="%(protocol)s". 이것은 다시 banactionusing으로 정의된 의 정의를 사용합니다 iptables-multiport. 그 이상의 정의가 있기 banaction_allports = iptables-allports때문에 나는 그것을 생각해내기 위해 이 정의 세트를 다시 살펴보았습니다 action_ap. iptables-allports아래에서 찾을 수 있습니다action.d/


iptables-multiportDebian 10(buster)의 경우 다음에서 금지된 작업을 변경하려면 이 설정만 필요합니다 iptables-allports.

banaction = iptables-allports

왜냐하면 당신은 이미 이것을 가지고 있어야 하기 때문입니다:

action_ = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
action = %(action_)s

관련 정보