방화벽으로 몇 IP를 제외한 모든 IP를 차단 인 “모두 삭제”효과가

Linux 네트워크 컴퓨터에서 “공개”영역의 주소 세트 (방화벽 개념)를 제한하고 싶습니다. 따라서 최종 결과는 명시 적으로 허용되는 것을 제외하고 다른 시스템이 어떤 포트 나 프로토콜에도 액세스 할 수 없다는 것입니다.

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.120" drop'

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.105" drop'

위의 문제는 이것이 실제 목록이 아니라는 것입니다. 하나의 주소가 다른 주소와 같지 않아 차단되어 우발적 인 “모두 삭제”효과가 발생하기 때문에 모든 것을 차단합니다. 연속 세트? 소스가 주소 목록을 허용합니까? 지금까지 문서 또는 Google 결과를 전혀 보지 못했습니다.


편집 : 방금 이것을 만들었습니다.

# firewall-cmd  --zone=encrypt --list-all
encrypt (active)
  interfaces: eth1
  sources: 192.168.56.120
  services: ssh
  ports: 6000/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

그러나 .123 소스에서 목록에 없으면 서비스 나 포트에 도달 할 수 없어야한다는 의도로 포트 6000 에 도달 할 수 있습니다.



답변

풍부한 규칙은 전혀 필요하지 않습니다.

영역을 특정 IP 세트로 제한하려면 해당 IP를 영역 자체의 소스로 정의하고 소스 IP보다 우선하는 인터페이스 정의를 제거하십시오.

그러나 “공개”영역에서는이 작업을 수행하고 싶지 않을 것입니다. 왜냐하면 이는 공용 서비스가 세상에 공개되도록 의미하기 때문입니다.

대신, 주로 신뢰할 수있는 IP 주소에 “내부”와 같은 다른 영역을 사용하여 sshd와 같은 잠재적으로 민감한 서비스에 액세스하십시오. (나만의 영역을 만들 수도 있습니다.)

경고 : 특수한 “신뢰할 수있는”영역을 일반적인 “내부”영역으로 착각하지 마십시오. “신뢰할 수있는”영역에 추가 된 모든 소스는 모든 포트를 통해 허용됩니다. “신뢰할 수있는”영역에 서비스를 추가하는 것은 허용되지만 그렇게하는 것은 의미가 없습니다.

firewall-cmd --zone=internal --add-service=ssh
firewall-cmd --zone=internal --add-source=192.168.56.105/32
firewall-cmd --zone=internal --add-source=192.168.56.120/32
firewall-cmd --zone=public --remove-service=ssh

이 결과는 ssh에 대한 액세스를 허용하는 “내부”영역이되지만 주어진 두 IP 주소에서만 가능합니다. 지속적으로 유지하려면 --permanent추가 된 각 명령을 다시 실행하십시오 .


답변

에 따라 firewalld.richlanguage:

소스 소스 [not] address = “address [/ mask]”

   With the source address the origin of a connection attempt can be limited to the source address. An address is either a single IP address, or a network IP address. The address has to match the rule family (IPv4/IPv6). Subnet mask is expressed in either
   dot-decimal (/x.x.x.x) or prefix (/x) notations for IPv4, and in prefix notation (/x) for IPv6 network addresses. It is possible to invert the sense of an address by adding not before address. All but the specified address will match then.

연속 블록을 허용하려면 주소에 넷 마스크를 지정하십시오.

그 외에는 ipset허용되지 않는 IP 목록을 비 연속적으로 만들 수 있습니다.

예를 들면 다음과 /etc/firewalld/direct.xml같습니다.

<?xml version="1.0" encoding="utf-8"?>
<direct>
   <rule ipv="ipv4" table="filter" chain="INPUT" priority="0">-m set --match-set whitelist src -j ACCEPT</rule>
</direct>

실제 ipset는 별도로 작성해야합니다.


답변

Rich Rule을 통해 쉽게 관리 할 수 ​​있습니다.

첫 번째 단계

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

두 번째 단계-풍부한 규칙 추가

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" source address="192.168.78.76/32" accept'

풍부한 규칙을 추가하고 다른 소스에서 모든 포트를 차단하면 192.168.2.2에서 모든 포트에 액세스 할 수 있습니다.

아래 명령으로 포트 또는 서비스를 추가하면 모든 소스에서 액세스 할 수 있습니다.

firewall-cmd --zone=public --add-service=ssh
firewall-cmd --zone=public --add-port=8080

아래 명령보다 특정 Ip에 대한 특정 포트를 열려면

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" port="8080/tcp" source address="192.168.78.76/32" accept'