IPtables UDP 포트 전달이 작동하지 않습니다.

IPtables UDP 포트 전달이 작동하지 않습니다.

포트 514에서 내 서버로 UDP syslog 메시지를 보내는 장치가 있습니다. ifconfig를 확인하고 수집기 소프트웨어를 루트로 실행하여 테스트하여 이 트래픽이 내 서버에 도달하고 있음을 확인했습니다.

수집기를 루트로 실행할 필요가 없도록 포트 514에서 들어오는 트래픽을 다른 포트로 전달하려고 합니다. 그러나 이전에 동일한 명령을 성공적으로 사용했음에도 불구하고 어떤 이유로 IPtables에서 이 작업을 수행할 수 없습니다.

내가 만든 규칙:

iptables -t nat -I PREROUTING --src 0/0 --dst 127.0.0.1 -p udp --dport 514 -j REDIRECT --to-ports 9901

그리고

iptables -I INPUT 1 -p udp -m udp --dport 9901 -j ACCEPT

내가 무엇을 놓치고 있나요? 수집기가 포트 514를 확인할 때(위 규칙에도 불구하고) 데이터를 선택하므로 트래픽을 전달할 수 없는 경우 IPtables가 어떻게든 나타나는 것으로 가정합니다.

답변1

OUTPUT패킷이 로컬에서 생성되면 체인에 들어갑니다 . 이 경우 -j REDIRECT체인 OUTPUT, 테이블에 nat를 추가 할 수 있습니다.

인바운드 패킷이 로컬이 아닌 경우 route_localnet해당 인터페이스에 대한 옵션을 활성화하면 성공할 수 있습니다.

# sysctl -w net.ipv4.conf.<IFNAME>.route_localnet=1

또는

# echo 1 > /proc/sys/net/ipv4/conf/<IFNAME>/route_localnet

Route_localnet - BOOLEAN 라우팅 시 루프백 주소를 화성 소스 또는 대상으로 처리하지 않습니다. 이를 통해 127/8을 로컬 라우팅 목적으로 사용할 수 있습니다. 기본값은 거짓

인용하다:https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

답변2

이 시도:

iptables -t nat -I PREROUTING --src 0/0 --dst {server-ip-address} -p udp --dport 514 -j REDIRECT --to-ports 9901

{server-ip-address}를 서버 IP 주소(대부분의 경우 컴퓨터의 LAN 주소)로 바꾸세요.

문제는 인바운드 패킷의 대상 IP 주소가 127.0.0.1이 아닌 서버 컴퓨터라는 것입니다.

귀하가 생성한 규칙은 귀하의 서버에서 귀하의 서버로 다시 전송된 패킷에만 일치한다고 생각합니다(루프백 주소 127.0.0.1을 포함하는 규칙에서 제안한 대로). 따라서 PREROUTING 규칙은 외부 컴퓨터에서 들어오는 패킷과 일치하는 항목을 인식하지 못합니다. 이 문제는 루프백 주소를 서버의 IP 주소로 바꾸면 해결될 수 있습니다.

Linux의 iptables가 혼란스럽다면 확인해 보는 것이 좋습니다.매뉴얼 페이지iptables용또는이 리소스는 나에게 도움이 되었습니다.https://www.karlrupp.net/en/computer/nat_tutorial

관련 정보