Regras - Sugestões [RESOLVIDO]

1. Regras - Sugestões [RESOLVIDO]

Fernando Henrique Silva Batista
FerdOUT

(usa Outra)

Enviado em 05/10/2015 - 11:49h

Bom dia galera, como vão?

Pessoal, frequentemente eu tento implementar alguma coisa em meu iptables, como por exemplo, tentar driblar aquela dificuldade do office 13, em que fica tentando autenticar a todo momento praticamente. Porém não estou conseguindo, parece que qualquer regra que eu tente criar não faz efeito algum, como estou aprendendo a usar o iptables agora, e eu já fuçava nele um tempo atrás, acho que meu script deve estar uma M#$DA rsrs. Vocês podem dar uma olhada, e me dizer se tem algo aí que poderia estar de forma diferente?
Por exemplo, uma coisa que me perco muito é, quando usar o parâmetro -I, -A, eu chego a testar as regras com -I para ver se estão funcionando, uso o comando iptables -L para ver como está a lista, e parece que mesmo assim o que eu queria bloquear continua passando, ou vice versa.

Segue:

#!/bin/sh
#
# iptables Start iptables firewall
#
# chkconfig: 2345 08 92
# description: Inicialização da Firewall
#
# config: /etc/sysconfig/iptables

IPTABLES="/sbin/iptables"
MODPROBE="/sbin/modprobe"

function status()
{
${IPTABLES} -L
}

function carrega_modulos()
{
# $MODPROBE ip_tables
# $MODPROBE iptable_filter
$MODPROBE iptable_nat
$MODPROBE ip_nat_ftp
# $MODPROBE ip_conntrack
$MODPROBE ip_conntrack_ftp
}

function stop()
{
${IPTABLES} --flush
${IPTABLES} -t mangle --flush
${IPTABLES} -t nat --flush

${IPTABLES} -F
${IPTABLES} -F INPUT
${IPTABLES} -F OUTPUT
${IPTABLES} -F FORWARD
${IPTABLES} -F -t mangle
${IPTABLES} -t mangle -X
${IPTABLES} -t nat -X
${IPTABLES} -X
${IPTABLES} -t nat -F PREROUTING
${IPTABLES} -t nat -F OUTPUT
${IPTABLES} -t nat -F POSTROUTING
${IPTABLES} -t mangle -F PREROUTING
${IPTABLES} -t mangle -F OUTPUT
}

