quarta-feira, 22 de fevereiro de 2017

Active Firewall blocking by mac addresses


This Firewall script is interesting for use on WiFi networks, for blocking devices that to try access something inappropriate.

Insert this log rule in initial for your script Firewall: 

#iptables -I FORWARD -m string --algo bm --string "facebook" -m limit --limit 1/s --limit-burst 1 -j LOG --log-prefix "FW_FACEBLOCK_log"

And create a new bit script:

#touch /root/blockmac.sh

#chmod 550 /root/blockmac.sh

#vim /root/blockmac.sh

#!/bin/sh
#Script desenvolvido para bloquear Mac Addresses
tail -100 /var/log/messages | grep "FW_FACEBLOCK_log" | grep -Po 'MAC=\K.*$' | cut -d ":" -f7-12 | sort | uniq -d > /root/maclist
#
maclist=/root/maclist
for i in `cat $maclist`; do
mac=`echo $i | cut -d ';' -f 1`
#
iptables -t mangle -A PREROUTING -i eth0 -m mac --mac-source $mac -j DROP
#eth0=Wlan
echo "MAC - Bloqueado - $mac"
done #Fim do FOR





















This will add the mac addresses that have accessed facebook in the macblock list and
add drop rule in table mangle, chain prerouting, this is the first iptables entry, quit funcional.


To be more effective, add the script to the crontab:

0 0-23/1 * * * /root/blockmac.sh







terça-feira, 21 de fevereiro de 2017

How to block multiple IPs


How to block multiple IPs with Iptables

Add in your script Firewall

#For block denny IPs
lista=/root/lista
for i in `cat $lista`; do
ip=`echo $i | cut -d ';' -f 1`
#
iptables -t filter -I FORWARD -s $ip -j REJECT
#
echo "IP - Bloqueado - $ip"
done #Fim do FOR
#


#touch /root/lista

#echo "denny IP" >> /root/lista








#vim /root/lista














#./dennyips.sh
















Blocked ips in chain FORWARD.





















segunda-feira, 20 de fevereiro de 2017

Ebtables Firewall (Layer 2 & 3)


Basic network firewall with Ebtables. It acts in layers 2 and 3.

In an internal network, what transits most are frames or packages, so the importance of Ebtables.

Install (Debian ad derivatives)

#apt-get install ebtables

#cd /root

#touch ebtables.sh

#chmod 550 ebtables.sh

 #vim ebtables.sh




















#!/bin/sh
#Ebtables firewall Layer 2 & 3
EBT="/sbin/ebtables"
#Clean Rules
$EBT -F
$EBT -t nat -F
#Paths
MACETH0="`cat /sys/class/net/eth0/address`"
MACWLAN0="`cat /sys/class/net/wlan0/address`"
#For VMs or Docker Containers
MACLAST="`ifconfig -a | grep -Po 'HWaddr \K.*$' - | tail -1`"
MACPENULT="`ifconfig -a | grep -Po 'HWaddr \K.*$' - | tail -2 | head -n 1`"
#Lans
LAN1="192.168.1.0/24"
LAN2="172.17.0.0/16"
LAN3="172.16.1.0/24"
WLAN="10.10.10.0/26"
#Filter Rules
$EBT -A INPUT -p IPv4 --ip-src $LAN1 -d $MACETH0 -j ACCEPT
$EBT -A INPUT -p IPv4 --ip-src $LAN2 -d $MACPENULT -j ACCEPT
$EBT -A INPUT -p IPv4 --ip-src $LAN3 -d $MACLAST -j ACCEPT
$EBT -A INPUT -p IPv4 --ip-src $WLAN -d $MACWLAN0 -j ACCEPT
$EBT -A INPUT -p ARP --arp-htype 1 --arp-opcode 1 -j ACCEPT             #arp request
$EBT -A INPUT -p ARP --arp-htype 1 --arp-opcode 2 -j ACCEPT             #atp reply
#NAT Rules
$EBT -t nat -A POSTROUTING -o eth0 -j snat --to-src $MACETH0 --snat-arp --snat-target ACCEPT
$EBT -t nat -A POSTROUTING -o wlan0 -j snat --to-src $MACWLAN0 --snat-arp --snat-target ACCEPT
$EBT -t nat -A PREROUTING -p ARP --arp-ip-src $LAN1 -j dnat --to-dst $MACETH0 --dnat-target ACCEPT
$EBT -t nat -A PREROUTING -p ARP --arp-ip-src $WLAN -j dnat --to-dst $MACWLAN0 --dnat-target ACCEPT
$EBT -t nat -A PREROUTING -p ARP --arp-ip-src $LAN2 -j dnat --to-dst $MACPENULT --dnat-target ACCEPT
$EBT -t nat -A PREROUTING -p ARP --arp-ip-src $LAN3 -j dnat --to-dst $MACLAST --dnat-target ACCEPT
echo "*Ebtables Firewall Upstart*"







