Iptables - Regras firewall falha após PREROUTING. [Resolvido]

Iniciado por marciohg, 11 de Abril de 2015, 01:52

tópico anterior - próximo tópico

marciohg

Amigos,
Estou a 2 semanas pesquisando e não encontrei uma solução.

Tenho um servidor linux com duas placas onde na placa externa (Eth0) está conectada ao meu modem roteado e a (Eth1) está voltada para a minha rede interna.
Na minha rede interna, tenho uma maquina hospedando um jogo servidor ao estilo half-life.

Porém o meu firewall não está protegendo o servidor e deixando entrar tudo, o firewall ficou montado assim.
O que será que estou fazendo de errado ?

Fiz um passo a passo e olhando o log do linux e descobri que o firewall funciona corretamente até chegar no ponto da regra "Redireciona uma faixa de portas para o SERVER KUMA" aparentemente o filtro deixa de ser aplicado e redireciona tudo por fora do firewall. O que será que estou fazendo de errado ?

Mais alguns dados:

Rede externa  192.168.0.x
Rede interna  192.168.1.x

Servidor na rede interna 192.168.1.10
Sim, liberei as portas no modem, o servidor fica on-line, mas não fica sob proteção das regras do firewall.
Citar
#limpado todas as regras iptables
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -L -n

#Compartilhando a Internet
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE


# Abre para uma faixa de endereços da rede local
iptables -A INPUT -s 192.168.1.0/255.255.255.0 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT


########### TABELAS DE PORTAS ABERTAS PARA O SERVER ###########
# PORTAS UDP
iptables -A INPUT -p udp --dport 27007 -j ACCEPT
iptables -A INPUT -p udp --dport 27008 -j ACCEPT
iptables -A INPUT -p udp --dport 27009 -j ACCEPT
iptables -A INPUT -p udp --dport 27010 -j ACCEPT

# PORTAS TCP
iptables -A INPUT -p tcp --dport 27027 -j ACCEPT
iptables -A INPUT -p tcp --dport 27028 -j ACCEPT
iptables -A INPUT -p tcp --dport 27029 -j ACCEPT
iptables -A INPUT -p tcp --dport 27030 -j ACCEPT

########### Porta HLSW ###########
iptables -A INPUT -p udp --dport 7130 -j ACCEPT

########### FIM DE PORTAS PRE CONFIGURADAS  ###########

########### Bloqueio de Pacotes DDOS ###########
iptables -A INPUT -p udp --dport 27007 -m length --length 28 -j DROP

###########  Ignora pings ###########
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

###########  Proteção contra IP spoofing ###########
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter

###########  Protege contra synflood ###########
echo "1" > /proc/sys/net/ipv4/tcp_syncookies

###########  Proteção contra ICMP Broadcasting ###########
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

###########  Bloqueia traceroute ###########
iptables -A INPUT -p udp --dport 33435:33525 -j DROP


###########  Proteções diversas contra portscanners, ping of death, ataques DoS, etc.###########
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
iptables -A FORWARD -m unclean -j DROP # XXXXXXXXXXXXXXXXXXXXXXXXXX   no chain/target/match by the name
iptables -A INPUT -m state --state INVALID -j DROP
iptables -N VALID_CHECK
iptables -A VALID_CHECK -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A VALID_CHECK -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
iptables -A VALID_CHECK -p tcp --tcp-flags ALL ALL -j DROP
iptables -A VALID_CHECK -p tcp --tcp-flags ALL FIN -j DROP
iptables -A VALID_CHECK -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A VALID_CHECK -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A VALID_CHECK -p tcp --tcp-flags ALL NONE -j DROP


########### Abre para a interface de loopback ###########
# Esta regra é essencial para o KDE e outros programas gráficos funcionarem adequadamente.
iptables -A INPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT


########### Fecha as portas udp de 1 a 1024, abre para o localhost ###########
iptables -A INPUT -p udp -s 127.0.0.1/255.0.0.0 -j ACCEPT
iptables -A INPUT -p udp --dport 1:1024 -j DROP
iptables -A INPUT -p udp --dport 59229 -j DROP


########### Redireciona uma faixa de portas para o SERVER KUMA ###########   < --------------- Possível erro daqui para baixo
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 27007:27010 -j DNAT --to-dest 192.168.1.10
iptables -A FORWARD -p udp -i eth0 --dport 27007:27010 -d 192.168.1.10 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 27027:27030 -j DNAT --to-dest 192.168.1.10
iptables -A FORWARD -p tcp -i eth0 --dport 27027:27030 -d 192.168.1.10 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 7130 -j DNAT --to-dest 192.168.1.10
iptables -A FORWARD -p tcp -i eth0 --dport 7130 -d 192.168.1.10 -j ACCEPT

