단순 라우터에서 iptables를 사용하여 WAN에서 들어오는 트래픽을 차단하면 나가는 트래픽이 종료됩니다(Ubuntu)

단순 라우터에서 iptables를 사용하여 WAN에서 들어오는 트래픽을 차단하면 나가는 트래픽이 종료됩니다(Ubuntu)

NAT 라우터 역할을 하는 간단한 Ubuntu 시스템에서 들어오는 트래픽을 삭제하는 데 문제가 있습니다.

지금까지 내가 한 일:

net.ipv4.ip_forward=1활성화 했습니다/etc/sysctl.conf

NAT를 활성화하려면 iptables에서 활성화합니다.

sudo iptables ! -o lo -t nat -A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE

좋습니다. 모든 것이 예상대로 작동합니다.

이제 WAN 인터페이스에서 들어오는 트래픽을 삭제하고 싶습니다. 그래서 나는 다음을 수행했습니다.

# SSH still allowed
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT )

그런 다음:

sudo iptables -A INPUT -i eth0 -j DROP

불행히도 마지막 명령은 시스템 자체의 모든 http 트래픽을 차단합니다. 나가는 트래픽은 더 이상 허용되지 않습니다. NAT 시스템에서는 여전히 작동합니다.

sudo iptables -A INPUT -i eth0 -j DROP 따라서 인터넷 트래픽만 차단하려는 경우 이 규칙은 잘못된 것 같습니다.

답변1

(tcp) 연결은 양방향으로 데이터를 전송한다는 점을 기억하세요. 간단한 명령에는 다음이 curl google.com포함됩니다.

  • DNS 서버 쿼리
  • DNS 서버로부터 응답 받기
  • 원격 웹사이트에 HTTP 요청 보내기
  • 원격 웹사이트로부터 HTTP 응답 수신

모든 수신 트래픽 차단을 사용하면 -A INPUT -i eth0 -j DROP모든 트랜잭션의 "수신..." 부분이 차단됩니다. 최소한 ESTABLISHED연결과 관련된 트래픽을 허용해야 합니다. 현재 수행 중인 작업에 대해 간단한 방화벽은 다음과 같습니다.

# Allow RELATED and ESTABLISHED traffic
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow ICMP traffic
-A INPUT -p icmp -j ACCEPT

# Allow all traffic on lo. This isn't strictly necessary for what you're
# doing, but it helps avoid shooting yourself in the foot later
# on.
-A INPUT -i lo -j ACCEPT

# Allow new ssh connections
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

# Reject anything else coming in on eth0. You could use
# DROP here if you prefer.
-A INPUT -i eth0 -j REJECT --reject-with icmp-host-prohibited

(이것은 Fedora의 패키지에서 생성된 기본 방화벽 규칙 세트입니다 iptables-services.)

관련 정보