![nftables 대상 nat는 포트에 대한 로컬 액세스를 차단합니다.](https://linux55.com/image/182946/nftables%20%EB%8C%80%EC%83%81%20nat%EB%8A%94%20%ED%8F%AC%ED%8A%B8%EC%97%90%20%EB%8C%80%ED%95%9C%20%EB%A1%9C%EC%BB%AC%20%EC%95%A1%EC%84%B8%EC%8A%A4%EB%A5%BC%20%EC%B0%A8%EB%8B%A8%ED%95%A9%EB%8B%88%EB%8B%A4..png)
내 서버에 nftables가 설정되어 있고 일부 보호된 포트(예: 80)로 들어오는 모든 트래픽을 루트 권한 없이 사용할 수 있는 더 높은 포트(예: 13080)로 리디렉션하고 싶습니다. 원격으로 80개에만 액세스할 수 있지만 로컬에서는 두 포트 모두에 액세스할 수 있기를 원합니다. 제가 생각해낸 설정은 다음과 같습니다.
#!/usr/bin/nft -f
flush ruleset
table inet firewall {
chain inbound {
type filter hook input priority filter; policy drop;
ct status dnat counter accept # accept everything that came through destination nat (port 80)
iifname lo counter accept
oifname lo counter accept
ct state { established, related } counter accept
ct state invalid counter drop
tcp dport 22 ct state new counter accept
counter reject with icmpx type port-unreachable # reject everything else
}
chain destination-nat {
type nat hook prerouting priority dstnat; policy accept
tcp dport 80 counter redirect to 13080 # redirect 80 to 13080
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain outbound {
type filter hook output priority 0; policy accept;
}
}
그러나 어떤 이유로 인해 포트 80에 대한 로컬 액세스가 차단됩니다(13080은 여전히 액세스 가능하지만). 누군가 내가 뭘 잘못하고 있는지 말해 줄 수 있나요?
답변1
여기에 예가 있습니다.일반 네트워크의 Netfilter 및 패킷 흐름유효기간은nftables:
중요한 세부 사항이 내부에 기록되어 있습니다.* "새" 연결에 대해서만 "nat" 표를 참조하세요..
로컬로 시작된 연결의 경우 새 연결의 첫 번째 패킷은 출력 중에 새로운 conntrack 상태를 생성합니다(출력의 conntrack 상자). 이 연결이 루프백될 때(거의 모든 경우에 다음을 통해)루오인터페이스) 이동일한패킷이 사전 라우팅(다른 conntrack 상자)을 통해 돌아올 때 conntrack 상태가 일치합니다. 즉, 로컬 루프백 연결에 대해 두 개의 conntrack 상태가 없습니다.
다른 경우에는 새 연결의 첫 번째 패킷이 사전 라우팅(미리 라우팅된 conntrack 상자)을 통해 도착하고 새로운 conntrack 상태가 생성됩니다.
따라서 연결의 첫 번째 루프백 패킷이 전송되면 새로운 conntrack 항목이 생성됩니다.출력 중이 패킷이 사전 라우팅을 통해 돌아올 때 기존 conntrack 항목과 일치합니다. 더 이상 새 항목이 아닙니다. NAT 후크(nat/prerouting 체인을 의미 destination-nat
)는 통과되지 않으므로 이 연결에 영향을 주지 않습니다. 출력 단계에서 기회가 누락됩니다.
대신에DNA이 상황을 해결하기 위해 새로운 conntrack 상태 설명이 nat/output에 나타납니다. 기본적으로 로컬에서 시작된 모든 연결(예: 인터넷)에 영향을 미치므로 로컬 연결에만 사용하도록 주의해야 합니다.루오상호 작용. 이 체인과 규칙이 이를 수행합니다:
nft add chain inet firewall loopback-nat '{ type nat hook output priority -100; policy accept; }'
nft add rule inet firewall loopback-nat oif lo tcp dport 80 counter redirect to :13080
다른 곳에서 실행하면 해당 동작을 추적할 수 있습니다.conntrack
이벤트 모드의 명령:
conntrack -E -p tcp --dport 80
그리고 외부에서 시작된 연결과 로컬에서 시작된 루프백 연결(이 추가 체인이 있거나 없는) 간의 차이점을 확인하세요. 기억해 주세요,냇후크는 상태와 함께 표시된 항목만 볼 수 있습니다 [NEW]
(그리고 이에 따라 명령에 의해 표시된 항목이 변경되었습니다).