Monthly Archives: Dicembre 2018

RHEL7:Sicurezza Host-based e User-based

Sicurezza basata su host (Host-based)

La sicurezza basata su host verrà configurata a livello di applicazione e non su un firewall.
Il nostro obiettivo è configurare il controllo degli accessi come segue:

Consentire da: *.rhce.local (10.8.8.0/24),
Rifiutare da: my1337.hacker.local (10.8.9.99/32).

SSH

Permetti al firewall l’accesso SSH per tutti:

# firewall-cmd --permanent --add-service=ssh

Aprire /etc/hosts.deny e aggiungere quanto segue:

sshd:   my1337.hacker.local

Apri /etc/hosts.allow e aggiungi quanto segue:

sshd:   *.rhce.local

Di default tutto è permesso.

# journalctl -xlf
[...]
sshd[3069]: refused connect from my1337.hacker.local (10.8.9.99)

HTTP / HTTPS (Apache)

Permetti al firewall l’accesso HTTP / S per tutti:

# firewall-cmd --permanent --add-service={http,https}

Inserisci quanto segue nel file di configurazione httpd:

<RequireAll>
  Require host rhce.local
  Require not host my1337.hacker.local
</RequireAll>
# journalctl -xlf
[...]
[authz_core:error] [pid 3057] [client 10.8.9.99:43378] AH01630: client denied by server configuration: /var/www/html/

DNS (Unbound)

Permetti al firewall l’accesso DNS per tutti:

# firewall-cmd --permanent --add-service=dns

Aprire /etc/unbound/unbound.conf e aggiungere la seguente riga:

access-control: 10.8.8.0/24 allow

Di default tutto è rifiutato.

NFS

Consenti l’accesso NFS del firewall per tutti:

# firewall-cmd --permanent --add-service=nfs

Apri / etc / exports e configura l’accesso:

/nfs *.rhce.local(ro)

Tutto il resto è rifiutato.

SMB

Consenti l’accesso SMB al firewall per tutti:

# firewall-cmd --permanent --add-service=samba

Aprire /etc/samba/smb.conf e configurare gli host consentono le voci:

hosts allow = 10.8.8.

È anche possibile utilizzare la lista degli host deny, ma si noti che quando gli elenchi sono in conflitto, l’elenco di autorizzazioni ha la precedenza.

SMTP (Postfix)

Permetti al firewall l’accesso SMTP per tutti:

# firewall-cmd --permanent --add-service=smtp

Apri / etc / postfix / access e aggiungi quanto segue:

rhce.local          OK
my1337.hacker.local REJECT

eseguire:

# postmap /etc/postfix/access

Aggiungi la seguente riga a /etc/postfix/main.cf:

smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
# journalctl -xlf
[...]
postfix/smtpd[3939]: connect from my1337.hacker.local[10.8.9.99]
postfix/smtpd[3939]: NOQUEUE: reject: RCPT from my1337.hacker.local[10.8.9.99]: 554 5.7.1 <my1337.hacker.local[10.8.9.99]>: Client host rejected: Access denied; from=<root@my1337.hacker.local> to=<root@rhce.local> proto=ESMTP helo=
postfix/smtpd[3939]: disconnect from my1337.hacker.local[10.8.9.99]
[...]
postfix/smtpd[3939]: connect from srv1.rhce.local[10.8.8.71]
postfix/smtpd[3939]: A075621186: client=srv1.rhce.local[10.8.8.71]
postfix/cleanup[3944]: A075621186: message-id=<20160801150634.86753207E9@srv1.rhce.local>
postfix/qmgr[3882]: A075621186: from=<root@rhce.local>, size=610, nrcpt=1 (queue active)
postfix/smtpd[3939]: disconnect from srv1.rhce.local[10.8.8.71]
postfix/local[3946]: A075621186: to=<root@rhce.local>, relay=local, delay=0.08, delays=0.06/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)
postfix/qmgr[3882]: A075621186: removed

