Ir para o conteúdo
ou

Software livre Brasil

 Voltar a Alexos Core ...
Tela cheia

Criando regras para ips dinâmicos no iptables

23 de Abril de 2013, 0:00 , por Software Livre Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 222 vezes
<p>Uma boa prática de segurança é limitar o acesso a consoles administrativas ou conteúdo privado para origens específicas, mas como fazer isso no iptables quando seu ip é dinâmico?</p> <p>Existe um <a href="http://l7-filter.sourceforge.net/HOWTO">patch</a> que amplia o suporte do iptables até a camada de aplicação, só é que necessário recompilar o kernel o que dá um certo trabalho.</p> <p>Passei pelo mesmo problema e encontrei uma solução que vem funcionando muito bem. </p> <p>Usando os scripts abaixo as regras do iptables serão atualizadas sempre que houver mudança no ip de origem.</p> <p><strong>RedHat e derivados</strong></p> <p>Crie o arquivo <strong><em>/usr/bin/dynamic_iptables.py</em></strong> com o conteúdo abaixo. Ele será responsável por verificar se o ip foi modificado e irá reiniciar o iptables.</p> <p>Altere o valor da variável <strong>home_dyndns</strong> com o nome do host criado no seu serviço de DNS dinâmico ( e.g. no-ip ou dyndns )</p> <pre><code>#!/usr/bin/python import os def gettextoutput(cmd): """Return (status, output) of executing cmd in a shell.""" pipe = os.popen('{ ' + cmd + '; } 2>&#038;1', 'r') pipe = os.popen(cmd + ' 2>&#038;1', 'r') text = pipe.read() if text[-1:] == '\n': text = text[:-1] return text home_dyndns = "acme.no-ip.org" log_dyndns = "/tmp/iptables_noip_update.log" last_dyndns = gettextoutput("cat " + log_dyndns) cur_dyndns = gettextoutput("host " + home_dyndns) print "Log: "+ last_dyndns print "Cur: "+ cur_dyndns if last_dyndns == cur_dyndns: print "IPs match, no restart necessary" else: print "Updating last IP with current" os.system("echo '" + cur_dyndns + "' > " + log_dyndns) print "Restarting iptables to update" os.system("/etc/init.d/iptables restart") </code></pre> <p>Crie o arquivo <em><strong>/usr/bin/update_rules.sh</strong></em> que será responsável pela atualização das regras do iptables com o novo endereço de origem.</p> <p>Altere o valor da variável <em><strong>HOSTNAME</strong></em> com o nome do host criado no seu serviço de DNS dinâmico ( e.g. no-ip ou dyndns )</p> <pre><code>#!/bin/bash HOSTNAME=acme.no-ip.org LOGFILE=/tmp/iptables_noip_update.log Current_IP=$(host $HOSTNAME | cut -f4 -d' ') if [ $LOGFILE = "" ] ; then iptables -I INPUT -i eth0 -s $Current_IP -j ACCEPT echo $Current_IP > $LOGFILE else Old_IP=$(cat $LOGFILE) if [ "$Current_IP" = "$Old_IP" ] ; then echo "IP address has not changed" else iptables -D INPUT -i eth0 -s $Old_IP -j ACCEPT iptables -I INPUT -i eth0 -s $Current_IP -j ACCEPT echo $Current_IP > $LOGFILE echo "iptables have been updated" fi </code></pre> <p>No Redhat as regras do iptables são armazenadas no arquivo <em><strong>/etc/sysconfig/iptables</strong></em> criado usando o comando <em>iptables-save</em>. Quando o serviço for reiniciado as regras contidas neste arquivo serão reaplicadas. </p> <p><strong>Debian e derivados</strong></p> <p>Para rodar no Debian foi preciso fazer pequenas adaptações nos scripts. </p> <p>Crie o arquivo <strong><em>/usr/bin/dynamic_iptables.py</em></strong> com o conteúdo abaixo. </p> <p>Altere o valor da variável <strong>home_dyndns</strong> com o nome do host criado no seu serviço de DNS dinâmico ( e.g. no-ip ou dyndns )</p> <pre><code>#!/usr/bin/python import os def gettextoutput(cmd): """Return (status, output) of executing cmd in a shell.""" pipe = os.popen('{ ' + cmd + '; } 2>&#038;1', 'r') pipe = os.popen(cmd + ' 2>&#038;1', 'r') text = pipe.read() if text[-1:] == '\n': text = text[:-1] return text home_dyndns = "acme.no-ip.org" log_dyndns = "/tmp/iptables_noip_update.log" last_dyndns = gettextoutput("cat " + log_dyndns) cur_dyndns = gettextoutput("host " + home_dyndns) print "Log: "+ last_dyndns print "Cur: "+ cur_dyndns if last_dyndns == cur_dyndns: print "IPs match, no restart necessary" else: print "Updating last IP with current" os.system("echo '" + cur_dyndns + "' > " + log_dyndns) </code></pre> <p>Crie o arquivo <em><strong>/usr/bin/update_rules.sh</strong></em>.</p> <p>Altere o valor da variável <em><strong>HOSTNAME</strong></em> com o nome do host criado no seu serviço de DNS dinâmico ( e.g. no-ip ou dyndns )</p> <pre><code>#!/bin/bash HOSTNAME=acme.no-ip.org LOGFILE=iptables_noip_update.log Current_IP=$(host $HOSTNAME | cut -f4 -d' ') if [ $LOGFILE = "" ] ; then iptables -I INPUT -i eth0 -s $Current_IP -j ACCEPT echo $Current_IP > $LOGFILE else Old_IP=$(cat $LOGFILE) iptables -D INPUT -i eth0 -s $Old_IP -j ACCEPT iptables -I INPUT -i eth0 -s $Current_IP -j ACCEPT echo $Current_IP > $LOGFILE echo "iptables have been updated" fi </code></pre> <p><strong>Agendamento</strong></p> <p>Para automatizar o processo de atualização crie agendamentos no <em><strong>/etc/crontab</strong></em> ou no crontab do usuário root usando o comando <strong>sudo crontab -e</strong></p> <pre><code>* 8 * * * /usr/bin/dynamic_iptables.py > /tmp/dynamic_iptables.log * * * * * /usr/bin/update_rules.sh > /tmp/dynamic_rules.log </code></pre> <p><strong>Referências</strong></p> <p><a href="http://diginc.us/linux/2010/using-iptables-with-dynamic-ip-hostnames-like-dyndns-org/">Using IPTables with Dynamic IP hostnames like dyndns.org</a></p> <p><a href="http://l7-filter.sourceforge.net/HOWTO">L7-filter Kernel Version HOWTO</a></p> <div class="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://blog.alexos.com.br/2011/08/05/protecao-contra-portscans-com-ossec-hids-e-portsentry/" class="crp_title">Proteção contra portscans com Ossec HIDS e Portsentry</a></li><li><a href="http://blog.alexos.com.br/2011/01/20/lamp-implementando-um-servidor-lamp-seguro/" class="crp_title">LAMP++ &#8211; Implementando um servidor LAMP seguro (&hellip;</a></li><li><a href="http://blog.alexos.com.br/2012/09/21/testando-a-ferramenta-de-protecao-multi-tarefa-artillery/" class="crp_title">Testando a ferramenta de proteção multi-tarefa Artillery</a></li><li><a href="http://blog.alexos.com.br/2011/04/30/case-bloqueando-um-http-ddos-com-modsecurity-ossec-e-iptables/" class="crp_title">Case &#8211; Bloqueando um HTTP DDoS com ModSecurity, Ossec&hellip;</a></li><li><a href="http://blog.alexos.com.br/2013/05/04/alta-disponibilidade-e-seguranca-com-nginx-e-naxsi/" class="crp_title">Alta disponibilidade e segurança com Nginx e Naxsi</a></li></ul></div>
Fonte: http://blog.alexos.com.br/2013/04/23/criando-regras-para-ips-dinamicos-no-iptables-2/

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.