sábado, 23 de dezembro de 2017

Controle de temperatura com termistor NTC


Controle de Temperatura, com termistor NTC, para acionamento automático do Fan Cooler, para refrigeração em amplificadores de potência, computadores, aquários, etc. Qualquer projeto que necessite o acionamento automático do Fan, conforme a temperatura aumenta.

Esquemático:

















Circuito básico, baseado em dois divisores de tensão e usando o amplificador operacional LM358, como comparador, das tensões derivadas dos divisores, no primeiro, o NTC é um resistor variável, conforme aumenta a temperatura, ele aumenta a sua impedância, consequentemente, aumenta a tensão do primeiro divisor, assim a tensão se iguala a do segundo divisor e dispara uma tensão na base do transistor TIP122, que amplifica o sinal vindo do pino um do operacional, ligando o cooler.

LM358 pinagem:

















O circuito original, utilizava como sensor de temperatura o LM35, mas preferi substitui-lo pelo termistor NTC de 10k, um componente bem mais em conta e de simples montagem. Adicionei um potenciômetro de 2k ohm (em série com o resistor de 3.3k), para poder ter um ajuste fino da temperatura de acionamento do fan.  Na saída do operacional, pode-se utilizar outro tipo de transistor, por exemplo um TIP31, vai ter menos perda (apenas 0,6 volts), utilizei um TIP122, possui um ganho maior, aguenta maior potência, mas por ser Darlington, tem perda maior (1.2 volts).








sexta-feira, 11 de agosto de 2017

/etc/rc.local no Debian Stretch

No Debian recente "Stretch", vem sem o arquivo "/etc/rc.local", muito útil para inicialização de scripts, quando o computador é ligado.

Para criar o arquivo:

# cd /etc/
# ls
# touch rc.local
# chmod +x rc.local

# vim rc.local

Inserir:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.


/root/firewall_testpc.sh
#seuscrips.sh

exit 0
EOF

Depois:

# systemctl start rc.local

# systemctl status rc.local

 





















segunda-feira, 24 de julho de 2017

Configurar o horário no OpenWrt

No OpenWrt o 'Localtime' vem configurado como 'UTC', o qual possui três horas a mais, que o horário Brasileiro (Brasília).

Para corrigirmos isso, é só alterar o arquivo '/etc/config/system':

# vi /etc/config/system

 

















Para colocar o horário Brasileiro (São Paulo) é só trocar o 'UTC' por
'BRT3BRST,M10.3.0/0,M2.3.0/0'



















Coloque  option timezone 'BRT3BRST,M10.3.0/0,M2.3.0/0'

Depois, dê o comando:

# /etc/init.d/system reload

Pronto o horário está configurado.






sexta-feira, 21 de julho de 2017

CTRL+ALT+DEL (Desligar o Computador)

Debian Stretch, ou qualquer distro com systemctl (initd)

Para desligar o computador, geralmente usamos o comando

#shutdown -h now

ou

#init 0

Mas para desligar usando as teclas de atalho "ctrl+alt+del", não funciona, pois o arquivo de configuração "/etc/inittab" não existe mais.

Para isso, criamos um link simbólico:

#ln -s /lib/systemd/system/poweroff.target /etc/systemd/system/ctrl-alt-del.target

Depois reinicie o serviço:

#systemctl daemon-reload

Pronto, o computador desligará, ao pressionarmos as teclas "ctrl+alt+del" .





sexta-feira, 23 de junho de 2017

OpenWRT no TPlink TL-WR740N.V6 (parte 2)

Configuração manual do Firewall de Rede via Netfilter iptables.

Para acessar as configurações em linha de comando, o arquivo está em "/etc/firewall.user"

# vi /etc/firewall.user



















Vamos por partes.

Com esse firmware alternativo, a única forma de acesso remoto, é via ssh, ou seja, a comunicação com o roteador é via porta tcp 22, se perder esta configuração, somente via cabo serial, mas é bem complicado, terá que obter um cabo específico, abrir o roteador e soldar o cabo na placa e depois acessá-lo via hiper terminal.