Examples of random networks

Change to real addresses


View all mac addresses:
 
# ifconfig -a | grep -Po 'HWaddr \K.*$'

#arp -a

#ip neighbor show












domingo, 19 de fevereiro de 2017

It's a very simple Firewall Netfilter script

#vim firewall.sh
#!/bin/sh
#Simple Netfilter Firewall
IPT="/sbin/iptables"
#Clean Iptables rules
$IPT --flush
$IPT --delete-chain
$IPT -t nat -F
$IPT -t mangle -F
#Paths
IPEXT="`wget http://ipinfo.io/ip -qO -`"
WAN="eth1"
LAN="eth0"
#INPUT Rules
$IPT -A INPUT -i $WAN -p tcp -m state --state INVALID -j DROP
$IPT -A INPUT -i lo -s 127.0.0.1 -j ACCEPT
$IPT -A INPUT -i $WAN -p udp -m udp -s 0/0 -d $IPEXT --sport 53 --dport 1024:65535 -j ACCEPT
$IPT -A INPUT -i $WAN -p tcp -m tcp -s 0/0 -d $IPEXT --sport 80:443 --dport 1024:65535 -j ACCEPT
$IPT -A INPUT -i $LAN -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A INPUT -i $WAN -m conntrack --ctstate NEW -m limit --limit 1/m --j LOG --log-prefix "FW_SYN_WAN_log:"
$IPT -A INPUT -p tcp -m tcp --syn -j DROP
$IPT -A INPUT -p udp -m udp --dport 0:1024 -j DROP
echo 0 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#Nat Rules
$IPT -t nat -A POSTROUTING -o $WAN -j MASQUERADE
$IPT -t nat -A OUTPUT -o lo -d 127.0.0.1 -j ACCEPT
#Mangle Rules
$IPT -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o $WAN -j TCPMSS --set-mss 1492
$IPT -t mangle -I PREROUTING -p tcp --tcp-flags ACK,FIN,SYN SYN  -i $WAN -j TCPMSS --set-mss 1492
#Auto-add deny.hosts
tail -12 /var/log/messages | grep "FW_SYN_WAN_log:" | cut -d '=' -f5-5 | cut -d ' ' -f 1  > lista1
awk '{print  "ALL: " $1 }' lista1  >> /etc/hosts.deny
echo "%#%Firewall Netfilter Iptables Upstart%#%"



















#Add rules to suit your needs.









quarta-feira, 25 de janeiro de 2017

Asterisk - Configuração de Voip para uso de Smartphones, numa rede interna - Lan

Instalação e configuração do Asterisk, dentro de um container Docker.

O Asterisk é um poderoso software de PABX, open source, desenvolvido por Mark Spencer, fundador da Digium inc. Empresa que desenvolve o Asterisk sob a licença GPL e vende as placas (periféricos) para conectar o Asterisk a malha de telefonia convencional (FX0, FXS, E1/T1, ISDN).

Este tutorial, visa apenas o uso básico do Asterisk, vou apenas implementá-lo em minha rede WiFi, para o uso da comunicação de dispositivos móveis (smatphones), numa rede já existente. Não possuo nenhuma placa específica (Digion, Digivoice, Khomp), então o uso, limita-se apenas a rede interna.

Preferi instalá-lo, dentro de um container docker, uma maneira ágil para implantação, num ambiente de testes e aprendizados.

Para instalar o docker:

#apt-get update && apt-get upgrade

#apt-get install curl

