얼마 후 IPv6 주소의 서버 연결이 끊어지는 문제가 발생했는데, 이는 기본 정책에 의해 DHCPv6 클라이언트 패킷(포트 546)이 삭제되었기 때문인 INPUT
것으로 밝혀졌습니다 DROP
.이것이 문제에 대한 내 질문은 다음과 같습니다. 내 규칙은 다음과 같습니다.
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -s IP_OF_ANOTHER_HOST -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-P INPUT DROP
이 규칙이면 충분하다고 생각합니다. 특히 내 체인 의 기본 정책은 허용 RELATED
및 연결이므로 DHCPv6 클라이언트 패킷을 허용하려면 다음 규칙을 추가해야 합니다.ESTABLISHED
OUTPUT
ACCEPT
-A INPUT -m conntrack --ctstate NEW -m udp -p udp --dport 546 -d fe80::/64 -j ACCEPT
문제는 필요하지 않은 규칙을 더 추가하고 싶지 않고 규칙을 최대한 단순하게 유지하고 싶다는 것입니다.
그렇다면 IPv6가 제대로 작동하기 위해 설정해야 할 기본 규칙은 무엇입니까? DHCPv6 서버 포트 547도 활성화해야 합니까? 모든 ICMPv6 패킷을 허용할 수 있습니까?
답변1
기본 규칙은 네트워크에 따라 달라집니다. 네트워크는 DHCPv6 대신 SLAAC를 사용할 수도 있고 터널링, ICMP 처리 등에 따라 다른 문제가 발생할 수도 있습니다.
-A INPUT -m conntrack --ctstate NEW -m udp -p udp --dport 546 -d fe80::/64 -j ACCEPT
DHCPv6 클라이언트에 적용됩니다. DHCP 클라이언트는 DHCP 서버가 아닐 수 있으므로 서버 포트 547 트래픽을 허용해서는 안 됩니다. 패킷은 DHCP 서버의 포트 547에서 클라이언트의 포트 546으로 전송됩니다. 클라이언트가 브로드캐스트(또는 실제로 IPv6에서 멀티캐스트)하고 서버가 클라이언트가 응답하기 위해 브로드캐스트한 위치와 관련 없는 주소에서 브로드캐스트하기 때문에 연결 추적이 적용되지 않습니다.
root
포트에서 수신 대기해야 하므로 <1024
클라이언트 시스템의 임의 사용자가 기본적으로 악성 서비스를 시작해서는 안 되기 때문에 상당히 안전합니다 (DoS 네트워크 액세스가 가능할까요?). fe80
링크 로컬 트래픽이므로 다른 서브넷의 원격 악의적인 사용자는 트래픽을 해당 포트로 라우팅할 수 없어야 합니다. (서브넷에 악의적인 사용자가 있는 경우 네트워크 사용과 같이 처리해야 할 다른 더 중요한 문제가 있을 수 있습니다) 장비는 불량 DHCP 서버로부터 보호됩니다).
ICMPv6은 허용 또는 거부하려는 항목에 따라 매우 복잡해질 수 있지만 이는 간단한 IPv6 클라이언트에 대한 연결 추적 기본값을 사용하여 처리할 수 있습니다. 바라보다RFC 4443그리고RFC 4890자세한 내용은.
답변2
ufw(Ubuntu에서 만든 방화벽)에서 예제를 찾아봤습니다. ICMP와 DHCP를 모두 허용하면 걱정할 것이 없는 것 같습니다.
https://git.launchpad.net/ufw/tree/conf/before6.rules?id=release/0.35
thrig가 지적했듯이 살펴볼 다양한 ICMP 코드가 있는 것 같습니다. 현재 규칙에서는 모든 ICMP를 허용하여 이를 방지합니다. 이 접근 방식의 매력을 확실히 알 수 있습니다.
불행히도 ufw는 이에 대한 참고 자료로서 전적으로 도움이 되지 않습니다. 예 packet-too-big
를 들어 RELATED가 승인하지 않는 이유는 증명되지 않습니다 . 그러나 이는 RFC4890의 iptables6 기본값에 대한 합리적인 소스인 것 같습니다.
RFC4890실제로 "중요한 보안 위험"이 있는 것으로 언급되는 ICMP 유형은 "리디렉션(유형 137)"입니다. ICMP 리디렉션은 최적으로 구성되지 않은 여러 개의 독립 라우터가 있는 로컬 네트워크에서만 유용합니다. 리디렉션 처리는 필수는 아니지만 네트워크를 최대한 효율적으로 사용하지는 않습니다. ufw는 명시적으로 리디렉션을 허용하지 않습니다. 이를 바탕으로 ICMP 리디렉션을 허용하지 않고 대부분 또는 모든 ICMP를 허용하는 것이 합리적이라고 생각합니다.
# ok icmp codes for INPUT (rfc4890, 4.4.1 and 4.4.2)
-A ufw6-before-input -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
# codes 0 and 1
-A ufw6-before-input -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT
# codes 0-2
-A ufw6-before-input -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type echo-request -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type echo-reply -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type router-solicitation -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type neighbor-solicitation -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type neighbor-advertisement -m hl --hl-eq 255 -j ACCEPT
# IND solicitation
-A ufw6-before-input -p icmpv6 --icmpv6-type 141 -m hl --hl-eq 255 -j ACCEPT
# IND advertisement
-A ufw6-before-input -p icmpv6 --icmpv6-type 142 -m hl --hl-eq 255 -j ACCEPT
# MLD query
-A ufw6-before-input -p icmpv6 --icmpv6-type 130 -s fe80::/10 -j ACCEPT
# MLD report
-A ufw6-before-input -p icmpv6 --icmpv6-type 131 -s fe80::/10 -j ACCEPT
# MLD done
-A ufw6-before-input -p icmpv6 --icmpv6-type 132 -s fe80::/10 -j ACCEPT
# MLD report v2
-A ufw6-before-input -p icmpv6 --icmpv6-type 143 -s fe80::/10 -j ACCEPT
# SEND certificate path solicitation
-A ufw6-before-input -p icmpv6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT
# SEND certificate path advertisement
-A ufw6-before-input -p icmpv6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT
# MR advertisement
-A ufw6-before-input -p icmpv6 --icmpv6-type 151 -s fe80::/10 -m hl --hl-eq 1 -j ACCEPT
# MR solicitation
-A ufw6-before-input -p icmpv6 --icmpv6-type 152 -s fe80::/10 -m hl --hl-eq 1 -j ACCEPT
# MR termination
-A ufw6-before-input -p icmpv6 --icmpv6-type 153 -s fe80::/10 -m hl --hl-eq 1 -j ACCEPT
# ok icmp codes for OUTPUT (rfc4890, 4.4.1 and 4.4.2)
-A ufw6-before-output -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
-A ufw6-before-output -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
# codes 0 and 1
-A ufw6-before-output -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT
# codes 0-2
-A ufw6-before-output -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type echo-request -j ACCEPT
-A ufw6-before-input -p icmpv6 --icmpv6-type echo-reply -j ACCEPT
-A ufw6-before-output -p icmpv6 --icmpv6-type router-solicitation -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p icmpv6 --icmpv6-type neighbor-advertisement -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p icmpv6 --icmpv6-type neighbor-solicitation -m hl --hl-eq 255 -j ACCEPT
-A ufw6-before-output -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT
# IND solicitation
-A ufw6-before-output -p icmpv6 --icmpv6-type 141 -m hl --hl-eq 255 -j ACCEPT
# IND advertisement
-A ufw6-before-output -p icmpv6 --icmpv6-type 142 -m hl --hl-eq 255 -j ACCEPT
# MLD query
-A ufw6-before-output -p icmpv6 --icmpv6-type 130 -s fe80::/10 -j ACCEPT
# MLD report
-A ufw6-before-output -p icmpv6 --icmpv6-type 131 -s fe80::/10 -j ACCEPT
# MLD done
-A ufw6-before-output -p icmpv6 --icmpv6-type 132 -s fe80::/10 -j ACCEPT
# MLD report v2
-A ufw6-before-output -p icmpv6 --icmpv6-type 143 -s fe80::/10 -j ACCEPT
# SEND certificate path solicitation
-A ufw6-before-output -p icmpv6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT
# SEND certificate path advertisement
-A ufw6-before-output -p icmpv6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT
# MR advertisement
-A ufw6-before-output -p icmpv6 --icmpv6-type 151 -s fe80::/10 -m hl --hl-eq 1 -j ACCEPT
# MR solicitation
-A ufw6-before-output -p icmpv6 --icmpv6-type 152 -s fe80::/10 -m hl --hl-eq 1 -j ACCEPT
# MR termination
-A ufw6-before-output -p icmpv6 --icmpv6-type 153 -s fe80::/10 -m hl --hl-eq 1 -j ACCEPT
# ok icmp codes for FORWARD (rfc4890, 4.3.1)
-A ufw6-before-forward -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
-A ufw6-before-forward -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
# codes 0 and 1
-A ufw6-before-forward -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT
# codes 0-2
-A ufw6-before-forward -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT
-A ufw6-before-forward -p icmpv6 --icmpv6-type echo-request -j ACCEPT
-A ufw6-before-forward -p icmpv6 --icmpv6-type echo-reply -j ACCEPT
# ok icmp codes for FORWARD (rfc4890, 4.3.2)
# Home Agent Address Discovery Reques
-A ufw6-before-input -p icmpv6 --icmpv6-type 144 -j ACCEPT
# Home Agent Address Discovery Reply
-A ufw6-before-input -p icmpv6 --icmpv6-type 145 -j ACCEPT
# Mobile Prefix Solicitation
-A ufw6-before-input -p icmpv6 --icmpv6-type 146 -j ACCEPT
# Mobile Prefix Advertisement
-A ufw6-before-input -p icmpv6 --icmpv6-type 147 -j ACCEPT
(ICMP 규칙 종료)
# allow dhcp client to work
-A ufw6-before-input -p udp -s fe80::/10 --sport 547 -d fe80::/10 --dport 546 -j ACCEPT
로컬 네트워크에서 avahi로 무엇이든 하고 싶다면 다음을 수행해야 합니다. 네트워크 서비스 정책이 포함된 여러 인기 배포판은 avahi를 신뢰할 수 있다고 간주하며 기본적으로 네트워크를 수신할 수 있습니다.
# allow MULTICAST mDNS for service discovery
-A ufw6-before-input -p udp -d ff02::fb --dport 5353 -j ACCEPT
UPnP는 때때로 클라이언트 컴퓨터에서 유용할 수 있지만 복잡하고 어떤 이점도 들어본 적이 없습니다.
# allow MULTICAST UPnP for service discovery
-A ufw6-before-input -p udp -d ff02::f --dport 1900 -j ACCEPT