Estou a reconfigurar o servidor de hotspot do meu local de trabalho, e preciso de bloquear certos tipos de ligações à net, para permitir apenas 80 e 443 (http e https – navegar pela web).
Para isso, preciso de bloquear todos os protocolos P2P. Existe um programinha interessantissimo que se chama ipp2p e que funciona juntamente com o iptables.
O ipp2p funciona reconhecendo padrões no payload (carga util) do pacote, permitindo assim ao administrador de sistemas, restringir, prioritizar ou mesmo bloquear (como fiz) o tráfego.
O ipp2p tem 2 componentes: um modulo de kernel ipt_ipp2p.ko (para 2.6) e um modulo para o iptables libipt_ipp2p. Ambos têm que ser compilados a partir do código fonte.
Esta configuração foi efectuada para o Fedora Core 9, x86, kernel 2.6.27.21-78.2.41, iptables-1.4.1.1
Não existe pacote de RPM para o FC9, daí temos que o compilar manualmente.
Instalar:
- kernel-devel
- redhat-rpm-config
- kernel-headers
- rpm-build (devido ao seguinte erro: error: cannot create %sourcedir /usr/src/redhat/SOURCES)
- iptables source
- kernel source
Começar por instalar o rpm-devel
yum install rpm-build
Instalar o kernel-devel e o kernel-headers
yum install kernel-devel kernel-headers
Para instalar o kernel source e o iptables source temos que usar o yumdownloader, que se encontra no pacote yum-utils
yum install yum-utils
yumdownloader --source kernel
yumdownloader --source iptables
Nota: O yumdownloader vai deixar os pacotes na directoria onde estivermos
Após o donwload, já os podemos instalar
rpm -ivh kernel-src iptables-src (substituir pelos nomes dos pacotes)
Agora, vamos a /usr/src/redhat/SPECS e executamos os seguintes comandos:
rpmbuild -bp iptables.spec
rpmbuild -bp kernel-2.6.spec
Este comando vai preparar o codigo fonte do iptables para corresponder aos ficheiros binários instalados. O mesmo para o kernel. Após executar os comandos, os novos ficheiros rpm irão encontrar-se em /usr/src/redhat/BUILD.
De seguida, procurar em /usr/src/kernels/<kernel-version>/ um ficheiro chamado Module.symvers. Copiar este ficheiro para /usr/src/redhat/BUILD/kernel-2.6.27/linux-2.6.27.i386. Vamos para essa directoria. Agora, temos que verificar se temos uma configuracao do kernel (.config). Se nao existir, temos duas opcoes:
zcat /proc/config.gz > /usr/src/redhat/BUID/kernel-2.6.27/linux-2.6.27.i386/.config (se existir o config.gz em proc)
cd /usr/src/redhat/BUILD/kernel-2.6.27/linux-2.6.27.i386/ && make oldconfig
Executar make scripts/kconfig
Agora, vamos efectuar o download do ipp2p e compilar
após efectuar o download, descomprimimos.
tar -zxvf ipp2p-0.8.2.tar.gz
Para isto compilar, temos que aplicar 3 patches. Aplicar os patches pela ordem que se encontram aqui:
- sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/net-firewall/ipp2p/files/ipp2p-0.8.2-kernel-2.6.22.patch
- sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/net-firewall/ipp2p/files/ipp2p-0.8.2-iptables-1.4.0.patch
- sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/net-firewall/ipp2p/files/ipp2p-0.8.2-iptables-1.4.1.patch
cd ipp2p-0.8.2
aplicar os patches com o seguinte comando:
patch -p1 <../<patch_pela_ordem_em_cima>
Agora, vamos editar o Makefile e acrescentar/alterar as seguintes linhas:
(linha 6) KERNEL_SRC - Ou deixamos como está e temos o link /usr/src/linux a apontar para o nosso kernel, ou colocamos a linha onde estão as nossas sources do kernel
(linha 32) IPTABLES_SR = /usr/src/redhat/BUILD/iptables-1.4.1.1
Existe também um hack que dizem que é necessário efectuar para que o ipp2p compile, que é alterar a seguinte linha:
(linha 67) ld -shared -o libipt_ipp2p.so libipt_ipp2p.o
para
$(CC) -shared -o libipt_ipp2p.so libipt_ipp2p.o
Das vezes que alterei, nunca consegui compilar o ipp2p. Deixando a linha como estava, tudo funcionou na perfeição. Guardar o documento e sair.
Executar make e tudo deverá compilar.
Irão ser criados 2 ficheiros:
- ipt_ipp2p.ko – módulo do kernel:
insmod ipt_ipp2p.ko && depmod -a
- libipt_ipp2p.so – ficheiro para o iptables.
cp libipt_ipp2p.so /lib/xtables
Desta forma, já temos o iptables com suporte para o ipp2p.
Para saber se está tudo a funcionar e o iptables reconhece o módulo, experimentem na consola:
iptables -m ipp2p --help
e deverão obter a ajuda para o ipp2p.
Uma linha tipica que podem lá colocar (no vosso script iptables):
$IPTABLES -A FORWARD -m ipp2p --ipp2p -j DROP
o -m ipp2p é uma opção do modulo que indica para cortar todos os protocolos suportados (na ajuda têm lá isso tudo).
Espero que consigam, pois digo-vos que andei 2 dias para conseguir compilar o modulo para o iptables.