![CentOS 7의 화이트리스트 소스 IP 주소](https://linux55.com/image/57119/CentOS%207%EC%9D%98%20%ED%99%94%EC%9D%B4%ED%8A%B8%EB%A6%AC%EC%8A%A4%ED%8A%B8%20%EC%86%8C%EC%8A%A4%20IP%20%EC%A3%BC%EC%86%8C.png)
화이트리스트에 있는 원본 IP 주소를 제외한 모든 수신 요청을 차단하도록 CentOS 7 방화벽을 설정하고 싶습니다. 화이트리스트에 있는 IP 주소의 경우 모든 포트에 액세스할 수 있어야 합니다.
몇 가지 솔루션을 찾을 수 있었지만(작동하는지 확실하지 않음) iptables
CentOS 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
(이렇게 하면 전체 /24
IP와 단일 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의 제안.
또한보십시오:
- 방화벽을 사용하는 RHEL 7 문서
- Fedora 방화벽D 문서(아주 좋습니다. 페도라는 한동안 방화벽을 사용해 왔습니다)
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
답변이 승인되어 투표를 받았지만 정답이 아닌 것 같습니다. 문서에서 명확한 설명을 찾을 수 없지만 구현된 동작을 보면 다음과 같습니다.
- 인터페이스와 소스는 선택기로 사용됩니다 - 활성화할 영역
- 기본 영역의 경우 둘 다 무시됩니다(항상 활성화됨).
대답은 다음과 같습니다.
- "공용"과 같은 기본 영역을 잠급니다. 열려 있는 포트나 서비스를 사용할 수 없습니다.
- 다른 영역에서는 "Work"라고 말하세요. 소스와 열린 포트를 정의하세요.
예를 들어 기본 영역이 공개 영역이고 열려 있는 포트가 없다고 가정하면 소스와 포트 범위를 "작업" 영역에 추가합니다.
$ 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