Que considerações eu precisaria ao configurar o iptables?

2

Sinopse

Eu estou procurando aprender mais sobre Administração de Servidores. Tenho trabalhado meu próprio servidor web por alguns anos, embora muitas coisas tenham sido configuradas pelo meu amigo e agora desejo aprender mais sobre essas tarefas.

Estou principalmente curioso sobre segurança, segurança de rede e firewalls e adoraria encontrar um bom recurso / livro para aprender mais sobre isso.

No entanto, minhas intenções são:

  • Para bloquear todas as conexões de entrada; exceto portas específicas
  • Para entender qualquer tarefa relacionada à segurança, preciso pesquisar

Eu tenho uma pequena lista de portas para permitir conexões de entrada para:

$ iptables -A INPUT -p icmp -j ACCEPT            # allows anyone to ping?
$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT  # allow public ssh
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT  # allow public apache
$ iptables -A INPUT -p tcp --dport 443 -j ACCEPT  # allow public apache (ssl)
$ iptables -A INPUT -p tcp --dport 9001 -j ACCEPT  # allow a public service
$ iptables -A INPUT -j DROP                      # default drop

Minha lista de regras acima teoricamente parece segura o suficiente para bloquear tudo, exceto 22, 80, 443 e 9001 - mas quando estas regras estão ativas eu não posso ssh no meu servidor. Então eu libero as regras ( iptables -F ) e posso ssh novamente.

    
por ash 08.01.2015 / 12:20

1 resposta

0

Coloque a regra de recebimento antes do restante das regras e, em seguida, o SSH funcionará normalmente.

O pedido é importante, pois o iptables avalia as regras de cima para baixo. Da mesma forma, se você primeiro criar uma regra que permita a porta 22 e, em seguida, a próxima regra que desce tudo para a porta 22, a última regra será aplicada.

Aqui está um exemplo de configuração de um servidor de produção em funcionamento:

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -j LOG --log-prefix "IPTABLES IN:"
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -j LOG --log-prefix "IPTABLES OUT:"
COMMIT

Primeiro, configura as conexões de entrada e encaminhada para descartar por padrão e aceitar de saída por padrão. Então as conexões com estado relacionadas e estabelecidas são aceitas. Então o ICMP é globalmente aceito e o tráfego de loopback é aceito. Depois que as portas de destino 22 e 80 são aceitas, seguidas pelas regras sobre logging etc. Usando o centos eu salvo as regras em um arquivo, então se eu recarregar o iptables ele atualiza as regras daquele arquivo diretamente. É claro que para definir um arquivo padrão, você precisa ter certeza de que as regras estão funcionando bem, já que elas são carregadas na reinicialização.

Pode-se usar 'iptables-restore < path_to_rules 'para recarregar um conjunto de regras de um arquivo.

    
por 08.01.2015 / 12:42