Confundido com o ufw

6

Eu quero que o ufw bloqueie tudo na minha interface externa (enp6s0) mas permita tudo nos meus internos (br0, tap0).

Eu tive problemas enormes com isso (o ufw estava bloqueando coisas no br0 mesmo que eu configurei uma regra para permitir a entrada), então eu configurei o ufw para permitir tudo e então comecei a adicionar exceções para a interface que eu queria bloquear assim:

ufw deny in on enp6s0 to any port 67 proto udp

Eu tenho alguns desses para cada porta que não quero acessar de fora. Mas essa solução me deixa desconfortável: basicamente, estou deixando tudo em aberto, só não escutando. Mais cedo ou mais tarde vou esquecer de proteger algo.

Então eu fiz o contrário e queria criar um conjunto de regras que permitisse certas portas, mas negasse todo o resto, assim:

ufw insert 1 allow in on enp6s0 from any port ssh proto tcp
ufw insert 2 allow in on enp6s0 from any port http proto tcp
ufw insert 3 deny in on enp6s0 from any port 30:65535 proto tcp

O último comando foi intencionalmente deixando a porta 22 aberta para que eu pudesse testar a eficácia das regras sem correr o risco de perder minha conexão ssh com o servidor.

No entanto, adicionar a regra de negação bloqueou imediatamente todo o servidor. Tudo, não apenas 30: 65535. O nmap achou que estava baixo. Apenas por alguma sorte, minha sessão ssh existente permaneceu ativa para que eu pudesse excluir a regra.

Agora, eu sei que não sou um guru ou algo assim, mas isso realmente veio como (outro) choque para mim: parece que não tenho ideia de como isso funciona.

Alguém pode me esclarecer sobre a regra de negação? Como preciso configurá-lo?

Edição final: Descobrimos que a desinstalação & reinstalar o ufw corrigiu os problemas. Parece que eu estraguei alguma configuração em algum momento que causou todo o comportamento inexplicável.

Editar: minha configuração de rede

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

# Our additions start here:
# tap interface (VMs will use this one)
auto tap0
iface tap0 inet manual
    pre-up ip tuntap add tap0 mode tap user root
    up ip link set dev tap0 up
    post-down ip link del dev tap0

# bridge
auto br0
iface br0 inet static
    bridge_ports tap0
    address 192.168.100.1
    netmask 255.255.255.0
    broadcast 192.168.100.255

iptables -S

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N ufw-after-forward
-N ufw-after-input
-N ufw-after-logging-forward
-N ufw-after-logging-input
-N ufw-after-logging-output
-N ufw-after-output
-N ufw-before-forward
-N ufw-before-input
-N ufw-before-logging-forward
-N ufw-before-logging-input
-N ufw-before-logging-output
-N ufw-before-output
-N ufw-logging-allow
-N ufw-logging-deny
-N ufw-not-local
-N ufw-reject-forward
-N ufw-reject-input
-N ufw-reject-output
-N ufw-skip-to-policy-forward
-N ufw-skip-to-policy-input
-N ufw-skip-to-policy-output
-N ufw-track-forward
-N ufw-track-input
-N ufw-track-output
-N ufw-user-forward
-N ufw-user-input
-N ufw-user-limit
-N ufw-user-limit-accept
-N ufw-user-logging-forward
-N ufw-user-logging-input
-N ufw-user-logging-output
-N ufw-user-output
-A INPUT -j ufw-before-logging-input
-A INPUT -j ufw-before-input
-A INPUT -j ufw-after-input
-A INPUT -j ufw-after-logging-input
-A INPUT -j ufw-reject-input
-A INPUT -j ufw-track-input
-A FORWARD -j ufw-before-logging-forward
-A FORWARD -j ufw-before-forward
-A FORWARD -j ufw-after-forward
-A FORWARD -j ufw-after-logging-forward
-A FORWARD -j ufw-reject-forward
-A FORWARD -j ufw-track-forward
-A FORWARD -i br0 -o enp6s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i enp6s0 -o br0 -j ACCEPT
-A OUTPUT -j ufw-before-logging-output
-A OUTPUT -j ufw-before-output
-A OUTPUT -j ufw-after-output
-A OUTPUT -j ufw-after-logging-output
-A OUTPUT -j ufw-reject-output
-A OUTPUT -j ufw-track-output
-A ufw-after-input -p udp -m udp --dport 137 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 138 -j ufw-skip-to-policy-input
-A ufw-after-input -p tcp -m tcp --dport 139 -j ufw-skip-to-policy-input
-A ufw-after-input -p tcp -m tcp --dport 445 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 67 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 68 -j ufw-skip-to-policy-input
-A ufw-after-input -m addrtype --dst-type BROADCAST -j ufw-skip-to-policy-input
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-forward -j ufw-user-forward
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
-A ufw-before-input -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-input -p udp -m udp --sport 67 --dport 68 -j ACCEPT
-A ufw-before-input -j ufw-not-local
-A ufw-before-input -d 224.0.0.251/32 -p udp -m udp --dport 5353 -j ACCEPT
-A ufw-before-input -d 239.255.255.250/32 -p udp -m udp --dport 1900 -j ACCEPT
-A ufw-before-input -j ufw-user-input
-A ufw-before-output -o lo -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -j ufw-user-output
-A ufw-logging-allow -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW ALLOW] "
-A ufw-logging-deny -m conntrack --ctstate INVALID -m limit --limit 3/min --limit-burst 10 -j RETURN
-A ufw-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP
-A ufw-skip-to-policy-forward -j ACCEPT
-A ufw-skip-to-policy-input -j ACCEPT
-A ufw-skip-to-policy-output -j ACCEPT
-A ufw-track-forward -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-forward -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-input -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-input -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-output -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-output -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-user-input -i enp6s0 -p tcp -m tcp --sport 22 -j ACCEPT
-A ufw-user-input -i enp6s0 -p tcp -m tcp --sport 80 -j ACCEPT
-A ufw-user-input -i enp6s0 -p tcp -m tcp --sport 443 -j ACCEPT
-A ufw-user-input -i enp6s0 -p tcp -m multiport --dports 2000:2100 -j DROP
-A ufw-user-input -i enp6s0 -p tcp -m tcp --dport 53 -j DROP
-A ufw-user-input -i enp6s0 -p udp -m udp --dport 53 -j DROP
-A ufw-user-input -i enp6s0 -p udp -m udp --dport 67 -j DROP
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT
    
