quarta-feira, 28 de outubro de 2015

Firewall Shell script


Firewall Shell script (parte 2)

  Continuando com o script de Firewall Iptables netfilter, temos:

#!/bin/sh

#Firewall Netfilter desenvolvido por HenriqueKbs

echo "Inicializando o Firewall de Rede em `uname -n`"

#Utilizaremos caminhos de abreviação, para poupar digitação

IPT="/sbin/iptables"

#Temos que apagar as regras antigas, senão ficarão duplicadas, quando reiniciar

$IPT --flush
$IPT --delete-chain
$IPT -t nat -F
$IPT -t mangle -F

#Política das cadeias na tabela FILTER (primeiramente deixarei em ACCEPT, depois se não ouver nehuma restrição, aos usuários da rede, pode-se mudar para DROP)

#$IPT -P INPUT ACCEPT
#$IPT -P FORWARD ACCEPT
#$IPT -P OUTPUT ACCEPT

#Habilitar módulos do netfilter (necessário dependendo da distro, versão do Kernel e o que for usar)

modprobe ipt_mac
modprobe ipt_ttl
modprobe iptable_nat
modprobe iptable_mangle
modprobe ipt_limit
modprobe ipt_state
modprobe ipt_tos

#Path, álias para alguns componentes do Firewall (faça conforme suas necessidades)

AP="ACCEPT"
DP="DROP"
RJ="REJECT"
FW="FORWARD"
SERVER="192.168.1.10/32"
REDE="192.168.1.0/25"
DNS1="8.8.8.8"
DNS2="8.8.4.4"
HOST1="192.168.1.126/32"
WAN="eth0"
LAN="eth1"

#Para liberar o trafego de pacotes bypass na FORWARD
echo 1 > /proc/sys/net/ipv4/ip_forward

#Criar uma cadeia nova

$IPT -N C_ARP

#Foi criada uma nova cadeia, para trabalhar com pacotes oriundos de um roteador local, usando como base o endereço físico mac address.

$IPT -I INPUT -i $WAN -m mac --mac-source 00:02:22:1B:AE:AF -j C_ARP
$IPT -I $FW -i $WAN -m mac --mac-source 00:02:22:1B:AE:AF -p tcp -j C_ARP
$IPT -A C_ARP -m state --state INVALID -j $DP

#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

#Regras básicas na cadeia C_ARP

$IPT -A C_ARP -p udp --sport 53 -s $DNS1 -j $AP
$IPT -A C_ARP -p udp --sport 53 -s $DNS2 -j $AP
$IPT -A C_ARP -s 0/0 -p tcp --sport 80 -j $AP
$IPT -A C_ARP -s 0/0 -p tcp --sport 443 -j $AP
$IPT -A C_ARP -s 0/0 -p udp --sport 123 -j $AP
$IPT -A C_ARP -p icmp -m icmp ! --icmp-type 8 -m limit --limit 2/s -j $AP
$IPT -A C_ARP -s 0/0 -p tcp --sport 809 -j $AP
$IPT -A C_ARP -s 0/0 -p tcp --sport 995 -j $AP
$IPT -A C_ARP -d 0/0 -p tcp --dport 587 -j $AP

#Liberar acesso via SSH para o HOST1

$IPT -A INPUT -s $HOST1 -d $SERVER -p tcp --sport 1024:65535 --dport 22 -j $AP
$IPT -A INPUT -p tcp --dport 22 -j $DP

#Liberar acesso na saída do Firewall

$IPT -A OUTPUT -p icmp -m icmp ! --icmp-type 0 -m limit --limit 2/s -j $AP
$IPT -A OUTPUT -m state --state NEW,ESTABLISHED -j $AP

#Algumas regras de Bloqueio

$IPT -t mangle -A PREROUTING -i $WAN -s 0/0 --dport 23 -j $DP
$IPT -t mangle -A PREROUTING -i $LAN -m iprange --src-range 192.168.1.1-192.168.1.49 -d 0/0 -p tcp --sport 1024:65535 --dport 80:443 -m string --algo bm --string "facebook" -j $DP

