IPTables(Linux 방화벽) 명령에 대한 초보자 안내서
컴퓨터를 한동안 사용하신다면 "방화벽\이라는 단어에 익숙하실 것입니다. 겉으로 보기에는 복잡해 보이지만 이 튜토리얼을 통해 IPTable의 기초와 기본 명령어 사용법에 대해 설명하겠습니다. 네트워킹 학생이거나 네트워크에 대해 자세히 알아보려는 경우에도 이 가이드의 이점을 누릴 수 있습니다.
방화벽이 작동하는 방식은 매우 간단합니다. 신뢰할 수 있는 네트워크와 신뢰할 수 없는 네트워크 사이에 장벽을 만들어 시스템이 악성 패킷으로부터 안전할 수 있습니다.
그러나 안전한 것과 그렇지 않은 것을 어떻게 결정할 것인가? 기본적으로 방화벽에 대한 규칙을 설정할 수 있는 권한이 있지만 들어오고 나가는 패키지를 보다 자세히 감시하려면 IPTable이 가장 필요한 것입니다.
IPTable은 개인 컴퓨팅에 사용하거나 전체 네트워크에 적용할 수도 있습니다. IPTable을 사용하여 들어오거나 나가는 네트워크 패킷을 모니터링, 허용 또는 차단할 수 있는 규칙 집합을 정의합니다.
전체 이론 부분에 초점을 맞추기보다는 실제 세계에서 중요한 것에 대해서만 논의할 것입니다. IPTables의 핵심 개념을 이해하는 것부터 시작하겠습니다.
IPTable의 개념 이해
IPTable에 대해 논의할 때 테이블, 체인 및 규칙이라는 3가지 용어를 이해해야 합니다. 이것들은 중요한 부분이기 때문에 우리는 그들 각각에 대해 논의할 것입니다.
그럼 테이블부터 시작하겠습니다.
IPTables에는 5가지 유형의 테이블이 있으며 각각 다른 규칙이 적용됩니다. 이제 가장 일반적인 테이블인 "Filer\부터 시작하겠습니다.
- 필터 테이블 – IPTable을 사용하는 동안의 기본 및 기본 테이블입니다. 규칙을 적용하는 동안 특정 테이블을 언급하지 않을 때마다 필터 테이블에 적용됩니다. 이름에서 알 수 있듯이 필터 테이블의 역할은 패키지가 목적지에 도달하도록 허용할지 아니면 요청을 거부할지 결정하는 것입니다.
- NAT(네트워크 주소 변환) – 이름에서 알 수 있듯이 이 테이블을 통해 사용자는 네트워크 주소 변환을 결정할 수 있습니다. 이 테이블의 역할은 패킷 주소의 원본과 대상을 수정할지 여부와 수정 방법을 결정하는 것입니다.
- Mangle Table – 이 테이블을 사용하면 패킷의 IP 헤더를 수정할 수 있습니다. 예를 들어 패킷이 유지할 수 있는 네트워크 홉을 늘리거나 줄이도록 TTL을 조정할 수 있습니다. 마찬가지로 다른 IP 헤더도 원하는 대로 수정할 수 있습니다.
- RAW 테이블 – 이 테이블의 주요 용도는 패킷을 진행 중인 세션의 일부로 보기 위해 패킷을 표시하는 메커니즘을 제공하므로 연결을 추적하는 것입니다.
- 보안 테이블 – 사용자는 보안 테이블을 사용하여 네트워크 패킷에 내부 SELinux 보안 컨텍스트 표시를 적용할 수 있습니다.
대부분의 사용 사례에서 테이블의 마지막 2가지 유형(RAW 및 보안)은 할 일이 많지 않고 처음 3가지 옵션만 기본 테이블로 계산됩니다.
이제 체인에 대해 알아보겠습니다.
그들은 우리가 규칙을 적용할 수 있는 네트워크 경로의 지점에서 행동합니다. IPTables에서는 5가지 유형의 체인에 대해 설명하고 각각에 대해 설명합니다. 각 테이블 유형에 대해 각 유형의 체인을 사용할 수 있는 것은 아닙니다.
- 사전 라우팅 – 이 체인은 네트워크 스택에 들어가면 들어오는 모든 패킷에 적용되며 패킷의 최종 목적지에 대한 라우팅 결정이 내려지기 전에도 이 체인이 처리됩니다.
- Input Chain – 패킷이 네트워크 스택에 들어가는 지점입니다.
- Forward Chain – 패킷이 시스템을 통해 전달된 지점입니다.
- 출력 체인 – 시스템을 통해 시작되어 나갈 때 패킷에 출력 체인이 적용됩니다.
- 사후 라우팅 – 사전 라우팅 체인과 완전히 반대이며 라우팅 결정이 내려지면 전달되거나 나가는 패킷에 적용됩니다.
이제 논의할 유일한 것은 규칙이며 여기에서 논의한 3가지 중 가장 쉬운 규칙입니다. 그럼 이론적인 부분에서 남은 부분을 완성해 봅시다.
규칙은 사용자가 네트워크 트래픽을 조작하는 데 사용하는 집합 또는 개별 명령에 불과합니다. 각 체인이 작동하면 패킷은 정의된 규칙에 따라 검사됩니다.
하나의 규칙이 조건을 만족하지 않으면 다음 규칙으로 건너뛰고 조건을 만족하면 대상 값으로 다음 규칙을 지정합니다.
각 규칙에는 일치하는 구성 요소와 대상 구성 요소라는 두 가지 구성 요소가 있습니다.
- Matching Component – 프로토콜, IP 주소, 포트 주소, 인터페이스 및 헤더별로 일치시킬 수 있는 규칙을 정의하는 서로 다른 조건입니다.
- 대상 구성 요소 – 조건이 충족되면 트리거되는 작업입니다.
여기까지가 설명 부분이었고 이제 Linux에서 IPTables와 관련된 기본 명령에 대해 다룹니다.
Linux에 IPTables 방화벽 설치
Pop!_OS와 같은 최신 Linux 배포판에서는 IPTables가 사전 설치되어 제공되지만 시스템에 IPTables 패키지가 없는 경우 제공된 지침에 따라 쉽게 설치할 수 있습니다.
dnf 명령에 IPTable을 설치하려면.
$ sudo dnf install iptables-services
중요: 방화벽을 사용하는 경우 설치를 진행하기 전에 비활성화해야 합니다. 방화벽을 완전히 중지하려면 다음 명령을 사용해야 합니다.
$ sudo systemctl stop firewalld $ sudo systemctl disable firewalld $ sudo systemctl mask firewalld
apt 명령에 IPTable을 설치하려면.
$ 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
부분을 제거하면 필터 테이블을 있는 그대로 사용합니다. 기본 테이블 유형.
두 번째 부분은 체인용입니다. 여기에서 다양한 체인 포인트 옵션을 선택할 수 있으며 해당 옵션은 다음과 같습니다.
-A
– 체인 끝에 있는 체인에 새 규칙을 추가합니다.-C
– 규칙이 체인의 요구 사항을 충족하는지 확인합니다.-D
– 사용자가 체인에서 기존 규칙을 삭제할 수 있습니다.-F
– 사용자가 정의한 각 규칙을 제거합니다.-I
– 사용자가 지정된 위치에 새 규칙을 추가할 수 있습니다.-N
– 완전히 새로운 체인을 생성합니다.-v
– 목록 옵션과 함께 사용하면 자세한 정보를 제공합니다.-X
– 체인을 삭제합니다.- ACCEPT – 패킷을 수락하고 통과를 종료하는 데 사용됩니다.
- DROP – 패킷을 삭제하고 순회를 종료하는 데 사용됩니다.
- REJECT – DROP과 매우 유사하지만 거부된 패킷을 소스로 보냅니다.
- RETURN – 하위 체인의 패킷 탐색을 중지하고 특정 패킷을 상위 체인에 아무 효과 없이 보냅니다.
-p
는 지정된 프로토콜을 확인하는 데 사용되며 우리의 경우 TCP입니다.--dport
는 대상 포트를 지정하는 데 사용됩니다.-j
는 조치(수락 또는 삭제)를 수행하는 데 사용됩니다.- 모든 Linux 관리자가 알아야 할 25가지 유용한 IPtable 방화벽 규칙
매칭 옵션은 체인의 요구 사항을 확인하기 위한 조건입니다. 다양한 옵션 중에서 선택할 수 있으며 그 중 일부는 다음과 같습니다.
Protocols -p Source IP -s Destination IP -d IN interface -i OUT interface -o
TCP의 경우 다음과 같습니다.
-sport -dport --tcp-flags
이제 action 부분을 생각해보면 NAT와 같은 테이블의 종류에 따라 사용 가능한 옵션이 달라지며, mangle 테이블은 다른 테이블에 비해 더 많은 옵션을 가지고 있습니다. action을 사용하여 특정 테이블이나 체인을 대상으로 지정할 수도 있습니다.
가장 많이 사용되는 작업은 다음과 같은 몇 가지 옵션을 제공하는 Jump(-j)
입니다.
구문이 끝나면 기본 구성을 포함하여 IPTable을 사용하는 방법을 보여줍니다.
기본적으로 방화벽을 통과하는 항목을 확인하려면 현재 규칙 집합을 나열하는 것이 완벽한 방법입니다. 적용된 규칙을 나열하려면 다음 명령을 사용합니다.
$ sudo iptables -L

