방화벽으로 몇 IP를 제외한 모든 IP를 차단


17

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 에 도달 할 수 있습니다.

답변:


24

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

영역을 특정 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추가 된 각 명령을 다시 실행하십시오 .


"존재할 수있는 인터페이스 정의"의 의미를 명확히하고, iv 제안을 시도했습니다. 내 편집 내용을 참조하십시오.
mike

@mike 내가 말했듯이, 당신 eth1은 영역에서 제거해야합니다 . firewall-cmd --zone=encrypt --remove-interface=eth1
Michael Hampton

음, 암호화 영역은 eth1이 공개되기 전에 새로운 영역으로 공개에서 암호화로 이동했기 때문에 소스에 .120이 있습니다. 120 만 포트에 도달 할 수 있어야한다고 생각했습니다.
mike

1
인터페이스를 영역에 배치하면 인터페이스를 통해 도착한 모든 항목 이 IP 주소에 관계없이 영역에 추가 된 모든 포트 및 서비스에 액세스 할 수 있습니다. 따라서 아마도 원래 있던 공공 장소에 속했을 것입니다.
Michael Hampton

ahh, 인터페이스가 공개적으로 배치되어 있고 승인 소스가 다른 신뢰할 수있는 소스에 배치 된 경우에도 승인 된 소스가 계속 허용됩니까?
mike

1

에 따라 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는 별도로 작성해야합니다.


이것은 거부 할 것이고, 내가 필요한 것은 역이다. 만일 세트에 있다면 받아 들인다.
mike

0

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'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.