Regras Iptables Para PING, Whois, DNS, NTP, SSH, HTTP (S), FTP

3

Aqui está o arquivo que eu carrego com iptables-restore em um Debian 8 recém-instalado: A única coisa que eu mudei é usar a porta 22022 para SSH no arquivo /etc/ssh/sshd_config .

----- CONSULTE ACIMA ABAIXO -----

Assim que carregar este arquivo, não posso acessar esse debian de nenhuma maneira; mesmo ping não está funcionando. Não há nada no arquivo / var / log / messages sobre qualquer erro. Esta é minha primeira tentativa de configurar o iptables. Eu li muitos docs sobre isso, mas há algo que estou fazendo errado em algum lugar. Você poderia apontar o que aconteceu aqui?

    *filter

    #----------
    # Local loop
    #----------
    -A INPUT -i lo -j ACCEPT
    -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

    #----------
    # Connexions already established
    #----------
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    #----------
    # PING
    #----------
    -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

    #----------
    # SSH
    #----------

    -A INPUT -p tcp --dport 22022 -m state --state NEW,ESTABLISHED -j ACCEPT
    -A OUTPUT -p tcp --dport 22022 -m state --state NEW,ESTABLISHED -j ACCEPT

    #----------
    # HTTP
    #----------

    -A INPUT -p tcp --dport 80 -j ACCEPT
    -A OUTPUT -p tcp --dport 80 -j ACCEPT

    #----------
    # HTTPS
    #----------

    -A INPUT -p tcp --dport 443 -j ACCEPT
    -A OUTPUT -p tcp --dport 443 -j ACCEPT

    #----------
    # FTP
    #----------

    -A INPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT
    -A OUTPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT

    -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
    -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT

    #----------
    # Logs
    #----------
    -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 4

    #----------
    # DROP everything else
    #----------
    -A INPUT -j DROP
    -A OUTPUT -j DROP
    -A FORWARD -j DROP

    COMMIT

----- UPDATE -----

Agora tenho NTP, Ping, DNS, Whois, SSH, HTTP (S) e FTP funcionando. Hourra Aqui está o novo arquivo, se você ver algo estranho, me diga. Eu também aprendi que usar FTP (TLS / SSL) com vsftp (que eu uso) precisa de algumas boas habilidades para configurar, e não encontrei nenhuma boa solução por enquanto. Eu realmente espero que eu descubra isso, porque eu não vou manter FTP "limpo" assim. Se você tem alguma ideia. Thx novamente por sua ajuda, ambas as respostas foram boas, eu não posso escolher uma;)

(a propósito, eu uso um script sh agora para carregar módulos)

    #!/bin/sh

    #----------
    # Load needed modules
    #----------
    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp

    #----------
    # Local loop
    #----------
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

    #----------
    # Connexions already established
    #----------
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    #----------
    # NTP
    #----------
    iptables -A INPUT -p udp --sport 123 -j ACCEPT
    iptables -A OUTPUT -p udp --dport 123 -j ACCEPT

    #----------
    # PING
    #----------
    iptables -A INPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

    #----------
    # DNS
    #----------
    # UDP
    iptables -A INPUT -i eth0 -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
    # TCP
    iptables -A INPUT -i eth0 -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT

    #----------
    # WHOIS
    #----------
    iptables -A INPUT -p tcp --sport 43 -j ACCEPT
    iptables -A OUTPUT -p tcp --dport 43 -j ACCEPT

    #----------
    # SSH
    #----------
    # Incoming
    iptables -A INPUT -i eth0 -p tcp --dport 22022 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 22022 -m state --state ESTABLISHED -j ACCEPT
    # Outgoing
    iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

    #----------
    # HTTP
    #----------
    # Incoming
    iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
    # Outgoing
    iptables -A INPUT -i eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

    #----------
    # HTTPS
    #----------
    # Incoming
    iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
    # Outgoing
    iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

    #----------
    # FTP
    #----------
    #incoming
    iptables -A INPUT -i eth0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -o eth0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT

    #----------
    # Logs
    #----------
    #-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 4

    #----------
    # DROP everything else
    #----------
    iptables -A INPUT -j DROP
    iptables -A OUTPUT -j DROP
    iptables -A FORWARD -j DROP

    exit 0
    
por nderambure 28.07.2016 / 19:40

2 respostas

4

Após estas regras:

-A OUTPUT -p tcp --dport 22022 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp --dport 443 -j ACCEPT
-A OUTPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -j DROP

tudo o que você pode enviar da máquina são solicitações HTTP (S), algumas conexões FTP e conexões SSH destinadas à porta 22022. Mas não por exemplo respostas originadas de seu servidor SSH, já que seu destino seria alguma porta aleatória escolhida pelo cliente (provavelmente não 22022, exceto por acaso). Da mesma forma, as respostas do seu servidor HTTP também não serão exibidas, e também não são permitidas respostas de eco do ICMP.

Se você quiser permitir somente pacotes enviados por, digamos, seu servidor SSH, você precisará permitir que os pacotes enviados pela porta 22022, então --sport 22022 .

Embora você permita que o servidor SSH responda, logo você notará que não é possível fazer muitas solicitações de saída. Você permitiu solicitações HTTP, mas, por exemplo, as consultas DNS de saída não serão eliminadas. Considere o quanto você está disposto a fazer as regras de saída. Sugiro pelo menos adicionar a regra -m state --state ESTABLISHED -j ACCEPT e -j LOG à cadeia OUTPUT para começar.

    
por 28.07.2016 / 20:17
3

Como ilkkachu disse em sua resposta, suas regras de saída não querem (eu acho) que você queira.

Alguns conselhos:

  • Em vez de encerrar explicitamente suas cadeias com uma regra DROP , defina uma política DROP para elas com iptables -P INPUT DROP (e semelhante para OUTPUT e FORWARD , você pode adicionar regras às cadeias com iptables -A <chain> , a política é automaticamente aplicada a qualquer pacote que chegue ao final da cadeia.
  • Adicione uma regra à corrente OUTPUT , permitindo o tráfego em conexões estabelecidas e relacionadas, com iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT . Totalmente semelhante ao que você tem na cadeia INPUT . Em seguida, as respostas a qualquer coisa que você tenha permitido receber serão permitidas, não é necessário pensar em como esse protocolo específico funciona.
  • Considere adicionar regras que permitam ao seu servidor fazer solicitações DNS de saída (lembre-se ambos UDP e TCP).
por 28.07.2016 / 22:47

Tags