Configurando o filtro iptables para permitir o Git

2

Desculpe eu sou novo neste material de servidor, tão nu comigo e se eu estiver faltando alguma informação, deixe-me saber!

Estou tentando configurar meu servidor LTS Ubuntu 14.04.2 para ter um firewall sólido do iptables. Agora eu acho que é muito bom, no entanto, eu não posso fazer nenhum git puxa o servidor quando o iptables está ativo ... então a solução é desligar o firewall, fazer um pull, então reativar o firewall. É irritante e apresenta erro humano de não ativar o firewall novamente.

Eu fiz meus iptables com alguns recursos, e o git governa aqui: link

Eu tentei colocar o login para ver quais pacotes estão sendo bloqueados pelo git pull, mas nada aparece em /var/log/kern.log (embora outras coisas façam logon lá não relacionadas, então sei que está funcionando).

Ao fazer um git pull eu entendo isso:

ssh: Could not resolve hostname equity1.projectlocker.com: Name or service not known
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Aqui está minha configuração do iptables:

#!/bin/sh

echo "Flushing iptable rules"
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

echo "Setting default drop rules"
# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

echo "Enabling loopback"
# Allow unlimited traffic on loopback
#iptables -A INPUT -i lo -j ACCEPT
#iptables -A OUTPUT -o lo -j ACCEPT

echo "Allowing new and established incoming connections to port 22,80,443,3000, and 9418"
# Multiport - Allow incoming + outgoing 
#       SSH (22),
#       Web Traffic (80, 3000),
#       Secure Web Traffic (443)
#       Git (9418)
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443,3000,9418 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443,3000,9418 -m state --state ESTABLISHED -j ACCEPT

echo "Port forwarding from port 3000 to 80"
# Port Forward to 3000
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000

echo "Enabling ICMP (Pings, echos)"
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

echo "Preventing DDOS attacks"
# Prevent DOS Attacks
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

echo "Enabling logging"
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
iptables -A LOGGING -j DROP

# lastly:
# make sure nothing comes or goes out of this box
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP

Atualizado:

echo "Flushing iptable rules"
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

echo "Setting default drop rules"
# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Allow DNS Queries for Git
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT  -p udp --sport 53 -m state --state ESTABLISHED     -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT  -p tcp --sport 53 -m state --state ESTABLISHED     -j ACCEPT
...
    
por user3396509 13.04.2015 / 17:30

3 respostas

2

Além de permitir consultas DNS, você precisará permitir o tráfego pela porta 9418.

Git uses port 9418 to communicate. You don’t want to open up the port externally so I used stateful inspection to open the port only if we established the connection.

 # allow git
    sudo iptables -A OUTPUT -o eth0 -p tcp --dport 9418 -m state --state NEW,ESTABLISHED -j ACCEPT
    sudo iptables -A INPUT -i eth0 -p tcp --sport 9418 -m state --state ESTABLISHED -j ACCEPT

No meu caso, usei uma pequena variação (usei conntrack em vez de state).

sudo iptables -A OUTPUT -o eth0 -p tcp --dport 9418 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp --sport 9418 -m conntrack --ctstate ESTABLISHED -j ACCEPT

REFERÊNCIA: link

    
por 04.05.2016 / 06:49
1

Você se esqueceu de permitir consultas DNS de saída, portanto, ssh não consegue encontrar o endereço IP para o nome do host.

Você precisa permitir o tráfego de saída para a porta TCP 53 e a porta UDP 53.

    
por 13.04.2015 / 17:54
0

Sorry, I'm under the impression that the "OUTPUT -o" is the outbound connection? Am I missing the outbound port 22 for UDP? Or do I need to add a destination id with the -d?

Estou usando o CentOS 7, então minha sintaxe para o iptables será um pouco diferente da sua; mas dará a mesma ideia geral do que você precisa escrever.

Se eu quisesse abrir a porta TCP 22, escreveria o seguinte:

# Open TCP port 22 for incoming traffic:
-A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

# Open TCP port 22 for outgoing traffic:
-A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

Você notará que a sintaxe usa INPUT emparelhado com --dport 22 e OUTPUT emparelhado com --sport 22 para a entrada. É o oposto para a saída; INPUT com --sport 22 e OUTPUT com --dport 22. Espero que isso ajude alguém!

    
por 29.10.2018 / 03:18