이 섹션에서는 특정 포트에 대한 네트워크 트래픽을 허용하거나 거부하는 방법을 보여줍니다. 최대한 도움이 되고자 잘 알려진 포트를 보여드리겠습니다.
\nHTTPS 네트워크 트래픽을 허용하려면 지정된 명령을 사용하여 포트 번호 443을 허용해야 합니다.
$ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
마찬가지로 다음 명령으로 HTTP 웹 트래픽을 비활성화할 수도 있습니다.
$ sudo iptables -A INPUT -p tcp --dport 80 -j REJECT
사용된 명령 옵션에 대한 설명:
예, 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번째 규칙을 성공적으로 제거했습니다.
규칙을 적용한 후 제대로 작동하는 규칙을 저장해야 하는 이유가 궁금할 것입니다. 문제는 시스템이 재부팅되면 저장되지 않은 모든 정의된 규칙이 삭제되므로 우리에게 중요하다는 것입니다.
RHEL 기반 배포판에 규칙을 저장하려면:
$ sudo /sbin/service iptables save
Debian 파생 상품에 규칙을 저장하려면:
$ sudo /sbin/iptables–save
IPtable 방화벽 규칙에 대해 자세히 알아보려면 다음에서 자세한 가이드를 확인하세요.
이 가이드 전체에서 우리는 모든 사람이 혜택을 받을 수 있도록 간단하게 만들려고 노력했습니다. 이것은 IPTables에 대한 기본 설명 가이드였으며 궁금한 점이 있으면 언제든지 댓글로 질문해 주세요.