function start()
{
stop
carrega_modulos

###############################VARIAVEIS DE REDE############################
ETHInternet=eth1
IPInternet=187.50.138.218

ETHLocal=eth0
RedeLocal=192.168.0.0/24
IPLocal=192.168.0.1

ETHWireless=eth2
RedeWireless=192.168.2.0/24
IPWireless=192.168.2.1

echo "IP Internet: "$IPInternet
echo "IP Local: "$IPLocal
echo "IP Wireless: "$IPWireless

##############################HABILITA MONITORAMENTO EXTERNO##################
MONITORA=SIM
IP_MONITORA=192.168.0.5

##############################POLITICAS DE ACESSO############################
${IPTABLES} -P INPUT DROP
${IPTABLES} -P FORWARD ACCEPT
${IPTABLES} -P OUTPUT ACCEPT

####################ATIVANDO ROTEAMENTO#####################################
echo 1 > /proc/sys/net/ipv4/ip_forward

for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 >$i
done

###########################REGRAS DE INPUT#################################

${IPTABLES} -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

####################TRAFEGO DE LOOOPBACK E INDO PRO LOOPBACK#################

${IPTABLES} -A INPUT -i lo -j ACCEPT

##############TRAFEGO REDE INTERNA##########################################


${IPTABLES} -A INPUT -i $ETHLocal -j ACCEPT
${IPTABLES} -A FORWARD -i $ETHLocal -o $ETHWireless -j DROP

##################TRAFEGO DA REDE WIRELESS#####################################

${IPTABLES} -A INPUT -i $ETHWireless -j ACCEPT
${IPTABLES} -A FORWARD -i $ETHWireless -o $ETHLocal -j DROP

####################SERVICOS ESPECÃFICOS######################################

${IPTABLES} -A INPUT -p icmp --icmp-type echo-request -s 0/0 -j ACCEPT ##Serviço de Ping
${IPTABLES} -A INPUT -p udp --dport domain -j ACCEPT #DNS
${IPTABLES} -A INPUT -p tcp -s 0/0 --dport 433 -j ACCEPT ##VPN
${IPTABLES} -A INPUT -p tcp -s 0/0 --dport 1999 -j ACCEPT ##SSH
${IPTABLES} -A INPUT -p tcp -s 0/0 --dport 3389 -j ACCEPT ##Terminal Server
${IPTABLES} -A INPUT -p tcp -s 0/0 --dport 3390 -j ACCEPT ##TSWINDOWS2012
${IPTABLES} -A INPUT -p tcp -s 0/0 --dport 8080 -j ACCEPT ##DTS12
${IPTABLES} -A INPUT -p tcp -s 0/0 --dport 8888 -j ACCEPT ##SERVIÇO BRADESCO OBB
${IPTABLES} -A INPUT -p udp -s 0/0 --dport 8888 -j ACCEPT ##SERVIÇO BRADESCO OBB
${IPTABLES} -A INPUT -j ACCEPT

#########################CRIA LOG##############################################

LOG_FLOOD="2/s"
SYN_FLOOD="4/s"
PING_FLOOD="2/s"
LOG_LEVEL="debug"

#################SSH, TELNET, FTP

${IPTABLES} -A INPUT -p tcp --dport ssh -j LOG --log-level "warning" --log-prefix "Firewall - sshDENIED"
${IPTABLES} -A INPUT -p tcp --dport telnet -j LOG --log-level "warning" --log-prefix "Firewall - telnetDENIED"
${IPTABLES} -A INPUT -p tcp --dport ftp -j LOG --log-level "warning" --log-prefix "Firewall - ftpDENIED"

#######################LIBERA OFFICE13######################################

${IPTABLES} -I FORWARD -p tcp -d microsoft.com --dport 80 -j ACCEPT
${IPTABLES} -I INPUT -p tcp -d microsoft.com --dport 80 -j ACCEPT
${IPTABLES} -I FORWARD -p tcp -d microsoft.com --dport 443 -j ACCEPT
${IPTABLES} -I INPUT -p tcp -d microsoft.com --dport 443 -j ACCEPT
${IPTABLES} -I FORWARD -p tcp -s microsoft.com --dport 80 -j ACCEPT
${IPTABLES} -I INPUT -p tcp -s microsoft.com --dport 80 -j ACCEPT
${IPTABLES} -I FORWARD -p tcp -s microsoft.com --dport 443 -j ACCEPT
${IPTABLES} -I INPUT -p tcp -s microsoft.com --dport 443 -j ACCEPT
#####################LIBERA SKYPE#################
${IPTABLES} -I OUTPUT -p tcp -d apps.skype.com --dport 443 -j ACCEPT
${IPTABLES} -I FORWARD -p tcp -d apps.skype.com --dport 443 -j ACCEPT
${IPTABLES} -I INPUT -p tcp -d apps.skype.com --dport 443 -j ACCEPT
${IPTABLES} -I OUTPUT -p tcp -s apps.skype.com --dport 443 -j ACCEPT
${IPTABLES} -I FORWARD -p tcp -s apps.skype.com --dport 443 -j ACCEPT
${IPTABLES} -I INPUT -p tcp -s apps.skype.com --dport 443 -j ACCEPT
########################REGRAS DE FORWARD####################################

${IPTABLES} -A FORWARD -o $ETHLocal -m state --state INVALID -j DROP
${IPTABLES} -A FORWARD -o $ETHLocal -m state --state ESTABLISHED,RELATED -j ACCEPT
${IPTABLES} -t nat -A PREROUTING -p tcp -i eth1 --dport 443 -j ACCEPT
${IPTABLES} -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j REDIRECT --to-port 3128
#Direciona o acesso ao servidor 2003 na rede local#
${IPTABLES} -t nat -A PREROUTING -p tcp -i eth1 --dport 3389 -j DNAT --to 192.168.0.254:3389
#Direciona o acesso ao servidor 2003 na rede externa#
${IPTABLES} -t nat -A PREROUTING -p tcp -i eth2 --dport 3389 -j DNAT --to 187.50.138.218:3389
#Direciona o acesso ao servidor 2012 na rede local#
${IPTABLES} -t nat -A PREROUTING -p tcp -i eth1 --dport 3390 -j DNAT --to 192.168.0.253:3390
#Direciona o acesso ao servidor 2012 na rede externa#
${IPTABLES} -t nat -A PREROUTING -p tcp -i eth1 --dport 3390 -j DNAT --to 187.50.138.218:3390
#Direciona o acesso ao servidor 2012 para VPN#
#${IPTABLES} -t nat -A PREROUTING -p tcp -i eth2 --dport 443 -j DNAT --to 187.50.138.218:443
#Direciona o tráfego pelo site pje por fora do proxy
${IPTABLES} -t nat -A PREROUTING -i eth1 -d pje.trt15.jus.br -p tcp --dport 443 -j RETURN
#Direciona o acesso ao Datasul 12 na rede interna# DTSPRODUÇÃO
${IPTABLES} -t nat -A PREROUTING -p tcp -i eth1 --dport 8080 -j DNAT --to 192.168.0.253:8080
#Direciona o acesso ao Datasul 12 na rede internet# DTSTESTE
${IPTABLES} -t nat -A PREROUTING -p tcp -i eth1 --dport 8180 -j DNAT --to 192.168.0.253:8180
#Direciona acessos VPN para o windows 2012#
#${IPTABLES} -t nat -A PREROUTING -i eth1 -p tcp -m multiport --dport 1723,47 -j DNAT --to 192.168.0.253:1723
#${IPTABLES} -A FORWARD -p tcp -m multiport --port 1723,47 -j ACCEPT
#${IPTABLES} -t nat -A PREROUTING -i eth1 -p udp -m multiport --dport 1723,47 -j DNAT --to 192.168.0.253:1723
#${IPTABLES} -A FORWARD -p udp -m multiport --port 1723,47 -j ACCEPT
#${IPTABLES} -t nat -A PREROUTING -i eth1 -p gre -j DNAT --to 192.168.0.253
#${IPTABLES} -t nat -A PREROUTING -p tcp -m tcp -d 187.50.138.218 --dport 1723 -j DNAT --to-destination 187.50.138.218:1723
${IPTABLES} -I FORWARD -p tcp --dport 1723 -j ACCEPT
############################REGRAS AUXILIARES###############################

#############################MELHORA SSH#####################################
${IPTABLES} -t nat -A PREROUTING -t mangle -p tcp --dport ssh -j TOS --set-tos Minimize-Delay

##########################HTTP E NAT########################################

###################CONECTIVIDADE SOCIAL - IP DA REDE INTERNA PARA PROXY TRANSP#####
${IPTABLES} -A FORWARD -s 192.168.0.43/24 -d 0/0 -p tcp --dport 80 -j ACCEPT

##########################LIBERANDO ACESSO DE SERVIDORES PARA ATUALIZACAO################
${IPTABLES} -A FORWARD -s 192.168.0.4/24 -d 0/0 -j ACCEPT


###TESTANDO A LIBERAÇÃO PARA O PC DO CÉSAR##

#${IPTABLES} -I INPUT -d 192.168.0.216/24 -j ACCEPT
#${IPTABLES} -I OUTPUT -d 192.168.0.216/24 -j ACCEPT

#######################TESTE DE REGRAS###################################

##########################PERMITE ACESSO POR IP##########################
${IPTABLES} -A FORWARD -s 192.168.0.0/24 -j ACCEPT

#########################BLOQUEIA PACOTES REQUISITADOS NA PORTA 80#######################
#${IPTABLES} -I FORWARD -s $RedeLocal -p tcp --dport 80 -j DROP
#${IPTABLES} -I FORWARD -s $RedeLocal -p tcp --dport 8080 -j ACCEPT
#${IPTABLES} -I OUTPUT -s 192.168.0.3/8 -j DROP
###########DIRECIONA REDE WIRELESS E LOCAL PARA DESTIN INTERNET####################
${IPTABLES} -t nat -A POSTROUTING -s $RedeLocal -j SNAT --to $IPInternet
${IPTABLES} -t nat -A POSTROUTING -s $RedeWireless -j SNAT --to $IPInternet


##################################FIM#########################################

}
case "$1" in
"start")
start
echo "Iniciando Firewall"
;;

