iptables & nmap no Ubuntu

1

A seguir estão as minhas regras de iptable em um servidor de nuvem Ubuntu:

cat /etc/iptables.rules:

*filter   
:INPUT DROP [598:41912]  
:FORWARD ACCEPT [0:0]  
:OUTPUT ACCEPT [456:35354] 
-A INPUT -i lo -j ACCEPT  
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT  
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  
-A INPUT -m state -i eth0 --state ESTABLISHED,RELATED -j ACCEPT  
-A INPUT -s mycompany.dyndns.com -p tcp -m tcp --dport 22 -j ACCEPT  
-A INPUT -s mycompany.dyndns.com -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -s mycompany.dyndns.com -p tcp -m tcp --dport 10000 -j ACCEPT
-A INPUT -j DROP
COMMIT

Eu não abri a porta de ftp 21 nas regras de iptable acima, mas tenho permissão para me conectar ao servidor via ftp. Como?

nmap server-ip

Not shown: 987 closed ports 

PORT         STATE    SERVICE
21/tcp        open     ftp
22/tcp        open     ssh
25/tcp        open     smtp
53/tcp        open     domain
80/tcp        open     http
111/tcp       open     rpcbind
135/tcp       filtered msrpc
139/tcp       filtered netbios-ssn
389/tcp       open     ldap
445/tcp       filtered microsoft-ds
10000/tcp      open     java-or-OTGfileshare
2401/tcp      open     cvspserver
3306/tcp      open     mysql

Nmap done: 1 IP address (1 host up) scanned in 17.46 seconds

por que essas muitas portas são mostradas como abertas. Estou claro que esses serviços estão sendo executados no servidor, mas como ele pode listar ou conectar (ftp) essas portas quando elas não estão incluídas nas regras de iptable?.

precisa de ajuda ...

The following script will be running at every 5 mins on cloud servers to update their iptables for the dyndns domain name:

#!/bin/bash
#
# A script to update iptable records for dynamic dns hosts.
# Written by: Dave Horner (http://dave.thehorners.com)
# Released into public domain.
#
# Run this script in your cron table to update ips.
#
# You might want to put all your dynamic hosts in a sep. chain.
# That way you can easily see what dynamic hosts are trusted.
#
# create the chain in iptables.
 /sbin/iptables -N dynamichosts
# insert the chain into the input chain @ the head of the list.
 /sbin/iptables -I INPUT 1 -j dynamichosts
# flush all the rules in the chain
 /sbin/iptables -F dynamichosts

HOST=$1
HOSTFILE="/root/host-$HOST"
CHAIN="dynamichosts"  # change this to whatever chain you want.
IPTABLES="/sbin/iptables"

# check to make sure we have enough args passed.
if [ "${#@}" -ne "1" ]; then
    echo "$0 hostname"
    echo "You must supply a hostname to update in iptables."
    exit
fi

# lookup host name from dns tables
IP='/usr/bin/dig +short $HOST | /usr/bin/tail -n 1'
if [ "${#IP}" = "0" ]; then
    echo "Couldn't lookup hostname for $HOST, failed."
    exit
fi

OLDIP=""
if [ -a $HOSTFILE ]; then
    OLDIP='cat $HOSTFILE'
    # echo "CAT returned: $?"
fi

# save off new ip.
echo $IP>$HOSTFILE

echo "Updating $HOST in iptables."
if [ "${#OLDIP}" != "0" ]; then
    echo "Removing old rule ($OLDIP)"
    '$IPTABLES -D $CHAIN -s $OLDIP/32 -j ACCEPT'
fi
echo "Inserting new rule ($IP)"
'$IPTABLES -A $CHAIN -s $IP/32 -j ACCEPT'

Esta é a saída de "ipables -L" no servidor de nuvem.

dynamichosts  all  --  anywhere             anywhere            
dynamichosts  all  --  anywhere             anywhere            
dynamichosts  all  --  anywhere             anywhere            
dynamichosts  all  --  anywhere             anywhere            
dynamichosts  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere tcp dpt:www
ACCEPT     all  --  anywhere             anywhere state RELATED,ESTABLISHED 
ACCEPT     all  --  anywhere             anywhere state RELATED,ESTABLISHED 
ACCEPT     tcp  --  APKGS-AP-dynamic-145.136.165.59.airtelbroadband.in  anywhere tcp dpt:ssh 
ACCEPT     tcp  --  APKGS-AP-dynamic-145.136.165.59.airtelbroadband.in anywhere tcp dpt:10000 
ACCEPT     tcp  --  APKGS-AP-dynamic-145.136.165.59.airtelbroadband.in  anywhere tcp dpt:mysql 
DROP       all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain dynamichosts (937 references)
target     prot opt source               destination         
ACCEPT     all  --  Telemedia-AP-dynamic-145.86.175.59.airtelbroadband.in  anywhere

Aqui o airtelbroadband é meu (dyndns domainname). Acho que o script publicado anteriormente cria uma nova cadeia e, a partir desse domínio, tudo é permitido - é isso mesmo? Podem ser as portas permitidas ssh, webmin, mysql e www são entradas inúteis. Mas eu quero que este domínio deve ser permitido apenas para essas portas e eu posso ter listagens nmap apenas portas permitidas no servidor de nuvem quando eu verificar a partir de meus sistemas de domínio dyndns. Mais alguma ajuda ...?

    
por user3215 11.10.2010 / 16:41

2 respostas

1

Esta é a mesma pergunta do link

Como as pessoas sugerem, suas regras de firewall têm exceções especiais para o próprio servidor em nuvem ( -A INPUT -i lo -j ACCEPT ) ou sua máquina "airtelbroadband" (o script que você está executando permite todo o tráfego do IP do dyndns selecionado).

Então, você precisa executar nmap de um endereço IP diferente (por exemplo, basta usar outra máquina na nuvem)

Se você quiser restringir o acesso do host "airtelbroadband" (por exemplo, para fins de teste), poderá substituir a última linha do script por uma lista das regras que deseja aplicar. Por exemplo, as seguintes linhas só permitirão conexões SSH, HTTP / HTTPS e MySQL de seu host inicial:

$IPTABLES -A $CHAIN -s $IP/32 -p tcp --dport 22 -j ACCEPT
$IPTABLES -A $CHAIN -s $IP/32 -p tcp --dport 80 -j ACCEPT
$IPTABLES -A $CHAIN -s $IP/32 -p tcp --dport 443 -j ACCEPT
$IPTABLES -A $CHAIN -s $IP/32 -p tcp --dport 3306 -j ACCEPT

Aviso: É muito, muito, muito fácil de se bloquear de um host em execução, mexendo com as regras do firewall, especialmente com scripts automatizados. Considere testar a partir de um terceiro host.

    
por Riccardo Murri 11.10.2010 / 20:17
1

Com base na saída de seu iptables -L , parece que não há nada lendo seu arquivo /etc/iptables.rules . Observe que a correspondência ACCEPT all -- anywhere anywhere deixará tudo entrar.

Você provavelmente desejará adicionar algo a /etc/rc.local para chamar iptables-restore < /etc/iptables.rules . Tenha cuidado para não se bloquear do seu sistema. :)

    
por Kees Cook 11.10.2010 / 20:07