Sicurezza basata sull’utente (User-based)

SSH

Apri /etc/ssh/sshd_config e configura le seguenti sezioni:

AllowUsers sandy
DenyUsers root

Non dimenticare di riavviare il servizio sshd.

HTTP / HTTPS (Apache)

Apri /etc/httpd/conf/httpd.conf e configura l’autenticazione dell’utente:

<Directory "/var/www/html">
   AuthType Basic
   AuthName "Login Required"
   AuthUserFile "/etc/httpd/conf/htpasswd"
   Require valid-user
</Directory>


Dovrai creare un file password con un utente valido:

# htpasswd -c /etc/httpd/conf/htpasswd sandy

Non dimenticare di riavviare il servizio httpd.

NFS

Il server NFS non richiede l’autenticazione e applica solo restrizioni di accesso basate su indirizzi IP o nomi host di un client. Utilizzando il metodo di sicurezza predefinito, che è sec = sys, il server NFS si fida di qualsiasi uid inviato dal client.

Kerberos dovrebbe essere usato per dimostrare l’identità dell’utente.

SMB

Apri /etc/samba/smb.conf e configura le seguenti sezioni:

valid users = sandy, alice
write list = alice
read list = sandy


Gli utenti validi sono un elenco di utenti che dovrebbero poter accedere a questo servizio.

L’elenco di scrittura è un elenco di utenti a cui è stato concesso l’accesso in lettura e scrittura a un servizio. Se l’utente che si connette si trova in questo elenco, verrà loro fornito l’accesso in scrittura, indipendentemente dall’opzione di sola lettura impostata.

Non dimenticare di riavviare il servizio smb.

SMTP (Postfix)

Controllo degli accessi per-address /etc/postfix/access di Postfix:

user@domain REJECT

 

Configurazione di server di posta centrale

Prerequisiti

Per testare un server di posta centrale in modo standard utilizzando il record MX, è necessario configurare un server DNS principale.

È ancora possibile evitare di configurare un server DNS master se si desidera solo testare una configurazione null client (requisito RHCE 7). In questo caso, dovrai utilizzare la sintassi relayhost = [mail.example.com] o relayhost = [ipaddress] (vedi qui).

Inoltre, puoi impostare la direttiva disable_dns_lookups su yes, per forzare Postfix a leggere il file locale /etc/hosts invece di inviare richieste DNS per ottenere i record MX.

Procedura d’installazione

Installa il pacchetto postfix (se non è già lì):

# yum install -y postfix

Aggiungi un nuovo servizio al firewall:

# firewall-cmd --permanent --add-service=smtp
success

Ricarica la configurazione del firewall:

# firewall-cmd --reload
success

Attiva il servizio postfix all’avvio:

# systemctl enable postfix

Avvia il servizio postfix:

# systemctl restart postfix

Supponiamo che il tuo server sia chiamato mail.example.com sulla rete 192.168.1.0/24.
Modifica il file /etc/postfix/main.cf e modifica le seguenti direttive:

myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.1.0/24, 127.0.0.0/8 

Controlla la sintassi:

# postfix check

Controlla la configurazione non predefinita:

# postconf -n

Imposta SELinux allow_postfix_local_write_mail_spool booleano su “on”:

# setsebool -P allow_postfix_local_write_mail_spool on

Riavvia la configurazione postfix:

# systemctl restart postfix

Test da un client con il comando nmap, dovrebbe visualizzare: “25 / tcp open smtp”:

