[Team_Project]Kali Linux에서 우분투 서버를 향한 플러딩 공격과 보안설정

2025. 4. 24. 16:57·Project

프로젝트 개요

이번에 진행하는 프로젝트는 네트워크 인프라 기본 설정부터 공격 시나리오 구성, 방어 전략 수립까지 전 과정을 설계하고 실습하는 보안 중심 네트워크 프로젝트입니다.

 

프로젝트에서는 EIGRP를 활용한 동적 라우팅 구성, VLAN을 통한 내부망 분리, 그리고 포트 기반 공격 및 방어 실습을 통해 실제 현업과 유사한 내부망 환경을 구성해볼 예정입니다. 또한 Nmap과 Python 스크립트를 활용한 취약점 스캐닝 및 점검 자동화, ASA 방화벽 기반의 DMZ/Inside/Outside 보안 영역 구성까지 구성을 통하여 보안 대책을 진행합니다! 

- 실습 환경은 GNS3 기반으로 구성하며, 라우터, 스위치, 방화벽 등 주요 장비는 시뮬레이션을 통해 구동됩니다.
-  Python으로 작성된 스캐닝 자동화 스크립트와 각 장비의 설정은 별도 게시글에서 함께 다룹니다.


프로젝트 진행 과정

  1. 네트워크 인프라 기본 구성
    • 스위치 기반 VLAN 설계 및 EIGRP 설정
    • 내부망 분리 및 기초 통신 확인
  2. 공격 시나리오 구성 및 모의 침투 실습
    • 포트 스캐닝 및 취약 포트 점검
    • 내부망 포트 기반 공격 테스트
  3. 보안 장비 및 정책을 통한 대응
    • ASA 방화벽 구성 및 보안 정책 설정
    • DMZ/Inside/Outside 영역 나누기
    • ACL, NAT 설정을 통한 방어 구조 고도화
  4. Nmap + Python으로 스캐닝 자동화
    • 타깃 네트워크에 대한 포트/취약점 자동 점검 스크립트 제작
    • 결과 로그 저장 및 분석
  5.  

가용장비 및 소프트웨어:

  • 운영 환경 : Kali Linux, Cisco Router, L2 Switch, L3 Switch, ASA Firewall
  • 네트워크 프로토콜 및 기술 : EIGRP, NAT, VTP, STP
  • 사용 언어 : Python3
  • 활용 도구 및 플랫폼 : Nmap, Visual Studio Code

네트워크 토폴로지

  • L2 기반 내부망 네트워크 주소 : 192.168.0.0/26 ,192.168.0.64/26
  • L2 - ERGIP 연결(클라우드) 네트워크 주소 : 192.168.0.128/26
  • ERGIP 구성 네트워크 주소 : 192.168.0.192/26 172.16.0(10,20,30,50).0/24 20.0.0.0/24 30.1.1.0/24
  • nat로 연결된 라우터는 DHCP로 ip 주소 할당

구현

라우팅 네트워크 설계 및 보안 구성 (EIGRP)

더보기

EIGRP 란?

 

  • Cisco 사 고유의 하이브리드 라우팅 프로토콜로, 거리 벡터와 링크 상태 기법의 장점을 결합했다.
  • 변경된 경로 정보만 전파하는 부분적 업데이트, 안정적 전송을 위한 RTP(Reliable Transport Protocol)을 사용한다.
  • DUAL(Diffusing Update Algorithm) 알고리즘을 사용하여 최적 경로(Successor)와 대체 경로(Feasible Successor)를 선출한다. 대체 경로가 되기 위해서는 보고된 경로 거리(RD)가 이미 계산된 최적 경로(FD)보다 작아야 한다. (RD< FD)
  • 동일한 EIGRP AS번호를 가져야만 서로 정보를 교환하며, 다른 AS 번호를 가지고 있는 EIGRP일 때는 재분배(redistribute)를 수행해야 한다.
  • EIGRP가 DUAL을 통해 확보한 Feasible Successor(예비 경로)들 중 비용(메트릭)이 서로 다른 경로까지 동시에 사용하여 트래픽을 분산하는 로드 밸런싱 기법을 UCMP 라고 한다.
    • 단일 최적 경로뿐 아니라, 약간 더 비용이 높지만 유효한 예비 경로까지 활용해 네트워크 활용률 및 장애 복구 성능 향상한다.
    • 특정 라우터 에서 variance <값> 을 통해서 최적 경로 매트릭 * variance 이하인 경로까지 UCMP(Unequal Cost Multipath)에 포함시키도록 한다.
  1. Hello 패킷 교환 → Neighbor 관계 수립 → Neighbor Table 생성
  2. Update 패킷으로 라우팅 정보 교환 → Topology Table 생성
  3. DUAL에 따라 메트릭 계산 → Successor/Feasible Successor 선출 → Routing Table에 등록
  4. 변경 발생 시 Query/Reply로 대체 경로 탐색, 이후 Update/Ack 처리