#curl -sSL http://get.docker.com | sh

Para iniciar o Docker:

#/etc/init.d/docker start

Para ver se o docker está ativo:

#netstat -rn | grep docker

Agora vamos subir um container docker com algum SO (estou usando o debian:7.10)

#docker run -it -h Asterisk -p 5060:5060/udp -m 1024M --name server-asterisk \
-v /opt/asterisk:/etc/asterisk debian:7.10 /bin/bash

Este comando vai baixar a imagem do debian7.10, logo depois você estará dentro do container Asterisk, ai vamos ter que instalar todos os pacotes necessários.

#apt-get update && apt-get upgrade

Primeiramente mudar a senha de admin:

#passwd
#senha nova
#senha nova

Dar o comando date:
#date

Temos que arrumar a data e horário:
#rm /etc/localtime

#ln -s /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime

#date        #(agora deve estar com horário certo)

Necessário instalar um editor de texto, vim, nano ou outro qualquer:

#apt-get install nano -y

Necessário instalar pacotes de uso no dia a dia:

#apt-get install -y libnet-ifconfig-wrapper-perl dnsutils netstat-nat

Instalação do Asterisk:

#apt-get install asterisk asterisk-config asterisk-modules

Se preferir, você pode instalar através do código fonte e compilá-lo:

#cd /usr/src

#wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-11-current.tar.gz

#tar xzf  asterisk-11-current.tar.gz

#cd asterisk*

# ./configure && make menuselect && make && make install && make
config && make install-logrotate

#make samples

Antes de compilar o Asterisk, é preciso instalar suas dependências:

# apt-get install linux-headers-$(uname -r) build-essential libxml2-dev
libncurses5-dev libsqlite3-dev libssl-dev libsrtp0-dev unixodbc-dev subversion
libmysqlclient-dev

Depois de instalado, reinicie o serviço:

#/etc/init.d/asterisk restart

De um comando netstat -nudl para ver se a porta 5060 udp está ativa:

#netstat -nudl

Tudo certo, com o Asterisk instalado, precisamos configurá-lo:

#cd /etc/asterisk

#ls

Aqui estão os principais arquivos de configuração do Asterisk.












Vamos editar dois arquivos importantes, o sip.conf e o extensions.conf.

O SIP, é um protocolo de comunicação voip, ele por padão utiliza a porta udp 5060 para criar a chamada e depois de estabelecida a conexão, ele envia os pacotes através de portas udp altas (10000 a 20000).

O arquivo extensions.conf, é onde está toda a programação lógica do asterisk, o dial plan, o coração do asterisk.

Primeiramente faremos uma cópia desses dois arquivos:

#cp sip.conf /etc/asterisk/sip.conf_orig

#cp extensions.conf /etc/asterisk/extensions.conf_orig

Depois:

#> sip.conf

#>extensions.conf

Agora vamos editar os dois arquivos:

#nano sip.conf

Conteúdo:

[general]
transport=udp
dindaddr=192.168.1.10  ;(ip do servidor)
disallow=all
allow=ulaw
allow=gsm
nat=yes
localnet=192.168.1.0/24   ;(rede local)
language=pt_br

;-----------------------------------------------------

[template](!)
port=5060
host=dynamic
dtmfmode=rfc2833
pickupgroup=1
callgroup=1
musicclass=musica

;-----------------------------------------------------

[001](template)
callerid=nome de usuário
secret=123456   ;(senha de acesso)
host=192.168.1.2
type=friend
context=ramais   ;(contexto é importante usar o mesmo nome no extensions.conf)
disallow=all
allow=ulaw

[002](template)
callerid=nome de usuário
secret=123456
host=192.168.1.3
type=friend
context=ramais
disallow=all
allow=ulaw

[003](template)
callerid=nome de usuário
secret=123456
host=192.168.1.11
type=friend
context=ramais
disallow=all
allow=ulaw

;se tiver mais dispositivos, continue com a configuração

Agora o arquivo extensions.conf:

#nano extensions.conf:

Conteúdo:

[General]
AUTOFALLTHROUGH = NO

[Globals]
include => features.conf

[ramais]
        exten => _00Z,1,Dial(SIP/${EXTEN})
        exten => _00Z,2,Hangup()

