iptables rules

1. iptables rules

Caio Victor Rozário de Menezes
CaioVictor

(usa CentOS)

Enviado em 14/08/2013 - 12:42h

Boa tarde comunidade!

Bom, tenho uma vps com CentOS e preciso configurar o iptables para bloquear ataques DDoS e Ping da Morte, com isso preciso de uma ajuda para configurar perfeitamente.
Como sou bastante iniciante em configuração do iptables, pre ser mais sincero, nunca configurei.

Nas configurações eu preciso ter atenção com o ssh/ftp, mysql/phpmyadmin, acesso remoto ao banco de dados desse servidor e com as portas 5121, 6121 e 6900.

Com isso fiz o seguinte arquivo para configuração e gostaria de verificassem se possível se está correto com as devidas proteções(DDoS, Ping da Morte...) e 'acessos'.

Segue o arquivo para configuração:

============================================================
#!/bin/sh

IPT=/sbin/iptables

$IPT -F INPUT
$IPT -f OUTPUT
$IPT -F FORWARD

$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
echo "1" > /proc/sys/net/ipv4/ip_forward

IPCLIENT=`echo $SSH_CLIENT | sed 's/\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`
$IPT -A INPUT -s ${IPCLIENT} -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -d ${IPCLIENT} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# we add some SYN flood protection
$IPT -A INPUT -p tcp --syn -m limit --limit 5/s -j ACCEPT
$IPT -A INPUT -p udp -m limit --limit 10/s -j ACCEPT
$IPT -A INPUT -p tcp --syn -j DROP
$IPT -A INPUT -p udp -j DROP

# we add some ping flood protection
$IPT -A INPUT -p icmp --icmp-type echo-request -m limit --limit 4/s -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 4/s -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-request -j DROP
$IPT -A INPUT -p icmp --icmp-type echo-reply -j DROP

# Allow incoming TCP port 22 (ssh) traffic
$IPT -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT

# DNS (client)
$IPT -A OUTPUT -p tcp --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p udp --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p udp --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Web server (http, https)
$IPT -A INPUT -p tcp --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp --dport 443 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 443 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Web Client
$IPT -A INPUT -p tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

# FTP Server
$IPT -A INPUT -p tcp --dport 20 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp --dport 21 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 21 -m state --state RELATED,ESTABLISHED -j ACCEPT

# FTP Client
$IPT -A INPUT -p tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 20 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp --sport 21 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 21 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

# Portas Passivas do FTP
$IPT -A INPUT -p tcp --dport 1024:65535 --sport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 1024:65535 --sport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT

# auth
$IPT -A INPUT -p tcp --dport 113 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 113 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow RO Ports
for PRT in 5121 6121 6900
do
$IPT -A INPUT -p tcp --dport $PRT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport $PRT -m state --state RELATED,ESTABLISHED -j ACCEPT
done

# Allow MySQL
$IPT -A INPUT -p tcp --dport 3306 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 3306 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp --dport 21 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 21 -m state --state RELATED,ESTABLISHED -j ACCEPT
============================================================

Por gentileza, alguém pode dar uma olhada e me informar se há algo errado ou esquecido, algum conflito ou falta de proteção.
Gostaria de saliente a necessidade de liberar o acesso a conexão remota ao banco de dados desse servidor, se possível liberar para apenas um domínio.

Agradeço qualquer intenção de ajuda!

Att,
CaioVictor.


  


2. Re: iptables rules

Caio Victor Rozário de Menezes
CaioVictor

(usa CentOS)

Enviado em 14/08/2013 - 21:57h

Estou muito encucado com essa configuração, já li bastante o sobre o assunto.
Mas continuo 'perdido', se alguém puder me auxiliar, ficarei muito grato.

Att,
CaioVictor.


3. Re: iptables rules

André Canhadas
andrecanhadas

(usa Debian)

Enviado em 14/08/2013 - 22:10h

CaioVictor escreveu:

Estou muito encucado com essa configuração, já li bastante o sobre o assunto.
Mas continuo 'perdido', se alguém puder me auxiliar, ficarei muito grato.

Att,
CaioVictor.


Se ja leu bastante deve saber que ddos é osso de barrar recomendo leitura:
http://www.vivaolinux.com.br/artigo/Iptables-protege-contra-SYN-FLOOD/


