iptables 를 이용한 Kali Linux 방화벽 설정

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 리눅스 커널에서 IP 패킷 필터링 규칙을 관리하는 강력한 도구인 iptables를 사용하여 Kali Linux 의 방화벽을 구성하는 방법을 배웁니다. 주요 목표는 IP 주소, 포트 및 프로토콜을 기반으로 트래픽을 제어하여 네트워크 보안을 개선하는 방화벽 규칙을 이해하고 적용하는 것입니다. 단계별 실습 활동을 통해 현재 iptables 규칙을 확인하고, 특정 IP 주소를 차단하며, 지정된 포트의 트래픽을 허용하고, 구성을 저장하는 과정을 거치게 됩니다. LabEx VM 환경 내에 미리 구성된 Kali Linux 컨테이너에서 작업하면서 네트워크 트래픽을 보호하기 위한 방화벽 설정 관리 실무 능력을 키울 수 있습니다.

iptables 설치 및 규칙 확인

첫 번째 단계에서는 iptables를 설치하고 Kali Linux 컨테이너 내의 현재 방화벽 규칙을 확인하는 방법을 배웁니다. 이는 변경 사항을 적용하기 전에 기존 방화벽 구성을 파악하는 데 필수적인 시작점입니다.

LabEx VM 환경에서 터미널을 열면 Kali Linux 컨테이너의 셸에 자동으로 연결됩니다. 컨테이너를 수동으로 시작하거나 셸에 진입할 필요가 없으며, 환경은 이미 준비되어 있습니다. 먼저 iptables를 설치하고 방화벽 규칙의 현재 상태를 살펴보겠습니다.

iptables는 리눅스 커널의 IP 패킷 필터링 규칙을 관리할 수 있게 해주는 명령줄 유틸리티입니다. 이러한 규칙은 소스 IP 나 포트 번호와 같은 특정 기준에 따라 패킷을 허용 (Accept), 차단 (Drop) 또는 리다이렉트 (Redirect) 할지 결정합니다. 규칙을 확인하면 현재 어떤 정책이 적용되어 있는지 알 수 있습니다.

먼저 패키지 목록을 업데이트하고 iptables를 설치합니다. 다음 명령어를 입력하고 Enter 를 누르세요.

apt update && apt install -y iptables

이 명령어는 패키지 목록을 업데이트하고 한 번에 iptables를 설치합니다. && 연산자는 업데이트가 성공한 경우에만 설치를 진행하도록 보장합니다.

예상 출력 결과 (예시이며 실제 출력은 다를 수 있음):