Então o scrip firewall começaria assim:

#!/bin/sh
#alias
IPT="/usr/sbin/iptables"
REDE="192.168.1.0/24"
AP="ACCEPT"
DP="DROP"

#Regras SSH
$IPT -I INPUT -i eth1 ! -s 191.0.0.0/8 -p tcp --sport 1024:65535 --dport 22 -j $DP
$IPT -I INPUT 2 -i br-lan ! -s 192.168.1.2 -p tcp --sport 1024:65535 --dport 22 -j $DP
$IPT -I INPUT 3 -i eth0 ! -s 192.168.1.2 -p tcp --sport 1024:65535 --dport 22 -j $DP

#Com essas regras, você restringe o acesso a ssh apenas para ips específicos, acesso externo ao range de ips 191.0.0.0/8 e apenas o ip 192.168.1.2 na interface lan, caso a bridge de algum problema, terá acesso pela eth0, a opção -I colocam estas regras em primeiro plano

$IPT -I INPUT 4 -i br-lan -p udp --dport 67:68 --sport 67:68 -j $AP
#Regra para liberar o DHCP na rede Lan.

$IPT -I INPUT 5 -i eth1 -p icmp --icmp-type 8 -j $DP
#Regra para bloquear o ping vindo de fora para dentro

#Regras para loopback
$IPT -A INPUT -i lo -s 127.0.0.1 -j $AP
$IPT -A OUTPUT -o lo -d 127.0.0.1 -j $AP
$IPT -t nat -A OUTPUT -o lo -d 127.0.0.1 -j $AP

#ip6tables tablela FILTER
ip6tables -A INPUT -i eth1 -p tcp --dport 22 -j DROP
ip6tables -A INPUT -i eth1 -p tcp --dport 80 -j DROP
#Essas regras bloqueiam acesso as portas 22 e 80 ao roteador pelo protocolo IPv6.

#Chain OUTPUT
iptables -A OUTPUT -p icmp -m icmp ! --icmp-type 0 -m limit --limit 2/s -j $AP
iptables -A OUTPUT -p udp -m udp --sport 1024:65535 --dport 53 -j $AP
iptables -A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 80 -j $AP
iptables -A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 443 -j $AP
iptables -A OUTPUT -p udp -m udp --dport 123 -j $AP
iptables -A OUTPUT -m state --state ESTABLISHED -j $AP
iptables -A OUTPUT -p udp -m udp --sport 1024:65535 -j $AP
iptables -A OUTPUT -p tcp -m tcp --sport 1024:65535 -j $AP
#Regras para cadeia output

#Regras INPUT
$IPT -A INPUT -p udp -m udp -s 0/0 -i eth1 --dport 33435:33525 -j $DP  #Bloqueio de traceroute
$IPT -A INPUT -i eth1 -m state --state INVALID -j $DP
$IPT -A INPUT -p icmp -m icmp ! --icmp-type 8 -m limit --limit 2/s -j $AP
$IPT -A INPUT -i eth1 -p tcp -s 0/0 --sport 80 --dport 1024:65535 -j $AP
$IPT -A INPUT -i eth1 -p tcp -s 0/0 --sport 443 --dport 1024:65535 -j $AP
$IPT -A INPUT -i eth1 -p udp -s 0/0 --sport 53 --dport 1024:65535 -j $AP
$IPT -A INPUT -i br-lan -p udp --sport 1024:65535 --dport 53 -j $AP
$IPT -A INPUT -i br-lan -d 192.168.1.15 -m limit --limit 3/s -j $AP
$IPT -A INPUT -i br-lan -p udp -s $REDE -d 224.0.0.0/24 -m limit --limit 5/s --limit-burst 11 -j $AP
$IPT -A INPUT -p udp -m udp -s 0/0 --sport 123 -m limit --limit 3/s -j $AP
#Mais algumas regras básicas para cadeia input.

