CentOS 7의 화이트리스트 소스 IP 주소

CentOS 7의 화이트리스트 소스 IP 주소

화이트리스트에 추가한 원래 IP 주소를 제외하고 들어오는 모든 요청이 차단되도록 CentOS 7 방화벽을 설정하고 싶습니다. 그리고 화이트리스트 IP 주소의 경우 모든 포트에 액세스할 수 있어야 합니다.

몇 가지 솔루션을 찾을 수 있지만(작동할지 확실하지 않음) iptablesCentOS 7 에서는 firewalld. 명령 으로 달성하는 것과 비슷한 것을 찾을 수 없습니다 firewall-cmd.

인터페이스는 공개 영역에 있습니다. 또한 모든 서비스를 이미 공개 영역으로 옮겼습니다.

답변1

나는 영역에 소스를 추가하여 이를 달성할 것입니다. 먼저 해당 영역에 어떤 소스가 있는지 확인하세요.

firewall-cmd --permanent --zone=public --list-sources

아무것도 없으면 추가하기 시작할 수 있습니다. 이것이 "허용 목록"입니다.

firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32

(이렇게 하면 전체 /24IP와 단일 IP가 추가되므로 서브넷과 단일 IP 모두에 대한 참조를 갖게 됩니다.)

열려는 포트 범위를 설정합니다.

firewall-cmd --permanent --zone=public --add-port=1-22/tcp
firewall-cmd --permanent --zone=public --add-port=1-22/udp

이것은 포트 1부터 22까지만 수행합니다. 원하는 경우 이 범위를 확장할 수 있습니다.

이제 수행한 작업을 다시 로드하세요.

firewall-cmd --reload

그리고 작업 내용을 확인하세요.

 firewall-cmd --zone=public --list-all

참고/편집: 중요하지 않지만 저는 방화벽의 화이트리스트 IP 세트에 대한 "신뢰할 수 있는" 영역을 좋아합니다. 다음 내용을 읽어보면 추가 평가를 할 수 있습니다.영역 선택에 대한 Redhat의 제안.

또한보십시오:


이 소스 외부로 패킷을 보내려는 경우 이전에 예로 사용한 DROP외부 패킷을 삭제하는 예는 다음과 같습니다 ./24이를 위해 풍부한 규칙을 사용할 수 있습니다, 나는 믿는다. 이것은 개념적이므로 테스트하지는 않았지만(centos 7이 명령을 허용하는지 확인하는 것 외에는) pcap을 수행하고 예상대로 작동하는지 확인하기에는 충분히 쉬울 것입니다.

firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" invert="True" drop'

답변2

답변이 승인되고 찬성 투표를 받았다고 해도 그것이 정답이라고 생각하지 않습니다. 문서에서 명확한 설명을 찾지 못했지만 구현된 동작을 보면 다음과 같습니다.

  1. 인터페이스와 소스는 선택기로 사용됩니다 - 활성화할 영역
  2. 기본 영역에서는 둘 다 무시됩니다(항상 활성화됨).

따라서 대답은 다음과 같습니다.

  1. 기본 영역을 잠그고 "공개"라고 말합니다. 포트가 열려 있지 않거나 서비스를 사용할 수 없습니다.
  2. 다른 영역에서는 "작업"이라고 말합니다. - 소스 및 열린 포트를 정의합니다.

예를 들어 기본 영역이 공개이고 열려 있는 포트가 없다고 가정하면 "작업" 영역에 소스 및 포트 범위를 추가합니다.

$ sudo firewall-cmd --zone=work --add-source=192.168.0.0/24
$ sudo firewall-cmd --zone=work --add-port=8080-8090/tcp

이제 활성 영역을 확인하십시오(기본 영역은 항상 활성 상태입니다).

$ sudo firewall-cmd --get-active-zones

당신은 얻을 것이다:

work
  sources: 192.168.0.0/24

따라서 "작업" 영역 규칙이 특정 서브넷에 적용됩니다. "화이트리스트"에 대해 다양한 열린 포트가 있습니다 =서브넷요청대로. 물론 동작을 유지하려면 명령문 --permanent에 옵션을 사용하십시오.--add-xxx

그러면 "공용"(기본) 영역에 있는 모든 포트나 서비스가 모든 인터페이스와 소스 주소에 적용됩니다.

