nftables 애플리케이션이 일시적으로 포트를 사용하도록 허용하는 방법

nftables 애플리케이션이 일시적으로 포트를 사용하도록 허용하는 방법

나는 사용하고있다곡구내 Android 휴대폰에서 Linux 컴퓨터와 휴대폰 간에 파일을 전송합니다.

애플리케이션은 42001초기 연결 및 42000데이터 전송을 위해 포트를 사용합니다. 나는 그것이 TCP를 사용한다고 믿습니다.

저는 nftables를 방화벽으로 사용하고 있으며 최근에 방화벽에서 전환했습니다. 나는 아직 nftable을 완전히 마스터하지 못했습니다.

42000,42001응용프로그램을 시작하기 전에 내 컴퓨터에서 이 두 포트를 일시적으로 허용 하고 완료되면 포트를 닫고 싶습니다 .

기존 규칙을 계속해서 임시로 추가하고 가능하면 bash/nft 스크립트를 사용하여 제거하고 싶습니다.

가능합니까?

통찰력 있는 안내에 감사드립니다.

내 시스템에는 다음과 같은 간단한 기본 구성이 있습니다./etc/nftables.conf

#!/usr/bin/nft -f
# vim:set ts=2 sw=2 et:

# IPv4/IPv6 Simple & Safe firewall ruleset.
# More examples in /usr/share/nftables/ and /usr/share/doc/nftables/examples/.

table inet filter
delete table inet filter
table inet filter {
  chain input {
    type filter hook input priority filter
    policy drop

    ct state invalid drop comment "early drop of invalid connections"
    ct state {established, related} accept comment "allow tracked connections"
    iifname lo accept comment "allow from loopback"
    ip protocol icmp accept comment "allow icmp"
    meta l4proto ipv6-icmp accept comment "allow icmp v6"
    tcp dport ssh accept comment "allow sshd"
    pkttype host limit rate 5/second counter reject with icmpx type admin-prohibited
    counter
  }
  chain forward {
    type filter hook forward priority filter
    policy drop
  }
}

미리 감사드립니다

답변1

이 경우 내가 할 일은 임시 액세스를 위한 체인을 구성하는 것입니다.

아래에서 "테이블"은 "필터"(귀하의 예를 기반으로 함)이며 이러한 규칙의 식별자로 "warpinator"를 사용하고 있습니다. (예를 들어, 테이블 이름은 별로 중요하지 않으며 이런 식으로 "예약어"를 사용하는 것은 항상 매우 혼란스럽습니다.)

# Create a new chain and counter for this purpose. 
create chain inet filter warpinator
add counter inet filter warpinator

# add a rule to the chain 
add rule inet filter warpinator tcp dport { 42000, 42001 } log prefix "WARPINATOR: " counter name "warpinator" accept 

# insert a 'jump' condition to your input chain to inspect traffic
add rule inet filter input jump warpinator

이렇게 하면 다음에서 인바운드 트래픽이 활성화됩니다.어느소스를 이 포트에 연결하세요.

다음을 통해 이를 보다 적극적으로 제한할 수 있습니다.

add rule inet filter warpinator tcp dport { 42000, 42001 } ip saddr 192.168.0.0/24 .... 

그러면 해당 주소 범위(192.168.0.1-192.168.0.255) 내의 주소로 제한됩니다. "홈" 네트워크 범위를 선택하시겠습니까?

이를 nft 스크립트(아마도 /etc/nftables?)로 저장하면 다음을 수행할 수 있습니다.

  • main.nft귀하의 라인 중 하나 에 이를 포함시키십시오 include.
  • 임시로 실행해 보세요nft -f <script>

"nft" 구성에 포함되어 있으므로 delete table inet filter이를 다시 로드하여 규칙을 다시 제거할 수 있습니다.nft -f <main policy>

또는 main.nft에 정의된 체인을 유지하고 다음을 활성화할 수 있습니다.

add rule inet filter input jump warpinator

필요할 때.

원하는 경우 정책에서 규칙을 제거할 수 있지만 "규칙 ID"가 필요한 만큼 간단하지는 않습니다.

예를 들어 다음을 실행합니다.

nft -a list ruleset 