4. Re: iptables rules

Caio Victor Rozário de Menezes
CaioVictor

(usa CentOS)

Enviado em 14/08/2013 - 22:22h

Olá andrecanhadas, obrigado por responder!

Uhum, eu sei que é muito difícil combater ataques DDoS, digo até que de certa forma impossível, mas estou tentando diminuir a facilidade, entende?

Por isso criei esse arquivo para configurar o IPTABLES e apenas gostaria que se possível alguém pudesse verificar se fiz alguma coisa errada e se meu site terá problemas futuros para acessar remotamente o banco de dados desse servidor onde será configurado o IPTABLES, sendo bloqueado como flood ou sei la.

Novamente agradeço sua atenção.

Att,
CaioVictor.




5. Re: iptables rules

André Canhadas
andrecanhadas

(usa Debian)

Enviado em 14/08/2013 - 22:38h

CaioVictor escreveu:

Olá andrecanhadas, obrigado por responder!

Uhum, eu sei que é muito difícil combater ataques DDoS, digo até que de certa forma impossível, mas estou tentando diminuir a facilidade, entende?

Por isso criei esse arquivo para configurar o IPTABLES e apenas gostaria que se possível alguém pudesse verificar se fiz alguma coisa errada e se meu site terá problemas futuros para acessar remotamente o banco de dados desse servidor onde será configurado o IPTABLES, sendo bloqueado como flood ou sei la.

Novamente agradeço sua atenção.

Att,
CaioVictor.



Tente ler o artigo completo e vera que a regra que colocou para o syn não adianta nada apenas vai atrapalhar
http://www.vivaolinux.com.br/artigo/Iptables-protege-contra-SYN-FLOOD/?pagina=6


6. Re: iptables rules

Caio Victor Rozário de Menezes
CaioVictor

(usa CentOS)

Enviado em 14/08/2013 - 22:46h

Opa obrigado por continuar!

Estava lendo começando a ler agora, pois havia ido tomar banho, ainda não tinha chegado nessa parte, contudo, muito obrigado por salientar, talvez acabasse passando despercebido.

Como disse, estou lendo tudo, mas se se não encomodo, há algo mais que você tenha notado que eu deva alterar ou remover?

Att,
CaioVictor.

EDIT 01 =>

Terminei de ler.

Realmente a minha suposta proteção para SYN Flood não adiante em nada e ainda pode ser prejudicial.

Então por isso, obrigado andrecanhadas por me mostrar isso!

Você notou mas algum problema em meu código?
Quanto ao ping flood, há problema com ele também?
Como você parece entender, pode me ajudar mais, se assim for do seu interesse.

Att,
CaioVictor.


7. Re: iptables rules

André Canhadas
andrecanhadas

(usa Debian)

Enviado em 14/08/2013 - 23:16h

CaioVictor escreveu:

Opa obrigado por continuar!

Estava lendo começando a ler agora, pois havia ido tomar banho, ainda não tinha chegado nessa parte, contudo, muito obrigado por salientar, talvez acabasse passando despercebido.

Como disse, estou lendo tudo, mas se se não encomodo, há algo mais que você tenha notado que eu deva alterar ou remover?

Att,
CaioVictor.


Bom como tem vários serviços que necessitam de autenticação como ftp ssh etc recomendo o fail2ban para barrar tentativas de brute force:
http://www.eltonlima.com.br/?p=105


8. Re: iptables rules

Caio Victor Rozário de Menezes
CaioVictor

(usa CentOS)

Enviado em 14/08/2013 - 23:20h

Obrigado novamente!

Vou dar uma olhada nesse Fail2Ban.
Eu acabei editando minha resposta na mesmo momento que você respondeu.
Então, quanto ao ping flood, ele também é um problema?

Att,
CaioVictor.

EDIT 01 =>

Bom, fiz algumas remoções no arquivo de configuração.
Pois, eu não preciso realmente do FTP, tranfiro arquivos atravéz do ssh(utilizo o PShell), fiz a remoção também de web client/server, mas será que isso terá problemas com o acesso ao phpmyadmin?
Porque para esse servidor não irei precisar de acesso via browser apenas para o phpmyadmin.
Todas as conexões serão atravéz das portas 5121 6121 6900(que é um emulador de jogo), ao phpmyamdin, localmente/remotamente ao banco de dados, e SSH.

