È sicuro riavviare un server aperto su Internet?


29

In particolare

Ho un set di regole iptables definito su un server che esegue CentOS. Sono garantito / posso garantire / come posso garantire che quando la rete diventa online (all'avvio del computer o dopo il riavvio del servizio di rete) il set di regole iptables è già applicato (e se iptables non si avvia o non riesce ad applicare il set di regole l'interfaccia di rete non verrà visualizzata)?

(So ​​che questa è una domanda noob, ma non ho mai eseguito un server su reti ma fidate dietro un NAT DHCP mascherato e un firewall, quindi ... aspettatevi domande noob da noobs.)


15
Davvero non è una domanda noob. Questo è essenzialmente il modo in cui gli hacker sono entrati nella rete PlayStation nel 2011, causando 24 giorni di interruzione e $ 15 MM negli insediamenti. Quando i firewall sono stati riavviati (come hanno fatto mensilmente) il firewall si è spalancato per alcuni istanti - apparentemente abbastanza a lungo.
Chris S,

@ChrisS La cosa più strana a riguardo, per me, sarebbe che sono sicuro che gli amministratori di sistema responsabili di quella rete sarebbero quasi sicuramente abbastanza intelligenti da lasciar perdere se qualcuno ha suggerito di spegnere il firewall, ma non battere ciglio, mensilmente , spegnendolo ... e quindi riaccendendolo. Non sono sicuro di quale combinazione di questi spiegherebbe, però.
Parthian Shot il

Un'altra opzione è disabilitare la porta sullo switch di rete fino a quando il server non è completamente avviato, se si è in loco e si dispone dell'accesso allo switch. Questo non è l'ideale, ma sicuramente funzionerebbe, a meno che il server non avesse una dipendenza di rete come NFS.
jftuga,

@jftuga Beh, certo. Ma poi il server non sarebbe collegato a Internet, e quindi quella soluzione tecnicamente non rientra nell'ambito di questa domanda. Se sono sul posto, potrei semplicemente scollegare il cavo Ethernet durante il riavvio. E il problema di fondo rimarrebbe comunque con la soluzione di blocco delle porte; che un altro computer che attacca attraverso la rete non verrebbe fermato dal firewall locale. Se il router viene violato, o malfunzionamenti, o qualcun altro sulla rete locale viene compromesso, il gioco è ancora finito.
Parthian Shot il

@jftuga In effetti, il problema è persino peggio di così. Supponendo che qualcuno abbia già ottenuto un pezzo di software da eseguire sul computer locale, ma il mio firewall esegue il filtro di uscita, afferma che la regola è che i pacchetti in uscita sono consentiti solo se sono stabiliti o correlati e le nuove connessioni in entrata sono autorizzate solo alla porta 80 Normalmente, ciò impedirebbe una shell inversa da un account senza privilegi. Ma se la connessione viene avviata all'avvio, verrà sostenuta tramite l'inizializzazione del firewall. Suppongo che ciò significhi anche che le regole del firewall dovrebbero cambiare, ma è un errore facile da fare.
Parthian Shot il

Risposte:


18

All'improvviso, si garantisce che iptables verrà avviato prima che l'interfaccia venga richiamata dall'ordine degli script di avvio. Guarda la riga "chkconfig" in ogni script di avvio e vedrai i runlevel su cui è "acceso" quando è attivo, l'ordine di avvio e l'ordine di arresto.

Non si garantisce che l'interfaccia non verrà visualizzata se il set di regole di iptables non è stato applicato correttamente (o affatto).

Esempio:
chkconfig: 2345 08 92
questa riga afferma che il servizio in questione sarà attivo nei runlevel 2, 3, 4 e 5, e inizierà alle 8 e si fermerà alle 92. Qualsiasi cosa con un valore "start" maggiore inizierà solo dopo il completamento di questo script, ma questo errore di script è considerato un completamento e non impedirà l'esecuzione degli script a valle.

Si noti che questa risposta si applica a CentOS 6 e precedenti, non necessariamente a CentOS 7. Non ho effettuato ricerche personali 7 sufficienti per rispondere a questa domanda per 7.


1
+1 E ... non guardare un cavallo regalo in bocca, perché la tua risposta è abbastanza utile, ma ... Ti capita di conoscere un modo standard per dare ai servizi un ordine di dipendenza, in modo che se uno fallisce all'inizio della catena quelli successivi non iniziano? Ooh- e anche se qualcuno riesce a mandare in crash il firewall (in qualche modo) che l'interfaccia di rete "crollerà con la nave"? Idealmente, vorrei che tutto fallisse, anche per caso qualcuno ha un giorno per fare il firewall ...
Parthian Shot

5
Con gli script di avvio SysV (ovvero CentOS 6 e precedenti), non esiste un buon modo per farlo. CentOS 7 fa le dipendenze che vuoi - se B dipende da A e A fallisce, B non si avvia. Per 7, per vedere le dipendenze usare systemctl list-dependencies --all(ho appena guardato la pagina man per quella 30 secondi fa).
Giovanni

Mentre quella notizia è un po 'deludente (al momento sono il 6), almeno ora so che modificare gli script di init è un hack accettabilmente terribile.
Parthian Shot

5
Prestare molta attenzione alla modifica degli script di inizializzazione: ciò potrebbe causare falsi allarmi su qualsiasi software di rilevamento delle intrusioni che si potrebbe avere in atto e le modifiche verranno sovrascritte se il initscriptspacchetto viene mai aggiornato (ad esempio una versione errata). Non lo consiglio davvero.
Giovanni

Non ho ancora impostato un IDS, quindi al momento i falsi allarmi non sono un problema (il server non è ancora attivo e so che non sono quasi pronto per l'implementazione; questa domanda fa parte della mia preparazione. Ma ho intenzione di mettere in un HIDS). Starò il più attento possibile e, se c'è un modo che non comporta la modifica manuale delle parti principali della configurazione di init, lo farò sicuramente.
Parthian Shot

1

Puoi anche usare l'opzione ifup-post in centos:

/ Etc / sysconfig / network-scripts / ifup-post

Chiamato quando si verifica un dispositivo di rete TRANNE un dispositivo SLIP. Chiama / etc / sysconfig / network-scripts / ifup-route per richiamare route statiche che dipendono da quel dispositivo. Chiama / etc / sysconfig / network-scripts / ifup-aliases per richiamare gli alias per quel dispositivo. Imposta il nome host se non è già impostato e un nome host può essere trovato per l'IP per quel dispositivo. Invia SIGIO a tutti i programmi che hanno richiesto la notifica di eventi di rete.

Potrebbe essere esteso per correggere la configurazione del nameservice, chiamare script arbitrari, ecc., Se necessario.

Questo script viene eseguito e dopo quanto sopra (ifup-route e ifup-aliases) cerca ifup-local

if [ -x /sbin/ifup-local ]; then
   /sbin/ifup-local ${DEVICE}
fi

Quindi puoi creare questo file e assicurarti che richiami di nuovo iptables, ad esempio usando iptables-restore:

iptables-restore < /etc/sysconfig/iptables

1

Un piccolo addendum: per assicurarti che le regole necessarie siano presenti al prossimo avvio del server, salvalo con

sudo sh -c "iptables-save > /etc/iptables.rules"
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.