특정 포트에 대한 iptables 예외

특정 포트에 대한 iptables 예외

저는 iptables를 처음 사용하지만 오늘 raspian에서 간단한 대화를 구성했습니다.

# Always accept loopback traffic
/sbin/iptables -A INPUT -i lo -j ACCEPT

# Allow established connections, and those not coming from the outside
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -i tun0 -j ACCEPT
/sbin/iptables -A FORWARD -i tun0 -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow outgoing connections from the LAN side.
/sbin/iptables -A FORWARD -i eth2 -o tun0 -j ACCEPT

# Masquerade.
/sbin/iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

# Don't forward from the outside to the inside.
/sbin/iptables -A FORWARD -i tun0 -o tun0 -j REJECT

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward

보시다시피 저는 openvpn을 사용하고 트래픽을 터널 인터페이스로 리디렉션하고 있습니다. 예를 들어 포트 범위 900~999 및 소스 192.168.1.5를 제외하고 인터페이스 eth1로 직접 전송하고 VPN 암호화를 방지하는 예외를 만들고 싶습니다.

어떻게 그런 규칙을 만들 수 있나요?

귀하의 의견에 진심으로 감사드립니다.

편집 : 나는 다음과 같은 것을 시도했습니다

iptables -t nat -A POSTROUTING -p tcp --dport 900:999 --out-interface eth1 -j MASQUERADE

하지만 원하는 효과는 없는 것 같습니다...

답변1

각 특정 트래픽 흐름에 대한 라우팅 테이블을 설정하려면 정책 라우팅이 필요합니다. 깔끔하고 좋은 예를 찾았어요Linux 고급 라우팅 미니 가이드.

다음 줄을 입력하세요 /etc/iproute2/rt_tables.

1 DIRECT

그러면 다음과 같이 할 수 있습니다:

iptables -t mangle -A PREROUTING -p tcp --dport 900:999 -j MARK --set-mark 1
ip route add default via <gateway address> dev eth1 table DIRECT
ip rule add from all fwmark 1 table DIRECT
ip rule add from 192.168.1.5/32 table DIRECT

답변2

당신의 도움으로 나는 이 문제를 해결할 수 있었습니다. eth1에서 들어오고 나가는 규칙을 추가하고 규칙을 추가하는 대신 PREROUTING 조건을 IP 192.168.1.5에만 일치하도록 변경해야 합니다. 192.168.1.5/32 테이블 DIRECT의 IP 규칙 추가를 사용하는 라우팅 방법은 192.168.1.5의 모든 트래픽이 포트 900-999만 통과하는 대신 eth1을 통과하도록 합니다. 최종 구성은 다음과 같습니다.

# Always accept loopback traffic
/sbin/iptables -A INPUT -i lo -j ACCEPT

# Allow established connections, and those not coming from the outside
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -i tun0 -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT
/sbin/iptables -A FORWARD -i tun0 -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow outgoing connections from the LAN side.
/sbin/iptables -A FORWARD -i eth2 -o tun0 -j ACCEPT
/sbin/iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT

# Masquerade.
/sbin/iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

# Don't forward from the outside to the inside.
/sbin/iptables -A FORWARD -i tun0 -o tun0 -j REJECT

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward

# Port exceptions
# Added -s for source address 192.168.1.5 here
iptables -t mangle -A PREROUTING -s 192.168.1.5 -p tcp --dport 900:999 -j MARK --set-mark 1

ip route add default via 192.168.2.1 dev eth1 table DIRECT
ip rule add from all fwmark 1 table DIRECT

도움을 주셔서 다시 한번 감사드립니다.

관련 정보