Buckminster
(usa Debian)
Enviado em 11/11/2013 - 14:39h
Para liberar para um IP específico:
iptables -I FORWARD -s ip_liberado -j ACCEPT
Atente bem para a ordem de colocação desta regra.
O -I coloca a regra no topo da chain, o -A coloca a regra na ordem de sequência que está no script.
Um regra com -I que esteja por último no script é a primeira regra que será executada.
No teu caso você tem essas regras:
iptables -I FORWARD -m string --algo bm --string "facebook" -j DROP
iptables -I FORWARD -m string --algo bm --string "twitter" -j DROP
iptables -I FORWARD -m string --algo bm --string "instagram" -j DROP << essa será executada primeiro.
Com -I você pode numerar as regras para melhor organização:
iptables -I FORWARD 1 -m string --algo bm --string "facebook" -j DROP
iptables -I FORWARD 2 -m string --algo bm --string "twitter" -j DROP
iptables -I FORWARD 3 -m string --algo bm --string "instagram" -j DROP
Assim ele executará na sequência que você quiser.
Mas a numeração só vale dentro de cada chain, ou seja, se for na chain INPUT, por exemplo, seria assim:
iptables -I INPUT 1 -m string --algo bm --string "facebook" -j DROP
iptables -I INPUT 2 -m string --algo bm --string "twitter" -j DROP
iptables -I INPUT 3 -m string --algo bm --string "instagram" -j DROP
E não haveriam problemas entre as chains INPUT e FORWARD. É lógico que na sequência que estão acima as regras, ele bloquearia primeiro na chain FORWARD e depois na INPUT. Caso colocasse as regras INPUT antes da FORWARD, ele bloquearia primeiro o INPUT, mas dependendo dos bloqueios/liberações colocados ali, sendo conflitantes, causariam problemas.
INPUT (entrada) bloqueia ou libera pacotes com destino à própria máquina onde está o Iptables;
FORWARD (adiante, para a frente)) bloqueia ou libera pacotes que passam pela máquina onde está o Iptables;
OUTPUT (saída) bloqueia ou libera pacotes que saem da máquina onde está o Iptables, ou seja, pacotes gerados pela própria máquina onde está o Iptables como, por exemplo, quando você abre um site no servidor onde está o Iptables e esteja tudo bloqueado na chain OUTPUT, ele bloqueará somente para o servidor.
Essas regras
iptables -I FORWARD 1 -m string --algo bm --string "facebook" -j DROP
iptables -I FORWARD 2 -m string --algo bm --string "twitter" -j DROP
iptables -I FORWARD 3 -m string --algo bm --string "instagram" -j DROP
aconselharia a deixar assim
iptables -I FORWARD 1 -m string --algo bm --string "facebook.com" -j DROP
iptables -I FORWARD 2 -m string --algo bm --string "twitter.com" -j DROP
iptables -I FORWARD 3 -m string --algo bm --string "instagram.com" -j DROP
pois como estão, o Iptables está bloqueando todo e qualquer pacote que contenha a sequência de caracteres "facebook", por exemplo, ele bloqueará todo site que, mesmo não sendo o facebook, mas que tenha essa palavra no cabeçalho.
Veja o Manuel:
http://www.vivaolinux.com.br/artigo/Manual-do-IPtables-Comentarios-e-sugestoes-de-regras/