A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Linux

Debian + Postfix + PostfixAdmin + SquirrelMail

Sab

16

Mai

2009


01:19

(19 votos, média 4.53 de 5) 


Iptables

Por uma questão de segurança, é bom manter o máximo possível do tráfego entre o servidor e os usuários encriptado. Não vamos entrar em detalhes sobre a criptografia usada, vamos apenas fazer uso dela e ponto. Uma das medidas é não abrir a porta 80 (http). Vamos configurar o sistema de modo que os clientes usem a porta 443 (apache2 com SSL), 993 (dovecot-imapd) e 995 (dovecot-pop3d) sempre que possível. Também vamos limitar o acesso ao SSH.

atencao NÃO USE COMO MOSTRADO, ALTERE PRIMEIRO O ENDEREÇO DE REDE (mostrado em negrito). Sugiro que você copie e cole o script no bloco de notas e altere o endereço. Depois copie e transfira o script inteiro (clicando o botão direito do mouse) para o PuTTY:

iptables -F
iptables -N FIREWALL
iptables -F FIREWALL
iptables -A INPUT -j FIREWALL
iptables -A FORWARD -j FIREWALL
iptables -A FIREWALL -p tcp -m tcp --dport 25 --syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp --dport 80 --syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp --dport 110 --syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp --dport 143 --syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp --dport 443 --syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp --dport 465 --syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp --dport 587 --syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp --dport 993 --syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp --dport 995 --syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp --dport 4650 --syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp -s 222.222.222.222/24 --dport 22 --syn -j ACCEPT
iptables -A FIREWALL -i lo -j ACCEPT
iptables -A FIREWALL -p udp -m udp --sport 53 -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp --sport 53 -j ACCEPT
iptables -A FIREWALL -p udp -m udp --dport 123 -j ACCEPT
iptables -A FIREWALL -p udp -m udp --sport 123 -j ACCEPT
iptables -A FIREWALL -p udp -m udp --sport 6277 -j ACCEPT
iptables -A FIREWALL -p udp -m udp --sport 24441 -j ACCEPT
iptables -A FIREWALL -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A FIREWALL -p icmp --icmp-type source-quench -j ACCEPT
iptables -A FIREWALL -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A FIREWALL -p icmp --icmp-type parameter-problem -j ACCEPT
iptables -A FIREWALL -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A FIREWALL -p icmp --icmp-type echo-request -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp --syn -j REJECT
iptables -A FIREWALL -p udp -m udp -j REJECT
iptables -A FIREWALL -p icmp -j DROP
iptables-save > /etc/firewall-rules
iptables-restore < /etc/firewall-rules

A porta 22 é usada para conexões SSH. Como trabalho na empresa e em casa, cujos endereços fazem parte de redes diferentes, fiz duas inserções para esta regra no iptables. Digamos que o endereço IP da minha máquina na empresa seja 100.100.100.100 e que o IP da minha máquina em casa seja 200.200.200.200, inseri o seguinte:

iptables -A FIREWALL -p tcp -m tcp -s 100.100.100.100 --dport 22 --syn -j ACCEPT
iptables -A FIREWALL -p tcp -m tcp -s 200.200.200.200 --dport 22 --syn -j ACCEPT

Este conjunto de comandos escreve as regras do firewall no arquivo /etc/firewall-rules e as coloca no iptables, mas, toda vez que o servidor for reiniciado, o iptables começa vazio porque não é alimentado com as regras que queremos. Para que isto aconteça vamos inserir um comando que configura o iptables num arquivo que "levanta" as interfaces de rede quando o sistema é iniciado:

vi /etc/network/interfaces

Com o arquivo no editor, insira o texto mostrado numa linha logo abaixo de "iface lo inet loopback":

pre-up iptables-restore < /etc/firewall-rules

E, já que você está aqui, duas linhas abaixo altere allow-hotplug eth0 para:

auto eth0

Salve o arquivo e saia (:wq). Para conferir se o script está realmente povoando as regras do iptables (firewall), dê mais um reboot no servidor:

reboot
exit

Se você tiver problemas para acessar remotamente o servidor depois do reboot, o endereço da máquina remota não é o que você indicou. Você vai precisar ir até o servidor para esvaziar o iptables com iptables -F e começar tudo de novo.

Se tudo correu bem (o PuTTY conectou normalmente), dê uma conferida com

iptables -L -v -n

para ver as regras que estão sendo aplicadas.

O que vem a seguir não está relacionado com o iptables, mas está na hora de continuar instalando o ntp, um compilador c, logcheck e mais alguma coisinha:

apt-get install openntpd build-essential make automake1.9 gcc bison flex libc6-dev logcheck logcheck-database flip psmisc dpkg-dev libcurl3 libssh2-1 byacc libbz2-dev

Para mais informações sobre as regras do logcheck e padrões que devem ser incluídos ou ignorados, dê uma olhada em

vi -R /usr/share/doc/logcheck-database/README.logcheck-database.gz

e, para debugar o logcheck, chame:

su -s /bin/bash -c "/usr/sbin/logcheck -otd" logcheck

Agora vamos eliminar alguns itens da base de dados do logcheck. Copie e cole o seguinte:

echo "^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel: Kernel logging \(proc\) stopped." >>/etc/logcheck/ignore.d.server/syslogd
echo "^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel: imklog .* log source = /proc/kmsg started." >>/etc/logcheck/ignore.d.server/syslogd
echo '^\w{3} [ :0-9]{11} [._[:alnum:]-]+ rsyslogd: \[origin software="rsyslogd" swVersion=.*x-pid=.*x-info="http://www.rsyslog.com"\] restart' >>/etc/logcheck/ignore.d.server/syslogd
echo "^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ntpd\[[0-9]+\]: clock is now unsynced$" >>/etc/logcheck/ignore.d.server/ntp
echo "^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ntpd\[[0-9]+\]: clock is now synced$" >>/etc/logcheck/ignore.d.server/ntp

Para mais informações sobre as regras e os padrões do logcheck, leia

vi -R /usr/share/doc/logcheck-database/README.logcheck-database.gz

Para debugar o logcheck você pode usar

su -s /bin/bash -c "/usr/sbin/logcheck -otd" logcheck

Informações adicionais