# yum install -y nmap
# nmap mail.example.com
Starting Nmap 6.40 ( http://nmap.org ) at 2014-08-05 23:41 CEST
Nmap scan report for mail.example.com (192.168.1.24)
Host is up (0.00076s latency).
Not shown: 998 filtered ports
PORT   STATE SERVICE
22/tcp open  ssh
25/tcp open  smtp
MAC Address: 52:54:00:44:23:51 (QEMU Virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 6.16 seconds

In alternativa, prova da un client con il comando telnet:

# yum install -y telnet
# telnet mail.example.com 25
Trying 192.168.1.24...
Connected to mail.example.com.
Escape character is '^]'.
220 mail.example.com ESMTP Postfix
HELO client
250 mail.example.com
quit
221 2.0.0 Bye
Connection closed by foreign host.

Sul server di posta centrale, creare un utente chiamato me:

# adduser me

Quindi, manda una mail a me:

# echo "This is a test." | mail -s "Test" me@example.com

Nota: il comando echo introduce il contenuto della posta. L’opzione -s specifica l’oggetto della posta seguito dal destinatario.

Infine, verifica che l’utente riceva la sua posta:

# su - me
$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/me": 1 message 1 new
>N  1 root                  Tue Aug  5 23:47  21/785   "Test"

RHEL7: Installazione e configurazione server SSH

Nota: questo è un obiettivo d’esame RHCE 7.

Procedura di configurazione

Installa il servizio SSH se non è già lì:

# yum install -y openssh-server

Attiva il servizio SSH all’avvio:

# systemctl enable sshd

Avvia il servizio SSH:

# systemctl start sshd

Aggiungi un nuovo servizio al firewall:

# firewall-cmd --permanent --add-service=ssh

Ricarica la configurazione del firewall:

# firewall-cmd --reload

Apriamo il file /etc/ssh/sshd_config e ne discutiamo il contenuto:

Port 22                                 # defines listening port for ssh
AddressFamily any                       # accepts IPv4 et IPv6 addresses
ListenAddress 0.0.0.0                   # allows ssh to listen on all network interfaces
ListenAddress ::                        # listens on IPv6 addresses too
Protocol 2                              # defines version of ssh (version 1 is not used any more)
SyslogFacility AUTHPRIV                 # stores logging attempts in /var/log/secure (see rsyslog.conf file)
LoginGraceTime 2m                       # sets the time to connect
PermitRootLogin yes                     # allows direct login as root: outside lab, this option should be set to 'no'
StrictModes yes                         # allows connection only if the user's home directory is not world-writable
MaxAuthTries 6                          # defines the number of authentication attempts allowed
MaxSessions 10                          # defines the limit of simultaneous open connections
PubKeyAuthentication yes                # enables public key authentication
AuthorizedKeysFile .ssh/authorized_keys # defines the location of the authorized-keys file
HostbasedAuthentication no              # forbids the use of /etc/hosts.equiv
IgnoreUserKnownHosts no                 # reads the .ssh/known_hosts at each connection
IgnoreRhosts yes                        # doesn't read user's ~/.rhosts file
PasswordAuthentication yes              # sets password-based authentication
PermitEmptyPasswords no                 # doesn't allow empty passwords (hopefully!)
ChallengeResponseAuthentication no      # forbids use of one-time passwords
UsePAM yes                              # enables the Pluggable Authentication Module interface
AllowAgentForwarding yes                # allows the ssh-agent to forward private keys
AllowTCPForwarding yes                  # allows TCP communications to be forwarded
GatewayPorts no                         # prevents remote hosts from connecting to ports forwarded for the client
X11Forwarding yes                       # enables X11 forwarding
X11DisplayOffset 10                     # limits the number of GUI display open at the same time
X11UseLocalhost yes                     # defines how the GUI display is bound to the SSH server
PrintMotd yes                           # displays the message of the day
PrintLastLog yes                        # displays the date of the last login
TCPKeepAlive yes                        # allows the system to send TCP keepalive messages
UseLogin no                             # specifies whether login is used for interactive login session
UsePrivilegeSeparation yes              # separates incoming network traffic processing from the rest
PermitUserEnvironment no                # doesn't deal with environment options
Compression delayed                     # specifies that compression is delayed until user authentication
ClientAliveInterval 0                   # doesn't send any message before client deconnection
ClientAliveCountMax 3                   # defines the number of messages before client deconnection
-                                       # if ClientAliveInterval is different from 0
UseDNS yes                              # checks remote hostnames against DNS
PidFile /var/run/sshd.pid               # defines the file where the SSH process ID is stored
MaxStartups 10                          # defines the number of terminals simultaneously allowed
PermitTunnel no                         # doesn't support device forwarding
ChrootDirectory none                    # disables the use of chroot
Subsystem sftp /usr/libexec/openssh/sftp-server # supports the use of SSH encryption for SFTP file transfers

Risorse addizionali

Puoi anche dare un’occhiata a questo sito.

RHEL7: Mail Relay di posta

Nota: questo è un obiettivo d’esame RHCE 7.

Prerequisiti

Per testare questa configurazione, è necessario configurare un server di posta centrale.
Procedura d’installazione

La configurazione di un server DNS master può essere evitata utilizzando la sintassi [mail.example.com] (vedere di seguito) o l’indirizzo IP del gateway di posta.

Installa il pacchetto postfix se non è già lì:

# yum install -y postfix

Attiva il servizio postfix all’avvio (normalmente già abilitato):

# systemctl enable postfix

Avvia il servizio postfix (normalmente già avviato):

# systemctl restart postfix

Configurazioni principali

Ci sono due casi da distinguere:

il sistema non riceve alcuna posta dall’esterno ma inoltra tutte le mail inviate dagli utenti locali (anche le e-mail dagli utenti locali agli utenti locali) a un server di posta centrale: questa è la configurazione null-client,
il sistema accetta qualsiasi e-mail dalla rete locale e li inoltra con quelli inviati dagli utenti locali ad un server di posta centrale: questa è la configurazione del gateway di posta.

L’obiettivo dell’esame RHCE 7 sembra essere più orientato verso la configurazione null-client.
Questo tutorial spiegherà come implementare questa configurazione. I dettagli relativi alla configurazione del gateway di posta verranno mostrati in seguito.

Configurazione Null-client

Supponiamo che il tuo server sia chiamato server.example.com sulla rete 192.168.1.0/24 e il tuo server di posta centrale (gateway di posta in uscita) si chiami mail.example.com a 192.168.1.1.
Modifica il file /etc/postfix/main.cf e modifica le seguenti direttive:

myhostname = server.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = loopback-only
mydestination =
relayhost = 192.168.1.1

Nota 1: fai attenzione a non specificare $mydomain nell’opzione mydestination (questo memorizzerà tutte le mail localmente, che non è esattamente quello che vuoi).
Nota 2: se hai un server DNS che si occupa di record MX, puoi specificare relayhost = mail.example.com invece dell’indirizzo IP.
Nota3: Se non si imposta un server DNS (ma si utilizza il file /etc/hosts) o se il server DNS non gestisce i record MX, è possibile specificare relayhost = [mail.example.com], questo modulo disattiva le ricerche MX.

Controlla la sintassi:

# postfix check

Controlla la configurazione non predefinita:

# postconf -n

Ricarica la configurazione postfix:

# systemctl restart postfix

Nota: normalmente non è necessario riavviare i processi quando i parametri vengono modificati, è sufficiente un reload. Tuttavia, quando si modifica il parametro inet_interfaces, è necessario riavviare tutti i processi.

C’è un modo più veloce di modificare il file /etc/postfix/main.cf, puoi anche usare il comando postconf. Questo comando con l’opzione -e cambia un parametro con il suo valore specificato e scrive tutto nel file /etc/postfix/main.cf! Puoi verificarlo riavviando i processi postfix o riavviando il server!

# postconf -e 'relayhost = 192.168.1.1'

Per ottenere il valore associato al parametro relayhost, digitare:

# postconf relayhost
relayhost = 192.168.1.1

Test

Per inviare una mail al server di posta centrale (è necessario creare tale utente sul server di posta centrale), digitare:

# echo "This is a test." | mail -s "Test" me@example.com

Nota: il comando echo introduce il contenuto della posta. L’opzione -s specifica l’oggetto della posta seguito dal destinatario.

Controlla la coda di posta locale, digitare:

# mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
822FA3DE4       535 Tue Aug  5 16:54:45  root@example.com
(cannot update mailbox /var/mail/me for user me. destination /var/mail/me is not owned by recipient)
me@example.com

-- 0 Kbytes in 1 Request.

Riordinare una mail (-r), digitare:

# postsuper -r 822FA3DE4
postsuper: name_mask: all
postsuper: inet_addr_local: configured 2 IPv4 addresses
postsuper: inet_addr_local: configured 2 IPv6 addresses
postsuper: renamed file deferred/8/822FA3DE4 as maildrop/822FA3DE4
postsuper: 822FA3DE4: requeued
postsuper: Requeued: 1 message

Per eliminare la posta (-d) nella coda locale, digitare:

# postsuper -d 822FA3DE4

Nota: il comando postsuper -d ALL cancella tutti i messaggi nella coda di posta (ALL in maiuscolo).

Per leggere la posta precedente per me sul server di posta centrale (qui mail.example.com), connettersi ad esso e digitare:

[mail]# su - me
$ mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/me": 1 message
 U  1 root                  Tue Aug  5 18:31  22/755   "Subject: Test"

Per controllare tutto il processo seguito da un’e-mail, digitare:

# tail -f /var/log/maillog
18:07:40 postfix/pickup[2338]: 822FA3DE4: uid=89 from=<root@example.com> orig_id=0FB353E45
18:07:40 postfix/cleanup[24446]: 822FA3DE4: message-id=<20140805145446.0FB353E45@server.example.com>
18:07:40 postfix/qmgr[2339]: 822FA3DE4: from=<root@example.com>, size=535, nrcpt=1 (queue active)
18:07:40 postfix/local[24448]: warning: specify "strict_mailbox_ownership = no" to ignore mailbox ownership mismatch
18:07:41 postfix/local[24448]: 822FA3DE4: to=<me@example.com>, relay=local, delay=4375, delays=4375/0.02/0/0.25, dsn=4.2.0, status=deferred (cannot update mailbox /var/mail/me for user me. destination /var/mail/me is not owned by recipient)

Configurazione del gateway

Se si desidera configurare una configurazione di gateway di posta (un server che riceve e-mail dalla rete locale e le inoltra ad un server di posta centrale), eseguire i seguenti passaggi.

Modifica il file /etc/postfix/main.cf e modifica le seguenti direttive:

myhostname = server.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks = 192.168.1.0/24, 127.0.0.0/8
relayhost = 192.168.1.1

Nota: rispetto alla configurazione del client null, i processi Postfix ascoltano tutte le interfacce di rete (la direttiva inet_interfaces), accettano le mail inviate al dominio example.com (la direttiva mydestination) limitate alla rete locale (la direttiva mynetworks).

Attenzione: non specificare $mydomain nella variabile mydestination se non si desidera memorizzare le mail localmente (questo errore è stato precedentemente fatto in questo tutorial).

Controlla la sintassi:

# postfix check

Controlla la configurazione non predefinita:

# postconf -n

Ricarica la configurazione postfix:

# systemctl restart postfix

Apri il firewall per ricevere email dall’esterno:

# firewall-cmd --permanent --add-service=smtp
success

Ricarica la configurazione del firewall:

# firewall-cmd --reload
success

Consigli utili

Prima o durante l’esame, puoi andare sulla directory /usr/share/doc/postfix-2.10.1/README_FILES per leggere i files BASIC_CONFIGURATION_README e STANDARD_CONFIGURATION_README riempiti con molti esempi di configurazione Postfix.