Linux
Linux서버 자동으로 해킹시도 IP차단방법
아이티제어
2024. 1. 16. 06:00
리눅스 iptables 을 통하여 /var/log/secure 로그파일을 이용한 자동 해킹차단 구현하기
iptable 혹은 firewall-cmd 를 통해서 아이피 차단을 수동으로 가능도 하고
자동으로 /var/log/secure 에 로그인 실패 가되는것을 체크하여 자동으로 방화벽에 추가하므로 인해
무한 해킹을 시도하는것으로 부터 원천 차단하는 법을 소개한다.
서버를 오랫만에 들어가보니
아래와같은 무지비한 공격의 시도가 있었다...
Jan 14 05:17:20 NkCloudKt1 sshd[17750]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=107.172.10.199
Jan 14 05:17:22 NkCloudKt1 sshd[17750]: Failed password for invalid user ashton1 from 107.172.10.199 port 42458 ssh2
Jan 14 05:17:22 NkCloudKt1 sshd[17750]: Received disconnect from 107.172.10.199 port 42458:11: Bye Bye [preauth]
Jan 14 05:17:22 NkCloudKt1 sshd[17750]: Disconnected from 107.172.10.199 port 42458 [preauth]
Jan 14 05:17:41 NkCloudKt1 sshd[17752]: reverse mapping checking getaddrinfo for 107-172-10-199-host.colocrossing.com [107.172.10.199] failed - POSSIBLE BREAK-IN ATTEMPT!
Jan 14 05:17:41 NkCloudKt1 sshd[17752]: Invalid user ashton from 107.172.10.199 port 59768
Jan 14 05:17:41 NkCloudKt1 sshd[17752]: input_userauth_request: invalid user ashton [preauth]
Jan 14 05:17:41 NkCloudKt1 sshd[17752]: pam_unix(sshd:auth): check pass; user unknown
Jan 14 05:17:41 NkCloudKt1 sshd[17752]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=107.172.10.199
Jan 14 05:17:43 NkCloudKt1 sshd[17752]: Failed password for invalid user ashton from 107.172.10.199 port 59768 ssh2
Jan 14 05:17:43 NkCloudKt1 sshd[17752]: Received disconnect from 107.172.10.199 port 59768:11: Bye Bye [preauth]
Jan 14 05:17:43 NkCloudKt1 sshd[17752]: Disconnected from 107.172.10.199 port 59768 [preauth]
Jan 14 05:18:02 NkCloudKt1 sshd[17766]: reverse mapping checking getaddrinfo for 107-172-10-199-host.colocrossing.com [107.172.10.199] failed - POSSIBLE BREAK-IN ATTEMPT!
Jan 14 05:18:02 NkCloudKt1 sshd[17766]: Invalid user ashton from 107.172.10.199 port 48852
파이선을 설치하고 iptable 또한 설치되어있어야 한다. 역서 설치방법은 생략.
import subprocess
import re
# /var/log/secure 파일을 읽어서 처리
with open("/var/log/secure", "r") as file:
log_lines = file.readlines()
# 비정상적인 접속 시도를 추적할 IP 주소 저장
ip_list = set()
for line in log_lines:
if "Failed password" in line:
ip = re.findall(r'[0-9]+(?:\.[0-9]+){3}', line)[0]
ip_list.add(ip)
# 방화벽에 IP 추가
for ip in ip_list:
subprocess.run(["iptables", "-A", "INPUT", "-s", ip, "-j", "DROP"])
print(f"Blocked IP: {ip}")
위에코드를 vi /root/yy_python/auto_iptable_add.py 라고 치고 엔터
그리고 붙어넣은다음에
python /root/yy_python/auto_iptable_add.py &
이렇게 하면 된다.
아래는 실행결과이다.
[root@NkCloudKt1 yy_python]# py auto_iptable_add.py
Blocked IP: 189.7.17.61
Blocked IP: 134.209.157.228
Blocked IP: 128.199.168.222
Blocked IP: 157.245.146.5
Blocked IP: 107.172.10.199
Blocked IP: 128.199.154.102
나뿐 시끼들..감히.이젠 맘편히 있을수있겠다.
만약 내가 잘못하여 블럭이되면? 재부팅하면 사라진다.
# 만약 재부팅되도 사라지 않게 하려면
service iptables save
자동으로 ip를 추가할때는 자신의 ip가 차단되면 곤란해질수있으니
만약 자신것이 차단되면? 우회하여 접속하여
#아래는 INPUT체인에서 DORP규칙을 삭제합니다.
iptables -D INPUT -s 107.172.10.199 -j DROP
#실행명령어 실행 즉시 네트웍에 적용됩니다.
#이제 저장하여 재부팅시에도 유지되게
service iptables save
파이선 설치 확인 which 패키지이름이나명령어
[root@NkCloudKt1 yy_python]# which python3
/usr/local/bin/python3
py 라고 링크걸면 편리하다.
# ln -s /usr/local/bin/python3 /usr/bin/py
아이티제어 윤재만 올림 2024-1-16