#Bloqueio de Traceroute

$IPT -A C_ARP -p udp -m udp -s 0/0 --dport 33435:33525 -j $DP












terça-feira, 27 de outubro de 2015

Firewall Shell Script


Firewall Shell Script (parte 1)


   Passo a passo, como desenvolver um Firewall personalizado, completo, portável para várias distros Linux.

   A forma mais fácil para começar a desenvolver um Firewall baseado no Iptables, em qualquer distro Linux, é começar a mexer com o arquivo dump do Iptables, com os seguintes comandos:

#iptables-save > Firewall

#iptables-restore < Firewall

   Mas o arquivo dump, salvo com o comando iptables-save, é um arquivo bastante analítico, ruim de ser editado e pouco portável.

   Por isso o ideal é desenvolver um Firewall em Shell Script. Primeiro temos que entender o que é um interpretador Shell. Num sistema operacional Linux, primeiramente temos o Hardware (dispositivos físicos), a camada que envolve o Hardware, é o Kernel, responsável pelo gerenciamento e controle do Hardware. O Kernel está envolto por programas ou comandos que realizam tarefas específicas, a quarta camada, responsável pela interação do usuário com o sistema operacional, é o Shell, que usaremos para desenvolver o script de Firewall Iptables Netfilter.

Versões do Shell

Bourne Shell – é o padrão do UNIX foi escrita por Stephen Bourne da Bell Labs. Este é o Shell mais utilizado no mundo UNIX, será utilizado em todos os scripts de Firewall Iptables que desenvolvo. Sua extensão é .sh

Bourne-Again Shell - É quase 100% compatível com o Bourne Shell, porém trazem contigo inúmeros comandos derivados do C Shell e implementações feitas para o Korn Shell. Sua extensão é .bash

Korn Shell – Foi desenvolvido por David Korn da Bell Labs da AT&T, é um desenvolvimento do Bourne Shell, sendo assim compatível com o .sh. Sua extensão é .ksh

C Shell – Foi desenvolvido por Bill Joy da Berkeley University, sua estrutura de linguagem é bastante parecida com a linguagem C. Sua extensão é .csh

   Entendendo o que é o Shell, vamos começar a desenvolver um script de Firewall Iptables.
Primeiro passo (como administrador):

#cd /root
#touch Firewall
#chmod +x Firewall
#nano Firewall

   Na primeira linha do Firewall, sempre colocaremos #. A tralha somente é inserida na primeira linha ou comentários sobre alguma coisa, dentro do script. Então a primeira linha do Firewall ou qualquer script, ficaria assim:

#!/bin/sh


  Essa primeira linha, indica o caminho do interpretador Shell, no caso será usado o Bourne Shell.







 
 

crontab


crontab

É um agendador de tarefas nativo no Linux.

Para usá-lo, basta dar o comando:

#crontab -e

Sintaxe do crontab:

M    H    D    M    S      programa
I      O     I     Ê    E
N     R   A     S    M
U     A                A
T     S                 N
O                       A
S

0-59/10 * * * * /root/resolv.sh

0 0-23/1 * * * /usr/sbin/ntpdate -u 200.20.186.75

0 0 * * 0 reboot


     A primeira linha indica que o programa resolv.sh vai rodar a cada dez minutos.

     A segunda linha indica que horário do sistema será atualizado de hora em hora.

     A terceira linha indica que o computador será reiniciado todo domingo às 00:00 horas.



#cat resolv.sh

#!/bin/sh
echo "nameserver 127.0.0.1" > /etc/resolv.conf
echo "nameserver 8.8.8.8 >> /etc/resolv.conf
echo "nameserver 189.38.95.95 >> /etc/resolv.conf






sexta-feira, 23 de outubro de 2015

