Come assicurarsi che la porta SSH sia aperta solo a un indirizzo IP specifico?


42

Questo è il mio /etc/sysconfig/iptables:

Ha due porte aperte 80 apache e 22 per ssh.

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Per la porta 22 (SSH) voglio assicurarmi che nessuno possa connettersi a questa porta tranne uno specifico indirizzo IP.

esempio ip:

1.2.3.4

Si prega di ignorare qualsiasi supervisione / preoccupazione riguardo a cosa succede se il mio IP cambia e non posso più SSH sul mio server.

Risposte:


47

se ricevo la domanda nel modo giusto, vuoi che il tuo server sia raggiungibile solo da un indirizzo IP specifico sulla porta 22, puoi aggiornare Iptables per questo:

iptables -A INPUT -p tcp -s YourIP --dport 22 -j ACCEPT

In tal caso, stai aprendo la porta ssh solo su YourIP, se devi aprire il DNS per la tua rete interna:

iptables -A INPUT -p udp -s YourIP --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -s YourIP --dport 53 -j ACCEPT

Dopo averli aggiunti e aperti per tali IP, è necessario chiudere la porta per il resto degli IP

iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
iptables -A INPUT -p udp -s 0.0.0.0/0 --dport 53 -j DROP
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 53 -j DROP

(Assicurati di impostare le regole nella posizione corretta nel tuo set di regole. Le regole iptables -A INPUTverranno aggiunte alla fine di INPUTcome sono attualmente.)

o come ha detto Joel , puoi invece aggiungere una regola:

iptables -A INPUT -p tcp ! -s <permittedIP> -j DROP

oppure puoi semplicemente impostare il criterio predefinito sul firewall con

iptables -P INPUT DROP

In breve, come presentato in questa domanda su SO :

iptables -A INPUT -p tcp --dport 22 -s YourIP -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

2
Vale anche la pena notare che iptablessupporta l'inversione con l'operatore bang nel caso in cui tu voglia fare un bersaglio DROP. Esempio:iptables -I INPUT -p tcp ! -s <permittedIP> -j DROP
Bratchley,

1
Inoltre, DROPnon sono davvero necessari quelli incondizionati, puoi semplicemente impostare il criterio predefinito sul firewall iptables -P INPUT DROPe lasciarlo andare. Probabilmente vuoi anche farli come append se li fai in questo modo, altrimenti tutto il traffico verrà catturato dal DROPe non raggiungerà mai la tua ACCEPTregola.
Bratchley,