#Regras de bloqueio na cadeia INPUT
$IPT -A INPUT -i eth1 -p udp -m udp --dport 1:1024 -j $DP
$IPT -A INPUT -i eth1 -p tcp --syn -j $DP
$IPT -A INPUT -i br-lan -p tcp --dport 1024:65535 -m limit --limit 1/s -j $AP
$IPT -A INPUT -i br-lan -p tcp --dport 1:1024 -j $DP
$IPT -A INPUT -i br-lan -p udp --dport 1024:65535 -m limit --limit 1/s -j $AP
$IPT -A INPUT -i br-lan -p udp --dport 1:1024 -j $AP







#Tabela NAT
$IPT -t nat -I POSTROUTING -o eth1 -j MASQUERADE
#Essa regra é importante para saída de pacotes do roteador.

#Chain FORWARD
$IPT -I FORWARD -i br-lan -o eth1 -p udp -s $REDE -d 0/0 --sport 1024:65535 --dport 53 -j $AP
$IPT -I FORWARD 2 -i eth1 -o br-lan -p udp -s 0/0 -d $REDE --sport 53 --dport 1025:65535 -j $AP
$IPT -I FORWARD 3 -i br-lan -o eth1 -p tcp -s $REDE -d 0/0 --sport 1025:65535 --dport 80 -j $AP
$IPT -I FORWARD 4 -i eth1 -o br-lan -p tcp -s 0/0 -d $REDE --sport 80 --dport 1025:65535 -j $AP
$IPT -I FORWARD 5 -i br-lan -o eth1 -p tcp -s $REDE -d 0/0 --sport 1025:65535 --dport 443 -j $AP
$IPT -I FORWARD 6 -i eth1 -o br-lan -p tcp -s 0/0 -d $REDE --sport 443 --dport 1025:65535 -j $AP
$IPT -I FORWARD 7 -o eth1 -s $REDE -m conntrack --ctstate ESTABLISHED,RELATED -j $AP
$IPT -I FORWARD 8 -i eth1 -d $REDE -m conntrack --ctstate NEW -j REJECT
$IPT -I FORWARD 9 -p tcp -s 0/0 -d $REDE -m multiport --sports 110,587,809,993,994,995,465,8080 -m state --state ESTABLISHED -j ACCEPT
$IPT -I FORWARD 10 -p tcp -d 0/0 -s $REDE -m multiport --dports 110,587,809,993,994,995,465,8080 -m state --state NEW,ESTABLISHED -j ACCEPT
# Dez Regras com prioridade de execução na cadeia FORWARD (acesso a DNS, HTTP, HTTPS e outos).

#Regra para Torrent porta 56733
$IPT -A FORWARD -i br-lan -p udp -s $REDE -d 0/0 --sport 56733 --dport 1024:65535 -j $AP
$IPT -A FORWARD -i eth1 -p udp -d $REDE -s 0/0 --sport 1024:65535 --dport 56733 -j $AP


#Regra de bloqueio na chain forward
$IPT -A FORWARD -p tcp --syn -j DROP

#Tabela NAT cadeia Mangle
$IPT -t mangle -I POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o eth1 -j TCPMSS --set-mss 1492
#Regra para setar as saída de pacotes, com mtu 1492 bytes

$IPT -t mangle -I PREROUTING -i eth1 -p tcp --dport 22 -j DROP
#Regra paranoica de segurança para bloqueio de ssh

$IPT -t mangle -I PREROUTING 2 -p tcp --tcp-flags ACK,FIN,SYN SYN  -i eth1 -j TCPMSS --set-mss 1492
#Regra para setar os pacotes de entrada, com mtu em 1492 bytes.

$IPT -t mangle -A PREROUTING -i eth1 -p tcp --dport 80 -j DROP
#Regra paranoica de segurança contra acesso ao http do roteador.






echo "((( Regras de Firewall Ativadas... )))"

