OVH Cloud OVH Cloud

postfix et authentification

16 réponses
Avatar
Remi Suinot
Bonsoir =E0 tous,

je cherche =E0 configurer postfix pour avoir une authentification des utili=
sateurs. Mon=20
postfix actuel fonctionne bien, mais mes utilisateur ext=E9rieur au r=E9sea=
u ne peuvent
pas l'utiliser pour envoyer du courier.
Ce que je cherche =E0 faire:
les utilisateurs interne au r=E9seau perso peuvent utiliser postfix,
les utilisateir externes au r=E9seau mais ayant un compte sur le serveur
peuvent utiliser postfix,
de l'ext=E9rieur, on peux recevoir du mail pour les users,=20
mais pas de faire relai.

Je tente d=E9sep=E9r=E9ment de configurer, mais l=E0, je s=E8che.=20
Avez vous une doc (autre que celle de postfix, j'ai d=E9j=E0 essay=E9), pou=
r utiliser
les shadows passwords? Sasl ne semble pas vouloir l'utiliser...

Merci de vos avis.
R=E9mi.

--=20
Merci de m'avoir lu jusqu'ici, longue Vie et Prosperite.
http://www.suinot.org

6 réponses

1 2
Avatar
mouss
Remi Suinot wrote:
En ce Sun, 03 Feb 2008 18:52:30 +0100, le sermon de Nicolas KOWALSKI contenait:


Remi Suinot writes:


Pour arriver à un résultat, j'ai été obligé d'abord, de supprimer la
config de postfix suivante:

smtpd_helo_restrictions = reject_non_fqdn_hostname
sinon, ça passe pas du tout, avec ou sans authentification!



Je n'arrive pas à te suivre ; dans un précédent courrier tu écrivais
que ça marchait sans authentification depuis le réseau local...

Maintenant, l'authentification marche ou non ?




J'ai avancé un peu!
Apparemment, ssl est utilisé, mais l'autenthification a échoué.
Dans les log ci dessous, j'ai fait un test de l'intérieur du réseau vers mon adresse chez free:
Feb 4 22:50:28 master postfix/smtpd[2166]: > excalibur.suinot.org[192.168.3.10]: 250-AUTH=LOGIN
Feb 4 22:50:28 master postfix/smtpd[2166]: > excalibur.suinot.org[192.168.3.10]: 250-ENHANCEDSTATUSCODES
Feb 4 22:50:28 master postfix/smtpd[2166]: > excalibur.suinot.org[192.168.3.10]: 250-8BITMIME
Feb 4 22:50:28 master postfix/smtpd[2166]: > excalibur.suinot.org[192.168.3.10]: 250 DSN
Feb 4 22:50:28 master postfix/smtpd[2166]: < excalibur.suinot.org[192.168.3.10]: AUTH LOGIN
Feb 4 22:50:28 master postfix/smtpd[2166]: xsasl_cyrus_server_first: sasl_method LOGIN
Feb 4 22:50:28 master postfix/smtpd[2166]: xsasl_cyrus_server_auth_response: uncoded server challenge: Username:
Feb 4 22:50:28 master postfix/smtpd[2166]: > excalibur.suinot.org[192.168.3.10]: 334 VXNlcm5hbWU6
Feb 4 22:50:28 master postfix/smtpd[2166]: < excalibur.suinot.org[192.168.3.10]: cmVtaUBzdWlub3Qub3Jn
Feb 4 22:50:28 master postfix/smtpd[2166]: xsasl_cyrus_server_next: decoded response:
Feb 4 22:50:28 master postfix/smtpd[2166]: xsasl_cyrus_server_auth_response: uncoded server challenge: Password:
Feb 4 22:50:28 master postfix/smtpd[2166]: > excalibur.suinot.org[192.168.3.10]: 334 UGFzc3dvcmQ6
Feb 4 22:50:28 master postfix/smtpd[2166]: < excalibur.suinot.org[192.168.3.10]: 4peP4peP4peP4peP4peP4peP4peP4peP4peP4peP
Feb 4 22:50:28 master postfix/smtpd[2166]: xsasl_cyrus_server_next: decoded response: ??????????????????????????????
Feb 4 22:50:28 master postfix/smtpd[2166]: warning: excalibur.suinot.org[192.168.3.10]: SASL LOGIN authentication failed: authentication failure
Feb 4 22:50:28 master postfix/smtpd[2166]: > excalibur.suinot.org[192.168.3.10]: 535 5.7.0 Error: authentication failed: authentication failure
Feb 4 22:50:41 master postfix/smtpd[2166]: smtp_get: EOF







je ne vois pas PLAIN comme mecanisme d'authentification. vérifie que
t'as bien module sasl PLAIN. C'est un comble d'avoir LOGIN (qui n'est
pas standard) mais pas PLAIN (qui est standard). Dans les deux cas
(PLAIN ET LOGIN), il vaut mieux passer sous SSL (STARTTLS), sinon gare
au vol de mots de passe.

