Com os iptables do kernel completamente vazios ( iptables -F
), isso fará o que você perguntar:
# iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP
Isso diz que todos os endereços da LAN têm permissão para falar com a porta TCP 22, que localhost recebe a mesma consideração (sim, 127. * não apenas 127.0.0.1) e pacotes de todos os outros endereços que não correspondem às duas primeiras regras. caíram sem a menor cerimônia no depósito de bits . Você pode usar REJECT
em vez de DROP
se quiser uma rejeição ativa (TCP RST) em vez de tornar a porta TCP 22 um buraco negro para pacotes.
Se a sua rede local não usa o bloco 192.168.0. *, você naturalmente precisará alterar o IP e a máscara na primeira linha para corresponder ao esquema de IP da sua LAN.
Estes comandos podem não fazer o que você deseja se o seu firewall já tiver algumas regras configuradas. (Diga iptables -L
como root para descobrir.) O que acontece com frequência é que uma das regras existentes pega os pacotes que você está tentando filtrar, de modo que o acréscimo de novas regras não tenha efeito. Embora você possa usar -I
em vez de -A
com o comando iptables
para unir novas regras no meio de uma cadeia em vez de anexá-las, geralmente é melhor descobrir como as cadeias são preenchidas na inicialização do sistema e modificá-las processe para que suas novas regras sempre sejam instaladas na ordem correta.
RHEL 7 +
Em sistemas de tipo RHEL recentes, a melhor maneira de fazer isso é usar firewall-cmd
ou seu equivalente na GUI. Isso informa ao daemon firewalld
do SO o que você deseja, que é o que realmente preenche e manipula o que você vê via iptables -L
.
RHEL 6 e anteriores
Em sistemas de tipo RHEL mais antigos, a maneira mais fácil de modificar cadeias de firewall ao fazer pedidos é editar /etc/sysconfig/iptables
. As ferramentas de firewall GUI e TUI do sistema operacional são bastante simplistas, portanto, assim que você começar a adicionar regras mais complexas como essa, é melhor voltar aos bons arquivos de configuração antigos. Cuidado, uma vez que você começar a fazer isso, você se arrisca a perder suas alterações se usar as ferramentas de firewall do sistema operacional para modificar a configuração, pois pode não saber como lidar com regras artesanais como essas.
Adicione algo assim ao arquivo:
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -j DROP
Onde você adiciona, é o bit complicado. Se você encontrar uma linha nesse arquivo falando sobre --dport 22
, simplesmente substitua-a pelas três linhas acima. Caso contrário, provavelmente deve ir antes da primeira linha existente que termina em -j ACCEPT
. Geralmente, você precisará adquirir alguma familiaridade com a forma como o iptables funciona, ponto no qual o ponto de inserção correto será óbvio .
Salve esse arquivo e diga service iptables restart
para recarregar as regras do firewall. Certifique-se de fazer isso enquanto estiver logado no console, no caso de você fat-finger as edições! Você não quer se trancar fora de sua máquina enquanto estiver conectado via SSH.
A semelhança com os comandos acima não é coincidência. A maior parte desse arquivo consiste em argumentos para o comando iptables
. As diferenças relativas ao acima são que o comando iptables
é descartado e o nome da cadeia INPUT
se torna a cadeia RH-Firewall-1-INPUT
específica do RHEL. (Se você se interessar em examinar o arquivo com mais detalhes, verá mais cedo no arquivo em que eles essencialmente renomearam a cadeia INPUT
. Por quê? Não foi possível dizer.)