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)) 로그인 시도를 허용하는 것 같습니다.
내 두 가지 질문:
- 악의적인 사용자가 금지되었음에도 불구하고 커널에서 로그인 시도를 허용하는 이유는 무엇입니까?
- 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"
. 이것은 다시 banaction
using으로 정의된 의 정의를 사용합니다 iptables-multiport
. 그 이상의 정의가 있기 banaction_allports = iptables-allports
때문에 나는 그것을 생각해내기 위해 이 정의 세트를 다시 살펴보았습니다 action_ap
. iptables-allports
아래에서 찾을 수 있습니다action.d/
iptables-multiport
Debian 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