Ficou assim:
========================================================================
#!/bin/sh

IPT=/sbin/iptables

$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD

$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

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

# SYN Flood Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

IPCLIENT=`echo $SSH_CLIENT | sed 's/\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`
$IPT -A INPUT -s ${IPCLIENT} -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -d ${IPCLIENT} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Ping Flood Protection
$IPT -A INPUT -p icmp --icmp-type echo-request -m limit --limit 4/s -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 4/s -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-request -j DROP
$IPT -A INPUT -p icmp --icmp-type echo-reply -j DROP

# Allow incoming TCP port 22 (ssh) traffic
$IPT -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT

# DNS (client)
$IPT -A OUTPUT -p tcp --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p udp --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p udp --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPT

# auth
$IPT -A INPUT -p tcp --dport 113 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 113 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow RO Ports
for PRT in 5121 6121 6900
do
$IPT -A INPUT -p tcp --dport $PRT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport $PRT -m state --state RELATED,ESTABLISHED -j ACCEPT
done

# Allow MySQL
$IPT -A INPUT -p tcp --dport 3306 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 3306 -m state --state RELATED,ESTABLISHED -j ACCEPT
========================================================================

Att,
CaioVictor.


9. Re: iptables rules

Pedro
px

(usa Debian)

Enviado em 14/08/2013 - 23:44h

CaioVictor escreveu:

Obrigado novamente!

Vou dar uma olhada nesse Fail2Ban.
Eu acabei editando minha resposta na mesmo momento que você respondeu.
Então, quanto ao ping flood, ele também é um problema?

Att,
CaioVictor.

EDIT 01 =>

Bom, fiz algumas remoções no arquivo de configuração.
Pois, eu não preciso realmente do FTP, tranfiro arquivos atravéz do ssh(utilizo o PShell), fiz a remoção também de web client/server, mas será que isso terá problemas com o acesso ao phpmyadmin?
Porque para esse servidor não irei precisar de acesso via browser apenas para o phpmyadmin.
Todas as conexões serão atravéz das portas 5121 6121 6900(que é um emulador), ao phpmyamdin, localmente/remotamente ao banco de dados, e SSH.

Ficou assim:
========================================================================
#!/bin/sh

IPT=/sbin/iptables

$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD

$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

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

# SYN Flood Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

IPCLIENT=`echo $SSH_CLIENT | sed 's/\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`
$IPT -A INPUT -s ${IPCLIENT} -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -d ${IPCLIENT} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Ping Flood Protection
$IPT -A INPUT -p icmp --icmp-type echo-request -m limit --limit 4/s -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-reply -m limit --limit 4/s -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-request -j DROP
$IPT -A INPUT -p icmp --icmp-type echo-reply -j DROP

# Allow incoming TCP port 22 (ssh) traffic
$IPT -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT

# DNS (client)
$IPT -A OUTPUT -p tcp --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p udp --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p udp --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPT

# auth
$IPT -A INPUT -p tcp --dport 113 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 113 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow RO Ports
for PRT in 5121 6121 6900
do
$IPT -A INPUT -p tcp --dport $PRT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --sport $PRT -m state --state RELATED,ESTABLISHED -j ACCEPT
done

# Allow MySQL
$IPT -A INPUT -p tcp --dport 3306 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 3306 -m state --state RELATED,ESTABLISHED -j ACCEPT
========================================================================

Att,
CaioVictor.




Depende, mas o ping não me parece ser um grande agravante nesse caso. Já abilitou os syncookies? tente dar uma lida sobre configuração do kernel para redes! também leia sobre o sysctl este "programa" "interface" do sistema permite configurar varias coisas inclusive os syncookies! olha o meu arquivo aq:
# Configuration file for runtime kernel parameters.
# See sysctl.conf(5) for more information.

# Have the CD-ROM close when you use it, and open when you are done.
#dev.cdrom.autoclose = 1
#dev.cdrom.autoeject = 1

#-- Opções da rede

# Tcp_max_syn_backlog é o comprimento da fila de SYN
net.ipv4.tcp_max_syn_backlog = 1024

# Protection from the SYN flood attack
net.ipv4.tcp_syncookies = 1

