웹사이트 검색

IPTables(Linux 방화벽) 명령에 대한 초보자 가이드


한동안 컴퓨터를 사용했다면 '방화벽'이라는 단어에 익숙해야 합니다. 우리는 표면적으로는 상황이 복잡해 보인다는 것을 알고 있지만 이 튜토리얼을 통해 IPTable의 기초와 기본 명령의 사용법을 설명하여 네트워킹 학생이거나 심층적인 내용을 알고 싶은 경우에도 사용할 수 있습니다. 네트워크에 대해 자세히 알아보려면 이 가이드를 활용하세요.

IPTable이란 무엇입니까?

방화벽의 작동 방식은 매우 간단합니다. 신뢰할 수 있는 네트워크와 신뢰할 수 없는 네트워크 사이에 장벽을 만들어 시스템을 악성 패킷으로부터 보호할 수 있습니다.

하지만 무엇이 안전하고 무엇이 안전하지 않은지 어떻게 결정할까요? 기본적으로 방화벽에 대한 규칙을 설정할 수 있는 권한이 있지만 들어오고 나가는 패키지를 보다 자세히 감시하려면 IPTables가 가장 필요합니다.

IPTables는 개인 컴퓨팅에 사용되거나 전체 네트워크에 적용될 수도 있습니다. IPTables를 사용하여 들어오거나 나가는 네트워크 패킷을 모니터링, 허용 또는 차단할 수 있는 일련의 규칙을 정의합니다.

전체적인 이론적인 부분에만 집중하기보다는 실제 세계에서 중요한 부분만 논의할 예정입니다. 그럼 IPTables의 핵심 개념을 이해하는 것부터 시작해 보겠습니다.

IPTable의 개념 이해

IPTables를 논의하는 동안 테이블, 체인, 규칙이라는 3가지 용어를 이해해야 합니다. 이것들은 중요한 부분이므로 각각에 대해 논의하겠습니다.

그럼 부터 시작해 보겠습니다.

IPTable의 테이블

IPTables에는 5가지 유형의 테이블이 있으며 각각 다른 규칙이 적용됩니다. 그럼 가장 일반적인 테이블인 'Filer'부터 시작해 보겠습니다.

  1. 필터 테이블IPTables를 사용하는 동안 기본 및 기본 테이블입니다. 이는 규칙을 적용하는 동안 특정 테이블을 언급하지 않을 때마다 해당 테이블이 필터 테이블에 적용된다는 의미입니다. 이름에서 알 수 있듯이 필터 테이블의 역할은 패키지가 대상에 도달하도록 허용할지 아니면 요청을 거부할지 결정하는 것입니다.
  2. NAT(네트워크 주소 변환) – 이름에서 알 수 있듯이 이 테이블을 통해 사용자는 네트워크 주소 변환을 결정할 수 있습니다. 이 테이블의 역할은 패킷 주소의 소스와 대상을 수정할지 여부와 수정 방법을 결정하는 것입니다.
  3. Mangle Table - 이 테이블을 사용하면 패킷의 IP 헤더를 수정할 수 있습니다. 예를 들어 TTL을 조정하여 패킷이 유지할 수 있는 네트워크 홉을 늘리거나 줄일 수 있습니다. 마찬가지로 다른 IP 헤더도 원하는 대로 수정할 수 있습니다.
  4. RAW 테이블 – 이 테이블의 주요 용도는 진행 중인 세션의 일부로 패킷을 볼 수 있도록 패킷을 표시하는 메커니즘을 제공하므로 연결을 추적하는 것입니다.
  5. 보안 테이블 – 보안 테이블을 사용하면 사용자는 네트워크 패킷에 내부 SELinux 보안 컨텍스트 표시를 적용할 수 있습니다.

대부분의 사용 사례에서 테이블의 마지막 2개 유형(RAWSecurity)은 수행할 작업이 많지 않으며 처음 3개 옵션만 기본 테이블로 계산됩니다. .

이제 체인에 대해 이야기해 보겠습니다.

IPTable의 체인

그들은 규칙을 적용할 수 있는 네트워크 경로의 지점에서 작동합니다. IPTables에서는 5가지 유형의 체인을 다루고 각각에 대해 논의하겠습니다. 각 테이블 유형에 대해 각 유형의 체인을 사용할 수 있는 것은 아닙니다.

  1. 사전 라우팅 – 이 체인은 수신 패킷이 네트워크 스택에 입력되면 모든 수신 패킷에 적용되며, 패킷의 최종 대상과 관련된 라우팅 결정이 내려지기 전에도 이 체인이 처리됩니다.
  2. 입력 체인 – 패킷이 네트워크 스택에 들어가는 지점입니다.
  3. 전달 체인 – 패킷이 시스템을 통해 전달된 지점입니다.
  4. 출력 체인 – 출력 체인은 패킷이 시스템을 통해 시작되어 나갈 때 패킷에 적용됩니다.
  5. 사후 라우팅 – 이는 사전 라우팅 체인과 완전히 반대이며 라우팅 결정이 내려지면 전달되거나 나가는 패킷에 적용됩니다.

