iptables permite apenas conexão com a internet

1

deixe-me explicar o que eu fiz antes;

# Only INPUT policy DROP, others are ACCEPT
sudo iptables -P INPUT DROP
sudo iptables -A INPUT -p tcp --sport 80 -j ACCEPT

Eu também tento isso; para essas portas para 443 e 8080

sudo iptables -A INPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

Então eu percebi que, eu deveria permitir o servidor DNS também,

sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT
sudo iptables -A INPUT -p tcp --sport 53 -j ACCEPT

Aplicar essas regras, mas não consigo conectar a internet

Mas quando eu permito toda a porta udp eu consigo conectar.

Eu esqueço alguma coisa? ou fazer algo errado?

    
por Hasan Kaya 10.06.2015 / 19:47

1 resposta

1

Como o seu computador obtém seu endereço IP? Se for via DHCP, você precisa permitir respostas UDP para a porta 68 (ou da porta 67, veja mais adiante):

sudo iptables -A INPUT -p udp --sport 67 --dport 68 -m state --state RELATED,ESTABLISHED -j ACCEPT

Se o seu objetivo é permitir apenas a navegação no site, a conexão sempre será iniciada a partir do seu final, portanto você só precisa permitir o tráfego relacionado (neste exemplo, a suposição é que eth0 é o nome da sua NIC): / p>

sudo iptables -A INPUT -i eth0 -p tcp -m multiport --sport 80,443,8080 -m state --state ESTABLISHED,RELATED -j ACCEPT

Agora, você pode ou não precisar permitir a interface local (depende do que você está fazendo com o seu computador):

sudo iptables -A INPUT -i lo -j ACCEPT

No final, você pode combinar algumas dessas coisas e acabar com:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -i eth0 -p udp -m multiport --sport 53,67 -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp -m multiport --sport 53,80,443,8080 -m state --state ESTABLISHED,RELATED -j ACCEPT

Codifiquei isso em um dos meus computadores de teste e funcionou bem (o material da porta 22 do SSH é para mim, porque na verdade eu não sento naquele computador):

#!/bin/sh
FWVER=0.01
#
# test extremely basic 2015.06.10 Ver:0.01
#
#     run as sudo
#

echo "Loading test rule set version $FWVER..\n"

# The location of the iptables program
#
IPTABLES=/sbin/iptables

#Setting the EXTERNAL and INTERNAL interfaces and addresses for the network
#
EXTIF="eth0"
EXTIP="192.168.111.140"
UNIVERSE="0.0.0.0/0"

#Clearing any previous configuration
#
echo "  Clearing any existing rules and setting default policy to ACCEPT.."
$IPTABLES -P INPUT DROP
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
# Delete user defined chains
$IPTABLES -X
# Reset all IPTABLES counters
$IPTABLES -Z

echo about to load rules.

$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p udp -m multiport --sport 53,67 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp -m multiport --sport 53,80,443,8080 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp --dport 22 -j ACCEPT

echo Test rule set version $FWVER done.

Eu fiz isso começar automaticamente através do meu arquivo /etc/network/interfaces :

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
pre-up /home/doug/test_iptables_06

# The primary network interface
auto eth0
iface eth0 inet dhcp

Observe que, mais comumente, os usuários permitirão apenas o tráfego relacionado, com uma regra mais genérica (usando os nomes das variáveis do meu script acima):

$IPTABLES -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m state --state ESTABLISHED,RELATED -j ACCEPT

EDIT:

Às vezes, para ajudar a entender / depurar, adicionar alguns registros pode ajudar. Por exemplo:

echo about to load rules.

$IPTABLES -A INPUT -i lo -j LOG --log-prefix "ILO:" --log-level info
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p udp -m multiport --sport 53,67 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp -m multiport --sport 53,80,443,8080 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp --dport 22 -j ACCEPT
$IPTABLES -A INPUT -j LOG --log-prefix "IDROP:" --log-level info

echo Test rule set version $FWVER done.

observe /var/log/syslog para as entradas. Tenha cuidado com o logging, para não inundar o arquivo de log.

    
por Doug Smythies 10.06.2015 / 23:53