Se você encontrar a mensagem de erro “No module called Mininet” durante o processo de instalação, mesmo com o Mininet já instalado em seu sistema, execute os seguintes comandos para resolver o problema:
sudo -i
cd ~
git clone https://github.com/mininet/mininet.git
export PYTHONPATH=$PYTHONPATH:$HOME/mininet
O Kytos-ng é o controlador SDN que será usado junto com o mnsec para criar e gerenciar conexões entre componentes de rede, além de realizar outras funções. Ele pode ser ativado de diferentes formas. Cada um dos processos descritos abaixo deve ser executado em terminais separados.
⚠️ Os passos 1 e 3 não são necessários se o usuário utilizar a topologia definida no arquivo firewall.py. Eles são necessários para ativar o Kytos-ng e permitir seu uso como controlador remoto e estabelecer conexões entre componentes de rede (ativação do NOS) no caso de usar uma topologia personalizada.
source test_env/bin/activate
cd teste
cd kytos
sudo ./docker/scripts/add-etc-hosts.sh
export MONGO_USERNAME=mymongouser
export MONGO_PASSWORD=mymongopass
docker compose up -d
docker ps
kytosd -f --database mongodb
É importante usar o modo root ao executar esses comandos. O mnsec pode ser usado com topologias predefinidas, por exemplo:
cd mininet-sec
cd examples
python3 firewall.py
Nesta topologia, temos 3 hosts internos (h1, h2, h3), 1 servidor externo (o1), 2 servidores (srv1, srv2), 3 switches (s1, s2, nettap1) e um firewall (fw0).
Esta é a rede estabelecida:
fw0 fw0-eth0:s1-eth4 fw0-eth1:s2-eth3 fw0-eth2:nettap1-eth1
h1 h1-eth0:s1-eth1
h2 h2-eth0:s1-eth2
h3 h3-eth0:s1-eth3
o1 o1-eth0:nettap1-eth2
srv1 srv1-eth0:s2-eth1
srv2 srv2-eth0:s2-eth2
O Nettap1 é um switch que promove a conexão entre os componentes internos da rede e a internet através da interface fw0-eth2 do firewall. Ele também usa a interface nettap1-eth2 para conectar-se ao host o1. Além disso, existem interfaces que promovem a conexão do firewall com a internet:
mnsec --topo linear,3 --apps h3:ssh:port=22,h3:http:port=80,h3:ldap,h3:smtp,h3:imap,h3:pop3 --controller=remote,ip=127.0.0.1
Neste caso, estamos criando uma topologia linear com 3 hosts (h1, h2, h3), e o h3 tem algumas portas importantes definidas como abertas para testar ataques.
for sw in $(curl -s http://127.0.0.1:8181/api/kytos/topology/v3/switches | jq -r '.switches[].id'); do curl -H 'Content-type: application/json' -X POST http://127.0.0.1:8181/api/kytos/topology/v3/switches/$sw/enable; curl -H 'Content-type: application/json' -X POST http://127.0.0.1:8181/api/kytos/topology/v3/interfaces/switch/$sw/enable; done
for l in $(curl -s http://127.0.0.1:8181/api/kytos/topology/v3/links | jq -r '.links[].id'); do curl -H 'Content-type: application/json' -X POST http://127.0.0.1:8181/api/kytos/topology/v3/links/$l/enable; done
curl -H 'Content-type: application/json' -X POST http://127.0.0.1:8181/api/kytos/mef_eline/v2/evc/ -d '{"name": "my evc1", "dynamic_backup_path":'