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