########### Bloqueio de Ips ###########                                               #
#iptables -I INPUT -i eth0 -s 1.2.3.4 -j DROP # Exmplo: Bloqueia 1 ip isolado


########### block qualquer conexão que não tenha sido permitida acima ###########
iptables -A INPUT -p tcp --syn -j DROP

zekkerj

Execute os comandos abaixo e cole o resultado aqui.

sudo iptables -L -v -n

sudo iptables -t nat -L -v -n
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

marciohg


sudo iptables -L -v -n

Citarroot@server:/home/marcio# sudo iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      *       192.168.1.0/24       0.0.0.0/0           
    7   609 ACCEPT     all  --  *      *       192.168.0.0/24       0.0.0.0/0           
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:27007
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:27008
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:27009
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:27010
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:27027
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:27028
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:27029
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:27030
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:7130
    0     0 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:27007 length 28
    0     0 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpts:33435:33525
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            state INVALID
    0     0 ACCEPT     tcp  --  *      *       127.0.0.0/8          0.0.0.0/0            tcp flags:0x17/0x02
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     udp  --  *      *       127.0.0.0/8          0.0.0.0/0           
    0     0 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpts:1:1024
    0     0 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:59229
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x17/0x02

Chain FORWARD (policy ACCEPT 285 packets, 11809 bytes)
pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8 limit: avg 1/sec burst 5
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 1/sec burst 5
5606  742K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x17/0x04 limit: avg 1/sec burst 5
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x3F/0x12
    0     0 ACCEPT     udp  --  eth0   *       0.0.0.0/0            192.168.1.10         udp dpts:27007:27010
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            192.168.1.10         tcp dpts:27027:27030
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            192.168.1.10         tcp dpt:7130

