Linux iptables 기반 ferm 방화벽이란 무엇이며 구성 방법

In Linux기반 운영 체제, 방화벽 당신이 사용하는 탁월한 것은 iptables이지만, iptables의 진화인 nftables를 훨씬 더 효율적이고 훨씬 더 "인간적인" 구문으로 사용하는 것도 가능합니다. 그러나 모든 세상이 여전히 nftables를 사용하는 것은 아닙니다. 오늘 우리는 iptables 프론트엔드인 Ferm(For Easy Rule Making)을 사용하여 Linux 서버에서 방화벽을 구성하는 방법을 설명할 것입니다. 이 프론트엔드를 사용하면 다음 구문을 배울 필요 없이 방화벽에 규칙을 매우 쉽고 빠르고 간단하게 추가할 수 있습니다. iptables.

Ferm 방화벽이란 무엇이며 무엇을 위한 것입니까?

Linux iptables 기반 펌 방화벽이란 무엇입니까?

Ferm(For Easy Rule Making)은 iptables의 프론트엔드입니다. 즉, 실제로 iptables를 사용하여 트래픽을 허용하거나 거부하지만 다음 구문을 배우지 않고도 매우 고급 방식으로 방화벽을 구성할 수 있습니다. iptables를 사용하거나 iptables를 사용하여 다른 스크립트를 만들 수 있지만 Ferm으로 직접 할 것입니다. 이 도구는 우리가 정의할 구성 파일에서 규칙을 읽을 수 있으며 나중에 iptables를 "호출"하여 다른 규칙을 하나씩 추가하고 커널에 실시간으로 삽입합니다.

Ferm의 목표는 시스템 및 네트워크 관리자에게 모든 방화벽 규칙을 읽고 쓸 수 있는 쉬운 방법을 제공하여 규칙을 하나씩 작성해야 하는 작업을 줄여 규칙을 개발하고 최적화하는 데 더 많은 시간을 할애하여 규칙을 다음과 같이 만드는 것입니다. 가능한 한 효율적입니다. Ferm은 매우 간단하지만 매우 고급 구성 언어를 사용하므로 변수, 함수, 배열 및 블록도 사용할 수 있습니다. Ferm의 다른 매우 흥미로운 옵션은 디렉토리에 다른 구성 파일을 포함할 수 있고 이러한 모든 규칙을 자동으로 가져오고 적용하는 것을 처리한다는 것입니다.

Ferm은 여전히 ​​iptables 프론트엔드이므로 이 도구를 사용할 때 항상 iptables 명령을 사용하여 방화벽을 직접 편집하고 구성할 수 있습니다. 사실, Ferm은 현재 iptables 규칙을 가져와서 나중에 편집하거나 확장하기 위해 구성 파일에 자동으로 넣을 수 있습니다.

가장 인기 있는 iptables 프론트엔드 중 하나는 시스템 및 네트워크 관리자가 방화벽을 쉽고 빠르게 구성하는 데 널리 사용되는 ufw입니다.

Ferm의 설치 및 시운전

Ferm 설치는 정말 간단합니다. 현재 다른 Linux 기반 배포판의 대부분의 저장소에 있습니다. 우리의 경우 최신 버전의 데비안을 사용하여 가르칠 모든 테스트를 수행했습니다. iptables 프론트엔드인 이 프로그램을 설치하려면 다음 명령을 실행해야 합니다.

sudo apt install ferm

이 명령을 실행하면 다음과 같이 표시되어야 합니다. 여기에는 설치해야 하는 추가 패키지가 표시됩니다. 기본적으로 이 프로그램을 올바르게 실행하려면 Perl을 설치해야 합니다.

Ferm 설치 프로그램은 시작하는 동안 /etc/ferm/ferm.conf 경로에서 방화벽 규칙을 로드한다고 알려줍니다. 이 방화벽의 기본 구성을 사용하면 포트 22를 통해 원격으로 SSH에 액세스할 수 있습니다. 이 포트에 SSH를 구성하지 않은 경우 기본값을 편집하고 시작되지 않도록 "아니오"를 클릭해야 합니다. , 그렇지 않으면 연결이 끊어집니다.

예 또는 아니오를 선택하면 apt는 이 프로그램을 작동시키는 데 필요한 모든 추가 패키지 설치를 마칩니다.

일단 설치되면 / etc / ferm / 경로로 이동하면 ferm.conf라는 구성 파일과 ferm 구성 파일을 통합하여 가져올 수 있는 ferm.d라는 디렉토리를 모두 볼 수 있습니다. 우리는 더 큰 모듈성을 가지고 있습니다.