이제 논의할 유일한 것은 규칙이며, 여기서 논의한 3가지 중 가장 쉬운 것입니다. 이제 이론적 부분에 남은 내용을 완성해 보겠습니다.

IPTable의 규칙

규칙은 사용자가 네트워크 트래픽을 조작하는 데 사용하는 집합 또는 개별 명령일 뿐입니다. 각 체인이 실행되면 정의된 규칙에 따라 패킷이 검사됩니다.

하나의 규칙이 조건을 만족하지 않으면 다음 규칙으로 건너뛰고 조건을 만족하면 대상 값으로 다음 규칙을 지정합니다.

각 규칙에는 일치 구성요소타겟 구성요소라는 두 가지 구성요소가 있습니다.

  1. 일치 구성요소 – 프로토콜, IP 주소, 포트 주소, 인터페이스 및 헤더별로 일치할 수 있는 규칙을 정의하는 서로 다른 조건입니다.
  2. 대상 구성요소 - 조건이 충족되면 실행되는 작업입니다.

이상으로 설명 부분이었고 이제 Linux에서 IPTables와 관련된 기본 명령을 다루겠습니다.

Linux에 IPTables 방화벽 설치

Pop!_OS와 같은 최신 Linux 배포판에는 IPTables가 사전 설치되어 있지만 시스템에 IPTables 패키지가 없는 경우 다음 지침에 따라 쉽게 설치할 수 있습니다.

Rocky Linux, AlmaLinux 및 CentOS Stream과 같은 RHEL 기반 Linux 배포판에 IPTable을 설치하려면 다음 dnf 명령을 사용하십시오.

sudo dnf install iptables-services

중요: Firewalld를 사용하는 경우 설치를 진행하기 전에 방화벽을 비활성화해야 합니다. 방화벽을 완전히 중지하려면 다음 명령을 사용해야 합니다.

sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo systemctl mask firewalld

Debian 기반 Linux 배포판에 IPTables를 설치하려면 다음 apt 명령을 사용하십시오.

sudo apt install iptables

IPTables를 설치하면 다음 명령을 사용하여 방화벽을 활성화할 수 있습니다.

sudo systemctl enable iptables
sudo systemctl start iptables

IPTable 서비스 상태를 모니터링하려면 다음 명령을 사용하면 됩니다.

sudo systemctl status iptables

Linux에서 IPTables 명령의 기본 사항 알아보기

설치가 완료되면 기본값을 조정하고 필요에 따라 구성할 수 있는 IPTables 구문을 진행할 수 있습니다.

IPTables의 기본 구문은 다음과 같습니다.

iptables -t {type of table} -options {chain points} {condition or matching component} {action}

위 명령에 대한 설명을 이해해 보겠습니다.

테이블

첫 번째 부분은 -t로, 사용 가능한 5개의 테이블 옵션 중에서 선택할 수 있으며, 명령에서 -t 부분을 제거하면 filter<가 사용됩니다. 테이블은 기본 테이블 유형입니다.

체인 옵션

두 번째 부분은 체인에 대한 것입니다. 여기에서 다양한 체인 포인트 옵션 중에서 선택할 수 있으며 해당 옵션은 아래와 같습니다.

  • -A – 체인 끝의 체인에 새 규칙을 추가합니다.
  • -C – 체인의 요구 사항을 충족하는지 여부를 규칙을 확인합니다.
  • -D – 사용자가 체인에서 기존 규칙을 삭제할 수 있습니다.
  • -F – 사용자가 정의한 각 규칙을 제거합니다.
  • -I – 사용자가 지정된 위치에 새 규칙을 추가할 수 있습니다.
  • -N – 완전히 새로운 체인을 생성합니다.
  • -v – 목록 옵션과 함께 사용하면 자세한 정보를 가져옵니다.
  • -X – 체인을 삭제합니다.

일치하는 구성 요소

매칭 옵션은 체인 요구 사항을 확인하기 위한 조건입니다. 다양한 옵션 중에서 선택할 수 있으며 그 중 일부는 다음과 같습니다.

Protocols -p
Source IP -s
Destination IP -d
IN interface -i
OUT interface -o

TCP의 경우 다음과 같습니다.

-sport
-dport
--tcp-flags

액션 구성요소

이제 액션 부분을 살펴보면 NAT 등의 테이블 유형에 따라 사용 가능한 옵션이 달라지는데, 맹글 테이블은 다른 테이블에 비해 옵션이 더 많습니다. 작업을 사용하면 특정 테이블이나 체인을 대상으로 지정할 수도 있습니다.