#4대 이상의 라우터를 연결하여 안정적이며 보안이 강화된 내부망을 설계

  • EIGRP AS 번호: 100
  • 각 라우터에 loopback 인터페이스 EIGRP 설정
  • UCMP (Unequal Cost Multipath)를 이용하여 중복 경로 구성
  • MD5 인증을 사용한 패킷 인증 기능 설정 (key chain 사용) → 방화벽을 추가했을 때 수행
    • eigrp Neighbor 간의 인증 설정
key chain PROJ3KEY
key 1
key-string cisco

<인터페이스 접속>
ip authenication key-chain eigrp 100 PROJ3KEY
ip authenication mode eigrp 100 md5

loopback 인터페이스 설정

- R1 : 172.160.30.1/24
- R2 : 172.160.20.1/24
- R3 : 172.160.0.1/24
- R4 : 172.160.10.1/24
- EIGRP AS 번호 : `R3(config)#router eigrp 100`

EIGRP 설정

결과

라우팅 테이블 확인 결과 내부 서버에서의 라우팅이 각 각 connect로 연결되어 있으며 그 아래 속한 루프백, 하위 정보

및 NAT로의 라우팅 테이블이 구성되어 있음을 확인 가능

Routing Table 구성 확인


 

2. L2, L3 기반 내부망 구성 및 트래픽 분산

3대의 스위치를 활용해 VLAN 기반 2계층 및 3계층 내부망 구축을 하여 

보안성, 확장성, 관리 효율성을 확보하기 위해 Vlan 기반으로 각기 다른 네트워크 분리를 진행한다

스위치 별 포트는 Trunk 포트를 사용하였으며 이를 통해 Vlan 10,20이 연결이 가능하다

 

 

 

스위치 설정

더보기
SW-3 int vlan 10 ip add 192.168.0.1 255.255.255.192
int vlan 20 ip add 192.168.0.65 255.255.255.192
router eigrp 100 network 192.168.0.0 0.0.0.63 network 192.168.0.64 0.0.0.63 network 192.168.0.128 0.0.0.63
SW4 int g0/3 switchport mode access switchport access vlan 10
SW5 int g0/3 switchport mode access switchport access vlan 20
#SW3 - L3
int vlan 10 ip add 192.168.0.1 255.255.255.192
int vlan 20 ip add 192.168.0.65 255.255.255.192

router eigrp 100 
network 192.168.0.0 0.0.0.63 
network 192.168.0.64 0.0.0.63
network 192.168.0.128 0.0.0.63

#SW3(config)
vtp mode server
vtp domain CCNA
vtp password cisco



#Vlan 인터페이스 access mode설정
#SW4 - L2
int g0/3 switchport mode access
switchport access vlan 10

SW5 - L2
int g0/3 switchport mode access 
switchport access vlan 20

#SW(4,5)(config)
vtp mode client
vtp domain CCNA
vtp password cisco

span vlan 10 priority 4096
span vlan 20 priority 8192

결과

라우팅 설정 결과 L3 스위치인 SW3 에서 부터 연결을 STP를 활용하여 적절한 로드밸런싱이 되도록 VLan 10은 SW , VLan 20은 SW2

를 통하여만 외부 통신이 가능하도록 설정되었으며 각 PC의 VLAN 이 외부로의 통신이 가능하도록 구성이 되었다.

최적화를 통해 VLAN 별 포트 블로킹 , 루프를 방지하도록 하여 효율적인 토폴로지를 그릴 수 있


3. 스캐닝 및 취약점 분석 자동화

1,2단계의 구성되어진 네트워크 토폴로지에 대해 공인 인터넷을 통해 외부의 사용자가 접속을 하여 내부 서버를 탐색하고

공격하여 내부 네트워크의 취약점을 탐색하고 이를 방지할 대책을 마련하기위해 Nmap , Socket_portscan을 사용하여
현재 활성화 되어있는 (IP를 탐색, Port Scan, 취약점분석)을 진행하였다

 