Par ailleurs, mieux vait utiliser le port 587 pour tout ça (pour la
"submission" par tes utilisateurs). ça permettra de bloquer le port 25
et de detecter les virus qui essayeraient de l'utiliser (et puis c'est
bien de séparer les roles. un MSA n'a pas la même fonction qu'un MX. en
séparant les roles, on peut alors se passer des exceptions dans les
smtpd_*_restrictions).

PS. dovecot-auth est plus simple à mettre en place que cyrus_sasl (même
si on n'utilise pas dovecot comme serveur pop/imap, on peut utiliser son
implémentation sasl).

Pour savoir où tu en es dans ta configuration, un "postconf -n" serait
le bienvenu...




voila voila...
master:/etc/postfix# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
content_filter = smtp-amavis:[127.0.0.1]:10024
inet_interfaces = all
inet_protocols = all
mailbox_size_limit = 51200000
mydestination = suinot.org, localhost, localhost.localdomain
myhostname = master.suinot.org
mynetworks = 192.168.0.0/16, 127.0.0.0/8
myorigin = /etc/mailname
recipient_delimiter = +
relayhost =
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_helo_required = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination permit
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $myhostname
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes


Mais cela ouvre t il une porte dans postfix?



C'est une option qui permet normalement de se prémunir contre certains
pourriéleurs. Personnellement, je ne l'utilise pas, SpamAssassin
faisant très bien le travail.

Pour d'autres infos plus précises:
http://www.postfix.org/uce.html#smtpd_helo_restrictions



Merci pour cette info.

Merci de votre aide.
Rémi.






--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
mouss
Remi Suinot wrote:
../..

# restrictions
smtpd_recipient_restrictions >>> permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
permit



Merci de ton avis.
Je viens de tester. Résultats: quand mes utilisateurs sont hors du réseau local, ca marche pas.
Voila le résultat dans syslog lors d'un test:
Feb 3 16:47:44 master postfix/smtpd[24130]: connect from abcdef.adsl.proxad.net[ww.xx.yyy.zzz]
Feb 3 16:52:44 master postfix/smtpd[24130]: timeout after AUTH from abcdef.adsl.proxad.net[ww.xx.yyy.zzz]
Feb 3 16:52:44 master postfix/smtpd[24130]: disconnect from abcdef.adsl.proxad.net[ww.xx.yyy.zzz]
le test a été fait avec sylpheed, méthode d'autentification 'login'.
Un utilisateur dans le réseau local focntionne avec l'authentification, mais les log n'indique pas de méthode utilisée.

J'avais redémarrer saslauth et postfix. Pas d'erreur quand je les ai redémarrer.
Comment rendre postfix et/ou saslauthd plus bavard, le temps de faire des tests plus poussés?




J'ai oublié un truc!
Pour arriver à un résultat, j'ai été obligé d'abord, de supprimer la config de postfix suivante:
smtpd_helo_restrictions = reject_non_fqdn_hostname
sinon, ça passe pas du tout, avec ou sans authentification!
Mais cela ouvre t il une porte dans postfix?




En principe, ce genre de vérification ne doit pas se faire sur les
conections des utilisateurs avec un MUA (thunderbird, outl00k, kmail,
...) sauf si on a envie de passer son temps à se batter avec ces clients.

Par contre, c'est pas mal pour les connection "étrangères". Mais comme
tu l'as mise sans exception, elle s'applique à tout le monde. le
placement standarad est un peu comme suit:

smtpd_recipient_restrictions permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
reject_non_fqdn_sender
reject_non_fqdn_recipient
reject_invalid_hostname
reject_non_fqdn_hostname
reject_unknown_sender_domain
...

le tout dans smtpd_recipient_restrictions, ce qui permet de "suivre" le
cheminement et d'éviter la duplication des exceptions (les permit_*).


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Nicolas KOWALSKI
mouss writes:

je ne vois pas PLAIN comme mecanisme d'authentification. vérifie que
t'as bien module sasl PLAIN. C'est un comble d'avoir LOGIN (qui
n'est pas standard) mais pas PLAIN (qui est standard).



Effectivement, mea culpa maxima pour cette erreur.