1
Questo non ha funzionato per me perché il valore predefinito per -I (insert) è quello di inserire come regola n. 1, quindi il DROP viene inserito come regola n. 1 e valutato per primo e quindi elimina tutti i pacchetti ssh, non valutando mai la regola ACCEPT. Devi eseguire iptables -I INPUT 3 -p tcp -s 0.0.0.0/0 --dport 22 -j DROPe iptables -I INPUT 3 -p udp -s 0.0.0.0/0 --dport 53 -j DROP"3" dopo INPUT significa inserire come regola INPUT n. 3 (supponendo che tu stia inserendo due ACCEPTS, altrimenti se solo un ACCEPT usa "2" per INPUT.
Kevin Triplett,

@Networker Using -Iinserirà le nuove regole di iptables in alto. Come tale, potresti finire per inserire la tua goccia prima del tuo permesso. Suggerisco -Ainvece di utilizzare
BlueCacti il

1
beh, mi sono chiuso fuori, gj
ngwdaniel,

6

Anche se raccomando di usare le chiavi SSH, ti darò una spiegazione.

Non devi usare IPtables per quello che stai cercando di ottenere, ci sono molti modi. Questo è il modo IPtables:

iptables -I INPUT -s [YOUR_HOME_IP] -p tcp -m tcp --dport [SSH_PORT] -j ACCEPT

[YOUR_HOME_IP] = Il tuo IP di casa (abbastanza semplice)

[SSH_PORT] = La porta su cui si esegue SSH (per impostazione predefinita 22)

iptables -I INPUT -p tcp -m tcp --dport [SSH_PORT] -j REJECT

Questo assicura che nessuno, tranne il tuo IP, possa accedere a SSH.

C'è un altro modo, ovvero aggiungendo qualcosa al file sshd_config.

Aggiungi quanto segue:

AllowUsers root@[YOUR_HOME_IP]
PermitRootLogin without-password

Ciò ti consente di accedere a SSH come rootutente dal tuo IP senza richiedere una password.

Si prega di tenere presente che un cronjob con

iptables -X
iptables -F

potrebbe essere intelligente in modo da non essere bloccato fuori dal server con SSH (il cronjob ripristinerà IPtables in modo da poter accedere nuovamente). Se hai ancora accesso, puoi rimuovere il cronjob e configurare nuovamente i tuoi IPtables.


Il cronjob avrebbe comunque rimosso il firewall. Perché installare iptablesin primo luogo? Qualche forma di accesso fuori banda è il solito metodo in circolazione. knockdè un altro.
Matt,

@mtm Sì, quando sei bloccato il cronjob ripristinerà la tua configurazione di IPtables in modo da poter accedere nuovamente a SSH. I motivi per cui le persone usano IPtables sono diversi, la mia opinione è che si tratti di un firewall efficace, semplice e flessibile.
William Edwards,

2
OIC. intendi eseguire il flush una volta al momento dell'installazione, non pianificato regolarmente. atfa quello.
Matt,

4
Autorizzare solo il tuo IP e quindi consentire un accesso root senza password sembra un'idea terribile.
Alex W,

1
@AlexW So che è passato un po 'di tempo, ma volevo ancora commentare: Without-Passwordsignifica che l'autenticazione con password non è consentita, quindi dovrai usare l'autenticazione con chiave SSH. È davvero un po 'un nome poco chiaro per questo metodo di autenticazione. Ma questo non significa che non è necessaria una password per accedere come root. Tuttavia, un metodo più sicuro è quello di impostare PermitRootLogin noe utilizzare un account sudo diverso per accedere, poiché root è un obiettivo comune
BlueCacti,

5

Altre risposte stanno usando iptables -Inei loro esempi, che spesso non è quello che dovresti usare.

iptables eseguirà la prima regola che corrisponde, quindi l'ordine delle regole è molto importante. -Iè il comando "inserisci" e deve essere utilizzato con un parametro index per specificare a quale elenco appartiene una determinata regola. -Aè il comando "append", che aggiungerà la regola alla fine dell'elenco.

In alcune distrobuzioni (forse tutte) l'uso -Isenza un parametro di indice aggiungerà la regola per indicizzarne una, rendendola la prima regola selezionata. In questo scenario, se l'ultimo comando che esegui è iptables -I INPUT -s tcp 0.0.0.0/0 -j DROPiptables, eliminerà tutto il traffico, indipendentemente dal fatto che tu abbia o meno delle ACCEPTregole successive nella catena.

Ecco un esempio di impostazione di una regola che consente solo SSH da un singolo IP:

A partire senza regole:

#> iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Aggiungi una nuova regola "consenti SSH da 1.2.3.4":

#>iptables -A INPUT -p tcp -s 1.2.3.4 --dport 22 -j ACCEPT

Blocca SSH da tutti gli altri IP:

#>iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP

Ora la tua catena INPUT sarà simile a:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  1.2.3.4              0.0.0.0/0            tcp dpt:22
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

Successivamente, se è necessario autorizzare un secondo IP, è possibile utilizzare il -Iparametro per posizionarlo prima della regola della lista nera.

#>iptables -I INPUT 2 -p tcp -s 4.3.2.1 --dport 22 -j ACCEPT

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  1.2.3.4              0.0.0.0/0            tcp dpt:22
ACCEPT     tcp  --  4.3.2.1              0.0.0.0/0            tcp dpt:22
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

Si noti che l'utilizzo ha -I INPUT 2aggiunto la nuova regola come regola numero 2 e ha portato la regola DROP al numero 3.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.