Permitir porta específica através do iptables

0

Eu sou novo no iptables. Eu criei um script que redefine (reset.sh) iptables e outro script (ip-chains.sh) cria cadeias como cadeias de saída de entrada. No mesmo scipr (ip-chains.sh) na parte inferior, criei uma regra apenas para testar para permitir a porta de entrada e saída 2121 que estou usando para FTP.

O problema é quando eu executo o script de redefinição eu posso acessar o servidor FTP, mas quando eu executo o script ip-chains.sh eu não posso. Estou confuso porque tenho a regra no mesmo arquivo de script para permitir o tráfego na porta 2121.

Estou usando a eth1 para conectar ao servidor FTP 192.168.1.0 e eth2 para conectar-se à máquina cliente. Aqui está o meu scipt ip-chains.sh:

    #!/bin/bash

#Flush tables and set policies to drop

iptables -F

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#Create Logging Chain for accepted packets on INPUT CHAIN

iptables -N accept-input

#Rules for  accept-input chain

iptables -A accept-input -j LOG --log-prefix "INPUT-ACCEPTED "
iptables -A accept-input -j ACCEPT

#Create Logging Chain for dropped packets on INPUT CHAIN

iptables -N drop-input

#Rules for  drop-input chain

iptables -A drop-input -j LOG --log-prefix "INPUT-DROPPED "
iptables -A drop-input -j DROP

#Create Logging Chain for accepted packets on OUTPUT CHAIN

iptables -N accept-output

#Rules for  accept-output chain

iptables -A accept-output -j LOG --log-prefix "OUTPUT-ACCEPTED "
iptables -A accept-output -j ACCEPT

#Create Logging Chain for dropped packets on OUTPUT CHAIN

iptables -N drop-output

#Rules for  drop-output chain

iptables -A drop-output -j LOG --log-prefix "OUTPUT-DROPPED "
iptables -A drop-output -j ACCEPT


#Allow port 2121

iptables -A INPUT -i eth1 -p tcp -s 0/0 --dport 2121 -m state --state NEW,ESTABLISHED,RELATED -j accept-input
iptables -A OUTPUT -o eth1 -p tcp -d 0/0 --sport 2121 -m state --state ESTABLISHED,RELATED -j accept-input

iptables -A INPUT -i eth2 -p tcp -s 0/0 --dport 2121 -m state --state NEW,ESTABLISHED,RELATED -j accept-input
iptables -A OUTPUT -o eth2 -p tcp -d 0/0 --sport 2121 -m state --state ESTABLISHED,RELATED -j accept-input

#Log all DROPPED traffic

iptables -A INPUT -j drop-input
iptables -A OUTPUT -j drop-output

iptables -L -n
    
por John Ambers 23.10.2016 / 20:40

2 respostas

1

Tenha cuidado, quando você flush suas regras com iptables -F você liberar todas as suas regras, mas não a sua política! Então, se você tem policy DROP , você pode facilmente ser bloqueado do seu sistema!

Geralmente é o conjunto mais seguro policy ACCEPT com DROP como última regra da cadeia. Ou enquanto estiver trabalhando remotamente em seu firewall, configure um trabalho cron para definir policy ACCEPT e iptables -F a cada cinco ou dez minutos; desta forma você tem certeza de ter acesso ao seu sistema em qualquer caso.

Em seu script, você tem iptables -p FORWARD DROP e não há regras de eth1 a eth2 e vice-versa. Você precisa definir iptables -p FORWARD ACCEPT ou adicionar algumas regras à cadeia de encaminhamento para resolver seu problema, por exemplo:

iptables -A FORWARD -p tcp -i eth1 -o eth2 -s 2121 -d 2121 -j ACCEPT;
iptables -A FORWARD -p tcp -i eth2 -o eth1 -s 2121 -d 2121 -j ACCEPT;
    
por 23.10.2016 / 21:24
0

use -v para ver onde os pacotes chegaram ...

iptables --list -n -v
    
por 23.10.2016 / 20:52