ServerFault에 동일한 질문을 했는데 응답이 0개입니다...
우리는 서버의 SMTP 포트가 반복적으로 공격받을 때마다 방화벽에 거부 규칙을 추가하는 간단한 도구를 개발했습니다. 트래픽이 여전히 특정 IP 주소에서 발생하기 때문에 일부 규칙이 적용되지 않은 것으로 나타났습니다. 한 가지 예:
rule family="ipv4" source address="45.125.66.22" reject
rule family="ipv4" source address="45.125.66.24" reject
여전히 이 주소로부터의 트래픽이 표시되므로 방화벽이 해당 주소의 통과를 허용하고 있는 것 같습니다.
28/07/2022 08:27:31 SMTP Server: Authentication failed for user monica ; connecting host 45.125.66.24
규칙을 자동으로 생성하고 활성화하려면 다음 명령을 사용하십시오.
/bin/sudo firewall-cmd --add-rich-rule='rule family=ipv4 source address=<ip-address> reject' --permanent
/bin/sudo firewall-cmd --reload
서버는 CentOS Linux 버전 8.5.2111입니다. 다른 Linux 배포판으로 전환해야 한다는 것을 알고 있습니다.
내가 놓친 게 무엇입니까? 이 작업을 수행하려면 어떻게 해야 합니까?
고쳐 쓰다
iptables-save의 출력:
# Generated by iptables-save v1.8.4 on Sun Jul 31 16:17:13 2022
*filter
:INPUT ACCEPT [1160:109252]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1129:138455]
COMMIT
# Completed on Sun Jul 31 16:17:13 2022
# Generated by iptables-save v1.8.4 on Sun Jul 31 16:17:13 2022
*security
:INPUT ACCEPT [1106:106324]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1130:138703]
COMMIT
# Completed on Sun Jul 31 16:17:13 2022
# Generated by iptables-save v1.8.4 on Sun Jul 31 16:17:13 2022
*raw
:PREROUTING ACCEPT [1160:109252]
:OUTPUT ACCEPT [1132:139087]
COMMIT
# Completed on Sun Jul 31 16:17:13 2022
# Generated by iptables-save v1.8.4 on Sun Jul 31 16:17:13 2022
*mangle
:PREROUTING ACCEPT [1160:109252]
:INPUT ACCEPT [1160:109252]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1135:139543]
:POSTROUTING ACCEPT [1135:139543]
COMMIT
# Completed on Sun Jul 31 16:17:13 2022
# Generated by iptables-save v1.8.4 on Sun Jul 31 16:17:13 2022
*nat
:PREROUTING ACCEPT [239:11084]
:INPUT ACCEPT [185:8156]
:POSTROUTING ACCEPT [6:440]
:OUTPUT ACCEPT [6:440]
COMMIT
# Completed on Sun Jul 31 16:17:13 2022
# firewall-cmd --get-zones
block dmz drop external home internal nm-shared public trusted work
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client domino http https smtp ssh websockets
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="45.133.1.201" reject
rule family="ipv4" source address="31.210.20.23" reject
...
# firewall-cmd --list-rich-rules
... lists the same rules as above, some 520 lines
고쳐 쓰다
# firewall-cmd --info-service domino
domino
ports: 1352/tcp
protocols:
source-ports:
modules:
destination:
includes:
helpers:
# firewall-cmd --info-service websockets
websockets
ports: 3000-3029/tcp
protocols:
source-ports:
modules:
destination:
includes:
helpers:
답변1
RHEL/CentOS 8 및 RHEL 9에서는 classic 대신 firewalld
사용하므로 규칙이 전혀 없는 것처럼 보입니다 .nftables
iptables
iptables-save
nftables
방화벽 규칙이 실제로 작동하는지 확인하려면 다음을 실행하세요.
nft list ruleset
nftables
생성된 규칙보다 우선하는 규칙 세트를 수동으로 생성할 수 있으므로 firewalld
누군가가 일부 규칙을 구성하는 경우(예: cockpit
구성에 허용이 표시 firewalld
되거나 수동 편집을 통해) 그렇게 하는 /etc/nftables/main.nft
것 외에도 firewalld
중요합니다. 다양한 규칙이 처리되는 순서를 이해하기 위해 전체 규칙 세트를 검토합니다.
수동으로 생성된 필터 테이블에 SMTP를 허용하는 규칙이 포함되어 있고 해당 테이블이 에서 생성한 필터 테이블보다 우선순위가 높은 경우 구성이 이러한 소스 주소에서 SMTP를 차단하는 데 효과적이지 않은 firewalld
이유를 설명할 수 있습니다 firewalld
.
답변2
사용 사례에는 풍부한 규칙이 필요하지 않으며 방화벽 규칙을 다시 로드할 필요도 없습니다.
다음 소스를 방화벽 차단 영역에 추가하는 것으로 충분합니다.
firewall-cmd --zone=block --add-source=45.125.66.22
firewall-cmd --permanent --zone=block --add-source=45.125.66.22
firewall-cmd --zone=block --add-source=45.125.66.24
firewall-cmd --permanent --zone=block --add-source=45.125.66.24
참고: 이미 설정된 연결은 종료되지 않습니다!
다음과 같이 죽일 수 있습니다:
ss -K dst 45.125.66.22
ss -K dst 45.125.66.24
답변3
어떤 유선상의 이유로 Firewalld는 아무 것도 생성하지 않습니다. 결과적으로 커널은 들어오는 모든 트래픽을 받아들입니다.
지저분한 방화벽 대신 간단한 iptables와 ipset을 사용하고 배우십시오. 더 효율적이고 간단할 것입니다.
빠르게 시작하려면 다음과 같은 규칙을 추가하세요.
iptables -A INPUT -s bad_ip -j DROP
방화벽을 비활성화합니다.
그런 다음 작업에 대한 규칙을 만듭니다. 상태 저장 규칙, 연결 추적, IPset, 포트...