"stop")
stop
echo "Parando Firewall"
sleep 2
echo "ok."
;;

"restart")
echo "Reiniciando Firewall"
sleep 1
echo "ok."
stop; start
;;
*)
esac


Vocês acham que alguma pode estar ridiculamente errada aí?

Obrigado!


  


2. Re: Regras - Sugestões

Buckminster
Buckminster

(usa Debian)

Enviado em 05/10/2015 - 14:13h

Em primeiro lugar, evite isto

IPTABLES="/sbin/iptables"
MODPROBE="/sbin/modprobe"

ou seja, evite criar varáveis desnecessárias.

Use direto

iptables -A INPUT -p tcp --dport 443 -j ACCEPT

e

modprobe ip_tables

Seguem algumas explicações:

O iptables lê as regras de cima para baixo, de acordo com cada tabela, ou seja, se uma regra bloquear tudo numa determinada tabela, as exceções (liberações) devem ser colocadas acima desta regra.

Exemplo:

iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j REJECT
iptables -A INPUT -p tcp --dport 443 -j DROP

A primeira regra libera, a segunda rejeita e a terceira regra, nega o acesso. A primeira regra é que terá o privilégio, então, o acesso na porta 443 será liberado para todos, mesmo rejeitando e negando o acesso nas regras subsequentes.