Ferm은 기본적으로 언제든지 제거할 수 있는 규칙 목록과 함께 제공되지만 이 iptables 프론트엔드의 구문을 처리하는 데 도움이 되므로 상당히 도움이 될 것입니다. 구문을 보면 nftables와 유사하지만 iptables를 기반으로 함을 알 수 있습니다.

다음 스크린샷에서 구성될 도메인(iptables 또는 ip6tables), 테이블 및 체인, 그리고 다른 체인 내에 있는 규칙이 선언되는 방법을 볼 수 있습니다.

또한 기본적으로 몇 가지 규칙이 있음을 알 수 있습니다.

  • INPUT 체인에서 정책은 DROP이고 로컬 호스트 트래픽이 허용되며 ICMP 트래픽과 연결은 IPsec을 통해 그리고 기본 포트가 있는 SSH를 통해 허용됩니다. 연결 상태는 유효하지 않은 연결이 DROPED이고 설정 및 관련 연결이 허용되지만 특별히 정의된 경우를 제외하고 새로운 연결은 허용되지 않습니다.

OUTPUT 체인에서 정책은 모든 것을 수락하는 것으로 정의되며 연결 상태는 설정되고 관련된 것을 허용합니다. FORWARD 체인에서는 정책에 의해 트래픽이 거부되고 잘못된 연결은 구체적으로 차단되지만 설정되고 관련 연결이 허용됩니다.

다음으로 이 구성 파일을 텍스트 형식으로 볼 수 있습니다.

# -*- shell-script -*-
#
# Configuration file for ferm(1).
#
domain (ip ip6) {
table filter {
chain INPUT {
policy DROP;

# 연결 추적
모드 상태 상태 INVALID DROP;
모드 상태 상태(ESTABLISHED RELATED) ACCEPT;

# 로컬 패킷 허용
인터페이스 무엇 수락;

# ping에 응답
프로토 icmp 수락;

# IPsec 허용
프로토 udp dport 500 수락;
@if @eq ($ 도메인, IP) {
프로토 (esp 아) 수락;
} @또 다른 {
프로토 (esp) 수락;
}

# SSH 연결 허용
프로토 tcp dport ssh 수락;
}
체인 출력 {
정책 수락;

# 연결 추적
#mod 상태 상태 INVALID DROP;
모드 상태 상태(ESTABLISHED RELATED) ACCEPT;
}
앞으로 체인 {
정책 DROP;

# 연결 추적
모드 상태 상태 INVALID DROP;
모드 상태 상태(ESTABLISHED RELATED) ACCEPT;
}
}
}

@include ferm.d /;

가장 흥미로운 부분은 마지막 부분에 있는 "@include ferm.d /"입니다. 이는 해당 디렉토리에 있는 모든 구성 파일을 가져올 것임을 의미합니다.

아래의 이 Ferm 방화벽은 iptables를 사용하므로 다음 명령을 실행하면 다음과 같습니다.

iptables -L

방화벽에 통합된 모든 규칙으로 iptables의 현재 상태를 볼 수 있습니다.

기본 Ferm 구성을 본 후에는 수행할 수 있는 다른 구성 예제를 볼 것입니다.

펌 기본 구성

Ferm의 구문은 매우 간단하고 유연하지만 올바른 구성을 만들기 위해 배워야 합니다. 우리는 당신이 공식 Ferm 매뉴얼에 액세스 여기에서 사용할 구문에 대한 모든 세부 정보와 구성 파일에서 다른 규칙을 선언하는 방법을 찾을 수 있습니다. 이 공식 설명서 덕분에 많은 문제 없이 이 방화벽을 구성할 수 있습니다.

명심해야 할 첫 번째 사항은 모든 Ferm 규칙은 중괄호로 시작하고 끝나며 규칙은 세미콜론으로 끝나므로 프로그래밍에서 잘 알려진 구문입니다. 다른 흥미로운 기능은 줄 바꿈이 무시되고 줄 끝에 "#"을 붙여서 주석을 어디에나 넣을 수 있다는 것입니다.

iptables 및 ferm의 구문과 관련하여 몇 가지 차이점이 있습니다.

  • 입력 인터페이스를 정의하려면: 인터페이스(if)
  • 종료 인터페이스를 정의하려면: outerface(of)
  • 원점을 정의하려면: saddr
  • 목적지를 정의하려면: daddr
  • 프로토콜을 정의하려면: proto
  • 원산지: 스포츠
  • 대상 포트: dport
  • 모듈 로드: 모드
  • 맞춤 규칙으로 이동: jump