A modifier dans /etc/postfix/sasl/smtpd.conf:

mech_list: plain login

--
Nicolas


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Remi Suinot
Bonsoir;

En ce Tue, 05 Feb 2008 20:04:56 +0100, le sermon de Nicolas KOWALSKI <niko@ petole.dyndns.org> contenait:

mouss writes:

> je ne vois pas PLAIN comme mecanisme d'authentification. vérifie que
> t'as bien module sasl PLAIN. C'est un comble d'avoir LOGIN (qui
> n'est pas standard) mais pas PLAIN (qui est standard).

Effectivement, mea culpa maxima pour cette erreur.

A modifier dans /etc/postfix/sasl/smtpd.conf:

mech_list: plain login



J'ai (enfin!) pu faire des essai de l'extérieur de mon réseau:
config de sylpheed ssl + méthode login. Voila une partie des log:
xsasl_cyrus_server_create: SASL service=smtp, realm=master.suinot.org
name_mask: noanonymous
connect from lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]
.../...
send attr request = connect
send attr ident = smtp:xx.yy.zz.ww
private/anvil: wanted attribute: status
input attribute name: status
input attribute value: 0
private/anvil: wanted attribute: count
input attribute name: count
input attribute value: 1
private/anvil: wanted attribute: rate
input attribute name: rate
input attribute value: 1
private/anvil: wanted attribute: (list terminator)
input attribute name: (end)
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 220 master.suinot.or g ESMTP Postfix (Debian/GNU)


< lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: ?t???
match_string: ?t??? ~? CONNECT
match_string: ?t??? ~? GET
match_string: ?t??? ~? POST
match_list_match: ?t???: no match
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 502 5.5.2 Error: com mand not recognized



Autre test: méthode login + utiliser statls pour ssl
là, c'est un peu mieux:
TLS connection established from lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.y y.zz.ww]: TLSv1 with cipher DHE-RSA-AES256-SHA (2
56/256 bits)
< lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: EHLO localhost.local domain
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-master.suinot.org
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-PIPELINING
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-SIZE 10240000
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-VRFY
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-ETRN
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-AUTH LOGIN


match_list_match: lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net: no match
match_list_match: xx.yy.zz.ww: no match
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-AUTH= LOGIN
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-ENHANCEDSTATUSCO DES
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-8BITMIME
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250 DSN


< lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: AUTH LOGIN
xsasl_cyrus_server_first: sasl_method LOGIN
xsasl_cyrus_server_auth_response: uncoded server challenge: Username:
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 334 VXNlcm5hbWU6


< lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: ZnJlZGVyaWM=
xsasl_cyrus_server_next: decoded response: frederic
xsasl_cyrus_server_auth_response: uncoded server challenge: Password:
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 334 UGFzc3dvcmQ6


< lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: ZnJlZGVyaWM=
xsasl_cyrus_server_next: decoded response: frederic
warning: SASL authentication failure: cannot connect to saslauthd server: N o such file or directory
warning: lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: SASL LOGIN au thentication failed: generic failure
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 535 5.7.0 Error: aut hentication failed: generic failure



je ne pense pas que ce soit le mot de passe, puisque le pops fonctionne ave c les même valeurs de login/mot de passe.
Bref, je cherche encore....

Rémi.
--
Merci de m'avoir lu jusqu'ici, longue Vie et Prosperite.
http://www.suinot.org
Avatar
mouss
Remi Suinot wrote:
Bonsoir;

En ce Tue, 05 Feb 2008 20:04:56 +0100, le sermon de Nicolas KOWALSKI contenait:


mouss writes:


je ne vois pas PLAIN comme mecanisme d'authentification. vérifie que
t'as bien module sasl PLAIN. C'est un comble d'avoir LOGIN (qui
n'est pas standard) mais pas PLAIN (qui est standard).



Effectivement, mea culpa maxima pour cette erreur.

A modifier dans /etc/postfix/sasl/smtpd.conf:

mech_list: plain login




J'ai (enfin!) pu faire des essai de l'extérieur de mon réseau:
config de sylpheed ssl + méthode login. Voila une partie des log:
xsasl_cyrus_server_create: SASL service=smtp, realm=master.suinot.org
name_mask: noanonymous
connect from lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]
.../...
send attr request = connect
send attr ident = smtp:xx.yy.zz.ww
private/anvil: wanted attribute: status
input attribute name: status
input attribute value: 0
private/anvil: wanted attribute: count
input attribute name: count
input attribute value: 1
private/anvil: wanted attribute: rate
input attribute name: rate
input attribute value: 1
private/anvil: wanted attribute: (list terminator)
input attribute name: (end)

lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 220 master.suinot.org ESMTP Postfix (Debian/GNU)



< lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: ?t???
match_string: ?t??? ~? CONNECT
match_string: ?t??? ~? GET
match_string: ?t??? ~? POST
match_list_match: ?t???: no match

lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 502 5.5.2 Error: command not recognized




Autre test: méthode login + utiliser statls pour ssl
là, c'est un peu mieux:
TLS connection established from lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: TLSv1 with cipher DHE-RSA-AES256-SHA (2
56/256 bits)
< lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: EHLO localhost.localdomain

lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-master.suinot.org
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-PIPELINING
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-SIZE 10240000
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-VRFY
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-ETRN
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-AUTH LOGIN



match_list_match: lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net: no match
match_list_match: xx.yy.zz.ww: no match

lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-AUTH= LOGIN
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-ENHANCEDSTATUSCODES
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250-8BITMIME
lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 250 DSN



< lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: AUTH LOGIN
xsasl_cyrus_server_first: sasl_method LOGIN
xsasl_cyrus_server_auth_response: uncoded server challenge: Username:

lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 334 VXNlcm5hbWU6



< lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: ZnJlZGVyaWM > xsasl_cyrus_server_next: decoded response: frederic
xsasl_cyrus_server_auth_response: uncoded server challenge: Password:

lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 334 UGFzc3dvcmQ6



< lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: ZnJlZGVyaWM > xsasl_cyrus_server_next: decoded response: frederic
warning: SASL authentication failure: cannot connect to saslauthd server: No such file or directory
warning: lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: SASL LOGIN authentication failed: generic failure

lns-bzn-37-xx.yy.zz.ww.adsl.proxad.net[xx.yy.zz.ww]: 535 5.7.0 Error: authentication failed: generic failure




je ne pense pas que ce soit le mot de passe, puisque le pops fonctionne avec les même valeurs de login/mot de passe.




si tu ne l'as pas déjà fait, je te conseille de changer le mot de passe
immédiatement. la prochaine fois, utilise un compte de test "limité"
avant d'envoyer le login et password au public (base64, c'est pas
chiffré, c'est juste mis en base64).

- est-ce que saslauthd est lancé?
- est-ce que postfix est en chroot? Dans master.cf, à la colonne du
chroot, il doit y avoir un 'n' et non un 'y' ni un '-'.


grande question: tu utilises quoi comme serveur pop/imap?
- si tu utilises dovecot, alors il vaut mieux utiliser dovecot-auth au
lieu de cyrus-sasl
- si tu utilises courier, tu peux configurer cyrus-sasl pour utiliser
authdaemon

dans tous les cas, tu peux utiliser dovecot-auth (même sans utiliser
dovecot comme serveur pop/imap). c'est bien plus simple que cryus-sasl,
qui semble poser tellement de problèmes à plein de monde...


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Remi Suinot
Bonsoir, et désolé pour le retard de cette réponse.
(immersion total dans le boulot, ....)

En ce Mon, 11 Feb 2008 22:28:08 +0100, le sermon de mouss t> contenait:

.../...

si tu ne l'as pas déjà fait, je te conseille de changer le mot de pas se
immédiatement. la prochaine fois, utilise un compte de test "limité"
avant d'envoyer le login et password au public (base64, c'est pas
chiffré, c'est juste mis en base64).



[Je veins de changer le mot de passe]

- est-ce que saslauthd est lancé?
- est-ce que postfix est en chroot? Dans master.cf, à la colonne du
chroot, il doit y avoir un 'n' et non un 'y' ni un '-'.



saslauth est lancé, et postfix n'est pas dans un chroot.



grande question: tu utilises quoi comme serveur pop/imap?
- si tu utilises dovecot, alors il vaut mieux utiliser dovecot-auth au
lieu de cyrus-sasl
- si tu utilises courier, tu peux configurer cyrus-sasl pour utiliser
authdaemon

dans tous les cas, tu peux utiliser dovecot-auth (même sans utiliser
dovecot comme serveur pop/imap). c'est bien plus simple que cryus-sasl,
qui semble poser tellement de problèmes à plein de monde...



Je vais regarder dans la direction dovecot-auth, puisque mon imaps/pops est déjà
dovecot.

Merci pour ton avis, et encore désolé pour le retard.
Rémi.

PS: bonjour monsion billgates (j'ai vu son post ici même :)

--
Merci de m'avoir lu jusqu'ici, longue Vie et Prosperite.
http://www.suinot.org
1 2