Caso queiramos negar o acesso à porta 443 somente para alguns IPs, por exemplo, devemos colocar essas regras ACIMA da primeira regra.

Lembrando que nas regras acima não foi determinada nenhuma tabela (-t), então, elas serão aplicadas somente na tabela padrão, a filter, e, no caso, somente na chain INPUT.

Em relação à -I e -A, as regras com -A colocam as regras em sequência na chain (INPUT, OUTPUT ou FORWARD), veja o exemplo das 3 regras acima. Elas serão lidas e executadas pelo Iptables na sequência em que estão no script. Quando ocorrer incompatibilidade entre chains, valerá a primeira como no exemplo acima.

Caso elas fossem com -I, o -I coloca a regra no topo da chain, por exemplo:

iptables -I INPUT -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j REJECT
iptables -I INPUT -p tcp --dport 443 -j DROP

nesse caso acima seria o contrário, a última regra ali colocada é que seria executada primeiro porque o -I coloca a regra no topo da chain.
Outra coisa, isso funciona para cada chain separadamente, por exemplo:

iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j REJECT
iptables -A FORWARD -p tcp --dport 443 -j DROP

veja que cada regra está com uma chain diferente, ou seja, as regras são ordenadas em sequência dentro de cada chain, sendo que uma regra de uma chain não influencia na execução de outra.

O recomendável quando se usa -I é numerar as chains, exemplos:

iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT
iptables -I INPUT 2 -p tcp --dport 443 -j REJECT
iptables -I INPUT 3 -p tcp --dport 443 -j DROP

iptables -I FORWARD 1 -p tcp --dport 443 -j ACCEPT
iptables -I FORWARD 2 -p tcp --dport 443 -j REJECT
iptables -I FORWARD 3 -p tcp --dport 443 -j DROP

veja que a numeração ocorre dentro de cada chain, assim as regras serão lidas e executadas de acordo com a numeração, fica mais organizado.

Segue um exemplo de um cabeçalho de script, se quiser adapte para ti:

