Firewalld: 동일한 서브넷에 있지 않고 두 개의 IP 주소를 화이트리스트에 추가하는 방법

Firewalld: 동일한 서브넷에 있지 않고 두 개의 IP 주소를 화이트리스트에 추가하는 방법

VPS/웹서버에서 firwalld를 실행하고 있습니다.

영역 public은 이며 active( default변경하고 싶지 않습니다). 어떻게 허용해?오직이 두 개의 외부 IP 주소는 VPS(즉, 이 영역에서 정의한 모든 서비스 public)에 액세스하는 데 사용됩니다.

   IP1:  11.22.33.44/24
   IP2:  55.66.77.88/24

이것들은 모두가짜 IP 주소그리고 그들이 고의로 그런 짓을 했다는 걸 알아차렸어요동일한 서브넷에 있지 않음.

다음이 작동하지 않는 이유를 이해한다고 생각합니다(하나의 IP 또는 다른 IP를 잠급니다).

user$ sudo firewall-cmd --zone=public --permanent --add-source=11.22.33.44/24
user$ sudo firewall-cmd --zone=public --permanent --add-source=55.66.77.88/24

user$ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="11.22.33.44/24" invert="True" drop' 
user$ sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="55.66.77.88/24" invert="True" drop'
user$ sudo firewall-cmd --reload

작동하려면 무엇을 수정해야 합니까(그래서 하나의 IP나 다른 IP 또는 둘 다를 잠그지 않도록)?

감사합니다! :)

편집하다/32: 위의 네 가지 명령 모두에 대해 비트마스킹 도 시도했습니다 . 불행하게도 이것은 도움이 되지 않습니다. 아직도 해결책을 찾고 있습니다.

내 생각에 논리는 다음과 같이 들릴 것 같습니다: if IP1 or IP2, allow it and stop processing the chain.else Continue processing the chain, where the very next rule would be to DROP.. 그런 것.

편집 2: 아래 출력을 게시하십시오 sudo firewall-cmd --list-all-zones. 위에서 언급한 모든 규칙은 작동하지 않으므로 제거했습니다. 그래서 다시 처음으로 돌아왔습니다.

user$ sudo firewall-cmd --list-all-zones
block
  target: %%REJECT%%
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 


dmz
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 


drop
  target: DROP
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 


external
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 


home
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 


internal
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 


public (active)
  target: default
  icmp-block-inversion: no
  interfaces: venet0:0 venet0
  sources: 
  services: ssh-vps http https
  ports: 8080/tcp 8080/udp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: echo-reply echo-request timestamp-reply timestamp-request
  rich rules: 

trusted
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 


work
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

답변1

이것은 좋은 질문입니다. firewalld와 상호작용 iptables하고 상호작용합니다 netfilter. 따라서 iptables는 Firewalld보다 유연성이 뛰어납니다. 하지만 이것이 iptables로 다시 전환해야 한다는 의미는 아니지만 고급 패킷 필터링을 위해 Firewalld를 계속 사용할 수 있습니다. 방화벽의 멋진 옵션은 다음을 사용하는 것입니다 direct rules.rich rules

이 경우 direct rules옵션은 귀하의 필요에 적합합니다.

먼저 모든 방화벽 규칙을 기본값으로 초기화합니다(걱정하지 마세요. SSH 액세스 또는 TCP-22는 초기화 후에도 계속 열려 있습니다).

$ sudo rm -rf /etc/firewalld/zones/*
$ sudo rm -rf /usr/etc/firewalld/zones/*
$ sudo firewall-cmd --complete-reload

ISP-1 및 ISP-2가 직접 규칙(INPUT 및 FORWARD 체인)을 사용하여 VPS에 액세스하도록 허용합니다.

$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 11.22.33.44/32 -j ACCEPT
$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 55.66.77.88/32 -j ACCEPT
$ sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -s 11.22.33.44/32 -j ACCEPT
$ sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -s 55.66.77.88/32 -j ACCEPT

반환 트래픽 허용(즉, 상태 저장 검사를 켭니다. 기본적으로 Firewalld는 statefu입니다)

$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -m state --state RELATED,ESTABLISHED -j ACCEPT

그런 다음 ISP-1 또는 ISP-2가 아닌 다른 IP를 차단합니다.

$ sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -j DROP
$ sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -j DROP

규칙 다시 로드

$ sudo firewall-cmd --reload

검증 규칙

$ sudo firewall-cmd --direct --get-all-rules

답변2

여기에 2가지 질문이 있습니다:

1) 2개의 인터페이스가 할당되어 있기 때문에 public해당 영역 에 액세스하려고 합니다 . interface zone이 영역의 목표 는 패킷을 default수락 icmp하고 다른 모든 패킷을 거부하는 것입니다.

2) 특정 IP가 시스템 서비스에 접근할 수 있도록 허용하는 권한 있는 영역(소스 영역이라고 함)이 필요합니다. 이 특권 영역에는 목표가 있으며 이 영역 ACCEPT보다 우선합니다 .public

그래서 내 대답은 이것이다.

1) trusted영역에서 소스 IP(들어오는 트래픽)를 처리하도록 합니다. 예를 들어:

firewall-cmd --permanent --zone=trusted --add-source=11.22.33.44 --add-source=55.66.77.88
firewall-cmd --reload

trusted영역은 이 영역으로 트래픽을 전달합니다 public. 해당 지역에서 서비스를 public처리할 것입니다 ssh-vps http https. 이는 방화벽을 구성하는 데 권장되는 방법입니다.

2) 대상을 지역 default으로 설정합니다 trusted.

firewall-cmd --permanent --zone=trusted --set-target=default
firewall-cmd --reload

관련 정보