가장 많이 사용되는 작업은 다음과 같은 여러 옵션을 제공하는 Jump(-j)입니다.

  • ACCEPT – 패킷을 수락하고 통과를 종료하는 데 사용됩니다.
  • DROP – 패킷을 삭제하고 통과를 종료하는 데 사용됩니다.
  • REJECT – 이는 DROP과 매우 유사하지만 거부된 패킷을 소스로 보냅니다.
  • RETURN - 하위 체인의 패킷 이동을 중지하고 특정 패킷을 아무런 영향 없이 상위 체인으로 보냅니다.

구문 작업이 완료되면 기본 구성을 포함하여 IPTables를 사용하는 방법을 보여 드리겠습니다.

현재 IPTables 규칙 세트 나열

기본적으로 방화벽을 통과하는 항목을 확인하려면 현재 규칙 세트를 나열하는 것이 완벽한 방법입니다. 적용된 규칙을 나열하려면 지정된 명령을 사용하십시오.

sudo iptables -L

특정 포트의 네트워크 트래픽 허용/거부

이 섹션에서는 특정 포트에 대한 네트워크 트래픽을 허용하거나 거부하는 방법을 보여줍니다. 최대한 도움이 되고자 잘 알려진 포트 몇 개를 보여드리겠습니다.
HTTPS 네트워크 트래픽을 허용하려면 다음 명령을 사용하여 포트 번호 443을 허용해야 합니다.

sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

마찬가지로, 다음 명령을 사용하여 HTTP 웹 트래픽을 비활성화할 수도 있습니다.

sudo iptables -A INPUT -p tcp --dport 80 -j REJECT

사용된 명령 옵션에 대한 설명:

  • -p는 지정된 프로토콜을 확인하는 데 사용되며 우리의 경우 TCP입니다.
  • --dport는 대상 포트를 지정하는 데 사용됩니다.
  • -j는 조치(수락 또는 삭제)를 수행하는 데 사용됩니다.

IP 주소로 트래픽 제어

예, IP 주소에서 네트워크 트래픽을 제어할 수도 있습니다. 한두 개가 아니라 IP 주소 범위를 제어하는 방법도 알려 드리겠습니다.

특정 IP 주소를 허용하려면 주어진 명령 구조를 활용하십시오.

sudo iptables -A INPUT -s 69.63.176.13 -j ACCEPT

마찬가지로 특정 IP에서 패킷을 삭제하려면 지정된 명령 구조를 사용해야 합니다.

sudo iptables -A INPUT -s 192.168.0.27 -j DROP

원하는 경우 주어진 명령 구조를 활용하여 IP 주소 범위를 제어할 수도 있습니다.

sudo iptables -A INPUT -m range --src-range 192.168.0.1-192.168.0.255 -j REJECT

사용자 정의 규칙 삭제

때로는 규칙을 만드는 동안 실수를 저지르게 될 수도 있으며 이러한 실수를 극복하는 가장 좋은 방법은 규칙을 삭제하는 것입니다. 정의된 규칙을 삭제하는 것은 이 가이드 전체에서 가장 쉬운 프로세스이며, 삭제하려면 먼저 목록을 나열해야 합니다.

정의된 규칙을 숫자와 함께 나열하려면 주어진 명령을 사용하십시오:

sudo iptables -L --line-numbers

규칙을 삭제하려면 주어진 명령 구조를 따라야 합니다.

sudo iptables -D <INPUT/FORWARD/OUTPUT> <Number>

INPUT에서 10번째 규칙을 삭제하여 주어진 명령을 사용한다고 가정해 보겠습니다.

sudo iptables -D INPUT 10

규칙을 성공적으로 제거했는지 확인하려면 주어진 명령으로 규칙을 나열해야 합니다.

sudo iptables -L –line-numbers

보시다시피 우리는 10번째 규칙을 성공적으로 제거했습니다.

정의된 IPTables 규칙 저장

규칙을 적용한 후 제대로 작동하는 규칙을 왜 저장해야 하는지 궁금할 것입니다. 문제는 시스템이 재부팅되면 저장되지 않은 정의된 모든 규칙이 삭제되므로 이는 우리에게 매우 중요하다는 것입니다.

RHEL 기반 배포판에 규칙을 저장하려면 다음 안내를 따르세요.

sudo /sbin/service iptables save

Debian 파생물에 규칙을 저장하려면:

sudo /sbin/iptables–save

IPtable 방화벽 규칙에 대해 자세히 알아보려면 다음에서 자세한 가이드를 확인하세요.

  • 모든 리눅스 관리자가 알아야 할 25가지 유용한 IPtable 방화벽 규칙

이 가이드 전체에서 우리는 모든 사람이 혜택을 누릴 수 있도록 작업을 단순하게 만들려고 노력했습니다. IPTables에 대한 기본적인 설명 안내였으며, 궁금한 사항이 있으면 댓글로 편하게 질문해주세요.