De nossa extensa sessão de bate-papo: Sua configuração está / estava sofrendo de: Problemas com o roteador não encaminhando como esperado; Hackers que tentam invadir a porta 22 existente e em funcionamento para o seu computador de balanceamento de carga; ufw sendo ativado, atrapalhando o script do iptables sugerido.
Método de acesso 1: encadeamento de sessões SSH:
Crie uma sessão ssh da maneira usual do seu computador externo para o seu computador balanceador de carga (LB). Use essa sessão para criar uma nova sessão ssh entre o LB e o RPi:
ssh [email protected]
ou, se o RPi tiver sua porta de escuta ssh alterada conforme o método 2 abaixo:
ssh -p 8051 [email protected]
Este método faz NÃO dar acesso à internet do RPi por conta própria.
Método de acesso 2: encaminhamentos de porta encadeada
Você precisará fazer o encaminhamento de porta em dois locais (seu roteador e também em seu balanceador de carga) para poder fazer ssh em seus computadores RPi1 e RPi2, e isso é uma história diferente do que eles podem acessar a Internet ou não . Como você mencionou que já funciona, presumo que o encaminhamento de porta já esteja configurado em seu roteador para ssh no balanceador de carga. Você terá que usar duas portas diferentes para encaminhar, uma para cada RPi1 e RPi2. Eu selecionei arbitrariamente as portas 8051 e 8052, mas você pode alterá-las.
No entanto, antes de começar a pensar em mais encaminhamento de porta, você deve fazer com que seus computadores RPi1 e RPi2 possam acessar a Internet. Você precisará tornar seu balanceador de carga em um roteador. Pode ser um roteador muito simples, assumindo que o roteador em 192.168.1.254 cuida do tipo de firewall.
Corrija seus arquivos de interfaces. Uma sugestão (editada para refletir a versão final):
No LB:
# The loopback network interface
auto lo eth1 eth0
iface lo inet loopback
iface eth1 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.254
dns-nameservers 8.8.8.8
dns-search google.com
iface eth0 inet static
address 192.168.0.10
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
RPi1: conforme sua edição. RPi2: O mesmo, exceto para o endereço IP.
Primeiro, desative o ufw, já que neste caso não foi adicionado nenhum valor e está em conflito com o que queremos fazer:
sudo ufw disable
Agora, aqui está um conjunto de regras iptables para testar (editar foi testado por Maximilian, funciona bem):
#!/bin/sh
FWVER=0.01
#
# Maximilian rule set 2015.03.08 Ver:0.01
# Port forward to RPi1 and RPi2
# and be a NAT router for them also.
#
# This may conflict with other stuff on the cluster computer,
# I don't know.
# If so, this may need to be merged somehow with whatever.
#
# The router needs to be configured to forward ports 8051
# and 8052 to 192.168.1.10
# In turn, 192.168.1.10 will forward them again with this rule set.
#
# run as sudo
#
echo "Loading Maximilian rule set version $FWVER..\n"
# The location of the iptables program
#
IPTABLES=/sbin/iptables
#Setting the EXTERNAL and INTERNAL interfaces and addresses for the network
#
EXTIF="eth1"
INTIF="eth0"
EXTIP="192.168.1.10"
INTIP="192.168.0.10"
RPI1="192.168.0.20"
RPI2="192.168.0.30"
UNIVERSE="0.0.0.0/0"
echo " External Interface: $EXTIF Internal Interface: $INTIF External IP: $EXTIP Internal IP: $INTIP RPi1: $RPI1 RPi2: $RPI2"
#CRITICAL: Enable IP forwarding since it is disabled by default
#
echo Enabling forwarding...
echo "1" > /proc/sys/net/ipv4/ip_forward
#Clearing any previous configuration
#
echo " Clearing any existing rules and setting default policy to ACCEPT.."
$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
# Delete user defined chains
$IPTABLES -X
# Reset all IPTABLES counters
$IPTABLES -Z
# While my references do not have it, I think this is needed.
$IPTABLES -t nat -Z
$IPTABLES -t nat -A PREROUTING -p tcp -i $EXTIF --dport 8051 -j DNAT --to-destination $RPI1:8051
$IPTABLES -t nat -A PREROUTING -p tcp -i $EXTIF --dport 8052 -j DNAT --to-destination $RPI2:8052
#
# FORWARD rules would only be if the default policy is not ACCEPT
#
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j SNAT --to $EXTIP
echo Maximilian rule set version $FWVER done.
Verifique fazendo um ping de um RPi:
ping 8.8.8.8
Se isso funcionar, tente acessar pela internet via ssh. Por exemplo, se o endereço IP externo do seu roteador é 1.2.3.4:
ssh -p 8051 [email protected]
Obviamente, você terá que configurar seu servidor SSH RPi1 para escutar na porta 8051, e seu servidor SSH RPi2 para escutar na porta 8052.
Quando estiver satisfeito com o script iptables e quiser que ele carregue automaticamente, edite as interfaces / etc / network / e adicione um comando de pré-inicialização (torne o local e nome do arquivo o que você usou):
# The loopback network interface
auto lo eth1 eth0
iface lo inet loopback
pre-up /home/maximilian/iptable
iface eth1 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.254
dns-nameservers 8.8.8.8
dns-search google.com
iface eth0 inet static
address 192.168.0.10
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
Ataques de senha SSH com problemas paralelos:
Agora, para a sua questão de hackers tentando invadir via ataque de senha SSH, eu uso esse truque, que tem sido extremamente eficaz há anos. No entanto, observe que outros sugerirão usar uma porta diferente e usar chaves em vez de senhas. Eu faço assim porque gosto de estudar os ataques:
# Allow any related traffic coming back to the server in.
#
#
$IPTABLES -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m state --state ESTABLISHED,RELATED -j ACCEPT
# Secure Shell on port 22.
#
# Dynamic Badguy List. Detect and DROP Bad IPs that do password attacks on SSH.
# Once they are on the BADGUY list then DROP all packets from them.
#$IPTABLES -A INPUT -i $EXTIF -m recent --update --hitcount 3 --seconds 5400 --name BADGUY_SSH -j LOG --log-prefix "SSH BAD:" --log-level info
#$IPTABLES -A INPUT -i $EXTIF -m recent --update --hitcount 3 --seconds 5400 --name BADGUY_SSH -j DROP
# Sometimes make the lock time very long. Typically to try to get rid of coordinated attacks from China.
$IPTABLES -A INPUT -i $EXTIF -m recent --update --hitcount 3 --seconds 90000 --name BADGUY_SSH -j LOG --log-prefix "SSH BAD:" --log-level info
$IPTABLES -A INPUT -i $EXTIF -m recent --update --hitcount 3 --seconds 90000 --name BADGUY_SSH -j DROP
$IPTABLES -A INPUT -i $EXTIF -p tcp -m tcp --dport 22 -m recent --set --name BADGUY_SSH -j ACCEPT
Mas tenha cuidado para não se trancar, como fiz comigo mesmo quando estou fora em viagens de negócios. Note que eu faço uma outra mudança. Eu edito o sshd.conf e adiciono isto:
#Limit the number of bad passwords per connection to 2. Default is 6.
#Then the iptables connection counter will kick in sooner to drop
#password attack hackers.
MaxAuthTries 2