#!/bin/bash
#
#Desabilitando o tráfego entre as placas
#################################
echo 0 > /proc/sys/net/ipv4/ip_forward
#
##Apagando e restaurando as chains e tabelas
######################################
iptables -Z # Zera as regras das chains
iptables -F # Remove as regras das chains
iptables -X # Apaga as chains
iptables -t nat -Z
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -Z
iptables -t mangle -F
iptables -t mangle -X
#
##Proteção contra ping, SYN Cookie, IP Spoofing e proteções do kernel
##########################################################
echo 1 > /proc/sys/net/ipv4/tcp_syncookies #Syn Flood
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter #Ip Spoofing
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts #Sem ping e port scanners
echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses #Sem resposta remota
for i in /proc/sys/net/ipv4/conf/*; do
echo 0 > $i/accept_redirects #Sem redirecionar rotas
echo 0 > $i/accept_source_route #Sem traceroute e tracert
echo 1 > $i/log_martians #Loga pacotes suspeitos no kernel
echo 1 > $i/rp_filter #Ip Spoofing
echo 1 > $i/secure_redirects; done #Redirecionamento seguro de pacotes
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all #Sem ping
#
##Carregando os módulos – Não é necessário todos os módulos,
#somente aqueles que você irá utilizar.
#O iptables, por padrão, carrega os módulos principais automaticamente.
# Leia o manual.
#Para identificar qual módulo adicional carregar, você deve elaborar todo o script
#e depois de acordo com o nome do alvo utilizado, você carrega o mesmo módulo.
#Por exemplo, se você utilizar a seguinte regra:
# iptables -A FORWARD -p udp -m multiport --dport 80,1024:65535 -j DROP
#o módulo “ipt_multiport” deve ser carregado.
#Abaixo estão quase todos os módulos.
################################
modprobe ip_tables
modprobe iptable_nat
modprobe iptable_filter
modprobe iptable_mangle
#
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ip_queue
modprobe ip_gre
#
modprobe ipt_LOG
modprobe ipt_MARK
modprobe ipt_REDIRECT
modprobe ipt_REJECT
modprobe ipt_MASQUERADE
modprobe ipt_TCPMSS
modprobe ipt_TOS
modprobe ipt_NETMAP
#
modprobe ipt_limit
modprobe ipt_mac
modprobe ipt_multiport
modprobe ipt_owner
modprobe ipt_state
modprobe ipt_tos
modprobe ipt_mark
modprobe ipt_tcpmss
modprobe ipt_string
modprobe ipt_statistic
#
modprobe nf_nat_pptp
modprobe nf_nat_proto_gre
#
##Definindo políticas padrões
########################
iptables -P INPUT DROP # iptables a política padrão da chain INPUT é proibir tudo
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#
##Liberando a Loopback
####################
#iptables -t nat -A POSTROUTING -o lo -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT # adiciona regra na chain INPUT para liberar a loopback
#iptables -A FORWARD -o lo -j ACCEPT
#iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
#
##Regras de segurança na internet
############################
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW ! -i eth0 -j DROP # Interface de entrada da internet
iptables -A FORWARD -m state --state NEW ! -i eth0 -j DROP
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
#
##Proteção contra Syn-flood oriundo da própria rede (Utilizado em provedores-adaptei)
#######################################################################
#iptables -A FORWARD -i eth0 -s ! 172.16.1.0/24 -j DROP # Endereço da rede interna
iptables -A FORWARD -i eth1 -s ! 172.16.1.0/24 -j DROP
#
##Proteção contra Port scanners avançados (nmap)
##########################################
iptables -N PORTS # Cria uma nova chain
iptables -A PORTS -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A PORTS -p tcp --tcp-flags ALL SYN,ACK,FIN,RST,URG -j DROP
iptables -A PORTS -p tcp --tcp-flags ALL ALL -j DROP
iptables -A PORTS -p tcp --tcp-flags ALL FIN -j DROP
iptables -A PORTS -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A PORTS -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A PORTS -p tcp --tcp-flags ALL NONE -j DROP
#
##Liberando portas somente para a rede interna
#######################################
#iptables -A INPUT -p tcp --dport 3128 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -i eth1 -j ACCEPT
#iptables -A INPUT -p tcp --dport 123 -i $INTRANET -j ACCEPT
#iptables -A INPUT -p udp --dport 123 -i $INTRANET -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -i eth1 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -i eth1 -j ACCEPT
iptables -A INPUT -p udp --dport 110 -i eth1 -j ACCEPT
#iptables -A INPUT -p tcp --dport 3000 -i eth1 -j ACCEPT
#
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -p udp --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp --dport 111 -i eth1 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -i eth1 -j ACCEPT
#iptables -A INPUT -p udp --dport 111 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp --dport 2049 -i eth1 -j ACCEPT
iptables -A INPUT -p udp --dport 2049 -i eth1 -j ACCEPT
#iptables -A INPUT -p tcp --dport 2049 -i eth1 -j ACCEPT
#iptables -A INPUT -p udp --dport 2049 -i eth1 -j ACCEPT
#iptables -A FORWARD -p udp --sport 53 -j ACCEPT
#iptables -A FORWARD -p tcp --sport 25 -j ACCEPT
#iptables -A FORWARD -p tcp --sport 110 -j ACCEPT
#iptables -A FORWARD -p udp --sport 110 -j ACCEPT
#

Leia isto:
http://www.vivaolinux.com.br/artigo/Manual-do-IPtables-Comentarios-e-sugestoes-de-regras/



3. Re: Regras - Sugestões [RESOLVIDO]

Fernando Henrique Silva Batista
FerdOUT

(usa Outra)

Enviado em 06/10/2015 - 11:52h


Muito obrigado Buckminster, estou implementando algumas de suas dicas.

Estava quase me descabelando com essas regras kkkk, mas estou aprendendo, vira e mexe vou testando algumas coisas.

Até mais!


4. Re: Regras - Sugestões [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 06/10/2015 - 15:46h

De nada.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts