Firewalld/iptables를 사용하여 설정된 연결 차단

Firewalld/iptables를 사용하여 설정된 연결 차단

내 서버에서 방화벽을 실행하고 있으며 더 나은 보안을 위해 (firewalld를 사용하여) Fail2ban을 설정하려고 합니다. 문제는 설정된 연결을 종료할 수 없다는 것입니다.

Firewalld에는 몇 가지 서비스(Ssh 등)만 추가된 기본 구성이 있습니다.

문제가 무엇인지 알 것 같습니다. iptables -L INPUT이것을 주세요.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination      
ACCEPT     all  --  anywhere             anywhere        ctstate RELATED,ESTABLISHED   
ACCEPT     all  --  anywhere             anywhere            
INPUT_direct  all  --  anywhere             anywhere            
INPUT_ZONES_SOURCE  all  --  anywhere             anywhere            
INPUT_ZONES  all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere        reject-with icmp-host-prohibited

iptables에 대한 내 이해에 따르면 이는 첫 번째 규칙이기 때문에 관련 있고 확립된 연결이 무슨 일이 있어도 허용된다는 것을 의미합니다(지정된 포트만 열려 있는 동안 두 번째 규칙이 존재하는 이유는 모르겠지만 지금은 무시하겠습니다). .

내가 시도한 것은 첫 번째 규칙을 제거하는 것이었지만 iptables -D INPUT 1, 이로 인해 네트워크도 네트워크도 전혀 없는 시스템이 남게 되었습니다. 그래서 나는 그 규칙을 다시 추가했지만 마지막 규칙에서 두 번째로 추가했습니다. iptables -I INPUT 7 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination      
ACCEPT     all  --  anywhere             anywhere            
INPUT_direct  all  --  anywhere             anywhere            
INPUT_ZONES_SOURCE  all  --  anywhere             anywhere            
INPUT_ZONES  all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere    
ACCEPT     all  --  anywhere             anywhere        ctstate RELATED,ESTABLISHED           
REJECT     all  --  anywhere             anywhere        reject-with icmp-host-prohibited

이렇게 하면 원하는 효과가 있는 것 같습니다. 이제 Fail2ban 항목이 작성되면 설정된 연결이 종료되고 나머지 네트워크가 작동하는 것처럼 보입니다.

질문:이를 보존하기 위해 방화벽을 어떻게 사용합니까? 나는 방화벽을 영구적으로 변경할 수 있다는 것을 알고 있으며 firewall-cmd --permanentand를 통해 더 낮은 수준의 작업을 수행할 수 있다는 것을 알고 있지만 INPUT 체인을 심층적으로 조작할 수 있는 방법을 찾지 못했습니다.--direct--xxx-rich-rule

편집하다:나는 이것을 사용하여 --passthroughINPUT 체인을 조작할 수 있다는 것을 발견했습니다. 그러나 영구적으로 만들려고 하면 다음과 같습니다.

firewall-cmd --direct --passthrough ipv4 -I INPUT 7 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
firewall-cmd --direct --passthrough ipv4 -D INPUT 1
systemctl restart firewalld

삽입은 작동하지만 삭제는 작동하지 않습니다. 이 후 다음이 iptables -L INPUT생성됩니다.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            
INPUT_direct  all  --  anywhere             anywhere            
INPUT_ZONES_SOURCE  all  --  anywhere             anywhere            
INPUT_ZONES  all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

편집하다:

나는 아직 Fail2ban의 방화벽 작업을 작동시키는 방법을 찾지 못했기 때문에 현 시점에서는 그것이 가능하다고 생각하지 않습니다.

대신 Fail2ban iptables 작업을 사용하면 작동하므로 계속 사용하겠습니다.

답변1

방화벽이 PREROUTING에 대한 요청을 차단하려는 것 같습니다.으깨다이전에 확인했던 테이블필터규칙을 추가하려는 테이블입니다.

간단한 금지

설정된 세션을 차단하기 위한 간단한 옵션은 소스 규칙을 추가하는 것입니다.줄이다구역.

firewall-cmd --zone=drop --add-source=192.168.1.xx

PREROUTING_ZONES_SOURCE 체인에 소스 IP가 추가됩니다.으깨다테이블.

# iptables -L PREROUTING_ZONES_SOURCE -nv --line -t mangle
Chain PREROUTING_ZONES_SOURCE (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1       23  1656 DROP       all  --  *      *       192.168.1.xx        0.0.0.0/0

PREROUTING_ZONES_SOURCE전화를 걸다사전 라우팅모든 트래픽을 처리하기 전에 처리하는 체인입력하다링크 인필터또는으깨다.

# iptables -L PREROUTING -nv --line -t mangle
Chain PREROUTING (policy ACCEPT 1809 packets, 90324 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     227K   22M PREROUTING_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0
2     227K   22M PREROUTING_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0
3     226K   22M PREROUTING_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0

사용자 정의 금지 규칙

보다 구체적인 규칙을 추가해야 하는 경우 다음을 사용하세요.--직접--규칙 추가규칙 추가손상/입력이후에 실행맹글/사전 라우팅. 다음은 특정 IP에 대해 포트 443을 차단하는 예입니다.

# firewall-cmd --direct --add-rule ipv4 mangle INPUT 0 -p tcp --dport 443 -s 192.168.1.xx -j DROP

형식은 다음과 같습니다.

--direct --add-rule { ipv4 | ipv6 | eb } table chain priority args

이 예에서는 다음과 같습니다.

  • { IPv4 | IPv6 엡 } ->IPv4:IPv4 프로토콜 지정
  • 테이블->으깨다: 패킷을 수신한 후 규칙을 확인하기 전에 즉시 실행합니다.필터ESTABLISHED 연결의 패킷을 허용하는 테이블과 같은 테이블입니다.
  • 체인->입력하다: 이 INPUT 체인은 PREROUTING 후에 확인되지만 이 INPUT은 PREROUTING과 관련이 없다는 점에 유의하세요.으깨다테이블.
  • 우선순위->0: 규칙 우선순위. 여기서 0이 가장 높은 우선순위입니다.
  • 매개변수->-p tcp --dport 443 -s 192.168.1.xx -j 삭제: 동일한 매개변수가 iptables에 전달됩니다.

그럼 그게 다야맹글/INPUT_direct좋다:

# iptables -L INPUT_direct -nv --line -t mangle
Chain INPUT_direct (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1       30  1888 DROP       tcp  --  *      *       192.168.1.181        0.0.0.0/0            tcp dpt:443

몇 가지 메모

첫 번째 예는 소스 IP의 모든 패킷을 차단하지만 두 번째 예는 PREROUTING 규칙 후에 실행되므로 INPUT에 도달하기 전에 패킷이 수정되거나 패킷이 FORWARD 테이블로 라우팅되는 경우 데이터 패키지는 DROP 규칙에 도달하지 않습니다.

다음은 간단한 흐름도입니다.웹 필터표면. netfilter 패킷 처리 과정 다음에서 추출된 이미지http://www.iptables.info/en/struct-of-iptables.html

관련 정보