# EOF





#Regras básicas, desenvolvidas para uso particular, cada caso é um caso.











quinta-feira, 22 de junho de 2017

OpenWRT no TPlink TL-WR740N.V6 (parte 1)


Openwrt é um firmware alternativo para routers wireless,  open source, baseado em linux.

Para ver se o Openwrt é compatível com o dispositivo a ser atualizado:

Table of Hardware

 
Instalei o Openwrt no router Tplink TL-WR740N.V6.0, cujo modelo é a versão 6 do equipamento. Este equipamento, é bem simples, possui os requisitos mínimos para a instalação do Openwrt, 4Mb de memória flash e 32 Mb de memória ram, mas o seu preço, é o mais em conta do mercado, se der algum problema na atualização, o prejuízo não será tão grande. A versão 6.0, se difere das demais, possui um chip Qualcomm Atheros QCA9533, que opera em 560Mhz e trabalha com alimentação de 5v, diferente das versões anteriores que trabalham com 9v, chipde 400Mhz de frequência e não tem botão de liga/desliga.

Especificações do  Tplink TL-WR740N.V6.0:

Tplink TL-WR740.V6


Download do Firmware alternativo:

Firmware alternativo


Para instalação, não tem segredo, é só acessar as configurações do roteador, ir em ferramentas de sistema e atualizar firmware. Essa é uma viagem sem volta, pois a versão do Firmware openwrt-ar71xx-generic-tl-wr740n-v6-squashfs-factory, é uma versão que roda apenas em modo texto, terá que se virar, apenas com o terminal, é sem interface gráfica, todas as configurações são feitas em modo texto, instale-a por conta e risco.

Há dois arquivos para download o openwrt-ar71xx-generic-tl-wr740n-v6-squashfs-factory, que é a versão para instalação com o firmware original (de fábrica) e o openwrt-ar71xx-generic-tl-wr740n-v6-squashfs-sysupgrade, que é uma versão de atualização (upgrade).

Para mim o principal intuito de utilizar para o openwrt é "brincar" com o Netfilter, sem ter que deixar um micro ligado 24/7, desperdiçando energia elétrica.

O Roteador:























Para identificar a versão do Hardware do Roteador:














Para acessar pela primeira vez o openwrt, é através do Putty, ou um micro com linux, é só setar o IP 192.168.1.1, porta 22, no linux "ssh root@192.168.1.1":























A tela Inicial do Openwrt:


















O primeiro comando a se realizar é "passwd", sete uma senha segura, existe apenas o usuário root.

Após configurar uma senha segura, vamos configurar o roteador, os principais arquivos de configuração estão em "/etc/config"



















Para entender os principais parâmetros de configuração, a documentação está:

 Aqui

 O ideal, é rodar primeiro o comando "opkg update" e atualizar a lista de pacotes do sistema, e depois o comando "opkg install luci", para instalar  a interface gráfica. Mas o problema é a limitação de Hardware, o ideal são 8 Mb de Flash e 64 Mb de memória ram, infelizmente esse roteador possui apenas a metade do ideal, não completou a instalação do luci, travou o sistema, tive que resetar ele e  voltar as configurações originais (modo texto):



 















Nem tudo é perfeito, bugs apresentados:
- O primeiro Led (power on) não acende
- O DHCP só estava fornecendo IPv6

Para mim um led apagado não faz diferença, o DHCP, quem está fornecendo é o access point.

O mais legal é, ele roda bem o Netfilter, quase todas as regras de firewall que rodavam no Desktop, rodam no roteador.

Configuração de Redes, esta no arquivo "/etc/config/network":



















A interface eth0 está em modo bridge, formando a interface br-lan, a interface wan é a eth1, que está em modo dhcp, pegando o ip público fornecido pelo provedor, pode-se configurar como pppoe também, mas não é o meu caso:



















As configurações de rede Wireless estão no arquivo "/etc/config/wireless"
vi /etc/config/wireless:



