$ sudo firewall-cmd --list-all-zones

public (default)
interfaces:
sources:
services:
ports: 
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

work (active)
interfaces: 
sources: 192.168.0.0/24
services: dhcpv6-client ipp-client ssh
ports: 8080-8090/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

인터페이스에도 동일한 시스템이 작동합니다. "work" 영역에 "ens3" 인터페이스를 추가한다고 가정해 보세요.

$ sudo firewall-cmd --zone=work --add-interface=ens3

특정 인터페이스의 모든 요청에 ​​대해 "작업" 영역 규칙을 사용하게 됩니다. 이는 "소스"보다 더 대략적인 선택기입니다.

답변3

면책조항: 여기서는 제가 제안하는 것을 실제로 시도하지는 않았지만 제가 마지막으로 수행한 방화벽 설정과 상당히 유사하므로 이 단계는 생략하겠습니다. Firewalld는 이러한 목적을 위해 사전 구성된 몇 가지 영역을 제공합니다. 들어오는 모든 것을 삭제하는 "드롭"이라는 것이 있고, "신뢰할 수 있는"이라는 것이 있습니다.어느(즉, 개별 포트를 열 필요조차 없어야 한다고 생각합니다). 비결은 원하는 것을 트리거할 수 있는 올바른 영역을 얻는 것입니다.

Firewalld는 다음 우선 순위에 따라 영역에 규칙을 적용합니다.

  • 소스 IP가 영역에 바인딩된 소스 IP와 일치하면 해당 IP를 사용합니다.
  • 소스 IP가 특정 영역과 일치하지 않으면 해당 영역에 대해 구성된 영역이 있는지 확인합니다.상호 작용패킷이 들어왔습니다. 하나가 있으면 그것을 사용합니다.
  • 마지막으로 일치하는 항목이 없으면 기본 영역을 사용합니다.

따라서 먼저 신뢰할 수 있는 IP를 "신뢰할 수 있는" 영역에 바인딩하려고 합니다.

firewall-cmd --permanent --zone=trusted --add-source=1.2.3.4

그런 다음 기본 영역을 "drop"으로 설정하거나 인터페이스를 여기에 바인딩합니다.

firewall-cmd --permanent --set-default-zone=drop
firewall-cmd --permanent --zone=drop --change-interface=eth0

그런 다음 변경 사항을 적용합니다(경고: 네트워크를 통해 이 작업을 수행하고 소스 IP를 신뢰할 수 있는 영역에 추가하지 않은 경우 연결이 끊어질 수 있음).

firewall-cmd --reload

물론 "--permanent"를 생략하여 일시적으로 테스트할 수도 있습니다(그러면 --reload도 필요하지 않습니다).

답변4

신뢰할 수 있는 영역 답변이 선택된 답변이 아니라는 사실에 놀랐습니다. 신뢰할 수 있는 영역에는 기본 "target: ACCEPT"가 있고 나머지는 "target: default"입니다. 실제로는 중요하지 않지만 이름과 기본 대상 값으로 인해 의도된 방법인 것처럼 보입니다.

나만 접근할 수 있도록 상자를 빠르게 잠그는 방법:

firewall-cmd --zone=trusted --add-source=1.2.3.4
firewall-cmd --zone=trusted --add-source=5.6.7.8/24
firewall-cmd --zone=drop --change-interface=eth1
firewall-cmd --set-default-zone=drop
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
firewall-cmd --list-all-zones

모든 영역을 나열하면 다음과 같은 내용이 표시됩니다.

trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  sources: 1.2.3.4 5.6.7.8/24
  masquerade: no

drop (active)
  target: DROP
  icmp-block-inversion: no
  interfaces: eth1
  masquerade: no

참고: null/누락된 값이 있는 줄을 제거했습니다. 중요한 것은 trust와 drop이 둘 다(활성)이고 drop에 공용 인터페이스가 있다는 것입니다.

데모용으로 iptables에 미치는 영향은 다음과 같습니다.

Chain INPUT_ZONES_SOURCE (1 references)
target     prot opt source               destination
IN_trusted  all  --  1.2.3.4         0.0.0.0/0
IN_trusted  all  --  5.6.7.8/24        0.0.0.0/0
Chain INPUT_ZONES (1 references)
target     prot opt source               destination
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0

관련 정보