Chain OUTPUT (policy ACCEPT 256 packets, 17776 bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain VALID_CHECK (0 references)
pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x3F/0x29
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x3F/0x37
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x3F/0x3F
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x3F/0x01
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x06/0x06
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x03/0x03
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x3F/0x00


sudo iptables -t nat -L -v -n

Citarroot@server:/home/marcio# sudo iptables -t nat -L -v -n
Chain PREROUTING (policy ACCEPT 3 packets, 434 bytes)
pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            udp dpts:27007:27010 to:192.168.1.10
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpts:27027:27030 to:192.168.1.10
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:7130 to:192.168.1.10

Chain INPUT (policy ACCEPT 2 packets, 370 bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         
    1    64 MASQUERADE  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0           
root@server:/home/marcio# ^C
root@server:/home/marcio#

zekkerj

OK. Então vc não tem problema com os comandos em si, as regras estão todas em memória.

Seu problema me parece ser com a sequência abaixo:

Citariptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP

Primeiro vc aceita qualquer pacote TCP, numa frequência de 1 pacote por segundo. Acho que não era isso que vc queria fazer, não?
Em seguida, vc aceita os pacotes vindos de conexões abertas ou relacionadas com as abertas. OK.
Aceitar pacotes TCP RST com limite de 1 pacote por segundo parece boa idéia.
A última regra, se eu entendi direito, dropa pacotes "SYN/ACK", relativos a conexões já abertas --- só que esses pacotes, teoricamente, foram aceitos pela regra do "ESTABLISHED/RELATED" lá em cima.

Mas, e os pacotes referentes a conexões novas? Se eles passarem por aqui, vão cair na política padrão da cadeia, que no momento é "ACCEPT", ou seja, qualquer um pode abrir conexões pra vc. É isso que vc queria?
Foi vc que criou esse script?
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

marciohg

Obrigado pela resposta zekkerj, esse script eu recuperei na época que eu usei o kurumin. Mas vc me deu uma luz muito boa em como proceder.
Obviamente é mais fácil escrever um novo script do zero e testar com o básico e ir aperfeiçoando. Irei fazer isso hoje ao chegar em casa e testarei.

O meu objetivo com esse script é funcionar como um firewall maleável e poderoso para o servidor de jogos que está em minha rede interna ( eth1 ), que costuma ter +/- 40 jogadores simultaneamente.

A minha necessidade hoje é :
* liberar para minha rede interna (eth1) as portas UDP 27008:27010, e TCP 27027:27030
* negar pacotes com tamanho 28 bytes (-m length --length 28)
* e bloquear algumas ranges de IP de proxies que normalmente atacam o server.

Vou tentar desenvolver esse script e a noite posto o resultado.
Obrigado mais uma vez:

zekkerj

Citar* negar pacotes com tamanho 28 bytes (-m length --length 28)
Pq isso???
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

marciohg

#6
Não funcionou. Pelo menos nessa minha primeira tentativa.
Pela contagem dos pacotes ocorre a mesma coisa.
Me parece que a regra de dropar pacotes funciona se o servidor de jogos estivesse no ubuntu, porem eu gostaria que esses drops funcionassem para o encaminhamento de pacotes, pois assim a rede interna estaria protegida pelo firewall.


Citar* negar pacotes com tamanho 28 bytes (-m length --length 28)
Pq isso???

É um ataque UDP especifico que explora uma vulnerabilidade de servers estilo CS / Half Life. São enviados pacotes com tamanhos de 28 e 48 bytes a uma taxa de dezenas por segundo. Com isso o servidor congela instantaneamente. Dropando esses pacotes isso não ocorreria.

Minha nova tentativa simplificada:
Citarroot@server:/home/marcio# sudo iptables -L -v -n
Chain INPUT (policy ACCEPT 92 packets, 8502 bytes)
pkts bytes target     prot opt in     out     source               destination        
   0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:27007
   0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:27008
   0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:27009
   0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:27010
   0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:27027
   0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:27028
   0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:27029
   0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:27030
   0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:7130
   0     0 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:27007 length 28
   0     0 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:27007 length 46
   0     0 ACCEPT     tcp  --  *      *       127.0.0.0/8          0.0.0.0/0            tcp flags:0x17/0x02
   0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0          
   0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x17/0x02

Chain FORWARD (policy ACCEPT 14337 packets, 4459K bytes)
pkts bytes target     prot opt in     out     source               destination        
15329 1384K ACCEPT     udp  --  eth0   *       0.0.0.0/0            192.168.1.10         udp dpts:27007:27010
   0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            192.168.1.10         tcp dpts:27027:27030
   0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            192.168.1.10         tcp dpt:7130

Chain OUTPUT (policy ACCEPT 2179 packets, 151K bytes)
pkts bytes target     prot opt in     out     source               destination

Citarroot@server:/home/marcio# sudo iptables -t nat -L -v -n
Chain PREROUTING (policy ACCEPT 10 packets, 2293 bytes)
pkts bytes target     prot opt in     out     source               destination        
   8   419 DNAT       udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            udp dpts:27007:27010 to:192.168.1.10
   0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpts:27027:27030 to:192.168.1.10
   0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:7130 to:192.168.1.10

Chain INPUT (policy ACCEPT 10 packets, 2293 bytes)
pkts bytes target     prot opt in     out     source               destination        

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination        

Chain POSTROUTING (policy ACCEPT 8 packets, 419 bytes)
pkts bytes target     prot opt in     out     source               destination        
   0     0 MASQUERADE  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0  

Regra firewall:
Citar#limpado todas as regras iptables
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -L -n
 
#Compartilhando a Internet
echo 1  /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
 
# Abre para uma faixa de endereços da rede local
#iptables -A INPUT -s 192.168.1.0/255.255.255.0 -j ACCEPT
#iptables -A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT

########### TABELAS DE PORTAS ABERTAS PARA O SERVER ###########
# PORTAS UDP
iptables -A INPUT -p udp --dport 27007 -j ACCEPT
iptables -A INPUT -p udp --dport 27008 -j ACCEPT
iptables -A INPUT -p udp --dport 27009 -j ACCEPT
iptables -A INPUT -p udp --dport 27010 -j ACCEPT

# PORTAS TCP
iptables -A INPUT -p tcp --dport 27027 -j ACCEPT
iptables -A INPUT -p tcp --dport 27028 -j ACCEPT
iptables -A INPUT -p tcp --dport 27029 -j ACCEPT
iptables -A INPUT -p tcp --dport 27030 -j ACCEPT

########### Porta HLSW ###########
iptables -A INPUT -p udp --dport 7130 -j ACCEPT

########### FIM DE PORTAS PRE CONFIGURADAS  ###########

########### Bloqueio de Pacotes DDOS ###########
iptables -A INPUT -p udp --dport 27007 -m length --length 28 -j DROP
iptables -A INPUT -p udp --dport 27007 -m length --length 46 -j DROP
# iptables -A INPUT -p udp --dport 27007 -m length --length xx -j DROP
 
########### Abre para a interface de loopback ###########
# Esta regra é essencial para o KDE e outros programas gráficos funcionarem adequadamente.
iptables -A INPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

########### Redireciona uma faixa de portas para o SERVER KUMA ###########   < --------------- Possível erro daqui para baixo
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 27007:27010 -j DNAT --to-dest 192.168.1.10
iptables -A FORWARD -p udp -i eth0 --dport 27007:27010 -d 192.168.1.10 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 27027:27030 -j DNAT --to-dest 192.168.1.10
iptables -A FORWARD -p tcp -i eth0 --dport 27027:27030 -d 192.168.1.10 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 7130 -j DNAT --to-dest 192.168.1.10
iptables -A FORWARD -p tcp -i eth0 --dport 7130 -d 192.168.1.10 -j ACCEPT

########### Bloqueio de Ips ###########                                               #
#iptables -I INPUT -i eth0 -s 1.2.3.4 -j DROP # Exmplo: Bloqueia 1 ip isolado


########### block qualquer conexão que não tenha sido permitida acima ###########
iptables -A INPUT -p tcp --syn -j DROP

zekkerj

CitarNão funcionou. Pelo menos nessa minha primeira tentativa.
Desculpe, o que não funcionou? Tentou mudar alguma coisa? O que?

CitarÉ um ataque UDP especifico que explora uma vulnerabilidade de servers estilo CS / Half Life. São enviados pacotes com tamanhos de 28 e 48 bytes a uma taxa de dezenas por segundo. Com isso o servidor congela instantaneamente. Dropando esses pacotes isso não ocorreria.
Mas da forma como vc descreveu, vc vai dropar qualquer pacote de 28 bytes, independente do serviço ou da taxa --- até um ping de 28 bytes seria dropado. É isso mesmo que vc quer fazer?
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

marciohg

CitarDesculpe, o que não funcionou? Tentou mudar alguma coisa? O que?
Sim, mudei sim, foquei somente na tentativa de fazer um firewall básico para fazer aqueles itens que eu havia dito anteriormente,

Citar* liberar para minha rede interna (eth1) as portas UDP 27008:27010, e TCP 27027:27030
* negar pacotes com tamanho 28 bytes (-m length --length 28)
* e bloquear algumas ranges de IP de proxies que normalmente atacam o server.

Na minha msg anterior já até colei os comandos iptables -L -v -n e iptables -t nat -L -v -n para facilitar a análise deste novo firewall.

Citar
Mas da forma como vc descreveu, vc vai dropar qualquer pacote de 28 bytes, independente do serviço ou da taxa --- até um ping de 28 bytes seria dropado. É isso mesmo que vc quer fazer?

Comando : iptables -A INPUT -p udp --dport 27007 -m length --length 28 -j DROP

Esse comando não dropa qualquer pacote UDP do tamanho de 28 bytes  na porta 27007 ? Se for isso está correto.


CitarDesculpe, o que não funcionou? Tentou mudar alguma coisa? O que?
Não funcionou em dropar os pacotes UDP no tamanho de 28 bytes.
Fiz o teste como o novo script iptables e enviei esses pacotes de 28 bytes UDP para o server(de jogo) através de uma máquina externa e não funcionou. O jogo travou.

Devido ao meu pouco conhecimento eu não entendo porque acontece isso. Mas o que está parecendo é que, ao dropar o input de em uma determinada condição o firewall funciona, porém ao fazer o roteamento deste pacote para a minha rede interna essas regras não se aplicam.

Você saberia me orientar como eu poderia montar esse firewall para proteger não só o linux mas a rede interna ?
Eu analisei alguns fluxos de regras do iptables e percebi que dependendo de como eu monte, posso fazer o pacote passar para dentro da rede mesmo tendo dado um drop antes.


Vou fazer hoje a noite os testes e analisar como que o firewall se comporta linha a linha e te mostrar o que ocorre.
E mais uma vez muito obrigado por sua ajuda esta sendo muito valioso esse contato.

zekkerj

Citação de: marciohg online 16 de Abril de 2015, 16:12
CitarDesculpe, o que não funcionou? Tentou mudar alguma coisa? O que?
Sim, mudei sim, foquei somente na tentativa de fazer um firewall básico para fazer aqueles itens que eu havia dito anteriormente,

Citar* liberar para minha rede interna (eth1) as portas UDP 27008:27010, e TCP 27027:27030
* negar pacotes com tamanho 28 bytes (-m length --length 28)
* e bloquear algumas ranges de IP de proxies que normalmente atacam o server.

Na minha msg anterior já até colei os comandos iptables -L -v -n e iptables -t nat -L -v -n para facilitar a análise deste novo firewall.

Citar
Mas da forma como vc descreveu, vc vai dropar qualquer pacote de 28 bytes, independente do serviço ou da taxa --- até um ping de 28 bytes seria dropado. É isso mesmo que vc quer fazer?

Comando : iptables -A INPUT -p udp --dport 27007 -m length --length 28 -j DROP

Esse comando não dropa qualquer pacote UDP do tamanho de 28 bytes  na porta 27007 ? Se for isso está correto.


CitarDesculpe, o que não funcionou? Tentou mudar alguma coisa? O que?
Não funcionou em dropar os pacotes UDP no tamanho de 28 bytes.
Fiz o teste como o novo script iptables e enviei esses pacotes de 28 bytes UDP para o server(de jogo) através de uma máquina externa e não funcionou. O jogo travou.

Devido ao meu pouco conhecimento eu não entendo porque acontece isso. Mas o que está parecendo é que, ao dropar o input de em uma determinada condição o firewall funciona, porém ao fazer o roteamento deste pacote para a minha rede interna essas regras não se aplicam.

Você saberia me orientar como eu poderia montar esse firewall para proteger não só o linux mas a rede interna ?
Eu analisei alguns fluxos de regras do iptables e percebi que dependendo de como eu monte, posso fazer o pacote passar para dentro da rede mesmo tendo dado um drop antes.


Vou fazer hoje a noite os testes e analisar como que o firewall se comporta linha a linha e te mostrar o que ocorre.
E mais uma vez muito obrigado por sua ajuda esta sendo muito valioso esse contato.

Acho que vc está "catando" o pacote na cadeia errada. Observe nessa sua figura, o fluxo de controle. A primeira cadeia onde o pacote é analisado é a "PREROUTING" (da tabela nat), e a partir daí o pacote pode ir pra cadeia INPUT (da tabela filter) ou pra cadeia FORWARD (da mesma tabela). Os pacotes que vão pro servidor de jogo, então, têm que ser controlados na cadeia FORWARD, e vc está tentando controlá-los na cadeia INPUT (que lida apenas com pacotes que vão ser processados localmente).

Outra coisa que vc deve considerar é a mudança da política das cadeias INPUT e FORWARD de "ACCEPT" para "DROP". Hoje, se você não descarta ou rejeita (*) explicitamente um pacote, ele vai ser aceito em ambas cadeias. Mudando a política para DROP, vc passa a descartar o pacote que não tiver sido aceito ou rejeitado.


(*) - Pacotes rejeitados são descartados, e uma mensagem "ICMP destination unreachable" é enviada de volta à origem, indicando o evento.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

marciohg

Funcionou, o server ficou on-line, consegui dropar os pacotes de 28 bytes UDP, mas não entendi como.
Tentei até fazer um log, mas não deu certo.
Não consegui ver nada com o comando tail -f /var/log/syslog | grep 'Lagger'


Segue abaixo o Script e os comandos iptables -L -v -n  e iptables -t nat -L -v -n

FIREWALL
Citar#limpando todas as regras iptables
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -L -n

#Compartilhando a Internet
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Abre para uma faixa de endereços da rede local
iptables -A INPUT -s 192.168.1.0/255.255.255.0 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT


#           Preventivo Ataque CS_LAGGER nas portas dos Servers
iptables -A FORWARD -p udp --dport 27007:27010 -m length --length 28 -j LOG --log-prefix "[DROP_28_Lagger]"
iptables -A FORWARD -p udp --dport 27007:27010 -m length --length 28 -j DROP


#---------------------------- TABELAS DE PORTAS ABERTAS PARA O SERVER GAME -----------------------------#
# PORTAS UDP
iptables -A FORWARD -p udp --dport 27007:27010 -j ACCEPT

# PORTAS TCP
iptables -A FORWARD -p tcp --dport 27027:27030 -j ACCEPT

#Porta HLSW
iptables -A FORWARD -p udp --dport 7130 -j ACCEPT

#---------------------------------------  FIM DE PORTAS PRE CONFIGURADAS  --------------------------------------#


# Abre para a interface de loopback.
# Esta regra é essencial para o KDE e outros programas gráficos funcionarem adequadamente.
iptables -A INPUT -p tcp --syn -s 127.0.0.1/255.0.0.0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT


# Fecha as portas udp de 1 a 1024, abre para o localhost
iptables -A INPUT -p udp -s 127.0.0.1/255.0.0.0 -j ACCEPT
iptables -A INPUT -p udp --dport 1:1024 -j DROP
iptables -A INPUT -p udp --dport 59229 -j DROP

#           Redireciona uma faixa de portas para o SERVER KUMA                            #
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 27007:27009 -j DNAT --to-dest 192.168.1.10
iptables -A FORWARD -p udp -i eth0 --dport 27007:27009 -d 192.168.1.10 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 27027:27030 -j DNAT --to-dest 192.168.1.10
iptables -A FORWARD -p tcp -i eth0 --dport 27027:27030 -d 192.168.1.10 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 7130 -j DNAT --to-dest 192.168.1.10
iptables -A FORWARD -p tcp -i eth0 --dport 7130 -d 192.168.1.10 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 7130 -j DNAT --to-dest 192.168.1.10
iptables -A FORWARD -p udp -i eth0 --dport 7130 -d 192.168.1.10 -j ACCEPT


iptables -A INPUT -p tcp --syn -j DROP



Citarroot@server:/home/marcio# sudo iptables -L -v -n
Chain INPUT (policy ACCEPT 590K packets, 17M bytes)
pkts bytes target     prot opt in     out     source               destination         
    4   474 ACCEPT     all  --  *      *       192.168.1.0/24       0.0.0.0/0           
3105  153K ACCEPT     all  --  *      *       192.168.0.0/24       0.0.0.0/0           
    0     0 ACCEPT     tcp  --  *      *       127.0.0.0/8          0.0.0.0/0            tcp flags:0x17/0x02
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     udp  --  *      *       127.0.0.0/8          0.0.0.0/0           
    0     0 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpts:1:1024
    0     0 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:59229
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:0x17/0x02

Chain FORWARD (policy ACCEPT 51682 packets, 11M bytes)
pkts bytes target     prot opt in     out     source               destination         
    0     0 LOG        udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpts:27007:27010 length 28 LOG flags 0 level 4 prefix "[DROP_28_Lagger]"
    0     0 DROP       udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpts:27007:27010 length 28
62758 5803K ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpts:27007:27010
   12   576 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpts:27027:27030
2224 1147K ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:7130
    0     0 ACCEPT     udp  --  eth0   *       0.0.0.0/0            192.168.1.10         udp dpts:27007:27009
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            192.168.1.10         tcp dpts:27027:27030
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            192.168.1.10         tcp dpt:7130
    0     0 ACCEPT     udp  --  eth0   *       0.0.0.0/0            192.168.1.10         udp dpt:7130

Chain OUTPUT (policy ACCEPT 739 packets, 50570 bytes)
pkts bytes target     prot opt in     out     source               destination         
root@server:/home/marcio#

Citarroot@server:/home/marcio# sudo iptables -t nat -L -v -n
Chain PREROUTING (policy ACCEPT 89 packets, 11397 bytes)
pkts bytes target     prot opt in     out     source               destination         
   10   530 DNAT       udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            udp dpts:27007:27009 to:192.168.1.10
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpts:27027:27030 to:192.168.1.10
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:7130 to:192.168.1.10
    0     0 DNAT       udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            udp dpt:7130 to:192.168.1.10

Chain INPUT (policy ACCEPT 44 packets, 8448 bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 1 packets, 328 bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 10 packets, 530 bytes)
pkts bytes target     prot opt in     out     source               destination         
   46  3277 MASQUERADE  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0           
root@server:/home/marcio#

zekkerj

Se não me engano a saída de log do iptables vai pra outro arquivo no Ubuntu --- veja se existe um arquivo "/var/log/kernel.log".
Vc também vai conseguir ver essa saída do iptables com o comando "dmesg", afaik.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

marciohg

Amigo zekkerj, 100% funcional. Log gerado e firewall funcional. Agora continuarei testando outros pontos. Muito obrigado pela paciência e por sua ajuda. Só mais uma duvida. Para fechar esse tópico, basta adicionar ao fim do assunto [Resolvido] ?

zekkerj

Pq "fechar" o tópico? ;)
Indicar que o problema foi resolvido é uma grande ajuda pra quem chegue aqui pesquisando.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D