Firewalld - 특정 IP로 트래픽을 제한합니다.

Firewalld - 특정 IP로 트래픽을 제한합니다.

CentOS7 서버에 대한 액세스를 특정 IP(192.168.10.5 및 167.165.100.22)로 들어오고 나가는 트래픽으로 제한하기 위해 방화벽을 설정하려고 합니다.

네트워크 인터페이스 enp0s01이 하나만 있습니다.

"ssh" 서비스가 활성화된 사용자 지정 영역으로 방화벽을 전환했습니다.

firewall-cmd --zone=customlist --list-all
internal (active)
target: default
icmp-block-inversion: no
interfaces: enp0s01
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

예를 들어 IP 주소를 추가하여 테스트했습니다.

firewall-cmd --permanent --zone=external --add-source=192.168.10.5

그러나 네트워크 내의 다른 IP는 여전히 SSH를 통해 서버에 액세스할 수 있습니다.

접근을 제한하는 방법은 무엇입니까? 소스를 추가하여 명시적으로 화이트리스트에 추가하지 않는 한 방화벽은 모든 트래픽을 차단하는 것 같습니다.

답변1

배경

연구에 따르면 기본적인 방화벽 명령을 사용하여 나가는 트래픽을 제한할 수 없는 것으로 나타났습니다. 여러 소스에서 이를 지원합니다.

유일한 수단은 명령을 사용하는 것인데 , 이는 편의를 위한 규칙 firewall-cmd --direct ...일 뿐입니다 . iptables이를 감안할 때 Firewalld를 통해 이 작업을 수행하도록 선택하거나 iptables.

노트:직접 규칙은 다음과 같습니다.

$ firewall-cmd --direct --remove-rule ipv4 filter OUTPUT 0 -d 74.125.136.99/32 -p tcp -m tcp --dport=80 -j DROP

잠재적인 솔루션

호스트에서 나가는 통신을 허용하지 않도록 요구 사항을 완화할 수 있는 경우 firewall-cmd아래와 같이 기본 명령을 사용하여 원하는 대부분을 얻을 수 있습니다.

노트:내 예에는 3개의 노드가 있습니다.

  • 192.168.56.101 - VM #1 - 방화벽 규칙이 있는 서버
  • 192.168.56.102 - VM #2
  • 192.168.56.1 - 내 노트북
방화벽 명령:
$ firewall-cmd --permanent --zone=internal --add-source=192.168.56.101/32
$ firewall-cmd --permanent --zone=internal --add-source=192.168.56.1/32
$ firewall-cmd --permanent --zone=internal --add-port=8080/tcp
$ firewall-cmd --zone=public --set-target=DROP

이 설정을 사용하면 랩톱에서 VM #1에 액세스할 수 있지만 다른 곳(예: VM #2)에서는 액세스할 수 없습니다.

기본 영역
$ firewall-cmd --get-default-zone
public
활동 영역
$ firewall-cmd --get-active-zones
internal
  sources: 192.168.56.101/32 192.168.56.1/32
public
  interfaces: eth0 eth1
공개 구역 설정
$ firewall-cmd --zone=public --list-all
public (active)
  target: DROP
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
내부 영역 설정
$ firewall-cmd --zone=internal --list-all
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces:
  sources: 192.168.56.101/32 192.168.56.1/32
  services: ssh mdns samba-client dhcpv6-client
  ports: 8080/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
공공 장소의 기본 대상
$ firewall-cmd --permanent --get-target
DROP

시험

이 설정을 테스트하기 위해 nc(ncat)을 사용하여 포트 8080에 "리스너 데몬"을 생성하고 curl -v telnet://...명령을 사용하여 이러한 리스너에 연결하는 클라이언트 역할을 합니다.

노트:이는 순전히 모든 것이 예상대로 작동하고 나중에 제거할 수 있음을 설명하기 위한 것입니다.

VM #1에서:
$ nc -4 -l -p 8080 -k
이제 VM #2에서는 연결할 수 없습니다.
$ timeout 1 curl -v telnet://192.168.56.101:8080
* About to connect() to 192.168.56.101 port 8080 (#0)
*   Trying 192.168.56.101...
$
노트북에서는 다음을 수행할 수 있습니다.
$ timeout 1 curl -v telnet://192.168.56.101:8080
* Rebuilt URL to: telnet://192.168.56.101:8080/
*   Trying 192.168.56.101...
* Connected to 192.168.56.101 (192.168.56.101) port 8080 (#0)
$

이 접근 방식의 유일한 문제점은 VM #1 노드가 여전히 송신될 수 있다는 것입니다.

$ timeout 2 ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=63 time=26.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=63 time=25.6 ms
$

$ timeout 1 curl -v telnet://www.google.com:80
* About to connect() to www.google.com port 80 (#0)
*   Trying 216.58.217.164...
* Connected to www.google.com (216.58.217.164) port 80 (#0)
$

인용하다

관련 정보