내 IoT 장치에 대한 보조 네트워크를 구성하려고 합니다. 몇 개의 장치만 인터넷에 액세스하도록 허용하고 나머지 장치는 해당 네트워크에 "감금"되어야 합니다. 또한 IoT 네트워크의 모든 장치는 기본 네트워크의 MQTT 서버에 액세스할 수 있어야 합니다.
내 설정은 다음과 같습니다.
- 펌웨어: DD-WRT v3.0-r34015M kongac (2017/12/09) -최신 버전이 무선 연결에 많은 문제를 일으키고 있습니다. 10분 후에도 Wi-Fi가 계속 끊어지며 이 문제를 해결하는 유일한 방법은 라우터를 다시 시작하는 것입니다.
- 하드웨어: 넷기어 R7000
내 네트워크 구성은 다음과 같습니다.
무선->기본 설정에서:
- VAP를 추가했어요
- 네트워크 구성: 브리지됨
- AP 격리: 비활성화됨
"설정" -> "VLAN"에서
- 포트 2 = VLAN15(브리지 할당 없음)
설정->네트워크에서
- 새로운 브리지 추가(br2)
- wl02 및 vlan15를 br2에 할당
- br2에 192.168.7.0/24 할당
- br2용 DHCP 서버 추가
설정->고급 라우팅에서
- br2를 통해 192.168.1.0/24에서 192.168.7.0/24로 경로를 추가했습니다.
방화벽 규칙을 추가하지 않으면 기본 네트워크에서 IoT 네트워크의 장치에 액세스할 수 있고, IoT 네트워크에 연결하려면 웹을 탐색하면 됩니다.
몇 가지 검색 후 다음 방화벽 규칙을 추가했습니다(dd-wrt가 항상 규칙 앞에 추가되는 것 같으므로 DROP을 먼저 입력해야 합니다).
iptables -I FORWARD -i br2 -j DROP
iptables -I FORWARD -i br2 -o br0 -d 192.168.1.38 -p tcp --dport 1883 -m state --state NEW -j ACCEPT
iptables -I FORWARD -i br0 -o br2 -m state --state NEW -j ACCEPT
그러므로,
- IoT -> 인터넷 = 거부됨
- 메인 -> IoT = 거부
- IoT->192.168.1.38:1883 = 거부됨
iptables에 뭔가 빠졌다고 확신하지만 무엇인지는 잘 모르겠습니다.
또한 다음을 추가한다고 가정하는 것이 안전합니다.
iptables -I FORWARD -i br2 -o br0 -s 192.168.7.5 -m state --state NEW -j ACCEPT
192.168.7.5가 인터넷에 접속할 수 있나요?
어떤 지침이라도 대단히 감사하겠습니다.
업데이트: 요청 명령의 출력(편집된 WAN IP 포함):
root@DD-WRT:~# ip -br link
root@DD-WRT:~# ip -4 -br address
root@DD-WRT:~# ip route
default via 73.70.220.1 dev vlan2
X.X.X.X/23 dev vlan2 proto kernel scope link src X.X.X.X
127.0.0.0/8 dev lo scope link
169.254.0.0/16 dev br0 proto kernel scope link src 169.254.255.1
172.16.0.0/24 via 172.16.0.1 dev vlan3
172.16.0.0/24 dev vlan3 proto kernel scope link src 172.16.0.3
192.168.1.0/24 via 192.168.1.1 dev br0 scope link
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.1
192.168.7.0/24 via 192.168.7.1 dev br2 scope link
192.168.7.0/24 dev br2 proto kernel scope link src 192.168.7.1
192.168.15.0/24 dev br1 proto kernel scope link src 192.168.15.1
root@DD-WRT:~# ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
답변1
첫 번째: -I
머리에 삽입하는 것을 의미합니다. 즉,접두사. -A
사용추가의마지막에. -A
이렇게 하지 않으면 실제로 예상대로 작동하지 않을 수 있습니다.반품이전에 배치되었을 수 있는 다른 iptables 규칙을 검토하세요. 그럼 계속해서 -I
but을 사용하고 나중에 줄 번호를 늘려서 삽입 위치를 선택하고 규칙을 일반적인 순서로 정렬해 보겠습니다.
귀하의 질문은 처리에 관한 것입니다.상태 저장규칙. conntrack은 NEW
첫 번째 패킷으로 스트리밍합니다. 모든 응답 패킷은 새로운 것이 아니지만 이 ESTABLISHED
상태를 시작합니다. 귀하의 규칙은 상태만 허용하므로 NEW
아무 것도 제대로 작동하지 않습니다.
이 답변에서 차선책/중복 규칙이 발생할 수 있는 다른 모든 규칙이나 네트워크 설정을 알지 못하지만 관계없이 작동해야 합니다.
udp
응답 및 관련(예: 오류 와 같은 도우미 모듈 icmp
또는 도우미 모듈의 데이터 ) 패킷을 허용하는 일반 규칙을 ftp
방향당 하나의 규칙으로 추가하는 것부터 시작하세요. 이러한 규칙은 정의에 따라 새 흐름이 항상 NEW
(OR이 아님 ESTABLISHED
) 별도의 흐름을 허용하지 않습니다. 따라서 상태 RELATED
만 신경 쓰면 됩니다 ( 대체되므로 사용 가능한 경우 사용해야 합니다. 그렇지 않으면 해당 문자열을 모두 다시 교체하면 됩니다 ).NEW
-m conntrack --ctstate
-m state --state
-m state --state
iptables -I FORWARD 1 -i br2 -o br0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD 2 -i br0 -o br2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
이제 새 흐름을 (만) 처리할 수 있습니다.
이전 규칙과 다음 규칙은 3가지 상태가 모두 포함된 하나의 규칙으로만 병합될 수 있거나 상태 확인이 전혀 불가능합니다. 왜냐하면 항상 이 3가지 상태 중 하나이기 때문입니다(예, 무효 제외)
iptables -I FORWARD 3 -i br0 -o br2 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD 4 -i br2 -o br0 -d 192.168.1.38 -p tcp --dport 1883 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD 5 -i br2 -j DROP
br0
마지막 질문에 대해서는 인터페이스에서 인터넷을 사용할 수 없기 때문에 작성하신 내용이 인터넷 액세스를 허용하는지 의심스럽습니다 . 공용 IP를 사용하는 인터페이스에서 사용할 수 있습니다. 이는 인터페이스가 무엇인지 몰라도 작동해야 하며, 지정하지 마세요(이전 명령 다음에 실행하거나 그에 따라 번호를 다시 정렬).iptables-save
그리고iptables-restore
당신의 친구입니다):
iptables -I FORWARD 5 -o br2 -d 192.168.7.5 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD 6 -i br2 -s 192.168.7.5 -m conntrack --ctstate NEW -j ACCEPT
그러나 질문에 추가된 누락된 정보는 확실히 도움이 될 것 입니다 ip -br link
: ip -4 -br address
; 그러면 보안을 저하시키지 않고 규칙이 더욱 일반화될 수 있습니다.ip route
ip rule
iptables-save
고쳐 쓰다:mac
MAC 주소와 일치하도록 일치시킵니다.
IP 대신 MAC 주소를 일치시킬 수 있습니다. 이 정보는 다음에만 사용할 수 있습니다.원천그리고 이는 올바른 네트워크에서만 의미가 있습니다. 따라서 -o br2
MAC을 일치시키는 데 사용할 수 없습니다. 위의 규칙 5를 보다 일반적인 규칙(보안상 여전히 괜찮음)으로 바꾸겠습니다. -R
사용바꾸다위의 규칙 5와 6을 조정하세요(다시 말하지만 iptables-save
매우 편리함).
iptables -R FORWARD 5 -o br2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -R FORWARD 6 -i br2 -m mac --mac-source 02:03:04:05:06:07 -m conntrack --ctstate NEW -j ACCEPT
마지막으로 다음을 얻습니다.
iptables -I FORWARD 1 -i br2 -o br0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD 2 -i br0 -o br2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD 3 -i br0 -o br2 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD 4 -d 192.168.1.38/32 -i br2 -o br0 -p tcp -m tcp --dport 1883 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD 5 -o br2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD 6 -i br2 -m mac --mac-source 02:03:04:05:06:07 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD 7 -i br2 -j DROP
다섯 번째는 두 번째 것의 상위 집합입니다. 왜냐하면 WAN 인터페이스가 아마도 규칙에 추가되어야 하기 때문이지만 잘 모르겠습니다.