나는 여러 이더넷 포트(DHCP를 포함한 다양한 서버 작업을 수행함)와 각 포트에 LAN이 있는 Debian/Squeeze를 실행하는 상시 가동 컴퓨터를 가지고 있습니다.
eth0은 192.168.7.*에 있으며 192.168.7.1에 있는 LAN의 게이트웨이(NAT 변환 DSL 라우터)를 통해 인터넷(및 나머지 "사무실 LAN")에 액세스할 수 있습니다.
eth1은 192.168.1.*에 있습니다. 나는 192.168.1.* LAN의 모든 사람이 외부 인터넷, DHCP에만 액세스할 수 있고 192.168.1.* LAN의 다른 모든 것에 액세스할 수 있도록 시스템을 구성하는 빠르고 쉽고 데비안 친화적인 방법을 찾고 있습니다. 192.168.7.*.
적절한 iptables 규칙 세트를 사용하면 가능하다고 확신합니다. 의심되는 사람은 다음 중 하나를 찾고 있습니다.
- 위의 목표를 달성하기 위해 iptables를 설정하는 방법에 대한 간단한 가이드입니다(이 작업을 수행하려는 첫 번째 사람은 아닙니다).
- 이를 수행할 수 있는 사용자 친화적인 방화벽 구성 소프트웨어를 지적했습니다(비록 eth0 끝과 192.168.7.* 네트워크를 전혀 잠그고 싶지 않다는 점에 유의하십시오).
- 이를 위해 특별히 설계된 소프트웨어를 제안하십시오. 인터넷 카페 등에 대해 내가 원하는 것과 유사한 기능을 달성하도록 설계된 일부 패키지가 있다는 생각이 있지만 어디서부터 찾아야할지 또는 이러한 패키지가 과잉인지 잘 모르겠습니다. .
Debian Squeeze(또는 Wheezy)의 모든 도구는 이미 큰 이점을 갖고 있습니다.
답변1
이는 iptables를 사용하여 쉽게 수행할 수 있습니다. 아래에서 "wan-iface"는 WAN 연결이 설정된 인터페이스입니다. 연결된 방법에 따라 eth2, ppp0 등이 될 수 있습니다. 또한 편집을 통해 이더넷 인터페이스의 이름을 바꿀 수 있습니다 /etc/udev/rules.d/70-persistent-net.rules
. 이는 이더넷 인터페이스가 여러 개 있을 때 적극 권장됩니다. -i lan
그것보다 훨씬 더 명확합니다 -i eth0
.
init.d 스크립트를 작성하여 시작 시 이러한 규칙을 적용하거나 iptables-pertant 패키지를 사용할 수 있습니다. 또는 다양한 방화벽 규칙 생성기를 패키지화했습니다(저는 종종 이상한 작업을 수행하고 싶기 때문에 개인적으로 iptables 규칙을 직접 작성합니다).
기존 규칙에 아직 적용되지 않은 경우 NAT 규칙이 필요합니다.
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o wan-iface -j SNAT --to-source external-ip
external-ip는 실제 IP 주소입니다. 동적 항목이 있는 경우 행을 다음으로 변경합니다.
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o wan-iface -j MASQUERADE
그런 다음 트래픽을 허용하려면 방화벽 규칙이 필요합니다. 기본 전달이 DROP인지 여부에 따라 여기에 두 가지를 제공합니다. 그것~해야 한다떨어지겠지만...
iptables -A FORWARD -i eth1 -o wan-iface -j ACCEPT # default is drop
iptables -A FORWARD -i eth1 ! -o wan-iface -j DROP # default is accept
이제 DHCP를 허용하기만 하면 됩니다. 방화벽이 DHCP를 실행하고 있고 DNS가 WAN에 있다고 가정합니다(그렇지 않으면 방화벽이 DNS 서버와 통신하도록 허용해야 함).
iptables -A INPUT -i eth1 -p udp --dport bootps -j ACCEPT
iptables -A INPUT -i eth0 -j DROP # only if your default isn't drop
나는 이것이 최소한의 구성이라고 생각합니다. 인터넷 트래픽을 제한할 수도 있습니다. 예를 들어, 위의 FORWARD 규칙 대신 웹을 탐색하려는 경우 다음을 수행할 수 있습니다(역시 WAN의 DNS를 가정).
iptables -A FORWARD -i eth1 -o wan-iface -p tcp --dport domain -j ACCEPT
iptables -A FORWARD -i eth1 -o wan-iface -p udp --dport domain -j ACCEPT
iptables -A FORWARD -i eth1 -o wan-iface -p tcp --dport http -j ACCEPT
iptables -A FORWARD -i eth1 -o wan-iface -p tcp --dport https -j ACCEPT
iptables -A FORWARD -i eth1 -j DROP # only if default is accept
위에서는 도메인(DNS의 경우 TCP 및 UDP), http(TCP) 및 https(TCP)의 세 가지 포트가 허용됩니다.
편집하다:
설명을 위해:
현재 이 상자에는 NAT가 발생하지 않는 것 같습니다. 또한 WAN 인터페이스가 없으며 트래픽은 LAN을 통해 흐릅니다. 최상의 설정은 아니지만 실행 가능합니다.
LAN(eth0)에 있는 데비안 컴퓨터의 IP 주소를 의미하기 위해 "lan-ip"를 사용하겠습니다. 게스트 네트워크(eth1)에 있는 동일한 상자의 IP 주소를 의미하기 위해 "guest-ip"를 사용하겠습니다.
이 글을 쓰는 시점에서 나는 귀하의 인터페이스 이름이 혼란스럽기 때문에 귀하가 내 조언을 받아들여 인터페이스 이름을 "lan"(eth0) 및 "guest"(eth1)로 변경했다고 가정합니다. 그렇지 않은 경우 찾기 및 바꾸기를 수행할 수 있습니다.
현재 이 컴퓨터에 라우팅이나 방화벽이 설정되어 있지 않은 것 같으므로 추가할 규칙뿐만 아니라 전체 규칙을 제공하겠습니다. 물론 더 추가해야 할 수도 있습니다.
IP 전달을 활성화해야 합니다(이렇게 하려면 /etc/sysctl.conf를 편집하십시오). 그리고 동일한 파일에서 역방향 경로 필터를 켜십시오.
eth1 네트워크에서 서비스를 제공하려면 DHCP를 구성해야 합니다. 제공되는 기본 게이트웨이(eth1 게스트 네트워크에만 해당)는 guest-ip여야 합니다.아니요192.168.7.1.
NAT 규칙은 약간 다르게 보입니다. 안하고 192.168.7.1에서 하면 더 좋겠지만 그건 불가능할 것 같습니다. 가능하다면 이 nat 규칙을 건너뛰고 7.1에 추가하고 lan-ip를 통해 192.168.1.0/24에 경로를 추가하세요.
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o lan -j SNAT --to-source lan-ip
이제 현재 방화벽이 설정되어 있지 않으므로 기본값은 거부입니다. 일반적으로 말하면 이것이 작업을 수행하는 가장 안전한 방법입니다.
iptables -P INPUT DROP # default for traffic to firewall (this box)
iptables -P FORWARD DROP # default for forwarded traffic
iptables -F # clear rules
iptables -X # delete custom chains
iptables -t nat -F # same, but for nat table
iptables -t nat -X
iptables -A INPUT -i lo -j ACCEPT # let the box talk to itself. Important.
이 시점에서는 상자에 완전히 접근할 수 없습니다. 당신이 원하는 것이 아닙니다. 다음 몇 가지 규칙으로 이 문제를 해결할 수 있습니다. 처음 두 개는 연결 추적을 설정하여 기존 연결에 속하거나 밀접하게 관련된 패킷을 허용합니다.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
이제 사무실 LAN에 있는 컴퓨터를 신뢰하고 해당 컴퓨터로부터의 모든 트래픽을 허용한다고 가정해 보겠습니다. 원하는 경우 이를 보다 제한적인 규칙으로 변경할 수 있습니다. FORWARD 규칙을 사용하면 게스트 네트워크의 컴퓨터에 액세스할 수 있습니다.~에서사무실 LAN. 필요하지 않은 경우 무시하십시오.
iptables -A INPUT -i lan -j ACCEPT
iptables -A FORWARD -i lan -o guest -j ACCEPT
이제 게스트 네트워크의 일부 트래픽을 허용하십시오. 먼저 DHCP를 허용해야 합니다.
iptables -A INPUT -i guest -p udp --dport bootps -j ACCEPT # dhcp
다음으로, 귀하는 귀하의 개인 네트워크에 대한 게스트 액세스를 허용하고 싶지 않다고 가정합니다. 따라서 모든 게스트 트래픽을 RFC1918(개인) 공간으로 삭제합니다.
iptables -A FORWARD -i guest -d 10.0.0.0/8 -j DROP
iptables -A FORWARD -i guest -d 172.16.0.0/12 -j DROP
iptables -A FORWARD -i guest -d 192.168.0.0/16 -j DROP
모든 개인 주소 공간을 제공했으므로 나머지는 공개됩니다. 그러니 허용하세요. 이 단어는 조금 무섭습니다. 이전 단어가 없으면 문제가 됩니다.
iptables -A FORWARD -i guest -o lan -j ACCEPT
물론 특정 프로토콜과 포트로 제한할 수도 있습니다(예: 웹 검색만 하는 경우).
삭제된 패킷 등을 기록하는 규칙을 추가할 수도 있습니다.