Socket_Portscan 스크립트

더보기

#PortScan

#socket_PortSCAN
import socket
import ipaddress

# 사용자 입력 받기
start_ip = input("Start IP (ex: 192.168.1.10): ")
end_ip = input("End IP (ex: 192.168.1.20): ")
port = int(input("Port number to scan: "))

# IP를 정수로 변환
start = int(ipaddress.ip_address(start_ip))
end = int(ipaddress.ip_address(end_ip))

# 스캔 및 출력
print(f"{start_ip} ~ {end_ip}, scanning port {port}")
for ip_int in range(start, end + 1):
    ip = str(ipaddress.ip_address(ip_int))
    ipscan_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    result = ipscan_sock.connect_ex((ip, port))
    if result == 0:
        print(f"{ip}:{port} is open")
    else:
        print(f"{ip}:{port} is closed")
    ipscan_sock.close()

 

#Python_nmap
import nmap
import csv

# PortScanner 객체 생성
nm = nmap.PortScanner()

# 사용자 입력: CIDR 형태의 네트워크 주소
network = input("스캔할 네트워크 주소를 입력하세요 (ex: 192.168.1.0/24): ")

# CSV 파일 열기
with open("scan_results.csv", "w", newline='') as csvfile:
    fieldnames = ['IP', 'Port', 'State', 'Service', 'OS']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()

    # 네트워크 스캔 (서비스 및 OS 탐지 포함)
    print(f"\n[+] {network} 스캔 중 (포트 1~10000)...\n")
    nm.scan(hosts=network, arguments='-p 1-10000 -sV -O')

    # 결과 파싱
    for host in nm.all_hosts():
        print(f"Host: {host}")
        status = nm[host].state()
        print(f"  Status: {status}")

        os_info = "Unknown"
        if 'osmatch' in nm[host] and nm[host]['osmatch']:
            os_info = nm[host]['osmatch'][0]['name']

        if 'tcp' in nm[host]:
            for port, details in nm[host]['tcp'].items():
                state = details.get('state', 'unknown')
                service = details.get('name', 'unknown')
                print(f"  → Port {port}: {state} ({service}) / OS: {os_info}")

                # CSV 기록
                writer.writerow({
                    'IP': host,
                    'Port': port,
                    'State': state,
                    'Service': service,
                    'OS': os_info
                })