por velis 05.05.2018 / 08:53

2 respostas

4

Você deve redefinir ufw para os padrões e começar de novo:

sudo ufw reset

Isso desativará ufw e redefinirá ufw para os padrões de instalação, o que significa

- deny all incoming and
- allow all outgoing connections.

Em seguida, basta adicionar algumas regras para permitir conexões de entrada para os aplicativos que você deseja usar:

sudo ufw allow ssh
sudo allow http

Agora você pode ativar ufw

sudo ufw enable

Agora, o ufw está em execução e configurado para negar todas as conexões de entrada, exceto as conexões com as portas necessárias para ssh e http . As conexões de saída são sempre permitidas e isso é normalmente desejado.

Você não precisa adicionar uma deny -rule para conexões de entrada, como em sua configuração:

deny in on enp6s0 from any port 30:65535 proto tcp'

Esta regra é desnecessária, as conexões de entrada são negadas por padrão.

Se você deseja configurar as conexões de saída mais restritivas, é possível adicionar deny -rules em vez de usar as conexões de saída como deny . Isso mantém as regras mais simples, principalmente se desejar que conexões de saída sejam permitidas. Deny -rules para conexões de saída teria que ser projetado com cuidado.

sudo ufw deny out 6773

por exemplo, negaria todas as conexões de saída na porta 6773, qualquer aplicativo que precisasse usar essa porta não seria mais capaz de funcionar corretamente.

Interfaces

Usar mais de uma interface torna as coisas um pouco mais complicadas. Os padrões (deny in, allow out) aplicam-se a todas as interfaces, também as regras que não especificam uma interface serão aplicadas a todas as interfaces. Você quer que suas interfaces se comportem de maneira diferente, então você precisa adicionar regras para cada interface.

As regras na seção acima precisam ser adaptadas para corresponder à sua interface externa (as regras da sua pergunta são assim).

As conexões de saída são permitidas por padrão em todas as interfaces, mas não nas conexões de entrada, portanto, você só precisa adicionar uma allow in -rule para cada interface interna:

sudo allow in on "interface" from any

Ordem das Regras

Outra coisa importante é a ordem das regras. Quando um pacote chega na interface, ufw verifica as regras, uma por uma. Sempre que uma regra corresponder à regra, ela será aplicada e o pacote negado, rejeitado ou permitido. O resto das regras que não foram verificadas neste momento não são usadas então. No seu caso, não vejo muita relevância da ordem das regras, mas sempre temos que lembrar que a ordem das regras pode ser importante.

    
por mook765 05.05.2018 / 11:26
1

Se você não souber intimamente como o TCP / IP funciona, mas ainda quiser proteger seu computador, comece usando gufw e, em seguida, você tem um front-end de GUI para ufw :

sudo apt install gufw

em seguida, vá para o traço se estiver usando Unity e digite gufw ou vá para Sistema Administração Configuração do firewall e a seguinte interface será mostrada up:

Aoiniciar,tenhacalmaeusesomenteosperfisHomeePublicapenaseuseoOfficequandoquiserfazeralgoentreaqueles2.

NoperfilHome,deixetudoaberto(=desativado),poisvocêdeveestaratrásdeumfirewallNAT(seuroteadoréumfirewallNAT),poisemcasanãohánecessidadedeprotegernada.

NoperfilPúblico,ativeofirewallclicandonocontroledeslizanteStatusecomeceusandoasregrasderelatóriosomenteparaosprimeirosdias:

e depois vá para um terminal e veja que tipo de regras gufw criou para você em ufw :

sudo ufw status

A lista Relatório mostra todos os seus aplicativos atuais e clicando em uma linha de aplicação e clicando no + abaixo, permitirá que você adicione facilmente uma regra para aquele aplicativo. Basicamente, essa tela é uma combinação de netstat e ufw em uma tela.

E então ficará óbvio que você não precisa adicionar regras adicionais para bloquear conexões de entrada quando estiver em um local público: apenas permita que os aplicativos sejam ativados.

Quanto mais você usar gufw e quanto mais observar as regras de ufw de firewall geradas, verá que depois de um tempo você estará usando ufw e esquecerá tudo sobre gufw configurações avançadas.

    
por Fabby 09.05.2018 / 20:09