# Tentativas de pacotes SYN
net.ipv4.tcp_syn_retries = 2

# Tentativas de pacotes SYN/ACK
net.ipv4.tcp_synack_retries = 2

# See evil packets in your logs
net.ipv4.conf.all.log_martians = 0

# Never accept redirects or source routes (these are only useful for routers)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0

# If active, ignores ICMP with broadcast destination
net.ipv4.icmp_echo_ignore_broadcasts = 1

# If active, ignores all ICMP requests
net.ipv4.icmp_echo_ignore_all = 1

# If active, accepts ICMP redirect orders
net.ipv4.conf.all.accept_redirects = 0

# Disable packet forwarding
net.ipv4.ip_forward = 0

# Enable source validation by reversed path, as specified in RFC1812
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Tweak the port range used for outgoing connections.
net.ipv4.ip_local_port_range = 32768 61000


#-- SYSTEM

# Tweak those values to alter disk syncing and swap behavior.
vm.vfs_cache_pressure = 30
vm.swappiness = 1
#vm.laptop_mode = 0

# Tweak how the flow of kernel messages is throttled.
#kernel.printk_ratelimit_burst = 10
#kernel.printk_ratelimit = 5

# Reboot 600 seconds after kernel panic or oops.
#kernel.panic_on_oops = 1
#kernel.panic = 600


Mas não saia mexendo em tudo antes de ler sobre as funções ai presentes em! neste link tem um pouco do material o resto você procura ai na net, não é tão difícil achar documentação linux hoje em dia!

LINK:http://www.gentoo.org/doc/pt_br/security/security-handbook.xml?part=1&chap=9&style=printable

Boa sorte!





---
Atenciosamente, Pedro.

Já leu meu último artigo?
LINK:
http://www.vivaolinux.com.br/artigos/userview.php?login=px

Dúvidas?! pergunte pra caixinha... ali em cima ---------------------------------------------------------------------------------------------------------------------------------------^

E seja feliz!


10. Re: iptables rules

André Canhadas
andrecanhadas

(usa Debian)

Enviado em 15/08/2013 - 00:00h

CaioVictor escreveu:

Obrigado novamente!

Vou dar uma olhada nesse Fail2Ban.
Eu acabei editando minha resposta na mesmo momento que você respondeu.
Então, quanto ao ping flood, ele também é um problema?

Att,
CaioVictor.


Não sou nenhum especialista apenas costumo ler artigos mas a respeito do ping acredito que não deve ter problemas limitar

Só adicionaria mais uma proteção contra o spoofing
{code]
# Proteção Contra IP Spoofing
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
iptables -A INPUT -s 192.168.1.0/24 -i ! eth0 -j DROP #eth0 rede local
iptables -A INPUT ! -s 192.168.1.0/24 -i eth0 -j DROP #eth0 rede local

[/code]


11. Re: iptables rules

Caio Victor Rozário de Menezes
CaioVictor

(usa CentOS)

Enviado em 15/08/2013 - 00:01h

Olá px obrigado por ajudar também!

Vou ler também o que passou e verificar onde posso chegar.

Muito obrigado pela ajuda.

Att,
CaioVictor.


12. Re: iptables rules

Caio Victor Rozário de Menezes
CaioVictor

(usa CentOS)

Enviado em 15/08/2013 - 00:07h

andrecanhadas escreveu:
Não sou nenhum especialista apenas costumo ler artigos mas a respeito do ping acredito que não deve ter problemas limitar

Só adicionaria mais uma proteção contra o spoofing
{code]
# Proteção Contra IP Spoofing
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
iptables -A INPUT -s 192.168.1.0/24 -i ! eth0 -j DROP #eth0 rede local
iptables -A INPUT ! -s 192.168.1.0/24 -i eth0 -j DROP #eth0 rede local


Certo, no caso como disse é um servidor para emulador de jogo!
Nesse caso esse IP Spoofing serviria?
E a configuração que passei acima, serviria para mim?

Toda essa ajuda está sendo muito útil.
Desculpe-me parecer muito 'pidão', é que na verdade preciso disso com um pouco de urgência, encontro-me limitado devido a falta de proteção e problemas devido a ataques.
Com o tempo vou me aprofundando nesse assunto.

Desculpe-me novamente o inconveniente!

Att,
CaioVictor.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts