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
.)