;
;Configuração bem simples e básica.

Para acessar o console do asterisk:

#rasterisk -cvvvv
Agora de os comandos:

>sip reload

>dialplan reload

>dialplan show ramais

>sip show peers












Temos que configurar os smartfones para se comunicarem através da rede Wifi.

Instale o programa Zoiper (uso android), é so buscar na Play Store “zoiper”

Depois de instalado acesse o menu “config” :

-Accounts - +add account

Account name = 003 (pelas configurações pode ser de 001 a 009)

Host=192.168.1.10  (Ip do Servidor onde está instalado o asterisk)

Username=nome de usuário

Password=123456

Outbond proxy=(Ip do Servidor)


















Pronto, com essas configurações, já deve estar funcionando.

Na tela aparecerá 003 is ready.


















Agora teremos que configurar uma máquina Windows para testar:

Instale o programa X-Lite, procure pela versão 3.0

Estou usando este: goo.gl/EtytFv

Para configurar o x-lite:

Sip Account Settings>>Add

Display Name=seu nome

Username=001 (pela configuração é de 001 a 009)

Password=senha

Authorization user name=001

Domain=ip do servidor












Pronto, salvar e depois discar para o celular, no meu caso é 003. O celular vai tocar.




















No pronpt (CLI) no Servidor, aparecem todos os tramites executados.













Depois temos que salvar todas as configurações feitas até então no container Asterisk:

#docker ps

#docker commit server-asterisk debian7.10-asterisk

ou

 #docker commit (container id) debian7.10-asterisk (nome aleatório)

Temos que criar um script para inicializar o container Asterisk:

#cd /root/

#touch container_asterisk.sh

#chmod +x container_asterisk.sh

#nano container_asterisk.sh

Conteúdo:

#!/bin/sh

docker rm server-asterisk

docker run -d -it -h Asterisk -p 5060:5060/udp -m 1024M --name server-asterisk -v /opt/asterisk:/etc/asterisk debian7.10-asterisk /bin/bash

docker exec server-asterisk /etc/init.d/asterisk start

echo “Container Asterisk ativado”

Depois é só colocar no /etc/rc.local, caso queira que o container suba junto com o sistema na inicialização.

Basicamente é isso, uma configuração simples para o Asterisk. A grande vantagem de se usar o Asterisk é o custo da aplicação, esse exemplo, mostra como é possível usá-lo dentro de uma rede Wifi interna (lan), com equipamentos móveis, a custo de ligação, praticamente zero (custo da estrutura da rede), por exemplo, em muitos lugares, toda a comunicação interna é feita através do aplicativo WatsApp, um ônus desnecessário.

O Asterisk, como toda aplicação Voip, existente no mercado, é totalmente dependente da rede de dados (baseada no TCP/IP), se a rede não estiver bem estruturada, o voip não funcionará direito. Todo áudio é encapsulado em pacotes Ips que trafegam pela rede de dados. A rede deve priorizar o tráfego de pacotes voip (SIP, RPC, IAX), através de QoS, o ideal seria uma vlan exclusiva para o serviço de voip, no caso de rede wireless, usar bons Acess Points (padão 802.11ac).

Fazendo uma analogia, o áudio resultante de uma conexão voip, é proporcional a qualidade de toda rede estruturada (camada física e camada de enlace), é como um equipamento de áudio HiEnd, começa pelo cabeamento, qualidade dos componentes empregados, construção primorosa, bem projetado, resulta numa excelente qualidade sonora.

Outro ponto importante, é a segurança do Servidor, o protocolo SIP, é bem manjado, com certeza, sua porta 5060/udp será bastante explorada. Neste caso o protocolo IAX,IAX2 leva vantagem, oferece mais segurança, pois utiliza apenas a porta 4569/udp.

Regras de firewall para o Servidor Asterisk:

#iptables -I INPUT -i eth1 -p udp -m udp --dport 5060 -j DROP

-i eth1 (interface wan)
    
 #iptables -A INPUT -i eth0 -p udp -m udp --dport 5060 ! -s 192.168.1.0/24 -j DROP

- eth0 (interface lan)
 
