From b17aefd1486c2b3a4bc7651e8d93129f2964ff81 Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Sat, 10 Mar 2018 15:48:17 +0100 Subject: [PATCH] Implemented ACLs for only allowing communication with Streepass IPs. --- firewall.txt | 18 ++++++++++++ firmware/0x00000.bin | Bin 36240 -> 37312 bytes firmware/0x10000.bin | Bin 231972 -> 231988 bytes user/config_flash.c | 68 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+) diff --git a/firewall.txt b/firewall.txt index 6d9ea93..7848da9 100644 --- a/firewall.txt +++ b/firewall.txt @@ -12,3 +12,21 @@ acl from_sta UDP any any any 53 allow # Deny everything else acl from_sta IP any any deny + +# Streetpass relay whitelist +# From https://github.com/Pinchie/RaspiPass/blob/master/raspi_secure/iptables.sh +52.43.174.40 +104.70.153.178 +104.74.48.110 +23.7.18.146 +23.7.24.35 +52.11.210.152 +52.25.179.65 +52.89.56.205 +54.148.137.96 +54.218.98.74 +54.218.99.79 +54.244.22.201 +69.25.139.140 +192.195.204.216 +52.10.249.207 diff --git a/firmware/0x00000.bin b/firmware/0x00000.bin index 0948abfcd9083f95bfad2cc3c0004540ca894761..76e17fbf0c7c3466426cf2e15a8eb31dcc020937 100644 GIT binary patch delta 5477 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 delta 4313 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 *B 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 V0BV%jZ;GAqiy7Lz579gN{{n5^dO83A diff --git a/user/config_flash.c b/user/config_flash.c index ede4ec8..5dbadb6 100644 --- a/user/config_flash.c +++ b/user/config_flash.c @@ -72,6 +72,74 @@ config_load_default(sysconfig_p config) ets_str2macaddr(config->mac_list[13], "4E:53:50:4F:4F:4D"); ets_str2macaddr(config->mac_list[14], "4E:53:50:4F:4F:4E"); ets_str2macaddr(config->mac_list[15], "4E:53:50:4F:4F:4F"); + + // Streetpass relay whitelist + uint32_t daddr; + uint32_t dmask; + + // Clear all acl rules + acl_clear(0); + acl_clear(1); + acl_clear(2); + acl_clear(3); + + // Whitelist broadcast to enable DHCP + parse_IP_addr("255.255.255.255", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + // Whitelist DNS + acl_add(0, 0, 0, 0, 0, IP_PROTO_UDP, 0, 53, ACL_ALLOW); + + // Whitelist Streetpass relays + // acl from_sta IP any 52.43.174.40 allow + parse_IP_addr("52.43.174.40", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + parse_IP_addr("104.70.153.178", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + parse_IP_addr("104.74.48.110", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + parse_IP_addr("23.7.18.146", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + parse_IP_addr("23.7.24.35", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + parse_IP_addr("52.11.210.152", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + parse_IP_addr("52.25.179.65", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + parse_IP_addr("52.89.56.205", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + parse_IP_addr("54.148.137.96", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + parse_IP_addr("54.218.98.74", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + parse_IP_addr("54.218.99.79", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + parse_IP_addr("54.244.22.201", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + parse_IP_addr("69.25.139.140", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + parse_IP_addr("192.195.204.216", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + parse_IP_addr("52.10.249.207", &daddr, &dmask); + acl_add(0, 0, 0, daddr, dmask, 0, 0, 0, ACL_ALLOW); + + // Default implementation denies everything not matched above. + // This last rule is not necessary and commented out to save memory space: + // acl_add(0, 0, 0, 0, 0, 0, 0, 0, ACL_DENY); } int