Se quiser desativar o WiFi é só descomentar a linha " option disabled 1"

Para setar o SSID da rede: "option ssid"
Para colocar a senha de acesso a rede "option key"

Depois, rodar o comando "/etc/init.d/network reload", o WiFi estará funcionando.

Para configurar o firewall de rede do openwrt, as configurações estão no arquivo "/etc/config/firewall", para acessá-lo:
# vi /etc/config/firewall



















Deixei somente habilitadas as seguintes linhas:

config defaults
        option syn_flood        1
        option input            ACCEPT
        option output           ACCEPT
        option forward          REJECT

e

config rule
        option name             Allow-DHCP-Renew
        option src              wan
        option proto            udp
        option dest_port        68
        option target           ACCEPT
        option family           ipv4

Essas linhas são referentes a proteção contra ataques syn_flood e acesso a dhcp na interface wan (para obter um ip público do provedor).

A configuração manual do Firewall se dá nestas linhas:

# include a file with users custom iptables rules
config include
            option path /etc/firewall.user

Arquivo de configuração (Netfilter) do Firewall está em "/etc/firewall.user"

# vi /etc/firewall.user   (parte 2).








































terça-feira, 28 de fevereiro de 2017

Regras para reforçar a segurança no Firewall Stateful


Segurança no Firewall.

Regras para reforçar a segurança no Firewall Stateful, or a bit Less

#Regras Anti-spoofing (clonagem do ip de origem), exemplos:

 iptables -A FORWARD -s 192.168.1.14 -m mac ! --mac-source 00:11:22:33:67:fa -j DROP

#Regra na table raw anti-spoofing

iptables -t raw -I PREROUTING -m rpfilter --invert -j DROP

ou

echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter


Alias
WAN="eth1"

#Regras para bloquear ICMP (ping)

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

ou

iptables -A INPUT -i $WAN -p icmp --icmp-type 8 -j DROP        #echo request

iptables -A INPUT -i $WAN -p icmp --icmp-type 0 -j DROP        #echo reply


#Regras para Limitar a comunicação ICMP

iptables -A INPUT -i $WAN -p icmp --icmp-type 8 -m limit --limit 1/s --limit-burst 1 -j ACCEPT

iptables -A INPUT -i $WAN -p icmp --icmp-type 0 -m limit --limit 2/s --limit-burst 1 -j ACCEPT


#Regras para prevenir o Traceroute

iptables -A INPUT -i $WAN -p udp -m conntrack --ctstate NEW --dport 33435:33525 -j DROP 


#Regras para descarte de pacotes inválidos (mal formado)

iptables -I INPUT -i $WAN -m conntrack --ctstate INVALID -j DROP

ou

iptables -I INPUT -i $WAN -m state --state INVALID -j DROP


#Ataques DDoS (SYN Flood)

echo 1 > /proc/sys/net/ipv4/tcp_syncookies

ou

iptables -A INPUT -i $WAN -p tcp -m conntrack --ctstate NEW -m limit --limit 1/s -j ACCEPT

iptables -A INPUT -i $WAN -p tcp -m state --state NEW -m limit --limit 1/s -j ACCEPT


#Regras para UDP Flood (para udp flood é mais complicado)

iptables -t mangle -I PREROUTING -i $WAN -p udp -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT


#Ataques externos de Ips, tentando simular o Servidor de DHCP (conexões com IP dinâmico)

#Primeiro é preciso saber o IP address, que vai te fornecer o ip por DHCP na interface WAN:

ip neigh sh | grep eth1 | cut -d " " -f1

WAN=eth1

#Colocar esse Alias no começo de seu script Firewall

IPGTW="`ip neigh sh | grep eth1 | cut -d " " -f1`"

#Regra de proteção

iptables -I INPUT -i eth1 -p udp -m udp ! -s $IPGTW -d 255.255.255.255 --sport 67:68 --dport 67:68 -j DROP
































   

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.