Get:1 http://mirrors.cloud.aliyuncs.com/kali kali-rolling InRelease [30.9 kB]
...
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
iptables is already the newest version (1.x.x-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

이제 iptables가 설치되었으므로, 다음 명령어를 실행하여 현재 iptables 규칙 목록을 확인합니다. 명령어를 입력하고 Enter 를 누르세요.

iptables -L -v -n

이 명령어의 옵션은 다음과 같습니다.

  • iptables: 방화벽 규칙을 관리하는 도구입니다.
  • -L: 선택한 체인의 모든 규칙을 나열합니다.
  • -v: 패킷 및 바이트 카운터를 포함하여 상세한 정보를 출력합니다.
  • -n: 이름 해석 없이 IP 주소와 포트를 숫자 형식으로 표시합니다.

이 명령어를 실행하면 아래와 유사한 출력이 표시됩니다. 정확한 출력은 컨테이너의 초기 구성에 따라 다를 수 있습니다.

예상 출력 결과 (예시이며 실제 출력은 다를 수 있음):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

이 출력은 세 가지 주요 체인을 보여줍니다. 들어오는 트래픽을 위한 INPUT, 통과하는 트래픽을 위한 FORWARD, 나가는 트래픽을 위한 OUTPUT입니다. 각 체인은 기본 정책 (예: ACCEPT) 과 특정 규칙이 있는 경우 해당 규칙을 표시합니다. 이 예시처럼 체인이 비어 있다면 현재 적용된 사용자 정의 규칙이 없으며 기본 정책이 모든 트래픽을 제어하고 있음을 의미합니다.

출력 내용을 잠시 검토해 보세요. 다음 단계에서 규칙을 추가하거나 수정하기 전에 방화벽의 현재 상태를 이해하는 것이 매우 중요합니다. 이 기초 단계를 통해 Kali Linux 컨테이너의 iptables 초기 구성에 익숙해질 수 있습니다.

iptables 체인과 정책의 이해

iptables를 설치하고 초기 규칙을 확인했으므로, 사용자 정의 규칙을 만들기 전에 iptables가 작동하는 방식을 더 깊이 이해해 보겠습니다. 이 단계에서는 다양한 체인과 기본 정책에 대해 배웁니다.

iptables는 방화벽 규칙을 체인 (Chain) 으로 구성하며, 이는 패킷이 검사되는 규칙 목록입니다. 세 가지 주요 기본 체인은 다음과 같습니다.

  • INPUT: 로컬 시스템으로 들어오는 패킷을 처리합니다.
  • FORWARD: 시스템을 통해 라우팅되는 패킷을 처리합니다.
  • OUTPUT: 로컬 시스템에서 생성되어 나가는 패킷을 처리합니다.

각 체인에는 특정 규칙과 일치하지 않는 패킷에 대해 수행할 작업을 결정하는 기본 정책이 있습니다. 가장 일반적인 정책은 ACCEPT(패킷 허용) 와 DROP(패킷 폐기) 입니다.

현재 정책 설정을 더 자세히 살펴보겠습니다. 다음 명령어를 실행하여 각 체인에 대한 상세 정보를 확인하세요.

iptables -L -v -n --line-numbers

--line-numbers 옵션은 각 규칙에 행 번호를 추가하여 나중에 특정 규칙을 참조하기 쉽게 해줍니다.

예상 출력 결과 (예시이며 실제 출력은 다를 수 있음):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num  pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num  pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num  pkts bytes target     prot opt in     out     source               destination

현재 모든 체인의 정책이 ACCEPT로 설정되어 있음을 알 수 있습니다. 즉, 패킷과 일치하는 특정 규칙이 없으면 통과가 허용됩니다. 패킷 및 바이트 카운터가 0인 이유는 이 새로운 컨테이너 환경에서 아직 처리된 트래픽이 없기 때문입니다.

이러한 기본 개념을 이해하는 것은 사용자 정의 규칙을 추가하기 전에 필수적입니다. 패킷이 시스템을 통해 어떻게 흐르는지, 그리고 일치하지 않는 트래픽에 대한 기본 동작이 무엇인지 알아야 하기 때문입니다.

특정 IP 주소 차단하기

이제 iptables가 설치되었으므로 특정 IP 주소로부터의 트래픽을 차단하여 방화벽 구성을 시작해 보겠습니다. 이는 특정 소스로부터의 원치 않는 접근이나 잠재적인 위협을 방지하기 위한 일반적인 보안 조치입니다.

iptables로 IP 주소를 차단한다는 것은 해당 주소에서 들어오는 패킷을 폐기 (Drop) 하는 규칙을 만드는 것을 의미합니다. 패킷이 폐기되면 시스템은 이를 무시하며, 결과적으로 지정된 IP 와의 모든 통신이 중단됩니다. 이 실습에서는 컨테이너 환경에서 연습하기 위한 안전한 예시로 가상의 IP 주소인 192.168.1.100으로부터의 트래픽을 차단해 보겠습니다.

Kali Linux 컨테이너 터미널에 다음 명령어를 입력하고 Enter 를 눌러 192.168.1.100에서 들어오는 모든 트래픽을 차단하는 규칙을 추가합니다.

iptables -A INPUT -s 192.168.1.100 -j DROP

이 명령어의 구성 요소는 다음과 같습니다.

  • iptables: 방화벽 규칙 관리 도구입니다.
  • -A INPUT: 들어오는 트래픽을 처리하는 INPUT 체인에 규칙을 추가 (Append) 합니다.
  • -s 192.168.1.100: 이 규칙과 일치시킬 소스 (Source) IP 주소를 지정합니다.
  • -j DROP: 지정된 IP 주소에서 오는 패킷을 폐기하도록 동작을 설정합니다.

명령어를 실행한 후 즉각적인 출력은 없으며, 이는 규칙이 INPUT 체인에 성공적으로 추가되었음을 나타냅니다.

규칙이 적용되었는지 확인하려면 다음 명령어를 실행하여 현재 iptables 규칙 목록을 확인하고 Enter 를 누르세요.

iptables -L -v -n

예상 출력 결과 (예시이며 실제 출력은 다를 수 있음):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      *       192.168.1.100        0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

이 출력은 INPUT 체인 아래에 192.168.1.100으로부터의 모든 트래픽을 폐기하는 규칙을 보여줍니다. 해당 IP 로부터의 트래픽 시도가 없었다면 패킷 (pkts) 및 바이트 (bytes) 카운터는 0으로 표시될 것입니다.

이 단계를 완료함으로써 특정 IP 주소의 트래픽을 차단하는 규칙을 성공적으로 추가했습니다. 이 기술은 원치 않거나 악의적인 소스로부터의 접근을 제한하는 데 매우 중요합니다. 다음 단계에서는 보안을 유지하면서 필요한 서비스를 활성화하기 위해 특정 포트의 트래픽을 허용하는 방법을 배웁니다.

특정 포트 트래픽 허용하기

IP 주소를 차단해 보았으니, 다음으로 중요한 기술은 필요한 서비스에 접근할 수 있도록 특정 포트의 트래픽을 허용하는 것입니다. 이 단계에서는 iptables를 사용하여 지정된 포트에서 들어오는 트래픽을 허용하는 규칙을 추가합니다.

포트는 네트워크 서비스가 네트워크를 통해 통신하는 데 사용됩니다. 예를 들어, 웹 서버는 일반적으로 HTTP 트래픽을 위해 80번 포트를 사용합니다. 특정 포트의 트래픽을 허용한다는 것은 해당 포트로 향하는 패킷을 수락 (Accept) 하는 규칙을 만들어 관련 서비스에 접근할 수 있도록 보장하는 것을 의미합니다. 이 실습에서는 실질적인 예로 80번 포트의 트래픽을 허용해 보겠습니다.

Kali Linux 컨테이너 터미널에 다음 명령어를 입력하고 Enter 를 눌러 80번 포트에서 들어오는 TCP 트래픽을 수락하는 규칙을 추가합니다.

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

이 명령어의 구성 요소는 다음과 같습니다.

  • iptables: 방화벽 규칙 관리 도구입니다.
  • -A INPUT: 들어오는 트래픽을 위한 INPUT 체인에 규칙을 추가합니다.
  • -p tcp: HTTP 와 같은 서비스에서 흔히 사용되는 TCP 프로토콜을 지정합니다.
  • --dport 80: 목적지 포트 (Destination Port) 를 80으로 지정하여 이 포트로 향하는 트래픽을 대상으로 합니다.
  • -j ACCEPT: 이 규칙과 일치하는 패킷을 수락하도록 동작을 설정합니다.

명령어를 실행한 후 즉각적인 출력은 없으며, 이는 규칙이 성공적으로 추가되었음을 의미합니다.

규칙이 적용되었는지 확인하려면 다음 명령어를 실행하여 현재 iptables 규칙 목록을 확인하고 Enter 를 누르세요.

iptables -L -v -n

예상 출력 결과 (예시이며 실제 출력은 다를 수 있음):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      *       192.168.1.100        0.0.0.0/0
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

이 출력은 이전에 설정한 192.168.1.100 차단 규칙과 함께 80번 포트의 TCP 트래픽을 수락하는 INPUT 체인 규칙을 보여줍니다. 이 규칙과 일치하는 트래픽이 발생하지 않았다면 카운터는 0으로 표시됩니다.

이 단계를 통해 특정 포트의 트래픽을 허용하는 방법을 배웠습니다. 이는 다른 포트의 보안을 유지하면서 웹 서버와 같은 서비스에 대한 접근을 허용하는 데 필수적입니다. 다음 단계에서는 나중에 참조하거나 다시 로드할 수 있도록 이러한 구성을 저장하는 방법을 배웁니다.

iptables 구성 저장하기

마지막 단계에서는 Kali Linux 컨테이너 내에서 iptables 구성을 저장하는 방법을 배웁니다. 규칙은 기본적으로 메모리에 저장되므로 컨테이너가 재시작되면 손실됩니다. 따라서 규칙을 저장하는 것은 매우 중요합니다. 이 단계를 통해 나중에 참조하거나 다시 로드할 수 있도록 방화벽 설정을 보존할 수 있습니다.

기본적으로 iptables 규칙은 시스템의 런타임 메모리에만 존재합니다. 이를 파일로 저장하면 구성 기록을 유지할 수 있으며, 이는 문서화에 유용하거나 나중에 iptables-restore를 사용하여 규칙을 복구하는 데 사용될 수 있습니다. 이 실습에서는 컨테이너 내의 /root 디렉토리에 있는 파일에 규칙을 저장합니다.

Kali Linux 컨테이너 터미널에 다음 명령어를 입력하고 Enter 를 눌러 현재 iptables 규칙을 /root 디렉토리의 iptables-rules라는 파일로 저장합니다.

iptables-save > /root/iptables-rules

이 명령어의 구성 요소는 다음과 같습니다.

  • iptables-save: 메모리에 있는 현재 iptables 규칙을 표준 출력으로 내보냅니다.
  • > /root/iptables-rules: 출력을 /root 디렉토리의 iptables-rules 파일로 리다이렉션합니다. 파일이 이미 존재하면 덮어씁니다.

명령어를 실행한 후 즉각적인 출력은 없으며, 이는 규칙이 지정된 파일에 성공적으로 저장되었음을 나타냅니다.

규칙이 올바르게 저장되었는지 확인하려면 다음 명령어를 입력하고 Enter 를 눌러 파일 내용을 확인하세요.

cat /root/iptables-rules

예상 출력 결과 (예시이며 실제 출력은 다를 수 있음):

## Generated by iptables-save v1.x.x on ...
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s 192.168.1.100/32 -j DROP
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
## Completed on ...

이 출력은 192.168.1.100의 트래픽을 차단하고 80번 포트의 트래픽을 허용하는 규칙을 포함하여 저장된 구성을 보여줍니다. 이 형식은 iptables-restore와 호환되므로 필요한 경우 이 규칙들을 다시 로드하는 데 사용할 수 있습니다.

이 단계를 완료함으로써 iptables 구성을 파일로 성공적으로 저장했습니다. 컨테이너 환경은 재시작 시 변경 사항이 유지되지 않을 수 있지만, 실제 환경에서 방화벽 설정을 보존하기 위해 이 과정은 필수적입니다. 이제 iptables를 사용한 기본적인 방화벽 설정 관리의 핵심 기술을 모두 익혔습니다.

요약

이 실습에서는 컨테이너 환경의 Kali Linux 에서 iptables를 사용하여 방화벽을 구성하는 핵심 사항을 배웠습니다. 먼저 현재 iptables 규칙을 확인하여 초기 방화벽 상태를 파악하는 것으로 시작했습니다. 그런 다음 패키지 목록을 업데이트하고 iptables를 설치하여 시스템을 준비했습니다. 이어서 특정 IP 주소의 트래픽을 차단하고 지정된 포트의 트래픽을 허용하는 규칙을 추가하여 네트워크 접근 제어를 강화했습니다. 마지막으로 나중에 참조할 수 있도록 구성을 파일로 저장했습니다. 이러한 단계들을 통해 iptables를 이용한 트래픽 필터링으로 네트워크 보안을 관리하는 기초 기술을 습득했습니다.