diff --git a/ROUTER.sh b/ROUTER.sh index 07b8311..82a2caf 100644 --- a/ROUTER.sh +++ b/ROUTER.sh @@ -55,7 +55,7 @@ sudo iptables -A OUTPUT -o lo -j ACCEPT #sudo iptables -t nat -A POSTROUTING -i enp0s9 -o enp0s3 -j MASQUERADE #SUS sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #CAREFULL #DNS name resolution requests sent to outside servers and want a response: -sudo iptables -A INPUT -o enp0s10 -p udp --dport 53 -j ACCEPT +sudo iptables -A INPUT -i enp0s10 -p udp --dport 53 -j ACCEPT #SSH connections to the router system that originate from the inside and want an answer: sudo iptables -A INPUT -i enp0s9 -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -i enp0s8 -s 23.214.219.133 -p tcp --dport 22 -j ACCEPT diff --git a/relatorio.pdf b/relatorio.pdf index 8e9cd59..36397ab 100644 Binary files a/relatorio.pdf and b/relatorio.pdf differ diff --git a/relatorio.synctex.gz b/relatorio.synctex.gz index eab6133..83c287c 100644 Binary files a/relatorio.synctex.gz and b/relatorio.synctex.gz differ diff --git a/relatorio.tex b/relatorio.tex index f254c87..d5a7ffc 100644 --- a/relatorio.tex +++ b/relatorio.tex @@ -16,18 +16,24 @@ \section{Introduction} O objetivo principal deste trabalho era aprender IPTables e como configurar um com o Suricata um sistema de filtração e deteção de ataques. Para esse fim, foi simulado um sistema dividido em três redes e um router para conectar-las. As três redes são a DMZ (23.214.219.128/25, enp0s8), Internal network (192.168.10.0/24, enp0s9) e Internet (87.248.214.0/24, enp0s10). As três redes tem varios serviços, o DMZ tem dns(23.214.219.130), mail(23.214.219.134), vpn-gw(23.214.219.133), www(23.214.219.132) e smpt(23.214.219.131). A Internal network tem ftp(192.168.10.2), datastore(192.168.10.3) e clientes (nos testes os clientes tem ip 192.168.10.4, mas está configurado para dar para qualquer edereço). Por fim a rede Internet tem dns2 (87.248.214.99) e eden (87.248.214.100), existe também outros serviços (87.248.214.98). +Para facilitar a recriação deste sistema foi criado 4 ficheiros .sh (um para cada rede e o router), e disponibilizamos os ficheiros suricata.rules e suricata.yaml, para o suricata que estiver ligado ao Router. Os ficheiros .sh vão ter comandos para configurar o sistema para este exercicio. \section{Firewall} \subsection{Packet fileter without NAT} O policy que foi escolhido foi: +\begin{verbatim} iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT +\end{verbatim} Foi escolhido porque é mais facil dar DROP a todos os pacotes que não foi criado regras do que criar uma regra de DROP para todos os protocolos e possibilidades, o OUTPUT ficou para ACCEPT porque não existe razão para dar DROP dos pacotes que estamos a enviar neste trabalho. Para o router conseguir resolver DNS requests e para aceitar coneções SSH da rede interna ou da VPN gateway foi utilizado estes comandos: +\begin{verbatim} sudo iptables -A INPUT -o enp0s10 -p udp --dport 53 -j ACCEPT sudo iptables -A INPUT -i enp0s9 -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -i enp0s8 -s 23.214.219.133 -p tcp --dport 22 -j ACCEPT +\end{verbatim} Para conseguirmos a confirguração pedida entre redes foi utilizado estes commandos: +\begin{verbatim} sudo iptables -A FORWARD -i enp0s8 -o enp0s10 -s 23.214.219.130 -p udp --dport 53 -j ACCEPT sudo iptables -A FORWARD -i enp0s9 -o enp0s8 -d 23.214.219.130 -p udp --dport 53 -j ACCEPT sudo iptables -A FORWARD -i enp0s8 -o enp0s10 -s 23.214.219.130 -p tcp --dport 53 -j ACCEPT @@ -39,24 +45,44 @@ sudo iptables -A FORWARD -i enp0s9 -o enp0s8 -d 23.214.219.132 -p tcp --dport 44 sudo iptables -A FORWARD -i enp0s9 -o enp0s8 -d 23.214.219.133 -p udp --dport 1194 -j ACCEPT sudo iptables -A FORWARD -i enp0s8 -o enp0s9 -s 23.214.219.133 -d 192.168.10.2 -j ACCEPT sudo iptables -A FORWARD -i enp0s8 -o enp0s9 -s 23.214.219.133 -d 192.168.10.3 -j ACCEPT +\end{verbatim} \subsection{Packet filtering with NAT} Para conecções com origem/destino na internet foi utilizado DNAT/SNAT e iptables para "esconder" o ip para a internet que quer aceder a rede interna e iproutes para bloquear certos pacotes de entrar, para conseguir a configuração utilizamos estes comandos: -sudo iptables -A FORWARD -i enp0s10 -o enp0s9 -d 192.168.10.2 -p tcp --dport 21 -j ACCEPT + +\begin{verbatim} +sudo iptables -A FORWARD -i enp0s10 -o enp0s9 -d 192.168.10.2 +-p tcp --dport 21 -j ACCEPT sudo iptables -A FORWARD -i enp0s9 -o enp0s10 -p tcp --sport 20 -j ACCEPT -sudo iptables -t nat -A PREROUTING -s $dns2 -p tcp --dport 22 -j DNAT --to-destination 192.168.10.3 -sudo iptables -t nat -A PREROUTING -s $eden -p tcp --dport 22 -j DNAT --to-destination 192.168.10.3 -sudo iptables -t nat -A PREROUTING -i enp0s10 -p tcp --dport 21 -j DNAT --to-destination 192.168.10.2 -sudo iptables -A FORWARD -i enp0s10 -o enp0s9 -d 192.168.10.3 -s $dns2 -p tcp --dport 22 -j ACCEPT -sudo iptables -A FORWARD -i enp0s10 -o enp0s9 -d 192.168.10.3 -s $eden -p tcp --dport 22 -j ACCEPT -\subsection{External Network} -\subsection{Internal Network} +sudo iptables -t nat -A PREROUTING -s $dns2 -p tcp --dport 22 + -j DNAT --to-destination 192.168.10.3 +sudo iptables -t nat -A PREROUTING -s $eden -p tcp --dport 22 + -j DNAT --to-destination 192.168.10.3 +sudo iptables -t nat -A PREROUTING -i enp0s10 -p tcp --dport 21 + -j DNAT --to-destination 192.168.10.2 +sudo iptables -A FORWARD -i enp0s10 -o enp0s9 -d 192.168.10.3 -s $dns2 + -p tcp --dport 22 -j ACCEPT +sudo iptables -A FORWARD -i enp0s10 -o enp0s9 -d 192.168.10.3 -s $eden + -p tcp --dport 22 -j ACCEPT +sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o enp0s10 -j SNAT + --to-source 87.248.214.97 +sudo iptables -A FORWARD -i enp0s9 -o enp0s10 -p udp --dport 53 -j ACCEPT +sudo iptables -A FORWARD -i enp0s9 -o enp0s10 -p tcp --dport 80 -j ACCEPT +sudo iptables -A FORWARD -i enp0s9 -o enp0s10 -p tcp --dport 443 -j ACCEPT +sudo iptables -A FORWARD -i enp0s9 -o enp0s10 -p tcp --sport 21 -j ACCEPT +sudo iptables -A FORWARD -i enp0s9 -o enp0s10 -p tcp --dport 21 -j ACCEPT +\end{verbatim} \section{Intrusion Detection} -Suricata rules: -drop tcp (dollar)EXTERNAL-NET any -> (dollar)HOME-NET any (msg:"ET"; flags:S; threshold:type both, track by-src, count 5, seconds 60; classtype:attempted-recon; sid:1000001; rev:1;) +As regras que utilizamos para o suricata foram estas: +\begin{verbatim} +drop tcp \$EXTERNAL\_NET any -> \$HOME\_NET any (msg:"ET"; flags:S; threshold:type both, track by\_src, count 5, seconds 60; classtype:attempted-recon; sid:1000001; rev:1;) drop tcp any any -> any 80 (msg:"SQL injection"; content:"union"; nocase; content:"select"; nocase; classtype:web-application-attack; sid:1000002; rev:1;) drop tcp any any -> any 80 (msg:"SQl injection"; content:"'or 1=1"; nocase; classtype:web-application-attack; sid:1000003; rev:1;) drop tcp any any -> any 80 (msg:"XSS"; content:"