Todo container docker habilitado, inclui regras de iptables no sistemas. O protocolo Sip, usa o RTP para enviar os pacotes com áudio encapsulados, e usa um range de portas altas udp (de 10000 a 20000), caso essas portas não funcionem teremos que adicionar essa regra no firewall, na chain docker, criada por ele no sistema:

iptables -A DOCKER -d 172.17.0.0/29 ! -i docker0 -o docker0 -p udp -m udp --dport 10000:20000 -j ACCEPT





sábado, 14 de janeiro de 2017

Instalação do Tor + Privoxy, em um container Docker



Instalando o Tor e o proxy Privoxy, para navegar com segurança e privacidade pela Internet.

Primeiro passo é escolher a forma de instalação dos Serviços necessários, podem ser feitos de três formas distintas:

- A primeira, é instalando num Servidor dedicado rodando como sistema operacional o Debian, Kali Lininux, CentOS, ou outra distro qualquer.

- A segunda, é instalando numa VM (Máquina Virtual), Virtual Box, Xen, VMWare.

-A terceira opção, seria através do Docker, criando um container, rodando apenas o Tor e o Privoxy, propriamente dito.

Vou utilizar a terceira opção.

O intuito de utilizar o Tor e o Privoxy, não tem nenhuma natureza Hacker, e sim para fins didáticos e pessoais (como navegar em rádios online, com Server fora do país).

Vamos lá.

Primeiramente será necessário ter em mãos um computador com sistema Linux instalado (eu utilizo o Debian Jessie). O importante, é o Sistema operacional ser de 64 bits e o kernel, acima da versão 3.10, para poder rodar o docker.

#uname -a

Instalação do docker:

#apt-get update && apt-get upgrade

#apt-get install curl

#curl –sSL http://get.docker.com | sh

Esse comando instala o Docker em seu sistema.












Para iniciar o docker no sistema:

#/etc/init.d/docker start

Para ver se o docker está rodando:

#netstat -rn | grep docker

Depois de instalado, é só procurar por uma imagem do kali linux ou outra que preferir.

#docker search kali-linux

Estou usando esta imagem:  kalilinux/kali-linux-docker












Agora vamos criar um pequeno script para rodar o container kali linux:

#touch container_kali.sh

#chmod +x container_kali.sh

#nano container_kali.sh


Conteudo:

#!/bin/sh

docker rm kali-proxy

docker run -d -it -h kali -p 22:22 -p 8118:8118 -p 9050:9050 -m 1024M --priveleged \
-v /home/kali:/root/kali --name kali-proxy kalilinux/kali-linux-docker /bin/bash

echo “salve”

Uma prévia dos comandos do docker utilizados:

run=run

-d – roda em background

-it – interativo com o shell

-p - portas utilizadas pelo sistema e para o container (ssh, privoxy proxy e tor socks)

-m – limita a memória a 1 Gb

--privileged – uso para poder rodar o iptables dentro do container

-v – essa é a mellhor sacada do docker, vai compartilhar a pasta home/kali da máquina com o diretório root/kali do container

--name – é o nome do container

 kalilinux/kali-linux-docker – é a imagem que está na nuvem

/bin/bash – abre dentro do terminal

Crie o diretório kali no home:
#mkdir /home/kali

No mesmo diretório do script, rode o comando (uso o /root):

#./container_kali.sh

Isso pode demorar um pouco, conforme o poder de cada link.

Ele deve baixar a imagem kalilinux/kali-linux-docker

Após baixar a imagem:

#docker ps

#docker attach kali-proxy

Pronto, agora você está dentro do container.

Ele está totalmente cru, sem nada instalado.

Primeiramente, mude a senha do root

#passwd

#sua senha

#sua senha

Teremos que instalar todos pacotes necessários:

#apt-get update && apt-get upgrade

#apt get install openssh-server

#apt-get install dnsutils iftop htop inetutils-tools netstat-nat ulogd2

#apt-get install qualquer pacote que for utilizar em modo texto

#apt-get install tor privoxy

Instalei o ssh, para poder abrir várias instâncias do container (uma telinha é pouco).

A configuração do ssh, não tem segredo, no /etc/sshd.conf pode-se mudar a porta de acesso e nunca deixe logar como root.

