Passei algum tempo pensando em duas coisas sobre o iptables: a maioria dos que procuram esses tutoriais são iniciantes e, em segundo lugar, muitos já estão procurando por algo bastante simples e já elaborado.
Este exemplo é para um servidor web, mas você pode facilmente adicionar mais regras e adaptá-las às suas necessidades.
Quando você vê "x" mudar para o seu IP
#!/bin/bash
# Limpamos tabelas iptables -F iptables -X # Limpamos NAT iptables -t nat -F iptables -t nat -X # tabela mangle para coisas como PPPoE, PPP e ATM iptables -t mangle -F iptables -t mangle -X # Políticas Acho que esta é a melhor maneira para iniciantes e # ainda não é ruim, vou explicar a saída (saída) porque são conexões de saída #, a entrada descartamos tudo e nenhum servidor deve encaminhar. iptables -P INPUT DROP iptables -P SAÍDA ACEITAR iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Manter estado. Tudo que já está conectado (estabelecido) é deixado assim: iptables -A INPUT -m estado --state ESTABLISHED, RELACIONADO -j ACCEPT # Loop device. iptables -A INPUT -i lo -j ACEITAR # http, https, não especificamos a interface porque # queremos que seja toda iptables -A INPUT -p tcp --dport 80 -j ACEITAR iptables -A INPUT -p tcp - dport 443 -j ACEITAR # ssh apenas internamente e a partir desta faixa de iptables do ip -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACEITAR # monitoramento por exemplo se eles têm zabbix ou algum outro serviço snmp iptables -A ENTRADA -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACEITAR # icmp, ping bem depende de você iptables -A ENTRADA -p icmp -s 192.168.xx / 24 - i $ intranet -j ACEITAR #mysql com postgres é a porta 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACEITAR #sendmail bueeeh se quiser enviar algum correio #iptables -A SAÍDA -p tcp --dport 25 -j ACEITAR # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # IP do servidor - o ip wan real do seu servidor LAN_RANGE = "192.168.xx / 21" # intervalo de LAN da sua rede ou vlan # Ip's que nunca devem entrar na extranet,é usar um pouco de # lógica se tivermos uma interface puramente WAN, ela nunca deve inserir # tráfego do tipo LAN através dessa interface SPOOF_IPS = "0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0 / 16 "# Ação padrão - a ser executada quando qualquer regra corresponder a ACTION =" DROP "# Pacotes com o mesmo ip do meu servidor através do wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Pacotes com o intervalo de LAN para o wan, coloco assim no caso de você ter # alguma rede em particular, mas isso é redundante com a seguinte # regra dentro do loop " para "iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Todas as redes SPOOF não permitidas pelo wan para ip em $ SPOOF_IPS do iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION concluído
Como sempre aguardo seus comentários, fiquem ligados neste blog, obrigado
Isso me ajuda a continuar aprendendo um pouco mais obrigado copiado.
de nada, fico feliz em ajudar
Sinto muito, mas tenho duas perguntas (e uma de presente 😉):
Você chegaria com esta configuração para ter o Apache rodando e fecharia o resto, exceto SSH?
# Nós limpamos mesas
iptables-F
iptables-X
Nós limpamos o NAT
iptables -t nat -F
iptables -t nat -X
iptables -A INPUT -p tcp –dport 80 -j ACEITAR
ssh apenas internamente e a partir desta faixa de ip's
iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet –dport 7659 -j ACEITAR
Segunda pergunta: 7659 é a porta usada no SSH neste exemplo?
E terceiro e último: em qual arquivo essa configuração deve ser salva?
Muito obrigado pelo tutorial, é uma pena que você seja tão novato e não possa aproveitar bem dele.
esta é a regra que você precisa para http do apache
iptables -A INPUT -p tcp –dport 80 -j ACEITAR
mas você também precisa declarar as políticas padrão de descarte (está no script)
iptables -P ENTRADA QUEDA
iptables -P OUTPUT ACEITAR
iptables -P FORWARD DROP
e isso porque se você estiver remoto, isso o jogará fora.
iptables -A INPUT -m state –state ESTABELECIDO, RELACIONADO -j ACEITAR
se 7659 é a porta desse ssh no exemplo, por padrão é 22, embora eu recomendo que você mude para uma porta "não muito conhecida"
Cara, não sei, como você quer ... firewall.sh e você coloca no rc.local (sh firewall.sh) para que rode automaticamente, depende de qual sistema operacional você tem, tem arquivos onde você pode colocar as regras diretamente.
Ei, seu script é muito bom, analisando-o ... Você sabe como eu poderia negar todas as solicitações de meus usuários para um site específico? mas este site tem muitos servidores….
Eu recomendo outras opções:
1) Você pode criar uma zona falsa em seu dns ...
2) Você pode colocar um proxy com acl
embargo ao pecado
Para iptables você pode gostar disso ... nem sempre é a melhor opção (existem mais maneiras)
iptables -A INPUT -s blog.desdelinux.ne -j QUEDA
iptables -A OUTPUT -d blog.desdelinux.net -j DROP
Me diga se funcionou
Obrigado pela resposta, tudo esclarecido. Eu estava perguntando sobre a porta porque fiquei surpreso ao usar o 7659, já que as portas privadas começam no 49152, e pode atrapalhar algum serviço ou coisa parecida.
Mais uma vez, obrigado por tudo, isso é bom!
Saudações.
BrodyDalle, como posso entrar em contato com você? Muito interessante o seu roteiro.
soulofmarionet_1@hotmail.com
A penúltima linha "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION" existe para evitar que sua própria máquina seja falsificada? Ou é possível que algum pacote envenenado entre e saia com aquela fonte envenenada e é por isso que a regra também está incluída no OUTPUT?
Muito obrigado pelo esclarecimento!!!
este é meu próprio script iptables, é muito completo:
# franes.iptables.airy
# doc.iptables.airoso: iptables para legado e para nft
#
# portas de firewall
##############################
#! / Bin / bash
#
# limpar a tela
############################################ Início de /etc/f-iptables/default.cfg |||||
remover filtragem
# deixe uma linha em branco
eco
export yes = »» no = »echo off»
# as variáveis que você pode alterar para permitir o acesso
############################# Variáveis para modificar com $ yes ou $ no
export hayexcepciones = »$ no»
# há exceções: $ yes para permitir hosts excepcionais e $ no para desativar
export hayping = »$ no»
# hayping: $ yes para permitir pings de terceiros e $ no para negar
export haylogserver = »$ no»
# haylogeosserver: $ yes para poder logar tcp $ no para não ser capaz de logar tcp
######
############################## Variáveis para modificar adicionando "," ou com intervalos de ":"
export exceptions = »baldras.wesnoth.org»
# exceções permitem um ou vários hosts do firewall ou nenhum valor
export logserver = discard, ipp, dict, ssh
# portas do servidor tcp que são registradas quando os pacotes chegam
export redserver = 0/0
# redserver: a rede para portas do servidor preferível rede local ou vários ips
exportar cliente vermelho = 0/0
#clientnet: a rede para portas do cliente preferível a todas as redes
export servidortcp = discard, ipp, dict, 6771
# servidortcp: as portas do servidor tcp especificadas
export serverudp = discard
#udpserver: as portas do servidor udp especificadas
exportar clientudp = domínio, bootpc, bootps, ntp, 20000: 45000
#udp client: as portas do cliente udp especificadas
exportar clienttcp = domain, http, https, ipp, git, dict, 14999: 15002
# cliente tcp: as portas do cliente tcp especificadas
######################################### Fim de /etc/f-iptables/default.cfg |||||
######################################## Fim das variáveis para modificar
exportar firewall = $ 1 variáveis = $ 2
if ["$ variáveis" = "$ NULL"]; então source /etc/f-iptables/default.cfg;
senão fonte / etc / f-iptables / $ 2; fi
######################################### Ou você substituirá as variáveis por um arquivo .cfg
############################################################### #####################################################
exportar firewall = $ 1 exportar variáveis = $ 2
###################################################### Variáveis automáticas do sistema
if ["$ firewall" = "desconectado"]; em seguida, echo FIREWALL DISCONNECTED;
export activateserver = »$ no» activateclient = »$ no» wet = »$ no»;
elif ["$ firewall" = "cliente"]; em seguida, echo FIREWALL CLIENT;
export activateserver = »$ no» activateclient = »» wet = »$ no»;
elif ["$ firewall" = "servidor"]; em seguida, echo FIREWALL SERVER;
export activateserver = »» activateclient = »$ no» wet = »$ no»;
elif ["$ firewall" = "cliente e servidor"]; em seguida, echo FIREWALL CLIENT AND SERVER;
exportar ativar servidor = »»; export activateclient = »»; export wet = »$ no»;
elif ["$ firewall" = "permissivo"]; em seguida, echo PERMISSIVE FIREWALL;
export activateserver = »$ no» activateclient = »$ no» wet = »»;
outro
$ check sudo echo iptables-legacy:
$ check sudo iptables-legacy -v -L INPUT
$ check sudo iptables-legacy -v -L OUTPUT
$ check sudo echo iptables-nft:
$ check sudo iptables-nft -v -L INPUT
$ check sudo iptables-nft -v -L OUTPUT
eco _____parâmetros____ $ 0 $ 1 $ 2
echo "lançar sem parâmetros é listar iptables."
echo "O primeiro parâmetro (habilitar iptables): desconectado ou cliente ou servidor ou cliente e servidor ou permissivo."
echo "O segundo parâmetro: (opcional): o arquivo .cfg padrão escolhe /etc/f-iptables/default.cfg"
echo "Configurações de variáveis:" $ (ls / etc / f-iptables /)
saída 0; fi
################
eco
echo Lança $ 0 desconectado ou cliente ou servidor ou cliente e servidor ou permissivo ou variáveis ou sem usar parâmetro para listar iptables.
echo O arquivo $ 0 contém algumas variáveis editáveis dentro.
########################################## As variáveis acima ativadas
########################################
echo configurando as variáveis iptables
variáveis ativadas por eco
eco
#################################### As regras de iptables
echo Configurando o iptables-legacy
sudo / usr / sbin / iptables-legacy -t filter -F
sudo / usr / sbin / iptables-legacy -t nat -F
sudo / usr / sbin / iptables-legacy -t mangle -F
sudo / usr / sbin / ip6tables-legacy -t filter -F
sudo / usr / sbin / ip6tables-legacy -t nat -F
sudo / usr / sbin / ip6tables-legacy -t mangle -F
sudo / usr / sbin / ip6tables-legacy -A INPUT -j DROP
sudo / usr / sbin / ip6tables-legacy -A OUTPUT -j DROP
sudo / usr / sbin / ip6tables-legacy -A FORWARD -j DROP
sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACEITAR> / dev / null
$ haylogserver sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
$ hayeexceptions sudo / usr / sbin / iptables-legacy -A INPUT -s $ exceções -j ACEITAR> / dev / null
$ ativar servidor sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACEITAR> / dev / null
$ ativar servidor sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACEITAR> / dev / null
$ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –sports $ clientudp -m state –state estabelecido -s $ clientnet -d $ clientnet -j ACEITAR> / dev / null
$ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –sports $ clienttcp -m estado –estado estabelecido -s $ clientnet -d $ clientnet -j ACEITAR> / dev / null
$ hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp –icmp-type echo-reply -j ACEITAR> / dev / null
sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
sudo / usr / sbin / iptables-legacy -A SAÍDA -s 127.0.0.1 -d 127.0.0.1 -j ACEITAR> / dev / null
$ hayeexceptions sudo / usr / sbin / iptables-legacy -A OUTPUT -d $ exceções -j ACEITAR> / dev / null
$ ativar servidor sudo / usr / sbin / iptables-legacy -A SAÍDA -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACEITAR> / dev / null
$ ativar servidor sudo / usr / sbin / iptables-legacy -A SAÍDA -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACEITAR> / dev / null
$ activateclient sudo / usr / sbin / iptables-legacy -A SAÍDA -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACEITAR> / dev / null
$ activateclient sudo / usr / sbin / iptables-legacy -A SAÍDA -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACEITAR> / dev / null
$ hayping sudo / usr / sbin / iptables-legacy -A SAÍDA -p icmp –icmp-type echo-request -j ACEITAR> / dev / null
sudo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP
echo iptables-legacy habilitado
eco
echo Setting iptables-nft
sudo / usr / sbin / iptables-nft -t filter -F
sudo / usr / sbin / iptables-nft -t nat -F
sudo / usr / sbin / iptables-nft -t mangle -F
sudo / usr / sbin / ip6tables-nft -t filter -F
sudo / usr / sbin / ip6tables-nft -t nat -F
sudo / usr / sbin / ip6tables-nft -t mangle -F
sudo / usr / sbin / ip6tables-nft -A INPUT -j DROP
sudo / usr / sbin / ip6tables-nft -A OUTPUT -j DROP
sudo / usr / sbin / ip6tables-nft -A FORWARD -j DROP
sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACEITAR> / dev / null
$ haylogserver sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
$ hayeexceptions sudo / usr / sbin / iptables-nft -A INPUT -s $ exceções -j ACEITAR> / dev / null
$ ativar servidor sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACEITAR> / dev / null
$ ativar servidor sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACEITAR> / dev / null
$ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –sports $ clientudp -m state –state estabelecido -s $ clientnet -d $ clientnet -j ACEITAR> / dev / null
$ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –sports $ clienttcp -m estado –estado estabelecido -s $ clientnet -d $ clientnet -j ACEITAR> / dev / null
$ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type echo-reply -j ACEITAR> / dev / null
sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
sudo / usr / sbin / iptables-nft -A SAÍDA -s 127.0.0.1 -d 127.0.0.1 -j ACEITAR> / dev / null
$ hayeexceptions sudo / usr / sbin / iptables-nft -A OUTPUT -d $ exceptions -j ACEITAR> / dev / null
$ ativar servidor sudo / usr / sbin / iptables-nft -A SAÍDA -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACEITAR> / dev / null
$ ativar servidor sudo / usr / sbin / iptables-nft -A SAÍDA -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACEITAR> / dev / null
$ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACEITAR> / dev / null
$ activateclient sudo / usr / sbin / iptables-nft -A SAÍDA -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACEITAR> / dev / null
$ hayping sudo / usr / sbin / iptables-nft -A SAÍDA -p icmp –icmp-type echo-request -j ACEITAR> / dev / null
sudo / usr / sbin / iptables-nft -A OUTPUT -j DROP
sudo / usr / sbin / iptables-nft -A FORWARD -j DROP
echo iptables-nft habilitado
eco
$ wet sudo / usr / sbin / iptables-legacy -F> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACEITAR> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A INPUT -m estado –state estabelecido -j ACEITAR> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A SAÍDA -j ACEITAR> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP> / dev / null
$ wet sudo / usr / sbin / iptables-nft -F> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACEITAR> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A INPUT -m estado –estado estabelecido -j ACEITAR> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A SAÍDA -j ACEITAR> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A FORWARD -j DROP> / dev / null
##################################
eco, você jogou $ 0 $ 1 $ 2
# sai do script
sair 0
Como eu definiria uma regra se esse firewall usasse para meu gateway e tivesse um squid dentro da LAN ???