[파이썬] 스캐닝과 포트 스캐닝 방지

스캐닝과 포트 스캐닝은 네트워크 보안 공격 중 가장 흔한 형태입니다. 공격자들은 시스템의 취약점을 찾기 위해 대상 시스템의 포트를 스캔합니다. 이러한 공격으로부터 시스템을 보호하기 위해 파이썬을 사용하여 스캐닝과 포트 스캐닝 방지 기능을 구현할 수 있습니다.

1. IP 주소 숨기기

공격자들은 흔히 IP 주소를 통해 시스템을 식별하고 타겟을 공격합니다. 따라서, 우리의 첫 번째 목표는 시스템의 IP 주소를 숨기는 것입니다.

import socket

def hide_ip_address():
    try:
        # 현재 호스트 이름을 가져옴
        hostname = socket.gethostname()
        # 현재 호스트 이름을 IP 주소로 변환
        ip_address = socket.gethostbyname(hostname)
        
        # IP 주소를 숨김
        fake_ip_address = "127.0.0.1"
        
        # 변환된 IP 주소 출력
        print("Real IP address:", ip_address)
        print("Fake IP address:", fake_ip_address)

    except socket.gaierror:
        print("Unable to resolve hostname")

hide_ip_address()

2. 포트 스캐닝 방지

공격자는 시스템의 포트를 스캔하여 취약점을 찾으려고 시도합니다. 포트 스캐닝을 방지하기 위해 포트를 닫거나 필요한 경우 필터링하는 방법을 사용할 수 있습니다. 아래의 예제는 특정 포트를 닫는 방법을 보여줍니다.

import socket

def close_port(port):
    try:
        # 소켓 생성
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 포트 닫기
        s.bind(("", port))
        # 닫힌 포트 정보 출력
        print("Port", port, "is closed")
        
    except OSError:
        # 열려있는 포트일 경우 오류 발생
        print("Port", port, "is open")

close_port(8080)
  1. 방화벽 설정

방화벽은 네트워크 트래픽을 모니터링하고 차단하는 역할을 합니다. 파이썬을 사용하여 방화벽 설정을 관리할 수 있습니다. 다음 예제는 iptables를 사용하여 특정 포트에 대한 액세스를 차단하는 방법을 보여줍니다.

import subprocess

def block_port(port):
    try:
        # iptables 명령을 사용하여 포트 차단
        subprocess.run(["iptables", "-A", "INPUT", "-p", "tcp", "--dport", str(port), "-j", "DROP"])
        print("Port", port, "is blocked")
    except subprocess.CalledProcessError:
        print("Failed to block port", port)

block_port(8080)

위의 코드는 subprocess 모듈을 사용하여 명령줄에서 iptables를 실행하는 방법을 보여줍니다. 하지만, 이 작업은 시스템 관리자 권한이 필요하며, 주의해서 사용해야 합니다.

위의 방법들은 스캐닝과 포트 스캐닝 공격으로부터 시스템을 보호하는 몇 가지 예시입니다. 더 강력한 보안 기능을 구현하기 위해서는 실제 보안 전문가의 지침을 따를 것을 권장합니다.