iptables를 사용하여 TCP 응답에서 소스 IP 다시 쓰기

iptables를 사용하여 TCP 응답에서 소스 IP 다시 쓰기

해당 시스템에서 시작되지 않는 연결을 위해 Redhat 시스템을 떠나는 TCP/514 트래픽의 소스 IP를 다시 쓰고 싶습니다.

머신은 인터페이스(예: 10.10.0.20)에서 TCP/514 트래픽을 수신한 다음 응답이 10.10.0.15(머신에 할당되지 않음)에서 온 것처럼 트래픽을 반환하려고 합니다.

연결을 시작하는 경우 nat 테이블을 사용하여 다음을 수행할 수 있습니다.

iptables -A POSTROUTING -t nat -p tcp --sport 514 -j SNAT --to=10.10.0.15

..하지만 들어오는 트래픽에 응답하고 있기 때문에 (내가 아는 한) nat 테이블에 도달할 수 없습니다. 이유를 무시하다이거 꼭 해야 하는데 어떻게 해야 하나요?

추가 배경:

이는 Netscaler VIP 뒤에 앉아 TCP(UDP가 아님)를 통해 syslog 트래픽을 수신하는 Redhat 7 시스템입니다. VIP에서 클라이언트 IP 패스스루를 사용하고 있습니다. 방화벽은 VIP의 IP가 아닌 syslog 서버 IP의 반환 트래픽을 보고 있으므로 방화벽이 트래픽을 삭제하므로 VIP의 IP 주소에서 나오도록 syslog 서버의 TCP 응답을 다시 작성하려고 합니다. 백엔드 서버에서 트래픽이 들어오지 않기 때문에 nat 테이블을 사용할 수 없는 것 같습니다(따라서 작동하지 않습니다 -j SNAT).

지금 내가 보는 것은 다음과 같습니다.

13:13:45.439683 IP 10.10.0.8.31854 > 10.10.0.20.514: Flags [S], seq 544116376, win 8190, options [mss 1460], length 0
13:13:45.439743 IP 10.10.0.20.514 > 10.10.0.8.31854: Flags [S.], seq 4163333198, ack 544116377, win 14600, options [mss 1460], length 0

내가 보고 싶은 것은:

13:13:45.439683 IP 10.10.0.8.31854 > 10.10.0.20.514: Flags [S], seq 544116376, win 8190, options [mss 1460], length 0
13:13:45.439743 IP 10.10.0.15.514 > 10.10.0.8.31854: Flags [S.], seq 4163333198, ack 544116377, win 14600, options [mss 1460], length 0

답변1

DSR 방식

가장 효과적인 방법은 NetScaler에서 직접 서버 반환 모드를 적절하게 구성하는 것입니다. 여기서 NetScaler는 대상 VIP 주소(10.10.0.15)를 변경하지 않고 syslog 서버에 대한 MAC 기반 전달을 수행합니다.

NetScaler에서 전달된 패킷을 수신하려면 syslog 서버에도 이 VIP 주소가 있어야 합니다. 이 주소는 와 lo같은 모든 내부 인터페이스에 할당될 수 있습니다 dummy0.

ip addr add 10.10.0.15/32 dev lo

eth0그리고 이를 방지하려면 들어오는 인터페이스에 일부 sysctls를 설정해야 합니다(여기서 가정합니다 ).VIP ARP 문제(바라보다6.7.치료: 2.6.x 커널 - arp_ignore/arp_announce). 다음을 추가 /etc/sysctl.conf하고 실행합니다 sysctl -p.

net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

arp_ignore/on 설정은 arp_announce아무 소용이 없습니다 lo.

DNAT 방법

NetScaler가 들어오는 트래픽에 대해 DNAT를 수행하는 경우 syslog 서버는 연결 추적 리소스를 확보할 수 있도록 반환 트래픽도 NetScaler로 전달해야 합니다. 이는 주소 변환을 수행하는 가장 자연스러운 방법입니다.

이 경우 syslog 서버의 정책 라우팅을 활용할 수 있습니다. 이 기능을 사용하면 "포트 514에서 나가는 TCP 패킷"과 같은 특정 조건에서 패킷에 특수 라우팅 테이블을 적용할 수 있습니다.

아래와 같이 Linux 고급 라우팅에 대한 HOWTO 문서가 있습니다. 나는 당신이 다음 지시사항을 이해하기 위해 다음에 나오는 미니 하우투(mini-HOWTO)를 읽어볼 것을 권한다.

VIP먼저 임의의 ID로 명명된 특수 라우팅 테이블을 정의합니다 /etc/iproute2/rt_tables.

1 VIP

VIP이 테이블 에 VIP(10.10.0.15)에 대한 기본 경로를 추가합니다 .

ip route add default via 10.10.0.15 table VIP

포트 514에서 전송된 TCP 패킷을 mangle표시하려면 iptables 테이블에 항목을 추가하세요.1

iptables -t mangle -A OUTPUT -p tcp --sport 514 -j MARK --set-mark 1

VIP표시가 있는 패킷의 라우팅 테이블을 찾는 규칙을 추가합니다 1.

ip rule add from all fwmark 1 table VIP

지금까지 정의된 규칙을 볼 수 있습니다 ip rule list. 규칙은 우선순위 값의 오름차순으로 처리됩니다(0이 가장 높은 우선순위).

# ip rule list
0:  from all lookup local 
32765:  from all fwmark 0x1 lookup VIP 
32766:  from all lookup main 
32767:  from all lookup default 

다음과 같이 각 라우팅 테이블의 내용을 검사할 수 있습니다.

# ip route ls table local
# ip route ls table VIP
# ip route ls table main

관련 정보