print("\n[✔] 스캔 완료! 결과는 'scan_results.csv'에 저장되었습니다.")`

Python3 스크립트를 통하여 자동적으로 IP를 탐색하였고 탐색된 네트워크 영역에 대해 각 장비의 종류, 사용가능 포트 등

확인을 하여 Bull- NSE스크립트를 사용하여 취약점을 스캔하였으며 http:80 포트가 열려 웹서버를 운영중인
 Linux운영체제를 가진 192.168.0.194의 서버에 대해 (Slowris,DHCP-Spoofing,Arp-Spoofing)
취약점을 가지는 것을 확인하였다

 

Slowlris 취약점 확인

4.공격 시나리오 및 방어

앞서 진행된 포트 및 취약점 스캔을 통하여 3가지의 취약점을 발견하였고 이를 모의해킹을 통해 발생하는 문제점과
시나리오를 확인하고 막을 수 있는 방어책을 세워 추후 해킹이 발생하지 않도록 진행

  • 공격: ARP Spoofing, DHCP Starvatio, slowloris
  • 방어: port-security vlanfilter(vlan access-map), DHCP Snooping, DAI. 과부화 설정

 

4.1 DHCP 과부화 공격

방어책

# DHCP Snooping 기능 전역 활성화 (스위치 전체에서 DHCP Snooping 사용 가능하게 함)
ip dhcp snooping

# VLAN 10에 대해서만 DHCP Snooping 활성화 
ip dhcp snooping vlan 10

# DHCP 서버가 연결된 인터페이스에서 신뢰 설정 (
# 이 포트를 통해 나가는 DHCP 응답 트래픽은 정상적인 것으로 간주함
interface <DHCP 서버 연결 포트>
 ip dhcp snooping trust

# 기타 클라이언트 포트에 속도 제한 설정 s)
# DHCP Discover/FWD 요청을 초당 10개 이하로 제한 → DHCP 스푸핑/플러딩 공격 차단 목적
interface <그 외 액세스 포트>
 ip dhcp snooping limit rate 10

# DHCP Snooping 속도 제한 위반 시 자동으로 포트 차단되며, 복구 설정
errdisable recovery cause dhcp-rate-limit

 

4.2 ARP Spoofing


ARP 스푸핑 공격을 통해 mac를 변조를 하여 연결 호스트에 대해 주소를 속이고 탈취하는 것에 대한 공격 및 실습

4.3 Slowloris Attack 과부화 공격 

 

공격:

#Slowloris Attact
#소켓 생성 후 연결을 유지시키는 서비스 거부 공격
git clone https://github.com/gkbrk/slowloris.git 
cd slowloris
slowloris.py -p 80 -s 1000 -v 192.168.0.194 #1000개의 소켓을 생성 후 연결을 유지하여 속도를 늦춤

소캣 생성 후 연결 유지

 

방어:

ciscoasa(config)# class-map CONN_LIMIT
ciscoasa(config-cmap)# match any

ciscoasa(config)# policy-map LIMIT_POLICY
ciscoasa(config-pmap)# class CONN_LIMIT
ciscoasa(config-pmap-c)# set connection per-client-max 20 #세션 수 제한
ciscoasa(config-pmap-c)# set connection timeout idle 0:05:0 #세션 시간 제한

ciscoasa(config)service-policy LIMIT_POLICY global #정책 적용

5.ASA 방화벽을 이용한 보안 영역 구축 및 NAT 구성

#ASA 방화벽을 중심으로 DMZ/Inside/Outside 보안 영역을 구성하고 접근 제어 구현

 

요구조건:

  • ASA 장비에 세 가지 영역 설정 및 보안 레벨 구성
  • DMZ에 2대 이상의 서버(HTTP 등) 설치
  • Inside/Outside에서 접근 가능하도록ACL 및 NAT/PAT 구성
  • ASDM을 통한 설정 일부 적용
<외부 방향 인터페이스 1>
	nameif outside1
	security-level 0
	ip addr 172.16.0.1 255.255.255.0
	no shutdown
	
	<외부 방향 인터페이스 2>
	nameif outside2
	security-level 0
	ip addr 172.16.10.1 255.255.255.0
	no shutdown

 <내부 방향 인터페이스>
  nameif inside
	security-level 100
	ip addr 192.168.0.131 255.255.255.192
	no shutdown

 <DMZ 방향 인터페이스>
  nameif DMZ
	security-level 50
	ip addr 192.168.0.193 255.255.255.192
	no shutdown
	
<eigrp 프로토콜>
	router eigrp 100 
	no auto-summary
  net 192.168.0.128 255.255.255.192
  net 192.168.0.192 255.255.255.192
  net 172.16.0.0 255.255.255.0
  net 172.16.10.0 255.255.255.0
  net 172.160.0.0 255.255.255.0

 

NAT/PAT 구성

<asad 런처를 이용해서 구성 수행>
http server enable
http 0 0 mgmt

 

 

'Project' 카테고리의 다른 글

[Mini_Project] AWS Cloud를 활용한 Web,NFS,DB 서버 구축  (0) 2025.03.14
[Mini_Project] 본사_지사 VPN 활용한 네트워크 및 서버 구축  (0) 2025.03.02
[Mini_Project] 본사_지사 VPN 활용한 네트워크 및 서버 구축_소개  (0) 2025.02.20
'Project' 카테고리의 다른 글
  • [Mini_Project] AWS Cloud를 활용한 Web,NFS,DB 서버 구축
  • [Mini_Project] 본사_지사 VPN 활용한 네트워크 및 서버 구축
  • [Mini_Project] 본사_지사 VPN 활용한 네트워크 및 서버 구축_소개
cumo
cumo
  • cumo
    이것저것
    cumo
  • 전체
    오늘
    어제
    • 분류 전체보기 (87) N
      • 보안뉴스 (14)
      • Project (4)
        • Network (0)
        • Linux (0)
        • Cloud (1)
      • wargame (1)
      • DevOps (8)
        • K8s (4)
      • 네트워크 (49)
        • Secuerity (1)
        • Cloud (6)
        • Linux (20)
        • Network (22)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 도구모음 사이트
  • 공지사항

  • 인기 글

  • 태그

    1
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
cumo
[Team_Project]Kali Linux에서 우분투 서버를 향한 플러딩 공격과 보안설정
상단으로

티스토리툴바