Gravar um DVD via linha de comando no Linux


 Para gravar um DVD, via linha de comando no Linux:

 Instale o pacote growisofs (Debian e derivados)

#apt-get update

#apt-get install growisofs



 Gravar um arquivo ou pasta

#growisofs -Z /dev/sr0 -r -J /caminho/do/arquivo ou pasta

 Exemplo:

#growisofs -Z /dev/sr0 -r -J /home/joao/Downloads



 Criar um arquivo de Imagem .iso

#genisoimage -r -J -o arquivo.iso /caminho/do/arquivo


 Para gravar a Imagem num DVD

#growisofs -dvd-compat -Z /dev/sr0=/caminho/da/imagem.iso



 Para apagar um DVD-RW (regravável)

#dvd+rw-format -blank /dev/sr0




terça-feira, 22 de setembro de 2015

Protocolos TCP e UDP



 TCP (Transmission control protocol) e UDP (User Datagram Protocol, são os principais protocolos da camada de Transporte do modelo OSI (Open Systems Interconection), são responsáveis pela segmentação de pacotes pela rede.
O protocolo TCP é orientado a conexão, possui controle de erros, com três fases distintas:
1 - Inicialização de sessão
2 - Manutenção de sessão
3 - Finalização de sessão


O protocolo UDP, não orientado a conexão, não possui controle de erros. É menos confiável, porém sua entrega de dados é mais rápida.


 Na prática, na estrutura do netfilter (a camada de transporte em geral), são usadas portas para cada tipo de serviço. Existem 65535 portas, tanto TCP e UDP que podem ser usadas na segmentação de pacotes numa rede Ethernet.
Uma forma simples de saber qual porta está vinculada a qual tipo de serviço, é consultar o arquivo “/etc/services”, em qualquer distribuição Linux:
#cat /etc/services | grep telnet
#cat /etc/services | grep tftp
#cat /etc/services | grep http


Quando criamos uma regra no iptables, para compreender a sintaxe de uma regra específica, temos basicamente:
#iptables -t filter -A INPUT -i eth0 -p tcp -s 0/0 -d 192.168.1.100 --sport 1024:65535 --dport 3389 -j ACCEPT


-Adicionando na cadeia INPUT, entrando pela interface eth0 ,qualquer endereço de origem, com destino ao ip 192.168.1.100, com porta TCP de origem dentro do range de 1024 à 65535 com destino a porta TCP 3389 (Terminal Services) é aceito.


Entendendo a utilização de portas TCP quando se inicializa uma conexão.

Acesso há um Web Site por exemplo:
 Sua porta TCP de origem sempre será alta (de 1024 à 65535) aleatório, dentro desse range, não dá para especificar exatamente qual, a porta de destino será a TCP 80 (pedido de SYN)
 Quando o Servidor Web te retorna uma resposta (ACK), ele utiliza a porta TCP 80 de origem e alguma porta alta TCP, aleatória dentro do range de 1024 à 65535 para o destino. Por isso, se utilizarmos alguma regra na cadeia FORWARD (ByPass) temos que criar uma regra simétrica, na ida e na volta, exemplo:
#iptables -A FORWARD -i eth1 -o eth0 -p tcp -s 172.16.1.0/24 -d 0/0 --sport 1024:65535 --dport 80 -j ACCEPT
#iptables -A FORWARD -i eth0 -o eth1 -p tcp -s 0/0 -d 172.16.1.0/24 --sport 80 --dport 1024:65535 -j ACCEPT



Descompactar arquivos no Linux



Arquivo .tar

Opções e sintaxe:
-c cria um novo arquivo .tar e adiciona a ele os arquivos a serem comprimidos.
-f indica que o destino é um arquivo em disco.
-p preserva permissões originais dos arquivos, quando descompactados.
-r adiciona os arquivos especificados no final do arquivo .tar, sem criar um novo.
-t lista o conteúdo do arquivo .tar.
-u adiciona os arquivos especificados ao arquivo .tar, se estes não sejam duplicados.
-v mostra o nome de cada arquivo processado.
-x retira os arquivos agrupados no arquivo .tar.


Compactar arquivo .tar
tar -cf etc_bkp.tar /etc/*


Descompactar arquivo .tar
tar -xvf etc_bkp.tar


Descompactar arquivo tar.gz
tar -vzxf arquivo.tar.gz


Descompactar arquivo tar.bz2
tar -jxvf arquivo.tar.bz2


Descompactar arquivo bz2
bunzip arquivo.bz2


Descompactar arquivo tar.xz

tar -xJf arquivo tar.xz



Descompactar arquivo zip
gunzip arquivo.zip


Visualizar arquivo zip
zcat arquivo.zip




quinta-feira, 3 de setembro de 2015

IP Internet Protocol



O protocolo IP (Internet Protocol)


 O protocolo IP (Internet Protocol) baseia-se num endereço lógico de 32 bits, formado por quatro octetos de 8 bits.
 Para entender o endereço IP (versão IPV4), deve-se entender sua estrutura binária, que compreende basicamente, os quatro octetos.
Cada octeto possui a seguinte estrutura:
   I       I       I       I        I       I       I       I
128    64     32    16      8      4      2      1
Em base10 seria o numeral 255

 I       0       0       0       0       0       0       I
128   0       0       0       0       0       0       1
Em base10 seria o numeral 129


 Os endereços IPs estão divididos em classes, e cada classe possui seu respectivo range. Junto com o IP é definido a sua máscara de rede, estes dois parâmetros definem, com exatidão três informações importantes: Endereço Lógico, Endereço de Rede e Número de Hosts


Classe/Range   Máscara de Rede Bits
A – 1 ~ 126      255.0.0.0             R.H.H.H
B – 128~191    255.255.0.0          R.R.H.H
C – 192~223    255.255.255.0       R.R.R.H
D – 224~239    Multcast
127.0.0.0 Loopback
 
 Nestes endereços estão inclusos todos os endereços IPs válidos, tanto os Privados como os Públicos (endereços de DNS válidos para Internet).


Entendendo melhor os Endereços de IPs
RFC 1918 (destinado para redes privadas)


 São os seguintes endereços destinados para redes locais (privadas), que não se destinam a rotear pela Internet:
10.0.0.0 ~ 10.255.255.255 (10.0.0.0/8)
172.16.0.0 ~ 172.31.255.255 (172.16.0.0/12)
192.168.0.0 ~ 192.168.255.55 (192.168.0.0/16)


 Para entender melhor o significado de /8, /12 e /16, veremos mais adiante o conceito de Sub Redes.


Endereços de rede Privados Class Full:

Classe Endereço         Máscara de rede  N. de Redes  N. de Hosts
A         10.0.0.0            255.0.0.0              1                  16777214
B         172.16.0.0~31  255.255.0.0         16                  65534
C         192.168.0.0      255.255.255.0      1                   254
 Analisando a Máscara de Rede é possível observar a possibilidade do número de Hosts possíveis em determinada rede.
 Classe A, equivale aos três últimos zeros da máscara de rede 255.0.0.0, cada 0 equivale a 8 Bits, então com três zeros temos 24 Bits. O cálculo de Hosts, é 2 elevado à 24 que resulta em 16777216, subtrai-se dois (rede e broadcast), resulta em 16777214 endereços para Hosts possíveis.
  Classe B, os dois últimos zeros, representam o número de Hosts possíveis, no caso 2 elevado a 16, resulta em 65534 Hosts possíveis
 Classe C, o último 0 do octeto representa a porção de Hosts. 2 elevado a 8, resulta em 254 Hosts possíveis.


 Sub Redes, conceito de VLSM (Variable Lenght Subnet Mask) e CIDR (ClassLess Inter-Domain Routing).
 Estes termos se referem a prática de “escovar Bits”, dito no jargão popular. O IPV4 está em seu limite, com tantos dispositivos IPortáveis, já está praticamente esgotado. Para aproveitar ao máximo os endereços existentes, a solução é quebrar os octetos, usando o conceito de Sub Redes.

 Lembrando o conceito básico de Máscaras Class Full temos:
Classe A - 255.0.0.0/8
Classe B - 255.255.0.0/16
Classe C - 255.255.255.0/24
 A Máscara de rede, fora desses parâmetros básicos, entra no conceito de Sub Redes.

 Para facilitar a compreensão do conceito de Sub Redes iremos exemplificar, com endereçamento privado classe C /24 em diante.
  O temo /24, se refere a máscara de rede padrão 255.255.255.0, porque temos, olhando da esquerda para a direita, exatos 24 Bits (8+8+8) referente a porção de rede e sobram 8 bits para a porção de hosts.
 Um endereço de rede comum, 192.168.1.0/25 por exemplo:
 Este /25 se refere a máscara de rede 255.255.255.255.128.
 Foi sequestrado 1Bit da porção Host para a porção Rede, no último octeto temos:
I       0        0        0        0       0       0       0
128  0        0        0        0       0       0       0

 Os últimos 7 Bits (todos os zeros) são para a porção Hosts, que resulta em 2 elevado a 7, que é igual à 128, desconta o endereço de rede e o de broadcast, temos 126 Hosts possíveis com a máscara de rede /25. 

 Vamos mudar a máscara de rede para 192.168.1.128/26
O termo /26 equivale a máscara de rede 255.255.255.192
No último octeto temos:
I       I       0       0       0       0       0       0
128 64     0        0       0       0       0       0
Sobraram 6 Bits para a porção Host, o que resulta em 62 endereços válidos.

 Usaremos agora o endereço 192.168.1.192/27
O termo /27 equivale a máscara de rede 255.255.255.224
No último octeto temos:
I       I       I       0       0       0       0       0
128  64    32     0       0       0       0       0
Sobraram 5 Bits para a porção Host, o que resulta em 30 endereços válidos.


 Agora vamos usar o endereço 192.168.1.224/28
O termo /28 equivale a máscara de rede 255.255.255.240
No último octeto temos:
I       I       I       I       0       0       0       0
128  64    32    16      0       0       0       0
Sobraram 4 Bits para a porção Host, o que resulta em 14 endereços válidos.

 Usaremos agora o endereço 192.168.1.240/29
O termo /29 equivale a máscara de rede 255.255.255.248
No último octeto temos:
I       I       I       I       I       0       0       0
128 64    32     16     8       0       0       0
Sobraram 3 Bits para a porção Host, o que resulta em 6 endereços válidos.

 Vamos usar agora o endereço 192.168.1.248/30
O termo /30 equivale a máscara de rede 255.255.255.252
No último octeto temos:
I       I        I       I       I       I       0       0
128  64    32     16     8      4       0       0
Sobraram 2 Bits para a porção Host, o que resulta em 2 endereços válidos (Link de Wan)


Conclusão:
 Desse modo, manipulando os Bits, foi possível com apenas um endereço de Rede 192.168.1.0/24 criar as seguintes Sub Redes independentes:
Sub Rede 1 – 192.168.1.0/25 (para 126 Hosts)
Sub Rede 2 – 192.168.1.128/26 (para 62 Hosts)
Sub Rede 3 – 192.168.1.192/27 (para 30 Hosts)
Sub Rede 4 – 192.168.1.224/28 (para 14 Hosts)
Sub Rede 5 – 192.168.1.240/29 (para 6 Hosts)
Sub Rede 6 – 192.168.1.248/30 (para 2 Hosts)

Sub Rede  Endereço de Rede  Endereço de Broadcast
1               192.168.1.0            192.168.1.127
2               192.168.1.128        192.168.1.191
3               192.168.1.192        192.168.1.223
4               192.168.1.224        192.168.1.139
5               192.168.1.240        192.168.1.247
6               192.168.1.248        192.168.1.251