"점프" 룰의 "처리ID"를 찾아 처리번호별로 삭제해 주세요. 따라서 포트를 닫기 위해 "기준선"을 다시 로드하는 것이 좋은 방법이라고 생각합니다.

답변2

애플리케이션은 초기 연결에 포트 42001을 사용하고 데이터 전송에 포트 42000을 사용합니다. 나는 그것이 TCP를 사용한다고 믿습니다.

응용 프로그램을 시작하기 전에 내 컴퓨터에서 이 두 포트 42000, 42001을 일시적으로 허용하고, 완료되면 이 포트를 닫고 싶습니다.

일시적으로 포트를 허용하는 것은 자동으로 불가능합니다. 유일한 방법은 필요에 따라 특정 규칙을 수동으로 추가하고 제거하는 것입니다. 그러나 이는 금방 지루해질 수 있습니다.

이 문제에 대한 표준 솔루션은 상태 필터링을 기반으로 제한적인 규칙을 만드는 것입니다.

포트는 42000데이터 전송에 사용되므로 연결에만 허용되어야 하며 새 연결에 대해 포트가 닫히므로 established항상 이 규칙을 활성화해도 아무런 해가 없습니다 .42000

포트만 42001문제가 있는 것으로 간주되며 해결책은 new연결 및 충분히 안전한 로컬 서브넷에만 포트를 적용하는 것입니다.

예:

먼저 다음을 위한 사용자 정의 체인을 생성 established하고 조인하세요.new

nft add chain inet filter established_in {
    comment "Established input traffic"
}
nft add chain inet filter new_in {
    comment "New input traffic"
}

다음 단계는 이러한 체인과 연결 related하고 트래픽을 수행하는 것입니다.new

nft add rule filter input ct state established goto established_in
nft add rule filter input ct state new goto new_in

이로 인해 established트래픽이 established_in체인 필터링되고 new트래픽이 new_in체인 필터링됩니다. 이는 상태 기반 체인으로 리디렉션을 필터링하는 체인
에 "추가"됩니다 .inputestablished_innew_in

다음 Warpinator으로 연결을 허용하는 체인에 규칙을 추가합니다. saddr아래 주소를 로컬 서브넷으로 업데이트하면 로컬 네트워크의 장치만 허용됩니다.
또는 Android IP 주소로 제한할 수도 있습니다!

add rule filter new_in ip saddr 192.168.1.0/24 tcp dport 42001 accept
add rule filter established_in ip saddr 192.168.1.0/24 tcp dport 42000 accept

다음 단계는 input이미 허용한 다른 모든 규칙 establishednew이러한 체인에 대한 연결을 추가하는 것입니다.

이는 (귀하의 샘플을 기준으로) 다음과 같습니다.

iifname lo accept comment "allow from loopback"
ip protocol icmp accept comment "allow icmp"
meta l4proto ipv6-icmp accept comment "allow icmp v6"
tcp dport ssh accept comment "allow sshd"
pkttype host limit rate 5/second counter reject with icmpx type admin-prohibited counter

이러한 규칙을 사용자 정의 체인에 추가한 후 마지막 단계는 이러한 체인의 다른 모든 것을 차단하는 것이므로 기본 차단 규칙을 추가합니다.

nft add rule filter established_in drop
nft add rule filter new_in drop

input그런 다음 다른 규칙이 기본 체인에 추가됩니다.

ct state invalid drop comment "early drop of invalid connections"
iifname lo accept comment "allow from loopback"
ip protocol icmp accept comment "allow icmp"
meta l4proto ipv6-icmp accept comment "allow icmp v6"
tcp dport ssh accept comment "allow sshd"
pkttype host limit rate 5/second counter reject with icmpx type admin-prohibited counter

established연결( established_in체인에 의해 처리됨)은 별도로 처리되고 new연결( 체인에 의해 처리됨)도 별도로 처리된다는 점을 아는 것이 중요합니다 new_in. 다른 모든 콘텐츠 relatedinvalid트래픽은 해당 체인으로 input리디렉션되고 established연결 됩니다. new.

이 접근 방식의 이점은 42000먼저 액세스하지 않으면 포트가 열리지 않고 42001보안 로컬 네트워크만 포트에 액세스할 수 있다는 것입니다.

관련 정보