웹사이트 검색

Linux에서 서비스에 대한 원격 액세스를 활성화하기 위해 Iptables 방화벽을 설정하는 방법 - 8부


Linux Foundation 인증 프로그램 소개

방화벽이 무엇인지에 대한 기본 설명을 제공한 LFCE(Linux Foundation Certified Engineer) 시리즈의 1부 - Iptables 정보에서 기억하실 것입니다. 네트워크로 들어오고 나가는 패킷. "관리"란 실제로 다음을 의미합니다.

  1. 특정 패킷이 당사 네트워크에 들어오거나 나가는 것을 허용하거나 방지합니다.
  2. 네트워크의 한 지점에서 다른 지점으로 다른 패킷을 전달하는 것입니다.

미리 정해진 기준에 따라.

이 기사에서는 기본 패킷 필터링을 구현하는 방법과 방화벽에 사용되는 기본 커널 모듈인 netfilter의 프런트엔드인 iptables를 사용하여 방화벽을 구성하는 방법에 대해 설명합니다.

방화벽은 광범위한 주제이므로 이 기사는 방화벽에 대해 알아야 할 모든 내용을 이해하기 위한 포괄적인 가이드가 아니라 이 주제에 대한 더 깊은 연구를 위한 출발점으로 작성되었습니다. 그러나 Linux에서 방화벽의 몇 가지 구체적인 사용 사례를 탐색하면서 이 시리즈의 10부에서 주제를 다시 살펴보겠습니다.

방화벽은 여객기가 거의 24시간 내내 왕래하는 국제 공항으로 생각할 수 있습니다. 개인의 여권 유효성이나 출신 국가(몇 가지 예를 들자면)와 같은 여러 조건에 따라 특정 국가에 입국하거나 출국하는 것이 허용되거나 허용되지 않을 수 있습니다.

동시에 공항 직원은 예를 들어 세관 서비스를 거쳐야 하는 경우와 같이 필요한 경우 사람들에게 공항의 한 장소에서 다른 장소로 이동하도록 지시할 수 있습니다.

이 튜토리얼의 나머지 부분에서 공항 비유가 유용할 수 있습니다. 계속 진행하면서 다음 관계를 염두에 두십시오.

  1. 사람=패킷
  2. 방화벽=공항
  3. 국가 #1=네트워크 #1
  4. 국가 #2=네트워크 #2
  5. 경찰관이 시행하는 공항 규정=방화벽 규칙

Iptables – 기본 사항

낮은 수준에서는 체인 또는 문장으로 그룹화된 규칙을 기반으로 패킷으로 무엇을 할지 "결정"하는 것은 커널 자체입니다. 이러한 체인은 패키지가 지정된 기준과 일치할 때 수행해야 하는 작업을 정의합니다.

iptables가 취하는 첫 번째 작업은 패킷으로 무엇을 할지 결정하는 것입니다:

  1. 수락하시겠습니까(우리 네트워크를 통과하도록 하시겠습니까)?
  2. 거부하시겠습니까(우리 네트워크에 액세스하지 못하도록 차단하시겠습니까)?
  3. (다른 체인으로) 전달하시겠습니까?

이 도구를 iptables라고 부르는 이유는 이러한 체인이 테이블로 구성되어 있기 때문입니다. 필터 테이블이 가장 잘 알려져 있고 가장 잘 알려진 테이블입니다. 세 가지 기본 체인을 사용하여 패킷 필터링을 구현하는 데 사용됩니다.

1. INPUT 체인은 로컬 프로그램으로 향하는 네트워크로 들어오는 패킷을 처리합니다.

2. OUTPUT 체인은 로컬 네트워크에서 발생하여 외부로 전송되는 패킷을 분석하는 데 사용됩니다.

3. FORWARD 체인은 다른 대상(예: 라우터의 경우)으로 전달되어야 하는 패킷을 처리합니다.

이러한 각 체인에는 패킷이 체인의 어떤 규칙과도 일치하지 않을 때 기본적으로 수행해야 하는 작업을 지정하는 기본 정책이 있습니다. 다음 명령을 실행하면 각 체인에 대해 생성된 규칙과 기본 정책을 볼 수 있습니다.

iptables -L

사용 가능한 정책은 다음과 같습니다.

  1. ACCEPT → 패킷을 통과시킵니다. 체인의 어떤 규칙과도 일치하지 않는 모든 패킷은 네트워크에 허용됩니다.
  2. DROP → 패킷을 조용히 삭제합니다. 체인의 어떤 규칙과도 일치하지 않는 패킷은 네트워크에 진입할 수 없습니다.
  3. REJECT → 패킷을 거부하고 정보 메시지를 반환합니다. 특히 이것은 기본 정책으로 작동하지 않습니다. 대신 패킷 필터링 규칙을 보완하기 위한 것입니다.

어떤 정책을 구현할지 결정할 때는 위에 설명된 대로 각 접근 방식의 장점단점을 고려해야 합니다. 단 하나의 방법이 없다는 점에 유의하세요. -모든 솔루션.

규칙 추가

방화벽에 규칙을 추가하려면 다음과 같이 iptables 명령을 호출하십시오.

iptables -A chain_name criteria -j target

어디,

  1. -A는 추가(현재 규칙을 체인 끝에 추가)를 나타냅니다.
  2. chain_name은 INPUT, OUTPUT 또는 FORWARD입니다.
  3. target은 이 경우 적용할 작업 또는 정책입니다(ACCEPT, REJECT 또는 DROP).
  4. 기준은 패킷을 검사할 조건 집합입니다. 이는 다음 플래그 중 적어도 하나(아마도 그 이상)로 구성됩니다. 수직 막대로 구분된 괄호 안의 옵션은 서로 동일합니다. 나머지는 옵션 스위치를 나타냅니다.
