Path: blob/main/tests/sys/mac/ipacl/ipacl_test.sh
103904 views
#-1# Copyright (c) 2019, 2023 Shivank Garg <[email protected]>2#3# This code was developed as a Google Summer of Code 2019 project4# under the guidance of Bjoern A. Zeeb.5#6# Redistribution and use in source and binary forms, with or without7# modification, are permitted provided that the following conditions8# are met:9# 1. Redistributions of source code must retain the above copyright10# notice, this list of conditions and the following disclaimer.11# 2. Redistributions in binary form must reproduce the above copyright12# notice, this list of conditions and the following disclaimer in the13# documentation and/or other materials provided with the distribution.14#15# THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE18# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF25# SUCH DAMAGE.26#2728. $(atf_get_srcdir)/utils.subr2930atf_test_case "ipacl_v4" "cleanup"3132ipacl_v4_head()33{34atf_set descr 'basic test for ipacl on IPv4 addresses'35atf_set require.user root36}3738ipacl_v4_body()39{40ipacl_test_init4142prev_ipacl_ipv4="$(sysctl -n security.mac.ipacl.ipv4)"43prev_ipacl_rules="$(sysctl -n security.mac.ipacl.rules)"4445epairA=$(vnet_mkepair)46epairB=$(vnet_mkepair)47epairC=$(vnet_mkepair)4849vnet_mkjail A ${epairA}b50vnet_mkjail B ${epairB}b ${epairC}b5152jidA=$(jls -j A -s jid | grep -o -E '[0-9]+')53jidB=$(jls -j B -s jid | grep -o -E '[0-9]+')5455# The ipacl policy module is not enforced for IPv4.56sysctl security.mac.ipacl.ipv4=05758atf_check -s exit:0 -e ignore \59jexec A ifconfig ${epairA}b 192.0.2.2/24 up60atf_check -s exit:0 -e ignore \61jexec A ifconfig ${epairA}b 203.0.113.254/24 up6263# The ipacl policy module is enforced for IPv4 and prevent all64# jails from setting their IPv4 address.65sysctl security.mac.ipacl.ipv4=166sysctl security.mac.ipacl.rules=6768atf_check -s not-exit:0 -e ignore \69jexec A ifconfig ${epairA}b 192.0.2.2/24 up70atf_check -s not-exit:0 -e ignore \71jexec A ifconfig ${epairA}b 203.0.113.254/24 up7273rule="${jidA},1,${epairA}b,AF_INET,192.0.2.42/-1@"74rule="${rule}${jidB},1,${epairB}b,AF_INET,198.51.100.12/-1@"75rule="${rule}${jidB},1,,AF_INET,203.0.113.1/24@"76rule="${rule}${jidB},0,,AF_INET,203.0.113.9/-1"77sysctl security.mac.ipacl.rules="${rule}"7879# Verify if it allows jail to set only certain IPv4 address.80atf_check -s exit:0 -e ignore \81jexec A ifconfig ${epairA}b 192.0.2.42/24 up82atf_check -s not-exit:0 -e ignore \83jexec A ifconfig ${epairA}b 192.0.2.43/24 up84atf_check -s exit:0 -e ignore \85jexec B ifconfig ${epairB}b 198.51.100.12/24 up86atf_check -s not-exit:0 -e ignore \87jexec B ifconfig ${epairC}b 198.51.100.12/24 up8889# Verify if the module allow jail to set any address in subnet.90atf_check -s exit:0 -e ignore \91jexec B ifconfig ${epairB}b 203.0.113.19/24 up92atf_check -s exit:0 -e ignore \93jexec B ifconfig ${epairB}b 203.0.113.241/24 up94atf_check -s not-exit:0 -e ignore \95jexec B ifconfig ${epairB}b 198.18.0.1/24 up96atf_check -s not-exit:0 -e ignore \97jexec B ifconfig ${epairB}b 203.0.113.9/24 up9899# Check wildcard for interfaces.100atf_check -s exit:0 -e ignore \101jexec B ifconfig ${epairC}b 203.0.113.20/24 up102atf_check -s exit:0 -e ignore \103jexec B ifconfig ${epairC}b 203.0.113.242/24 up104atf_check -s not-exit:0 -e ignore \105jexec B ifconfig ${epairC}b 198.18.0.1/24 up106atf_check -s not-exit:0 -e ignore \107jexec B ifconfig ${epairC}b 203.0.113.9/24 up108109rule="${jidA},1,,AF_INET,198.18.0.0/15@"110rule="${rule}${jidA},0,,AF_INET,198.18.23.0/24@"111rule="${rule}${jidA},1,,AF_INET,198.18.23.1/-1@"112rule="${rule}${jidA},1,,AF_INET,198.51.100.0/24@"113rule="${rule}${jidA},0,,AF_INET,198.51.100.100/-1"114sysctl security.mac.ipacl.rules="${rule}"115116# Tests from Benchamarking and Documentation(TEST-NET-3).117atf_check -s exit:0 -e ignore \118jexec A ifconfig ${epairA}b 198.18.0.1/24 up119atf_check -s not-exit:0 -e ignore \120jexec A ifconfig ${epairA}b 198.18.23.2/24 up121atf_check -s exit:0 -e ignore \122jexec A ifconfig ${epairA}b 198.18.23.1/22 up123atf_check -s not-exit:0 -e ignore \124jexec A ifconfig ${epairA}b 198.18.23.3/24 up125126atf_check -s exit:0 -e ignore \127jexec A ifconfig ${epairA}b 198.51.100.001/24 up128atf_check -s exit:0 -e ignore \129jexec A ifconfig ${epairA}b 198.51.100.254/24 up130atf_check -s not-exit:0 -e ignore \131jexec A ifconfig ${epairA}b 198.51.100.100/24 up132atf_check -s not-exit:0 -e ignore \133jexec A ifconfig ${epairA}b 203.0.113.1/24 up134135# Reset sysctls.136sysctl security.mac.ipacl.rules="${prev_ipacl_rules}"137sysctl security.mac.ipacl.ipv4="${prev_ipacl_ipv4}"138}139140ipacl_v4_cleanup()141{142ipacl_test_cleanup143}144145atf_test_case "ipacl_v6" "cleanup"146147ipacl_v6_head()148{149atf_set descr 'basic test for ipacl on IPv6 addresses'150atf_set require.user root151}152153ipacl_v6_body()154{155ipacl_test_init156157prev_ipacl_ipv6="$(sysctl -n security.mac.ipacl.ipv6)"158prev_ipacl_rules="$(sysctl -n security.mac.ipacl.rules)"159160epairA=$(vnet_mkepair)161epairB=$(vnet_mkepair)162epairC=$(vnet_mkepair)163164vnet_mkjail A ${epairA}b165vnet_mkjail B ${epairB}b ${epairC}b166167jidA=$(jls -j A -s jid | grep -o -E '[0-9]+')168jidB=$(jls -j B -s jid | grep -o -E '[0-9]+')169170# The ipacl policy module is not enforced for IPv6.171sysctl security.mac.ipacl.ipv6=0172173atf_check -s exit:0 -e ignore \174jexec A ifconfig ${epairA}b inet6 2001:2::abcd/48 up175atf_check -s exit:0 -e ignore \176jexec A ifconfig ${epairA}b inet6 2001:2::5ea:11/48 up177178# The ipacl policy module is enforced for IPv6 and prevent all179# jails from setting their IPv6 address.180sysctl security.mac.ipacl.ipv6=1181sysctl security.mac.ipacl.rules=182183atf_check -s not-exit:0 -e ignore \184jexec A ifconfig ${epairA}b inet6 2001:2::abcd/48 up185atf_check -s not-exit:0 -e ignore \186jexec A ifconfig ${epairA}b inet6 2001:2::5ea:11/48 up187188rule="${jidA},1,${epairA}b,AF_INET6,2001:db8::1111/-1@"189rule="${rule}${jidB},1,${epairB}b,AF_INET6,2001:2::1234:1234/-1@"190rule="${rule}${jidB},1,,AF_INET6,fe80::/32@"191rule="${rule}${jidB},0,,AF_INET6,fe80::abcd/-1"192sysctl security.mac.ipacl.rules="${rule}"193194# Verify if it allows jail to set only certain IPv6 address.195atf_check -s exit:0 -e ignore \196jexec A ifconfig ${epairA}b inet6 2001:db8::1111/64 up197atf_check -s not-exit:0 -e ignore \198jexec A ifconfig ${epairA}b inet6 2001:db8::1112/64 up199atf_check -s exit:0 -e ignore \200jexec B ifconfig ${epairB}b inet6 2001:2::1234:1234/48 up201atf_check -s not-exit:0 -e ignore \202jexec A ifconfig ${epairA}b inet6 2001:2::1234:1234/48 up203204# Verify if the module allow jail set any address in subnet.205atf_check -s exit:0 -e ignore \206jexec B ifconfig ${epairB}b inet6 FE80::1101:1221/15 up207atf_check -s exit:0 -e ignore \208jexec B ifconfig ${epairB}b inet6 FE80::abab/15 up209atf_check -s exit:0 -e ignore \210jexec B ifconfig ${epairB}b inet6 FE80::1/64 up211atf_check -s not-exit:0 -e ignore \212jexec B ifconfig ${epairB}b inet6 FE80::abcd/15 up213214# Check wildcard for interfaces.215atf_check -s exit:0 -e ignore \216jexec B ifconfig ${epairC}b inet6 FE80::1101:1221/15 up217atf_check -s exit:0 -e ignore \218jexec B ifconfig ${epairC}b inet6 FE80::abab/32 up219atf_check -s not-exit:0 -e ignore \220jexec B ifconfig ${epairC}b inet6 FE81::1/64 up221atf_check -s not-exit:0 -e ignore \222jexec B ifconfig ${epairC}b inet6 FE80::abcd/32 up223224rule="${jidB},1,,AF_INET6,2001:2::/48@"225rule="${rule}${jidB},1,,AF_INET6,2001:3::/32"226sysctl security.mac.ipacl.rules="${rule}"227228# Tests when subnet is allowed.229atf_check -s not-exit:0 -e ignore \230jexec B ifconfig ${epairC}b inet6 2001:2:0001::1/64 up231atf_check -s not-exit:0 -e ignore \232jexec B ifconfig ${epairC}b inet6 2001:2:1000::1/32 up233atf_check -s exit:0 -e ignore \234jexec B ifconfig ${epairC}b inet6 2001:3:0001::1/64 up235atf_check -s not-exit:0 -e ignore \236jexec B ifconfig ${epairC}b inet6 2001:4::1/64 up237238# More tests of ULA address space.239rule="${jidA},1,,AF_INET6,fc00::/7@"240rule="${rule}${jidA},0,,AF_INET6,fc00::1111:2200/120@"241rule="${rule}${jidA},1,,AF_INET6,fc00::1111:2299/-1@"242rule="${rule}${jidA},1,,AF_INET6,2001:db8::/32@"243rule="${rule}${jidA},0,,AF_INET6,2001:db8::abcd/-1"244sysctl security.mac.ipacl.rules="${rule}"245246atf_check -s exit:0 -e ignore \247jexec A ifconfig ${epairA}b inet6 fc00::0000:1234/48 up248atf_check -s exit:0 -e ignore \249jexec A ifconfig ${epairA}b inet6 fc00::0000:1234/48 up250atf_check -s not-exit:0 -e ignore \251jexec A ifconfig ${epairA}b inet6 f800::2222:2200/48 up252atf_check -s not-exit:0 -e ignore \253jexec A ifconfig ${epairA}b inet6 f800::2222:22ff/48 up254255atf_check -s exit:0 -e ignore \256jexec A ifconfig ${epairA}b inet6 fc00::1111:2111/64 up257atf_check -s not-exit:0 -e ignore \258jexec A ifconfig ${epairA}b inet6 fc00::1111:2211/64 up259atf_check -s not-exit:0 -e ignore \260jexec A ifconfig ${epairA}b inet6 fc00::1111:22aa/48 up261atf_check -s exit:0 -e ignore \262jexec A ifconfig ${epairA}b inet6 fc00::1111:2299/48 up263264# More tests from IPv6 documentation range.265atf_check -s exit:0 -e ignore jexec A ifconfig \266${epairA}b inet6 2001:db8:abcd:bcde:cdef:def1:ef12:f123/32 up267atf_check -s exit:0 -e ignore jexec A ifconfig \268${epairA}b inet6 2001:db8:1111:2222:3333:4444:5555:6666/32 up269atf_check -s not-exit:0 -e ignore jexec A ifconfig \270${epairA}b inet6 2001:ab9:1111:2222:3333:4444:5555:6666/32 up271atf_check -s not-exit:0 -e ignore jexec A ifconfig \272${epairA}b inet6 2001:db8::abcd/32 up273274# Reset sysctls.275sysctl security.mac.ipacl.rules="${prev_ipacl_rules}"276sysctl security.mac.ipacl.ipv6="${prev_ipacl_ipv6}"277}278279ipacl_v6_cleanup()280{281ipacl_test_cleanup282}283284atf_init_test_cases()285{286atf_add_test_case "ipacl_v4"287atf_add_test_case "ipacl_v6"288}289290291