Crie um usuário:

#useradd fulano

#passwd fulano

#/etc/init.d/ssh start

Agora pode-se utilizar via putty (ifconfig para pegar o ip do container)












Pelo terminal pode-se acessar via ssh :

#ssh fulano@172.17.0.3

Geralmente o primeiro container utiliza o ip 172.17.0.2 e o segundo 172.17.0.3, e assim por diante. A rede do docker está numa interface chamada docker0, de rede 172.17.0.0/16

 É preciso saber o ip do container para poder configurar os serviços e o browser para navegar sob o proxy.

Agora vamos a configuração do tor e do privoxy

 #nano /etc/tor/torsocks.conf












Descomente  e edite as linhas:

TorAddress 172.17.0.3

TorPort 9050

No meu caso o ip é 172.17.0.3, pois já possuo um outro container rodando outro serviço.

#nano /etc/tor/torrc












Descomente e edite as seguintes linhas:

SOCKSPort 9050 # Default: Bind to localhost:9050 for local connections.

SOCKSPort 172.17.0.3:9050 # Bind to this address:port too.

SOCKSPolicy accept 192.168.1.0/28

Talves nem precise editar esse arquivo torrc, mas não testei sem editar ele.


Agora vamos ao privoxy, o arquivo de configuração é bem extenso e está em:

#nano /etc/privoxy/config












Descomente e edite as seguintes linhas:

listen-address  172.17.0.3:8118
listen-address  [::1]:8118
 
forward-socks4   /                172.17.0.3:9050  .
forward-socks5t   /              172.17.0.3:9050  .












O importante é ter certeza do ip address do container, não esqueça este . (pontinho no final da linha)