[--protocol | -p] protocol: specifies the protocol involved in a rule.
[--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated.
[--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined.
[--source | -s] address[/mask]: represents the source address or network/mask.
[--destination | -d] address[/mask]: represents the destination address or network/mask.
[--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID.
[--in-interface | -i] interface: specifies the input interface of the packet.
[--out-interface | -o] interface: the output interface.
[--jump | -j] target: what to do when the packet matches the rule.

테스트 환경

처음 두 개에 대해 다음 테스트 환경을 사용하여 세 가지 고전적인 예에서 모든 것을 결합해 보겠습니다.

Firewall: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
Source: CentOS 7 
Hostname: dev1.gabrielcanepa.com
IP Address: 192.168.0.17

그리고 이것은 마지막 예입니다

NFSv4 server and firewall: Debian Wheezy 7.5 
Hostname: debian
IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
예시 1: DROP 정책과 REJECT 정책의 차이점 분석

먼저 방화벽에 대한 입력 핑에 대한 DROP 정책을 정의하겠습니다. 즉, icmp 패킷은 조용히 삭제됩니다.

ping -c 3 192.168.0.15
iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP

REJECT 부분을 진행하기 전에 INPUT 체인에서 모든 규칙을 플러시하여 패킷이 이 새로운 규칙에 의해 테스트되는지 확인합니다.

iptables -F INPUT
iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
ping -c 3 192.168.0.15

예 2: dev2에서 dev1로의 SSH 로그인 비활성화/재활성화

나가는 트래픽을 처리하면서 OUTPUT 체인을 처리하게 됩니다.

iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT

예 3: NFS 클라이언트(192.168.0.0/24부터)의 NFS4 공유 마운트 허용/방지

NFSv4 서버/방화벽에서 다음 명령을 실행하여 모든 종류의 트래픽에 대해 포트 2049 및 111을 닫습니다.

iptables -F
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT

이제 해당 포트를 열고 무슨 일이 일어나는지 살펴보겠습니다.

iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT

보시다시피 트래픽을 연 후 NFSv4 공유를 마운트할 수 있었습니다.

규칙 삽입, 추가 및 삭제

이전 예에서는 INPUTOUTPUT 체인에 규칙을 추가하는 방법을 보여주었습니다. 대신 미리 정의된 위치에 삽입하려면 대신 -I(대문자 i) 스위치를 사용해야 합니다.

규칙은 차례로 평가되며 DROP 또는 ACCEPT 정책이 일치하면 평가가 중지(또는 점프)된다는 점을 기억해야 합니다. 이러한 이유로 필요에 따라 체인 목록에서 규칙을 위나 아래로 이동해야 할 수도 있습니다.

이를 설명하기 위해 간단한 예를 사용하겠습니다.

다음 규칙을 적용해 보겠습니다.

iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT

INPUT 체인의 위치 2)에서(따라서 이전 #2를 #3으로 이동)

위의 설정을 사용하면 트래픽이 2049 포트를 확인하기 전에 포트 80으로 전달되는지 확인하게 됩니다.

또는 규칙을 삭제하고 나머지 규칙의 대상을 REJECT로 변경할 수 있습니다(-R 스위치 사용).

iptables -D INPUT 1
iptables -nL -v --line-numbers
iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -R INPUT 1 -p tcp --dport 80 -j REJECT

마지막으로, 방화벽 규칙이 지속되도록 하려면 해당 규칙을 파일에 저장한 다음 부팅 시 자동으로 복원해야 한다는 점을 기억해야 합니다(원하는 방법이나 원하는 방법을 사용). 귀하의 배포판에 사용할 수 있습니다).

방화벽 규칙 저장:

iptables-save > /etc/iptables/rules.v4		[On Ubuntu]
iptables-save > /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

규칙 복원:

iptables-restore < /etc/iptables/rules.v4		[On Ubuntu]
iptables-restore < /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

여기서는 위에 표시된 기본 파일 대신 iptables.dump라는 더미 파일을 사용하여 유사한 절차(방화벽 규칙을 직접 저장 및 복원)를 볼 수 있습니다.

iptables-save > iptables.dump

부팅 전반에 걸쳐 이러한 변경 사항을 지속시키려면 다음을 수행하십시오.

Ubuntu: /etc/iptables/rules.v4 파일에 저장된 규칙을 로드하는 iptables-pertant 패키지를 설치합니다.

apt-get install iptables-persistent

CentOS: /etc/sysconfig/iptables-config 파일에 다음 2줄을 추가합니다.

IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"

OpenSUSE: /etc/sysconfig/SuSEfirewall2에 허용된 포트, 프로토콜, 주소 등(쉼표로 구분)을 나열합니다.

자세한 내용은 주석이 많이 달린 파일 자체를 참조하세요.

결론

이 기사에 제공된 예제는 iptables의 모든 부가 기능을 다루지는 않지만 들어오거나 나가는 트래픽을 활성화 및 비활성화하는 방법을 설명하는 목적으로 사용됩니다.

방화벽 팬이라면 LFCE 시리즈의 10부에서 보다 구체적인 응용 프로그램을 사용하여 이 주제를 다시 다룰 것이라는 점을 명심하세요.

질문이나 의견이 있으면 언제든지 알려주시기 바랍니다.