Ferm에는 -A, -I, -C, -R 또는 -D와 같은 명령이 없습니다. 모든 것이 구성 파일에 기록되기 때문에 새 문자열을 추가하거나 이름을 바꾸거나 삭제하는 명령도 마찬가지입니다. 이제 여기에서 완전히 사라집니다. 다른 기능은 ferm을 사용하여 구성 파일에 중첩되어 다른 규칙 내에서 사용되는 다른 규칙을 상속할 수 있다는 것입니다.

구문이 어떤 것인지 대략 알면 iptables와 비교하는 몇 가지 예를 보게 될 것이며, 모두 «INPUT» 체인의 «filter» 테이블에 대해 작업할 것입니다.

iptables -P INPUT ACCEPT
iptables -A INPUT -p tcp -j ACCEPT

ferm에서는 다음과 같이 작성됩니다(필터 테이블에서 OUTPUT 및 FORWARD 체인의 정책 추가).

domain ip {
table filter {
chain INPUT {
policy DROP;
proto tcp ACCEPT;
}
chain OUTPUT {
policy ACCEPT;
}
chain FORWARD {
policy DROP;
}
}
}

Ferm을 사용하면 규칙을 반복해서 반복할 필요 없이 INPUT 및 OUTPUT에서 동일한 규칙을 쉽고 빠르게 정의할 수 있습니다. 예를 들어, 이제 INPUT 체인과 OUTPUT 체인 모두에서 TCP 프로토콜을 수락하고 싶다고 가정해 봅시다. iptables에서는 다음과 같을 것입니다.

iptables -A INPUT -p tcp -j ACCEPT
iptables -A OUTPUT -p tcp -j ACCEPT
iptables -A INPUT -p udp -j ACCEPT
iptables -A OUTPUT -p udp -j ACCEPT

Ferm을 사용하면 다음과 같이 간단합니다.

domain ip {
table filter {
chain (INPUT OUTPUT) {
proto (udp tcp) ACCEPT;
}
}

보시다시피 INPUT과 OUTPUT 모두에 동일한 규칙을 적용하는 것이 훨씬 빠르고 쉽습니다.

이 방화벽은 또한 매우 흥미로운 기능을 통합합니다. 예를 들어 변수 또는 함수가 정의되어 있는지 확인하고, 두 값이 같거나 다른지 확인하고, 부울 값을 거부하고, Ferm에서 직접 도메인을 풀고, 매개변수와 long을 연결합니다. 기능 목록 .

또한 Ferm을 사용하면 iptables 모듈을 "로드"하여 이를 사용하고 고급 방식으로 방화벽을 구성할 수 있습니다. 예를 들어 다음과 같습니다.

mod connlimit connlimit-above 4 connlimit-mask 24 REJECT;

전체 구성 파일에 넣을 수 있습니다.

Ferm에 도입된 규칙을 적용하려면 다음 명령을 실행해야 합니다.

ferm -i -t 10 /etc/ferm/ferm.conf

iptables 규칙을 Ferm으로 가져오기

Ferm을 사용하면 현재 실행 중인 iptables 규칙을 나중에 수정할 수 있도록 Ferm 파일로 쉽고 빠르게 가져올 수 있습니다. 이를 수행하려면 iptables 규칙을 메모리(현재 사용 중)에 로드하고 다음 명령을 실행하기만 하면 됩니다.

import-ferm > /etc/ferm/ferm.d/reglas-iptables.conf

실행하면 Ferm의 구문에서 직접 iptables 규칙을 볼 수 있습니다.

텍스트 파일에 있는 iptables 규칙을 Ferm으로 변환하려면 다음 명령을 실행할 수 있습니다.

import-ferm origen de las reglas de iptables > /etc/ferm/ferm.d/reglas-iptables.conf

이미 보았듯이 ferm은 iptables의 구문을 배우고 구성 파일에서 규칙을 올바르게 구성할 필요 없이 고급 방식으로 구성할 수 있는 훌륭한 iptables 프론트엔드입니다. 그러나 우리의 의견으로는 모든 iptables 규칙으로 bash 스크립트를 올바르게 구성하는 데 프론트엔드나 추가 소프트웨어가 필요하지 않지만 일부 사람들에게는 유용할 수 있다고 생각합니다. Nftables는 이미 콘솔 명령을 통한 대화식뿐만 아니라 구성 파일에서 직접 규칙을 구성할 수 있는 가능성을 포함하고 있음을 기억해야 합니다.