O pulo do gato, são essas duas linhas referentes ao forward-socks. Se você comentar essas duas linhas (desabilitar usando #) o privoxy funciona apenas como um proxy, semelhante ao squid. Com o Forward habilitado, ele usa o tor para mascarar o ip de origem.

Agora se tudo estiver certo, reiniciar os serviços:

#/etc/init.d/privoxy restart

#/etc/init.d/tor restart

Para ver se estão ativos:

#htop












Agora vamos a configuração do navegador (utilizo o Firefox):

/opções/avançado/rede/configurar conexão

http  172.17.0.3  porta 8118
ssl    172.17.0.3  porta 8118
socks 172.17.0.3  porta 9050













Se tudo estiver certo, deve estar navegando, sob um proxy de rede e com uma VPN complexa, que altera seu source IP. Mas isso não o torna invisível na internet, todo ip é rastreável, é só dar um traceroute no shell, sempre terá uma origem e um destino rastreável.













Agora vem o bruto, se este container, por algum motivo, sair do ar (queda de energia, por exemplo) perde-se tudo. Terá que refazer tudo do zero.

Vamos salvar os arquivos importantes e depois dar um commit no container:

#cp –r /etc/tor /root/kali/
#cp –r /etc/privoxy /root/kali/

Dar um commit no container (salvar todas as configurações feitas)

#docker ps

#docker commit [id do container]  kalilinux/kali-linux-docker-02

ou

#docker commit kali-proxy kalilinux/kali-linux-docker-02

Se preferir, pode-se exportar o container para uma partição maior:

#cd /home/fulano

#docker export –o [novo nome] [container id]

 Depois:

#docker import [nome do container]

#docker images

Precisará tagear esse novo container

#docker tag [image id] [novo nome]

Depois teremos que modificar o script container_kali.sh:

#nano /root/container_kali.sh

#!/bin/sh

docker rm kali-proxy

docker run -d -it -h kali -p 22:22 -p 8118:8118 -p 9050:9050 -m 1024M --priveleged \ 
-v /home/kali:/root/kali --name kali-proxy kalilinux/kali-linux-docker-02 /bin/bash

docker exec kali-proxy /etc/init.d/ssh start

docker exec kali-proxy cp –r /root/kali/ulogd.conf /etc/

docker exec kali-proxy /etc/init.d/ulogd2 start

docker exec kali-proxy /etc/init.d/privoxy start

docker exec kali-proxy /etc/init.d/tor start

docker exec kali-proxy /root/kali/firewall_kali.sh

echo "Container Kali-proxy ativado"

Coloque o nome do container atualizado (no caso utilizei o nome kalilinux/kali-linux-docker-02).

Para inicializar o conntainer:

#/nano /etc/rc.local

Adicionar:

/root/container_kali.sh

Pronto, agora vamos por segurança neste container:

#cd /home/kali

#touch firewall_kali.sh

#chmod +x firewall_kali.sh

#nano firewall_kali.sh

Inserir:

#!/bin/sh

#Firewall Script desenvolvido por Henrique Kobayashi

IPT="/sbin/iptables"

#Reescrevendo as regras
$IPT --flush
$IPT --delete-chain
$IPT -t nat -F
$IPT -t mangle -F

$IPT -N C_TOR

$IPT -t nat -A POSTROUTING -o eth0 -j MASQUERADE

#enable packet forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter

$IPT -A INPUT -p tcp -m multiport --dports 8118,9050 -j C_TOR
$IPT -A INPUT -p tcp --dport 22 ! -s 192.168.1.14 -j DROP
$IPT -A INPUT -s 192.168.1.14 -d 172.17.0.3 -p tcp --sport 1024:65535 --dport 22 -j ACCEPT
$IPT -A C_TOR -s 192.168.1.0/28 -j ACCEPT
$IPT -A C_TOR -s 172.17.0.0/29 -j ACCEPT
$IPT -A C_TOR -m limit --limit 1/s --limit-burst 1 -j ULOG --ulog-prefix "FW_TOR__Ulog:"
$IPT -A C_TOR -j DROP
$IPT -t filter -A INPUT -m limit --limit 1/min --limit-burst 1 -j ULOG \
 --ulog-prefix "FW_INPUT_Ulog:"
$IPT -A INPUT -p udp -m udp -s 201.6.2.0/24 --sport 53 --dport 1024:65535 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp -s 0/0 -d 172.17.0.3 --sport 80:443 --dport 1024:65535 \
-j ACCEPT
$IPT -A INPUT -s 192.168.1.0/28 -j ACCEPT
$IPT -A INPUT -s 172.17.0.0/29 -j ACCEPT
$IPT -t mangle -A PREROUTING -i eth0 -s 172.17.0.1 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --sport 22:23 -j DROP
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A INPUT -p tcp --syn -j DROP
$IPT -A INPUT -p udp --dport 1:1024 -j DROP

iptables -t mangle -I PREROUTING -i eth0 -p tcp ! -s 192.168.1.14/32 -m multiport \ 
--dports 22,23,80,135,139,443,445 -j DROP
iptables -t mangle -I POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o eth1 \ 
-j TCPMSS --set-mss 1492

iptables-save

echo "Firewall de rede ativo"

#EOF

F2 salvar

Para utilizar o script de Firewall, mude a rede ( uso 192.168.1.0/28) e o host para acesso ao container utilizo o ip 192.168.1.14, no caso é só alterar o ip para o acesso via ssh. Com esse Firewall rodando dentro do container, o nível de segurança aumenta consideravelmente.

Agora temos que configurar o arquivo de configuração do ulogd2, o qual vai gerar os logs do firewall.

#nano /etc/ulogd.conf

O item principal de configuração do arquivo é:

[emu1]
#file="/var/log/ulog/syslogemu.log"
file="/var/log/iptables.log"
sync=1

#deixe apenas esta linha descomentada (no início)
# this is a stack for ULOG packet-based logging via LOGEMU
stack=ulog1:ULOG,base1:BASE,ip2str1:IP2STR,print1:PRINTPKT,emu1:LOGEMU

Salve o arquivo:

#cp -r /etc/ulogd.conf /root/kali/

Para iniciar o Firewall:

#/root/kali/firewall_kali.sh

Para visualizar o firewall rodando:

#watch –n 1 –d iptables -nvL







Ufa, por hora é isso.






Gostaria de lembrar, que não sou especialista em docker, tenho consciência que a melhor maneira, seria usar dois containers, o mais enxuto possível, separando o tor e o privoxy em cada container, utilizando o docker file ou docker compose. Mas esta foi a maneira que consegui fazer funcionar.