Samba Primary Domain Controller with LDAP ( Thay the Active Directory )

By Huynh Sy Nguyen

Normal 0 false false false EN-US X-NONE X-NONE

Samba PDC with LDAP

Edit  /etc/hosts

[root@server ~]# vi /etc/hosts

192.168.1.1 server server.abc.com

Install those following packages below.

[root@server ~]# yum install samba samba-client openldap openldap-clients open-ldap-servers nss_ldap perl-LDAP

perl-Crypt-SmbHash-0.12-1.2.el5.rf.noarch.rpm
perl-Digest-SHA1-2.11-1.2.1.i386.rpm
perl-Jcode-2.06-1.el5.rf.i386.rpm
perl-LDAP-0.33-3.fc6.noarch.rpm
perl-Unicode-Map-0.112-1.el5.rf.i386.rpm
perl-Unicode-Map8-0.12-1.el5.rf.i386.rpm
perl-Unicode-MapUTF8-1.11-1.2.el5.rf.noarch.rpm
perl-Unicode-String-2.09-1.2.el5.rf.i386.rpm
phpldapadmin-1.1.0.7.tar.gz
smbldap-tools-0.9.5-1.noarch.rpm

[root@server smbldap]# rpm -ivh perl-Crypt-SmbHash-0.12-1.2.el5.rf.noarch.rpm
warning: perl-Crypt-SmbHash-0.12-1.2.el5.rf.noarch.rpm: Header V3 DSA signature:
NOKEY key ID 6b8d79e6
Preparing... ########################################### [100%]
1:perl-Crypt-SmbHash ########################################### [100%]
[root@server smbldap]#

[root@server smbldap]# rpm -ivh perl-Digest-SHA1-2.11-1.2.1.i386.rpm
Preparing... ########################################### [100%]
1:perl-Digest-SHA1 ########################################### [100%]
[root@server smbldap]#

[root@server smbldap]# rpm -ivh perl-Jcode-2.06-1.el5.rf.i386.rpm
warning: perl-Jcode-2.06-1.el5.rf.i386.rpm: Header V3 DSA signature: NOKEY key
ID 6b8d79e6
Preparing... ########################################### [100%]
1:perl-Jcode ########################################### [100%]
[root@server smbldap]#

[root@server smbldap]# rpm -ivh perl-Unicode-Map-0.112-1.el5.rf.i386.rpm
warning: perl-Unicode-Map-0.112-1.el5.rf.i386.rpm: Header V3 DSA signature: NOKE
Y key ID 6b8d79e6
Preparing... ########################################### [100%]
1:perl-Unicode-Map ########################################### [100%]
[root@server smbldap]#

[root@server smbldap]# rpm -ivh perl-Unicode-String-2.09-1.2.el5.rf.i386.rpm
warning: perl-Unicode-String-2.09-1.2.el5.rf.i386.rpm: Header V3 DSA signature:
NOKEY key ID 6b8d79e6
Preparing... ########################################### [100%]
1:perl-Unicode-String ########################################### [100%]
[root@server smbldap]#

[root@server smbldap]# rpm -ivh perl-Unicode-Map8-0.12-1.el5.rf.i386.rpm
warning: perl-Unicode-Map8-0.12-1.el5.rf.i386.rpm: Header V3 DSA signature: NOKE
Y key ID 6b8d79e6
Preparing... ########################################### [100%]
1:perl-Unicode-Map8 ########################################### [100%]
[root@server smbldap]#

[root@server smbldap]# rpm -ivh perl-Unicode-MapUTF8-1.11-1.2.el5.rf.noarch.rpm
warning: perl-Unicode-MapUTF8-1.11-1.2.el5.rf.noarch.rpm: Header V3 DSA signatur
e: NOKEY key ID 6b8d79e6
Preparing... ########################################### [100%]
1:perl-Unicode-MapUTF8 ########################################### [100%]
[root@server smbldap]#

[root@server smbldap]# rpm -ivh smbldap-tools-0.9.5-1.noarch.rpm
warning: smbldap-tools-0.9.5-1.noarch.rpm: Header V3 DSA signature: NOKEY key I
D 75fe0a51
Preparing... ########################################### [100%]
1:smbldap-tools ########################################### [100%]
[root@server smbldap]#

Edit slap.conf

[root@server ~]#slappasswd

[root@server ~]# vi /etc/openldap/slapd.conf

Add this line at the end of schema category.

include /etc/openldap/schema/samba.schema

database bdb
suffix "dc=abc dc=com"
rootdn "cn=root dc=abc dc=com"
rootpw {SSHA}ernicO/fWeCi5g2GFqaB/JGqZXj7Hmj3

Get the SID and copy it.

[root@server ~]# net getlocalsid
SID for domain SERVER is: S-1-5-21-1082253588-3757474382-3995049807
[root@server ~]#

Edit smbldap.conf

[root@server ~]# vi /etc/smbldap-tools/smbldap.conf

SID="S-1-5-21-1082253588-3757474382-3995049807″

sambaDomain="ABC"

#slaveLDAP="ldap.iallanis.info" #### Comment this line
#slavePort="389″ #### Comment this line too.

masterLDAP="server.abc.com"
masterPort="389″

ldapTLS="0″ # Switch this line from 1 to 0

suffix="dc=abc dc=com"

userSmbHome="\SERVER\%U"

userProfile="\SERVERprofiles\%U"

mailDomain="abc.com"

Edit smbldap_bind.conf and this file has to be looked like this.

[root@server ~]# vi /etc/smbldap-tools/smbldap_bind.conf

#slaveDN="cn=Manager dc=iallanis dc=info"
#slavePw="secret"
masterDN="cn=root dc=abc dc=com"
masterPw="root123″ #### That s the same of rootpw entry into slap.conf

[root@server ~]# cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@server ~]# chown ldap.ldap /var/lib/ldap/

[root@server ~]# cp /usr/share/doc/samba-3.0.33/LDAP/samba.schema /etc/openldap/
schema/

[root@server ~]# chmod 600 /etc/smbldap-tools/smbldap_bind.conf

[root@server ~]# service ldap start
Checking configuration files for slapd: config file testing succeeded
[ OK ]
Starting slapd: [ OK ]
[root@server ~]#

[root@server ~]# chkconfig ldap on

[root@server openldap]# vi base.ldif

dn: dc=abc dc=com
objectclass: dcObject
objectclass: organization
dc: abc
o: PDC

dn: cn=root dc=abc dc=com
objectclass: organizationalRole
cn: root

Apply this configuration so-creating these rules above through this following commnand.

[root@server openldap]# ldapadd -x -W -D ‘cn=root dc=abc dc=com -f base.ldif
Enter LDAP Password:
adding new entry "dc=abc dc=com"

adding new entry "cn=root dc=abc dc=com"

[root@server openldap]#

The next step is very interesting. You either copy a smb.conf template and modify and you want or create a new from scratch.

[root@server ~]# cp /usr/share/doc/smbldap-tools-0.9.5/smb.conf /etc/samba/smb.conf

or

[root@server ~]# cd /etc/samba/
[root@server samba]# mv smb.conf smb.conf.OLD
[root@server samba]# vi smb.conf

[global]
workgroup = ABC
netbios name = SERVER
security=user
domain master = yes
domain logons = yes
ldap suffix = dc=abc dc=com
ldap admin dn = cn=root dc=abc dc=com
passdb backend = ldapsam:ldap://server.abc.com/
ldap user suffix = ou=Users
ldap group suffix = ou=Groups
ldap machine suffix = ou=Machines
passwd program = /usr/sbin/smbldap-useradd %u
unix password sync = yes
add user script = /usr/sbin/smbldap-useradd -m "%u"
delete user script = /usr/sbin/smbldap-userdel "%u"
add machine script = /usr/sbin/smbldap-useradd -t 0 -w "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/smbldap-usermod -g ‘%g ‘%u

[netlogon]
path=/home/samba/netlogon
read only=yes
browseable=no

[profiles]
path=/home/samba/profiles
read only=no
writeable=yes
guest ok=yes
create mask = 0600
create directory = 0700

[homes]
browseable=no
writeable=yes
guest ok=no

[root@server samba]# smbpasswd -W root123
Setting stored password for "cn=root dc=abc dc=com" in secrets.tdb
New SMB password:
Retype new SMB password:
[root@server samba]#

Creating the directories for profiles and netlogon.

[root@server samba]# mkdir /home/samba/{profiles netlogon} -p

Launch smbldap-populate

[root@server samba]# smbldap-populate
Populating LDAP directory for domain ABC (S-1-5-21-1082253588-3757474382-399
5049807)
(using builtin directory structure)

entry dc=abc dc=com already exist.
adding new entry: ou=Users dc=abc dc=com
adding new entry: ou=Groups dc=abc dc=com
adding new entry: ou=Computers dc=abc dc=com
adding new entry: ou=Idmap dc=abc dc=com
adding new entry: uid=root ou=Users dc=abc dc=com
adding new entry: uid=nobody ou=Users dc=abc dc=com
adding new entry: cn=Domain Admins ou=Groups dc=abc dc=com
adding new entry: cn=Domain Users ou=Groups dc=abc dc=com
adding new entry: cn=Domain Guests ou=Groups dc=abc dc=com
adding new entry: cn=Domain Computers ou=Groups dc=abc dc=com
adding new entry: cn=Administrators ou=Groups dc=abc dc=com
adding new entry: cn=Account Operators ou=Groups dc=abc dc=com
adding new entry: cn=Print Operators ou=Groups dc=abc dc=com
adding new entry: cn=Backup Operators ou=Groups dc=abc dc=com
adding new entry: cn=Replicators ou=Groups dc=abc dc=com
adding new entry: sambaDomainName=ABC dc=abc dc=com

Please provide a password for the domain root:
Changing UNIX and samba passwords for root
New password:
Retype new password:
[root@server samba]#

[root@server samba]# net groupmap list
Domain Admins (S-1-5-21-1082253588-3757474382-3995049807-512) -> 512
Domain Users (S-1-5-21-1082253588-3757474382-3995049807-513) -> 513
Domain Guests (S-1-5-21-1082253588-3757474382-3995049807-514) -> 514
Domain Computers (S-1-5-21-1082253588-3757474382-3995049807-515) -> 515
Administrators (S-1-5-32-544) -> 544
Account Operators (S-1-5-32-548) -> 548
Print Operators (S-1-5-32-550) -> 550
Backup Operators (S-1-5-32-551) -> 551
Replicators (S-1-5-32-552) -> 552
[root@server samba]#

Start smb service and make sure if it will be startedup on the boot.
[root@server samba]# service smb start

[root@server samba]# chkconfig smb on

Configuring /etc/ldap.conf and /etc/openldap/ldap.conf or you can get it running:

[root@server samba]# authconfig -enableldap -enableldapauth -ldapserver=server.abc.com -ldapbasedn=dc=abc dc=com -update

Add a user into the system

[root@server samba]# smbldap-useradd -a -m test -G "Domain Users"

[root@server samba]# smbldap-passwd test
Changing UNIX and samba passwords for test
New password:
Retype new password:

Now configure your windows into the Domain

 

 

 

 

More...

Samba Primary Domain Controller with LDAP ( Thay the Active Directory )

By Huynh Sy Nguyen

Normal 0 false false false EN-US X-NONE X-NONE

Samba PDC with LDAP

Edit  /etc/hosts

[root@server ~]# vi /etc/hosts

192.168.1.1 server server.abc.com

Install those following packages below.

[root@server ~]# yum install samba samba-client openldap openldap-clients open-ldap-servers nss_ldap perl-LDAP

perl-Crypt-SmbHash-0.12-1.2.el5.rf.noarch.rpm
perl-Digest-SHA1-2.11-1.2.1.i386.rpm
perl-Jcode-2.06-1.el5.rf.i386.rpm
perl-LDAP-0.33-3.fc6.noarch.rpm
perl-Unicode-Map-0.112-1.el5.rf.i386.rpm
perl-Unicode-Map8-0.12-1.el5.rf.i386.rpm
perl-Unicode-MapUTF8-1.11-1.2.el5.rf.noarch.rpm
perl-Unicode-String-2.09-1.2.el5.rf.i386.rpm
phpldapadmin-1.1.0.7.tar.gz
smbldap-tools-0.9.5-1.noarch.rpm

[root@server smbldap]# rpm -ivh perl-Crypt-SmbHash-0.12-1.2.el5.rf.noarch.rpm
warning: perl-Crypt-SmbHash-0.12-1.2.el5.rf.noarch.rpm: Header V3 DSA signature:
NOKEY key ID 6b8d79e6
Preparing... ########################################### [100%]
1:perl-Crypt-SmbHash ########################################### [100%]
[root@server smbldap]#

[root@server smbldap]# rpm -ivh perl-Digest-SHA1-2.11-1.2.1.i386.rpm
Preparing... ########################################### [100%]
1:perl-Digest-SHA1 ########################################### [100%]
[root@server smbldap]#

[root@server smbldap]# rpm -ivh perl-Jcode-2.06-1.el5.rf.i386.rpm
warning: perl-Jcode-2.06-1.el5.rf.i386.rpm: Header V3 DSA signature: NOKEY key
ID 6b8d79e6
Preparing... ########################################### [100%]
1:perl-Jcode ########################################### [100%]
[root@server smbldap]#

[root@server smbldap]# rpm -ivh perl-Unicode-Map-0.112-1.el5.rf.i386.rpm
warning: perl-Unicode-Map-0.112-1.el5.rf.i386.rpm: Header V3 DSA signature: NOKE
Y key ID 6b8d79e6
Preparing... ########################################### [100%]
1:perl-Unicode-Map ########################################### [100%]
[root@server smbldap]#

[root@server smbldap]# rpm -ivh perl-Unicode-String-2.09-1.2.el5.rf.i386.rpm
warning: perl-Unicode-String-2.09-1.2.el5.rf.i386.rpm: Header V3 DSA signature:
NOKEY key ID 6b8d79e6
Preparing... ########################################### [100%]
1:perl-Unicode-String ########################################### [100%]
[root@server smbldap]#

[root@server smbldap]# rpm -ivh perl-Unicode-Map8-0.12-1.el5.rf.i386.rpm
warning: perl-Unicode-Map8-0.12-1.el5.rf.i386.rpm: Header V3 DSA signature: NOKE
Y key ID 6b8d79e6
Preparing... ########################################### [100%]
1:perl-Unicode-Map8 ########################################### [100%]
[root@server smbldap]#

[root@server smbldap]# rpm -ivh perl-Unicode-MapUTF8-1.11-1.2.el5.rf.noarch.rpm
warning: perl-Unicode-MapUTF8-1.11-1.2.el5.rf.noarch.rpm: Header V3 DSA signatur
e: NOKEY key ID 6b8d79e6
Preparing... ########################################### [100%]
1:perl-Unicode-MapUTF8 ########################################### [100%]
[root@server smbldap]#

[root@server smbldap]# rpm -ivh smbldap-tools-0.9.5-1.noarch.rpm
warning: smbldap-tools-0.9.5-1.noarch.rpm: Header V3 DSA signature: NOKEY key I
D 75fe0a51
Preparing... ########################################### [100%]
1:smbldap-tools ########################################### [100%]
[root@server smbldap]#

Edit slap.conf

[root@server ~]#slappasswd

[root@server ~]# vi /etc/openldap/slapd.conf

Add this line at the end of schema category.

include /etc/openldap/schema/samba.schema

database bdb
suffix "dc=abc dc=com"
rootdn "cn=root dc=abc dc=com"
rootpw {SSHA}ernicO/fWeCi5g2GFqaB/JGqZXj7Hmj3

Get the SID and copy it.

[root@server ~]# net getlocalsid
SID for domain SERVER is: S-1-5-21-1082253588-3757474382-3995049807
[root@server ~]#

Edit smbldap.conf

[root@server ~]# vi /etc/smbldap-tools/smbldap.conf

SID="S-1-5-21-1082253588-3757474382-3995049807″

sambaDomain="ABC"

#slaveLDAP="ldap.iallanis.info" #### Comment this line
#slavePort="389″ #### Comment this line too.

masterLDAP="server.abc.com"
masterPort="389″

ldapTLS="0″ # Switch this line from 1 to 0

suffix="dc=abc dc=com"

userSmbHome="\SERVER\%U"

userProfile="\SERVERprofiles\%U"

mailDomain="abc.com"

Edit smbldap_bind.conf and this file has to be looked like this.

[root@server ~]# vi /etc/smbldap-tools/smbldap_bind.conf

#slaveDN="cn=Manager dc=iallanis dc=info"
#slavePw="secret"
masterDN="cn=root dc=abc dc=com"
masterPw="root123″ #### That s the same of rootpw entry into slap.conf

[root@server ~]# cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@server ~]# chown ldap.ldap /var/lib/ldap/

[root@server ~]# cp /usr/share/doc/samba-3.0.33/LDAP/samba.schema /etc/openldap/
schema/

[root@server ~]# chmod 600 /etc/smbldap-tools/smbldap_bind.conf

[root@server ~]# service ldap start
Checking configuration files for slapd: config file testing succeeded
[ OK ]
Starting slapd: [ OK ]
[root@server ~]#

[root@server ~]# chkconfig ldap on

[root@server openldap]# vi base.ldif

dn: dc=abc dc=com
objectclass: dcObject
objectclass: organization
dc: abc
o: PDC

dn: cn=root dc=abc dc=com
objectclass: organizationalRole
cn: root

Apply this configuration so-creating these rules above through this following commnand.

[root@server openldap]# ldapadd -x -W -D ‘cn=root dc=abc dc=com -f base.ldif
Enter LDAP Password:
adding new entry "dc=abc dc=com"

adding new entry "cn=root dc=abc dc=com"

[root@server openldap]#

The next step is very interesting. You either copy a smb.conf template and modify and you want or create a new from scratch.

[root@server ~]# cp /usr/share/doc/smbldap-tools-0.9.5/smb.conf /etc/samba/smb.conf

or

[root@server ~]# cd /etc/samba/
[root@server samba]# mv smb.conf smb.conf.OLD
[root@server samba]# vi smb.conf

[global]
workgroup = ABC
netbios name = SERVER
security=user
domain master = yes
domain logons = yes
ldap suffix = dc=abc dc=com
ldap admin dn = cn=root dc=abc dc=com
passdb backend = ldapsam:ldap://server.abc.com/
ldap user suffix = ou=Users
ldap group suffix = ou=Groups
ldap machine suffix = ou=Machines
passwd program = /usr/sbin/smbldap-useradd %u
unix password sync = yes
add user script = /usr/sbin/smbldap-useradd -m "%u"
delete user script = /usr/sbin/smbldap-userdel "%u"
add machine script = /usr/sbin/smbldap-useradd -t 0 -w "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/smbldap-usermod -g ‘%g ‘%u

[netlogon]
path=/home/samba/netlogon
read only=yes
browseable=no

[profiles]
path=/home/samba/profiles
read only=no
writeable=yes
guest ok=yes
create mask = 0600
create directory = 0700

[homes]
browseable=no
writeable=yes
guest ok=no

[root@server samba]# smbpasswd -W root123
Setting stored password for "cn=root dc=abc dc=com" in secrets.tdb
New SMB password:
Retype new SMB password:
[root@server samba]#

Creating the directories for profiles and netlogon.

[root@server samba]# mkdir /home/samba/{profiles netlogon} -p

Launch smbldap-populate

[root@server samba]# smbldap-populate
Populating LDAP directory for domain ABC (S-1-5-21-1082253588-3757474382-399
5049807)
(using builtin directory structure)

entry dc=abc dc=com already exist.
adding new entry: ou=Users dc=abc dc=com
adding new entry: ou=Groups dc=abc dc=com
adding new entry: ou=Computers dc=abc dc=com
adding new entry: ou=Idmap dc=abc dc=com
adding new entry: uid=root ou=Users dc=abc dc=com
adding new entry: uid=nobody ou=Users dc=abc dc=com
adding new entry: cn=Domain Admins ou=Groups dc=abc dc=com
adding new entry: cn=Domain Users ou=Groups dc=abc dc=com
adding new entry: cn=Domain Guests ou=Groups dc=abc dc=com
adding new entry: cn=Domain Computers ou=Groups dc=abc dc=com
adding new entry: cn=Administrators ou=Groups dc=abc dc=com
adding new entry: cn=Account Operators ou=Groups dc=abc dc=com
adding new entry: cn=Print Operators ou=Groups dc=abc dc=com
adding new entry: cn=Backup Operators ou=Groups dc=abc dc=com
adding new entry: cn=Replicators ou=Groups dc=abc dc=com
adding new entry: sambaDomainName=ABC dc=abc dc=com

Please provide a password for the domain root:
Changing UNIX and samba passwords for root
New password:
Retype new password:
[root@server samba]#

[root@server samba]# net groupmap list
Domain Admins (S-1-5-21-1082253588-3757474382-3995049807-512) -> 512
Domain Users (S-1-5-21-1082253588-3757474382-3995049807-513) -> 513
Domain Guests (S-1-5-21-1082253588-3757474382-3995049807-514) -> 514
Domain Computers (S-1-5-21-1082253588-3757474382-3995049807-515) -> 515
Administrators (S-1-5-32-544) -> 544
Account Operators (S-1-5-32-548) -> 548
Print Operators (S-1-5-32-550) -> 550
Backup Operators (S-1-5-32-551) -> 551
Replicators (S-1-5-32-552) -> 552
[root@server samba]#

Start smb service and make sure if it will be startedup on the boot.
[root@server samba]# service smb start

[root@server samba]# chkconfig smb on

Configuring /etc/ldap.conf and /etc/openldap/ldap.conf or you can get it running:

[root@server samba]# authconfig -enableldap -enableldapauth -ldapserver=server.abc.com -ldapbasedn=dc=abc dc=com -update

Add a user into the system

[root@server samba]# smbldap-useradd -a -m test -G "Domain Users"

[root@server samba]# smbldap-passwd test
Changing UNIX and samba passwords for test
New password:
Retype new password:

Now configure your windows into the Domain

 

 

 

 

More...

Install ntop on Red Hat Enterprise Linux / CentOS Linux

By Huynh Sy Nguyen

Download latest ntop

Visit ntop project to grab latest version. You can use wget to grab the same enter:
# cd /opt
# wget http://freshmeat.net/redir/ntop/7279/url_tgz/ntop-3.3.6.tar.gz

Untar tar ball enter:
# tar -zxvf ntop-3.3.6.tar.gz

Configure and Compile ntop under RHEL

You must have RRDTool installed. You also need to install libpcap enter:
# yum install libpcap-devel libpcap
Type the following commands to compile and install ntop:
# cd ntop
# ./autogen.sh

Just type make to compile ntop:
# make
Just type make install to install ntop:
# make install
# make install-data-as

Create ntop user

Type the following command to run ntop as ntop user enter:
# useradd -M -s /sbin/nologin -r ntop

Setup directory permissions

Next you need to setup directory permissions enter:
# chown ntop:root /usr/local/var/ntop/
# chown ntop:ntop /usr/local/share/ntop/

Setup ntop user admin password

Type the following command to set ntop admin password enter:
# ntop -A
Sample output:

Mon Jul 28 03:38:34 2008  NOTE: Interface merge enabled by default
Mon Jul 28 03:38:34 2008 Initializing gdbm databases

ntop startup - waiting for user response!

Please enter the password for the admin user:
Please enter the password again:
Mon Jul 28 03:38:42 2008 Admin user password has been set

Start ntop

Type the following command to start ntop:
# /usr/local/bin/ntop -d -L -u ntop -P /usr/local/var/ntop --skip-version-check --use-syslog=daemon
Sample output:

Mon Jul 28 03:42:19 2008  NOTE: Interface merge enabled by default
Mon Jul 28 03:42:19 2008 Initializing gdbm databases

If you have multiple interface (eth0 eth1 and so on) start ntop as follows:
# /usr/local/bin/ntop -i "eth0 eth1" -d -L -u ntop -P /usr/local/var/ntop --skip-version-check --use-syslog=daemon
Where

  • -i "eth0 eth1" : Specifies the network interface or interfaces to be used by ntop for network monitoring. Here you are monitoring eth0 and eth1.
  • -d : Run ntop as a daemon.
  • -L : Send all log messages to the system log (/var/log/messages) instead of screen.
  • -u ntop : Start ntop as ntop user
  • -P /usr/local/var/ntop : Specify where ntop stores database files. You may need to backup database as part of your disaster recovery program.
  • --skip-version-check : By default ntop accesses a remote file to periodically check if the most current version is running. This option disables that check.
  • --use-syslog=daemon : Use syslog daemon.

How do I view ntop stats?

By default ntop listen on 3000 port. You can view ntop stats by visiting following url:
http://localhost:3000/
OR
http://server-ip:3000/

More...

Hướng dẫn cài đặt VNC Server trên CentOS

By Huynh Sy Nguyen

Bước 1 : Cài X Windows System (KDE và GNOME Desktop Environement !)

Kiểm tra xem svr đã cài gói này chưa bằng cách dùng lệnh :

Code - [#]
yum grouplist
Nếu chưa thấy trong mục Installed thì tiến hành cài !

Để cài GNOME Desktop Environnement chạy lệnh :

Code - [#]
yum groupinstall "X Window System" "GNOME Desktop Environment"

Nếu thấy như đoạn dưới đây là thành công :

Code - [#]
Installed: NetworkManager-gnome.x86_64 0:0.3.1-5.el4 file-roller.x86_64 0:2.8.1-1 gconf-editor.x86_64 0:2.8.0-2 gedit.x86_64 1:2.8.1-4 ggv.x86_64 0:2.8.0-1 gimp-print-utils.x86_64 0:4.2.7-2 gnopernicus.x86_64 0:0.9.12-1 gok.x86_64 0:0.11.8-1 gpdf.x86_64 0:2.8.2-7.7.2.el4_7.4 gtk-engines.x86_64 1:0.12-6.el4 gtk-engines.i386 1:0.12-6.el4 gtk2-engines.i386 0:2.2.0-7.el4 hwbrowser.noarch 0:0.19-0.EL4.4 nautilus-media.x86_64 0:0.8.1-3 vino.x86_64 0:2.8.1-1.5 yelp.x86_64 0:2.6.4-2
Dependency Installed: gimp-print.x86_64 0:4.2.7-2 gtk+.i386 1:1.2.10-36 gtksourceview.x86_64 0:1.1.0-4 imlib.i386 1:1.9.13-23 libungif.i386 0:4.1.3-1.el4.2 pyparted.x86_64 0:1.6.8-2
Complete!
Sau khi cài đặt xong GNOME Desktop Environnement chúng ta chuyển qua KDE chạy lệnh :

Code - [#]
yum groupinstall "X Window System" "GNOME Desktop Environment"
Cài đặt tương tự như GNOME cũng hỏi y/n chọn y rồi ngồi đợi
Cái này chắc ko phải nói nhiều ^_^ !

Bước 2 :
Cài đặt VNC Server :

Dùng lệnh :

Code - [#]
yum install vnc-server
Đợi nó cài :

Nếu được như đoạn dưới đây bạn đã cài xong vnc server :

Code - [#]
[root@vps1161 ~]# yum install vnc-server
Loading "priorities" plugin
Loading "fastestmirror" plugin
Setting up Install Process
Setting up repositories
update 100% |=========================| 951 B 00:00
base 100% |=========================| 1.1 kB 00:00
contrib 100% |=========================| 951 B 00:00
centosplus 100% |=========================| 951 B 00:00
addons 100% |=========================| 951 B 00:00
extras 100% |=========================| 1.1 kB 00:00
Loading mirror speeds from cached hostfile
Reading repository metadata in from local files
Excluding Packages in global exclude list
Finished
0 packages excluded due to repository priority protections
Parsing package install arguments
Nothing to do
Bước 3 : Hiệu chỉnh config của VNC Server

Bây h chúng ta edit file config của vnc server chạy lệnh :

Code - [#]
vi /etc/sysconfig/vncservers
Các bạn nào chưa biết sử dụng lệnh vi trong SSH thì mình xin hướng dẫn qua luôn 1 số lệnh cơ bản
Sau khi chạy lệnh

Code - [#]
vi /etc/sysconfig/vncservers
Các bạn sửa nội dung file config vncserver như sau:
Bỏ 2 dấu # ở 2 câu cuối cùng :

Code - [#]
# The VNCSERVERS variable is a list of display:user pairs.
#
# Uncomment the lines below to start a VNC server on display :2
# as my myusername (adjust this to your own). You will also
# need to set a VNC password; run man vncpasswd to see how
# to do that.
#
# DO NOT RUN THIS SERVICE if your local area network is
# untrusted! For a secure way of using VNC see
# <URL:http://www.uk.research.att.com/archive/vnc/sshvnc.html>.

# Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.

# Use "-nohttpd" to prevent web-based VNC clients connecting.

# Use "-localhost" to prevent remote VNC clients connecting except when
# doing so through a secure tunnel. See the "-via" option in the
# `man vncviewer manual page.

VNCSERVERS="1:root"
VNCSERVERARGS[1]="-geometry 800x600"
ESC để thoát Insert Mode rồi dùng lệnh :wq để save file đó lại và trở về command của SSH !

Bước 4 : Khởi động VNC Server :

Code - [#]
vncserver
Nếu nó đòi pass thì bạn nhập pass vào pass này sẽ để bạn dùng VNC CLient connect tới svr !

Bước 4 : Sửa file xstartup

Code - [#]
vi /root/.vnc/xstartup
Bỏ 2 dấu thăngs ở 2 đoạn như code dưới :

Code - [#]
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc
Code - [#]
#!/bin/sh

# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &
Bước 5 : Khởi động lại vnc server :

Code - [#]
/etc/init.d/vncserver restart
Bước 6 : Khởi động khi bật máy

Code - [#]
chkconfig vncserver on
Bước 7 : Tắt firewall

Code - [#]
/etc/init.d/iptables stop
Bước 8 : Tắt firewall khi bật máy

Code - [#]
chkconfig iptables off
Bước 9 : Download VNC CLient về và chén thôi 

Code - [#]
http://www.stanford.edu/class/ee108b/tools/vncviewer.exe
Bật VNC Client nhập IP SVR theo dạng
IP:1 hoac IP:2 do bạnconfig trong files /etc/sysconfig/vncservers

More...

Booting process in Solaris

By Huynh Sy Nguyen

Understanding the booting process is important in the sense that you can get a clear idea when a system faces a booting problem if you are familiar with the booting sequence and steps involved. You can thereby isolate a booting phase and quickly resolve the issues.

Booting process in Solaris can be divided in to different phases for ease of study . First phase starts at the time of switching on the machine and is boot prom level it displays a identification banner mentioning machine host id serial no architecture type memory and Ethernet address This is followed by the self test of various systems in the machine.

This process ultimately looks for the default boot device and reads the boot program from the boot block which is located on the 1-15 blocks of boot device. The boot block contains the ufs file system reader which is required by the next boot processes.

The ufs file system reader opens the boot device and loads the secondary boot program from /usr/platform/`uname -i`/ufsboot ( uname -i expands to system architecture type)

The boot program above loads a platform specific kernel along with a generic solaris kernel 

The kernel initialize itself and load modules which are required to mount the root partition for continuing the booting process.

The booting process undergoes the following phases afterwards :

INIT phase
Init phase is started by the execution of /sbin/init program and starts other processes after reading the /etc/inittab file as per the directives in the /etc/inittab file . 

Two most important functions of init are 

a) It runs the processes to bring the system to the default run level state ( Run level 3 in Solaris defined by initdefault parameter in /etc/inittab ) 
b) It controls the transition between different run levels by executing appropriate rc scripts to start and the stop the processes for that run level. 

/etc/inittab file

This file states the default run level and some actions to be performed while the system reaches up to that level. The fields and their explanation are as follows :

S3:3:wait:/sbin/rc3 > /dev/console 2>&1 < /dev/console 

S3 denotes a identification if the line

3 is run level 
wait is action to be performed

/sbin/rc3 is the command to be run.

So the fields in the inittab are

Identification : run level : action : process

The complete line thus means run the command /sbin/rc3 at run level 3 and wait until the rc3 process is complete.

The action field can have any of the following keywords :

Initdefault : default run level of the system

Respawn : start and restart the process if it stops.

Powerfail : stop on powerfail

Sysinit : start and wait till console in accessible .

Wait : wait till the process ends before going on to the next line.

RC scripts & Run Levels
Rc scripts performs the following functions : 

a) They check and mount the file systems 

b) Start and stop the various processes like network nfs etc.

c) Perform some of the house keeping jobs.

System goes in to one of the following run level after booting depending on default run level and the commands issued for changing the run level to some other one.

0 Boot prom level ok> or > prompt in Sun.
1 Administrative run level . Single user mode 
2 Multiuser mode with no resource sharing .
3 Multiuser level with nfs resource sharing
4 Not used
5 Shutdown & power off (Sun 4m and 4u architecture )
6 Reboot to default run level
S s Single user mode user logins are disabled.

Broadly speaking the running system can be in any of the folloing state

Single user - Minimum processes running user logins disabled and root password is required to gain access to the shell . 
Multiuser - All system processes are running and user logins are permitted 

Run level of a desired state is achieved by a number of scripts executed by the rc program the rc scripts are located in /etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d & /etc/rcS.d directories . All the files of a particular run level are executed in the alphanumeric order .Those files beginning with letter S starts the processes and those beginning with K stops the processes.

These files are hard linked to the files in /etc/init.d in order to provide a central location for all these files and eliminating the need to change the run level in case these scripts needs to be run separately . The files in /etc/init.d directory are without any S K and numeric prefix instead a stop / start argument has to be supplied whenever these scripts are to be executed .

By default system has a number of rc scripts needed for run level transition but sometimes it becomes necessary to start some custom scripts at the booting time and turn them off at the shutdown . Custom scripts can be put in any of the required rc directory but following major considerations has to be kept in mind :

  • The sequence number of the file should not conflict with other files.
  • The sevices needed should be available by previously executed scripts. 
  • File should be hard linked to the /etc/init.d directory .
  • The system looks for only those files beginning with letter K & S any thing else is ignored therefore to make a file inactive simply changing uppercase K or S to lower case will cause system to ignore it .

 

More...

Install and configure Dovecot

By Huynh Sy Nguyen

Normal 0 false false false MicrosoftInternetExplorer4

[root@mail ~]# yum -y install dovecot

 [root@mail ~]#vi /etc/dovecot.conf

protocols = imap imaps pop3 pop3s

// line 17: make valid

mail_location = maildir:~/Maildir

// line 204: make valid and add

[root@mail ~]# /etc/rc.d/init.d/dovecot start

Starting Dovecot Imap:

[  OK  ]

[root@mail ~]#chkconfig dovecot on

More...

Install and configure Postfix basic

By Huynh Sy Nguyen

Normal 0 false false false MicrosoftInternetExplorer4

Install Postfix

[root@mail ~]# yum -y install postfix

[root@mail ~]#[root@mail ~]# vi /etc/postfix/main.cf

myhostname = mail.server-linux.info

// line 70: specify hostname

mydomain = server-linux.info

// line 77: specify domain name

myorigin = $mydomain

// line 93: make valid

inet_interfaces = all

// line 110: change

mydestination = $myhostname localhost.$mydomain localhost

$mydomain

  // line 155: add

mynetworks = 127.0.0.0/8 192.168.0.0/24

  // line 255: make valid and specify LAN

home_mailbox = Maildir/

// line 410: make valid (use Maildir)

header_checks = regexp:/etc/postfix/header_checks  

// line 536: make valid

body_checks = regexp:/etc/postfix/body_checks

  // add

message_size_limit = 5242880

// bottom: add (limit an email 5M)

mailbox_size_limit = 104857600

// limit mailbox 100M

smtpd_sasl_auth_enable = yes

// these 4 lines are for SMTP-Auth

smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks permit_auth_destination permit_sasl_authenticated reject

[root@mail ~]# vi /etc/postfix/header_checks

/^From:.*<#.*@.*>/ REJECT

// add at the head of file

/^Return-Path:.*<#.*@.*>/ REJECT

// reject empty address email

/^Received:/ IGNORE

// hide Received section

 [root@mail ~]# vi /etc/postfix/body_checks

/^(|[^>].*)example.com/ REJECT

// reject email includes example.com

[root@mail ~]# /etc/rc.d/init.d/sendmail stop

Shutting down sm-client:

[  OK  ]

Shutting down sendmail:

[  OK  ]

[root@mail ~]#

chkconfig sendmail off

[root@mail ~]# etc/rc.d/init.d/postfix start

Starting postfix:

[  OK  ]

[root@mail ~]# chkconfig postfix on

More...

Qmail as a Mail Gateway - Phần 4

By Huynh Sy Nguyen

Chi tiết các hồ sơ cần điều chỉnh cho qmail cho vấn đề tối ưu hoá.

4.2 Danh mục các hồ sơ trong "qmail-control" cần thiết cho Qmail relay server:
Ngoại trừ bạn dùng Qmail để thiết lập một mail server hạng nặng và muốn xử dụng tối đa chức năng của mỗi chương trình trong Qmail suite bạn sẽ hiếm khi phải xử dụng tới trọn bộ 28 hồ sơ ở trên. Với trường hợp Qmail là một relay server bạn không cần quá một chục hồ sơ trong nhóm các hồ sơ thuộc "qmail-control". Sau đây là danh sách các hồ sơ tôi dùng cho "qmail-control" và nội dụng của từng hồ sơ để giúp bạn hình dung dễ dàng hơn chức năng của từng hồ sơ:

4.2.1 Hồ sơ "me" thuộc qmail-send:
- Hồ sơ "me" là khởi điểm cho mọi hoạt động của Qmail thiếu nó Qmail sẽ không chạy. Hồ sơ này được tạo ra từ bước 2.4.4 khi bạn chạy lệnh ./config để thiết lập hostname cho mail server của bạn. Hồ sơ này chỉ có một dòng chỉ định cho domain entry của mail relay server.

- Nội dung của hồ sơ này có dạng: mail.mydomain.com trong đó: mail là hostname của mail relay server mydomain.com là fully qualified domain name bạn có.

4.2.2 Hồ sơ "locals" thuộc qmail-send:
- Hồ sơ này dùng để chỉ định các địa chỉ e-mail được xem là "local" đối với mail relay server. Nếu không có entry nào trong "locals" thì qmail-send cho rằng chỉ có mỗi host trong "me" thuộc local. Trường hợp dùng Qmail như một mail relay server không cần "locals" nữa nếu có hồ sơ "locals" này có một dòng chỉ định y hệt như "me" vậy thôi.

4.2.3 Hồ sơ "concurincoming"(hay còn gọi là concurrencylocal) thuộc qmail-send:
- Hồ sơ này ấn định số lượng mail được chuyển giao cùng một lúc. Default có giá trị là 10 với giá trị này Qmail đủ sức chuyển giao mail cho một server cỡ nhỏ đến cỡ trung. Nên tránh dùng giá trị quá nhỏ để đề phòng trường hợp bị "denial attack". Tôi dùng giá trị là 20 cho một văn phòng cỡ 100 nhân viên (khoảng 140 e-mails tổng cộng bao gồm các e-mail chung cho từng nhóm nhân viên).

4.2.4 Hồ sơ "defaultdomain" thuộc qmail-inject:
- Hồ sơ này dùng như một dạng bản mẫu nếu vì một lý do gì đó mail client không dùng trọn bộ tên người dùng + tên domain như một e-mail thông thường ví dụ: me@mycom.com mà chỉ có tên người dùng là me thì "defaultdomain" được qmail dùng để "gắn" thêm cái đuôi tên domain trước khi nó gởi mail ra ngoài. Nếu qmail không tìm thấy "defaultdomain" nó sẽ tự động dùng entry trong hồ sơ "me" ở trên. Hồ sơ này không quá cần thiết sự hiện diện của nó thường để loại trừ trường hợp mail client không gởi "sender" đúng và dùng để giao chuyển giữa các mail account trong cùng mail relay server.

- Hồ sơ này chỉ đơn giản có 1 entry là domain name của bạn ví dụ: mycompany.com

4.2.5 Hồ sơ "queuelifetime" thuộc hồ sơ qmail-send:
- Hồ sơ này dùng để chỉ định thời gian (tính theo đơn vị giây) mail được giữ trong mail queue (vì lý do gì đó không chuyển gởi được) trước khi bị xoá. Khi mail đợi trong queue đến hạn cuối của "queuelifetime" qmail sẽ chuyển gởi mail đó lần cuối trước khi thực sự xoá nó khỏi mail queue (nếu mail này vẫn không thể chuyển giao được).

- Giá trị default của hồ sơ "queuelifetime" là 604800 giây (tương đương với 1 tuần lễ). Giá trị này tùy thuộc vào môi trường của bạn mà thiết lập cho thích hợp. Ví dụ mail relay server của bạn chỉ phục vụ cho một số ít người và thuộc mạng "chậm" thì nên thiết kết giá trị của "queuelifetime" cao hơn một tí để mail có cơ hội được chuyển giao trong trường hợp mạng bi nghẽn (thật ra queuelifetime cho 1 tuần là rất lâu). Tôi chọn giá trị 172800 (khoảng 48 giờ) vì mail relay server trong trường hợp tôi thiết kế phục vụ cho khá nhiều người và đường dẫn khá tốt.

4.2.6 Hồ sơ "badmailfrom" thuộc qmail-smtpd:
- Hồ sơ này là một trong những hồ sơ tiện dụng của qmail nó dùng để chứa các e-mail bạn không cho phép qmail server nhận vào (nó thuộc qmail-smtpd nên thuộc phần "nhận"). Dù phương pháp chống "bom thư" hay spam này không được linh động cho lắm nhưng nó là một trong những chức năng chứng tỏ sự quan tâm của ông Bernstein khi viết Qmail trong vấn đề chống spam.

- Hồ sơ này chứa các e-mail hoặc trọn bộ domain bạn không muốn nhận bất cứ tin tức gì mỗi e-mail phải nằm trên một dòng. Ví dụ:
spamboy@spamhouse.com (không nhận mail từ 1 địa chỉ này)
@spamhouse.com (không nhận mail từ trọn bộ domain này).

- Các phương pháp phòng chống "bom thư" linh động hơn sẽ được đi sâu hơn trong những phần tới.

4.2.7 Hồ sơ "rpcthosts" thuộc qmail-smtpd:
- Hồ sơ rcpthosts là một hồ sơ hết sức quan trọng đối với qmail-smtpd nhất là cho một mail relay server. Hồ sơ này cung cấp dữ kiện cho qmail-smtpd daemon này thay mặt các hosts và domains nào muốn nhận chuyển mail. Ví dụ bạn có 2 mail server trong LAN nội bộ có tên là domain1.com và domain2.com hồ sơ rcpthosts phải có dữ kiện của 2 mail server này nếu không mail từ bên ngoài vào 2 server này sẽ bị qmail-smtpd từ chối chuyển nhận vào bên trong. Nên nhớ phải có ít nhất là một dữ kiện cho chính mail relay server không thì sẽ không có mail nào được vào (ngay cả cho chính mail relay server).

- Hồ sơ rcpthosts chứa các dữ kiện theo mặc định mỗi dòng một host/domain. Hồ sơ này có cấu trúc tương tự như sau:
mail.mydomain.com (mail là hostname của mail relay server và domain.com là fully qualified domain name. Ðây chính là dữ kiện thiết yếu và đầu tiên cho mail relay server).

exchange1.mydomain.com (exchange1 là hostname của MS exchange thuộc LAN nội bộ. Tất nhiên DNS của bạn (hoặc của ISP cung cấp cho bạn) phải có entry cho host exchange1 này và mail relay server phải biết được địa chỉ (bên trong) của host exchange1).

exchange2.mydomain.com (tương tự như exchange1 và nhiều mail server bên trong theo cấu trúc này nếu cần).

mydomain.net (giả sử bạn có thêm một domain name khác với đuôi .net và một trong những mail server thuộc LAN nội bộ đã thiết lập để nhận mail cho domain.net này entry domain.net trong rcpthosts cần thiết để mail relay server biết domain.net được phép nhận mail từ bên ngoài thông qua mail relay server).

mail.myfriend.com (giả sử một người bạn có domain name là myfriend.com và anh ta bị trục trặc với mail server. Bạn có thể "tạm thời" giúp anh ta bằng cách cho phép mail relay server của bạn nhận các mail thuộc myfriend.com vào host mail để anh ta có thể dial in host mail này mà lấy mail (chẳng hạn). Kỹ thuật này còn có cái tên là "chuyển nhận có lựa chọn" (selective relay policy).

- Sự hiện diện của hồ sơ rpcthosts là một trong những đặc thù của qmail trong vấn đề phòng chống open-relay. Chỉ có những host/domain hiện diện trong rpcthosts được phép nhận mail từ mai relay server của bạn. Ðiều này có nghĩa một người ở hostA (mang IP address xx.xx.xx.xx) có ý định dùng mail relay server của bạn để chuyển tới một mail server nào đó (có IP address zz.zz.zz.zz) ngoài giới hạn quy định của rpcthosts tuyệt đối không thể được. Phần "Thử nghiệm sau khi cài đặt" trong phần 6 sẽ đi xuyên qua một số bước kiểm tra cụ thể.

4.2.8 Hồ sơ "smtpgreeting" thuộc qmail-smtpd:
- Hồ sơ này trên mặt chức năng gần như không cần thiết nhưng trên mặt tâm lý nó mang ít nhiều tính chuyên nghiệp (professionalism) sự sắp xếp và hiện diện của một mail relay server trên Internet. Hồ sơ smtpgreeting không chứa gì ngoài một giòng thông điệp "chào mừng" những ai đến mail relay server này (bao gồm sự trao đổi giữa các mail relay servers và ngay cả các tay chuyên dùng telnet hoặc các loại dụng cụ thăm dò mail server lỗ hổng open-relay).

- Hồ sơ này tùy thuộc vào tinh thần của bạn mà hình thành một lời "chào mừng" đúng mức. Tôi đã từng thấy một số mail relay server có lời "chào mừng" khá thách thức chẳng hạn như: "Kiddies this server is not your playground. Stay away or stick around for a challenge" (Tạm dịch: Mấy ông nhóc con server này không phải là chỗ chơi của các ông. Tránh xa hay nhào vô mà thử thách). Dù cơ chế làm việc của qmail mang nặng tính bảo mật không có nghĩa là nó hoàn hảo và không cách gì phá được. Một thông điệp mang tính hoà nhã và nghiêm túc thường có tác dụng tốt đẹp hơn nhiều (bạn sẽ phải hối hận nếu lỡ buông lời thách thức trong thế giới bảo mật).

- Tôi giả định nên dùng một thông điệp ngắn gọn và rõ ràng như sau: "Welcome to company ABC mail server and have a nice time". Xét cho cùng bạn không muốn tạo nên phiền toái mà làm gì. Nếu một tay chuyên tìm open-relay thất vọng khi "đụng" phải mail server của bạn đã là một thành tựu; một thông điệp nhẹ nhàng sẽ giúp cho anh ta quyết định "để yên server" của bạn. Nên nhớ rằng dù mail relay server của bạn không open-relay những kẻ muốn phá vẫn có thể "flood" server của bạn được tổn thất ở chỗ người dùng trong nội mạng không có cơ hội gởi và nhận mail trong khi mail relay server bị "flood".

4.2.9 Hồ sơ "smtproutes" thuộc qmail-remote:
- Ðối với một mail server bình thường (qmail được thiết kế để trực tiếp nhận / gởi e-mail từ clients bên trong nội mạng và các mail server ngoại mạng) hồ sơ smtproutes không cần thiết. Tuy nhiên để một qmail relay server làm việc hồ sơ này không thể thiếu được. Hồ sơ này tương tự hồ sơ rcpthosts ở trên chỉ có thêm giá trị địa chỉ IP đi sau mỗi host (mail server trong nội mạng). Các IP của mail server trong nội mạng giúp mail relay server xác định được mail sẽ được chuyển về đâu và mỗi mail server nội mạng chịu trách nhiệm phân phát cho các clients theo đúng quy định. Ðây chính là cốt yếu khác biệt giữa một mail server bình thường và một mail relay server.

- Hồ sơ smtproutes có cấu trúc như sau: hostname.domain.com:[IP_ADDRESS]. Giả sử hai exchange mail servers trong nội mạng có tên là exchange1 (IP: 192.168.1.100) và exchange2 (IP: 192.168.1.200) dữ kiện được quy định trong smtproutes sẽ như sau:
exchange1.mydomain.com:[192.168.1.100]
exchange2.mydomain.com:[192.168.1.200]
mail.myfriend.com:[192.168.1.100] (dùng exchange1 để "nhận dùm" mail cho người bạn tất nhiên exchange1 đã được thiết kế để tiếp nhận mail cho domain myfriend.com).

4.3 Mail server trong nội mạng (MS Exchange)
- Tôi chọn MS Exchange như một mail server nội mạng không phải vì khả năng chuyên biệt của MS Exchange mà vì tính phổ biến của nó trong môi trường văn phòng thường xử dụng MS Back Office. Cách điều chỉnh cho các loại mail server khác có những điểm tương tự như MS Exchange về phương diện mail đi ra / vào (thay vì đi vào trực tiếp từ mail server của ISP bạn dùng MS Exchange hoặc mail server nào đó có thể đi vào từ Qmail mail relay server).

- Trong phần điều chỉnh Connections của MS Exchange bạn chọn "Internetmail Service Properties". Trong phần điều chỉnh này có một "tab" gọi là "Connection" trong đó bạn có thể điều chỉnh hai dữ kiện để MS Exchange biết phải chuyển nhận mail từ Qmail mail relay server ở đâu:
Transfer mode chọn: "Inbound and Outbound"
Message delivery chọn: "Forward all messages to host" và IP của host chính là IP của mail relay server.

- Nếu Exchange server của bạn chịu trách nhiệm quản lý mail cho nhiều domain bạn phải điều chỉnh "Reroute incoming SMTP mail" cho thích ứng trong "tab" Routing của "Internet Mai Properties. Những thiết lập này mang tính cụ thể cho từng loại mail server. Bạn nên tham khảo thêm tài liệu của mỗi loại mail server để đi sâu vào các chi tiết.
- Nguyên tắc làm việc trước và sau khi có mail relay server là:
* Các mail server thuộc nội mạng (hoặc DMZ) không còn truy cập trực tiếp đến mail server của ISP mà truy cập vào Qmail relay server.
* Cơ chế mail relay hoàn toàn do qmail server nắm giữ.
* Qmail relay server có thể được nằm trong DMZ hoặc nội mạng hoặc đằng sau một router miễn sao router + firewall có thể "foward" các thông tin từ bên ngoài vào mail relay server. Quyết định đặt để qmail relay server tùy thuộc vào cấu trúc của từng network.

Qmail as a Mail Gateway - Phần 4 (cuối)

Chi tiết nâng cao - vấn đề bom thư với qmail.
5. Ðiều chỉnh sau khi cài đặt

Trước đây khi Internet còn giới hạn (chỉ phổ biến giữa các trường đại học và các nhóm nghiên cứu và rất ít người dùng bình thường) mail là một phương tiện tuyệt vời để liên lạc và trao đổi. Tính thương mại hoá hầu như chưa có cho đến khi loạt "SPAM" đầu tiên xuất hiện đã biến Internet mail trở nên một vấn đề gần như nan giải đối với các loạt mail "vô chủ" chuyên để quảng cáo.

Có hai trường hợp thường xảy ra trong vấn nạn "SPAM" đó là:
- Bị biến thành phương tiện để "SPAM" những nạn nhân khác nếu mail server không được điều chỉnh và kiểm soát đúng mức (bị relay).

- Bị "SPAM" (bom thư).

5.1 Chiến thuật relaying điện thư (để không biến mail server của mình trở thành phương tiện để "SPAM"
5.1.1 Tại sao cần relay?
Như đã đề cập đến trong phần 3.5 (Bộ quản trị SMTP Access Control) có những trường hợp bạn cần cho phép mail gateway của mình relay mail vì lý do nào đó (chuyển nhận mail dùng cho công ty bạn hoặc mail server của bạn dùng để relay mail cho nhiều domain khác nhau như một mail server của ISP). Nói một cách ngắn gọn khả năng "mail relaying"của một mail server A là khả năng tiếp nhận mail từ host X và chuyển gởi mail này đến host Y hoặc những host nào đó trong chế độ định sẵn mà mail server phải đảm nhiệm.

5.1.2 Chuyện gì xảy ra nếu không relay?
Nếu mail gateway của bạn chỉ dành phục vụ cho một domain riêng của bạn thì vấn đề relay không còn cần thiết nữa và quyết định hoàn toàn không relay là cách an toàn nhất để ngăn ngừa trường hợp mail gateway của bạn bị biến thành một phương tiện để SPAM.

5.1.3 Cho phép relaying theo lựa chọn
Trong phần 3.5 đã đi sâu vào chi tiết sắp xếp cho phép relay một cách chọn lọc một trong những variables cần phải chú tâm đến là: allow RELAYCLIENT. Nên xem xét một cách kỹ lưỡng các giá trị "RELAYCLIENT" để nắm chắc bạn đã không cho phép một "client" nào đó được phép relay vì sơ ý.

5.1.4 Thử nghiệm relaying bằng tcprulescheck
Trong nhóm "ucspi-tcp" có một chương trình gọi là tcprulescheck cho phép bạn kiểm tra các "luật" relay trước khi ứng dụng Qmail như một mail relay server thực sự. tcprulescheck dùng 2 variables của môi trường để kiểm tra các "luật" relay đó là: TCPREMOTEIP và TCPREMOTEHOST. Bạn có thể thay đổi các variables này cho quy trình kiểm tra.

Sau đây là một ví dụ đơn giản quy trình kiểm tra các "luật" relay bằng tcprulescheck. Giả sử chúng ta dùng ví dụ qmail-rules.txt từ phần 3.5.

127.:allow RELAYCLIENT=""
192.168.1.:allow RELAYCLIENT=""
10.10.10.50:allow RELAYCLIENT=""
spamboy@spamhouse.com:deny
badhost.net:deny
.:deny
Chúng ta thử "cat" qmail-rules.txt và "pipe" nó xuyên qua chương trình tcprules để tạo ra hash của các rules thuộc "qmail-rules.txt" (nên nhớ smtpd daemon dùng hash của qmail-rules.txt đó là hồ sơ tcp.smtp.cdb nó không bao giờ dùng nguyên bản cleartext qmail-rules.txt):
# cat /etc/smtprules/qmail-rules.txt | tcprules /etc/tcp.smtp.cdb

Hash của các rules được chứa trong hồ sơ tcp.smtp.cdb và chúng ta sẽ dùng hồ sơ này để kiểm tra các "luật" relay.

a. Lệnh $ tcprulescheck /etc/tcp.smtp.cdb sẽ cho kết quả:
rule:
deny connection
Trường hợp ở trên tcprulescheck dùng giá trị mặc định (default) của "qmail-rules.txt" đó là .:deny. Bất cứ truy cập nào vào mail relay server của bạn đầu tiên nó sẽ dùng giá trị mặc định để "deny" trước và sau đó dựa trên IP hoặc hostname của nơi gởi mail mà định đoạt "số phận" của mail này.

b. Thử lệnh trên một lần nữa trước khi chỉnh variable TCPREMOTEIP là 10.10.10.50 như đã cho phép trong "qmail-rules.txt" ở trên:
$ TCPREMOTEIP=10.10.10.50 ; export TCPREMOTEIP
$ tcprulescheck /etc/tcp.smtp.cdb sẽ cho kết quả:
rule: 10.10.10.50:
set environment variable RELAYCLIENT=
allow connection

Ở trên cho thấy qmail chấp nhận TCPREMOTEIP là 10.10.10.50 là vì IP này đã thuộc trong danh sách qmail-rules.txt và được thiết lập ở chế độ allow RELAYCLIENT nên tcprulescheck trả lời: allow connection.

c. Thử lệnh trên với TCPREMOTEIP mang giá trị khác giả sử như badhost.net có IP là 172.173.174.175 (được thiết lập ở chế độ deny trong qmail-rules.txt)
$ TCPREMOTEIP=172.173.174.175 ; export TCPREMOTEIP
$ tcprulescheck /etc/tcp.smtp.cdb sẽ cho kết quả:
rule: badhost.net:
deny connection

Ở trên cho thấy Qmail từ chối không nhận mail muốn được chuyển nhận đến server 172.173.174.175 (IP của badhost.com trong ví dụ này) vì địa chỉ này được ấn định là deny.

Cứ như vậy bạn đi xuyên qua mỗi "rule" trong qmail-rules.txt để kiểm tra chức năng relay của các rules.

5.1.5 Thử nghiệm relaying bằng "telnet"
Phương pháp dùng "telnet" để truy cập vào một mail server ở port 25 (SMTP port) có lẽ là một phương pháp cổ điển và phổ biến nhất để kiểm tra tính năng "relay" của nó. Ðây cũng là một trong những phương pháp các tay chuyên tìm kiếm "open relay" để có thể SPAM tất nhiên không bằng cách "telnet" từng mail server mà bằng cách "tự động hoá" qua một dạng scripting nào đó để có thể đi xuyên qua hàng loạt mail server trong một khoảng thời gian ngắn.

Ở đây tôi sẽ đưa ra hai ví dụ đơn giản để kiểm tra tính năng "relay" của mail server của bạn. Ðòi hỏi đơn giản chỉ cần có chương trình "telnet" trong máy. Tính năng "relay" dựa trên hồ sơ "rcpthosts" (trong phần 4.2.7) có các giá trị như sau:
mail.mydomain.com
exchange1.mydomain.com
exchange2.mydomain.com
mydomain.net
mail.myfriend.com

Khởi động telnet trên một command prompt (Windows hoặc *nix tùy chọn). Giả sử mail gateway server của tôi có địa chỉ là 192.168.1.200 với hostname là mail.mydomain.com chẳng hạn tôi sẽ làm các bước như sau: 1 telnet 192.168.1.200 25
2 220 My company mail server - Welcome ESMTP
3 HELO
4 250 My company mail server - Welcome
5 MAIL FROM:
6 250 ok
7 RCPT TO:
8 553 sorry that domain isn t in my list of allowed rcpthosts (#5.7.1)
Dòng 1: Dùng telnet với các thông số là IP 192.168.1.200 và SMTP port 25.

Dòng 2: Nếu mail server của tôi đang hoạt động bình thường tôi sẽ nhận được lời chào (bạn còn nhớ hồ sơ "smtpgreeting" trong phần 4.2.8? đây chính là lời chào lấy từ hồ sơ "smtpgreeting" này).

Dòng 3: Tôi thử lệnh HELO một lệnh căn bản của SMTP.

Dòng 4: Mail server của tôi sẽ trả lời với thông điệp lấy từ "smtpgreeting".

Dòng 5: Tôi "mạo danh" là spamboy@spamhouse.com qua lệnh MAIL FROM:

Dòng 6: Mail server trả lời 250 ok bởi vì tôi chưa cho mail server của tôi biết là người nhận sẽ là ai và người nhận thuộc domain nào.

Dòng 7: Tôi dùng lệnh RCPT TO: và cho mail server biết người nhận là reciepient thuộc domain someonecompany.com; một domain không hề có trong rcpthosts.

Dòng 8: Qmail sẽ từ chối ngay lập tức.

Hãy thử kiểm tra relaying bằng telnet dùng các giá trị người nhận thuộc domain có trong hồ sơ "rcpthosts". Quy trình này tương tự như sau: 1 telnet 192.168.1.200 25
2 220 My company mail server - Welcome ESMTP
3 HELO
4 250 My company mail server - Welcome
5 MAIL FROM:
6 250 ok
7 RCPT TO:
8 250 ok
9 DATA
10 354 go ahead
11 From: spamboy@spamhouse.com
12 To: someone@mydomain.net
13 Subject: a relay test
14 This is only a test for open relay
15 .
16 250 ok 1041050865 qp 12150
17 QUIT
18 221 My company mail server - Welcome
19
20 Connection to host lost.
Dòng 1 đến dòng 6: tương tự như ví dụ ở trên

Dòng 7: Lệnh RCPT TO: gởi đến người nhận thuộc domain mydomain.net domain này có trong danh sách rcpthosts

Dòng 8: Mail server tiếp nhận và trả lời với SMTP code 250. Sở dĩ mail server tiếp nhận trong trường hợp này là vì domain mydomain.net hiện diện trong rcpthosts

Dòng 9: Lệnh DATA để báo với mail server dự định gởi thông điệp

Dòng 10: Mail server tiếp nhận và trả lời với SMTP code 354

Dòng 11 đến dòng 13: Các "message header" From To và Subject thông thường để mail client có thể hiển thị những thông tin này

Dòng 14: Nội dung của thông điệp. Nội dung này có thể trải ra thành nhiều dòng nếu cần

Dòng 15: Dấu chấm (.) để kết thúc thông điệp

Dòng 16: Mail server trả lời kết thúc một "xuất" gởi thông điệp

Dòng 17: Lệnh QUIT dùng để dừng truy cập đến mail server bằng telnet

Dòng 18: Mail server trả lời với SMTP code 221 ngưng truy cập vào mail server thành công

Dòng 19 và dòng 20: Dòng trống trên console và thông điệp telnet báo không còn truy cập đến mail server nữa.

Ở trên bạn thấy người gởi "spamboy@spamhouse.com" vẫn có thể gởi mail đến "someone@mydomain.net" vì domain mydomain.net hiện diện trong hồ sơ "rpcthost". Nếu trong hồ sơ "qmail-rules.txt" có dữ kiện dùng để "deny" người gởi này chắc chắn mail ở trên không thể đi vào mail server của bạn được. Ví dụ trên một phần nào minh hoạ quan hệ giữa "qmail-rules.txt" và "rcpthosts" trên phương diện chống relay và chống spam.

Qua hai phần thử nghiệm 5.1.4 và 5.1.5 chúng ta có thể rút tỉa được một số điểm quan trọng như sau:

- Hồ sơ "qmail-rules.txt" dùng để xác định các host được phép relay và được phép dùng mail gateway để chuyển mail. Nó còn có trách nhiệm giúp Qmail quyết định mail đến và đi từ các host nào sẽ có số phận ra sao. Ðịnh nghĩa ÐẾN và ÐI ở đây có nghĩa là mail đi từ bên ngoài domain của bạn hoặc bên ngoài những domain bạn cho phép relay. Ngoài hồ sơ "badmailfrom" (xem lại trong phần 4.2.6) "qmail-rules.txt" là nơi để xác định những domains hosts và các e-mail bạn không muốn tiếp nhận (qua phương thức :deny).

- Hồ sơ "rpcthost" dùng để xác định các domain nào được Qmail relay server giao chuyển mail. Ðiều này có nghĩa Qmail dựa trên những dữ liệu của "rpcthosts" để tiếp nhận mail từ một nơi nào đó đến một mail server nào mà nó đã chịu trách nhiệm relay.

5.2 Chiến thuật chống bom thư với Qmail
Các bước 5.14 và 5.1.5 ở trên dùng để kiểm tra lại những lỗ hổng "relay" trên bình diện mail gateway được dùng để relay (hoặc mail gateway được làm phương tiện để spam các hòm thư). Hồ sơ "qmail-rules.txt" có thể dùng để quy định những e-mail domains hoặc một chuỗi địa chỉ bạn không muốn nhận mail. Ðây là có thể là một cách chống bom thư nhưng thiếu tính "tự động hoá" vì bạn phải thường xuyên theo dõi cập nhật các dữ kiện trong hồ sơ này.

Ðể nâng cao khả năng chống bom mail với tính "tự động hoá" trong phần này chúng ta bàn về vấn đề dùng các RBL (realtime black list) database phối hợp với "qmail-rules.txt" để chống bom thư một cách hữu hiệu hơn.

Trong phần 3.4.2 trước đây chúng ta nói đến chương trình "tcpserver" được sử dụng trong script "run" cho qmail-smtpd. Hãy xem lại đoạn script chạy "tcpserver" của phần 3.4.2: #!/bin/sh
# concurincoming is not standard qmail control file
# it is created manually to specify the allowed concurrent incoming messages
#
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurincoming`
if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" ]; then
echo QMAILDUID NOFILESGID or MAXSMTPD is not set in
echo /var/qmail/supervise/qmail-smtpd/run
echo "Have you set qmaild UID & qmaild GID yet?"
exit 1
fi
exec /usr/local/bin/softlimit -m 6291456
/usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb -c "$MAXSMTPD"
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1

Ở trên tcpserver chỉ dùng "tcp.smtp.cdb" hồ sơ này được "hash" từ "qmail-rules.txt" để chống relay và bom thư theo dạng đơn giản. Cũng với cơ chế này chúng ta có thể dùng "rblsmtpd" cùng với "tcpserver" để báo cho qmail server biết nó có trách nhiệm phải kiểm tra các mail đi xuyên qua mail gateway có thuộc dạng "SPAM" trước khi được chấp nhận. Phương thức kiểm tra bằng cách đối chiếu dữ kiện ở một trong những RBL servers. Có một số RBL database miễn phí trên internet. Có hai RBL cá nhân tôi dùng là: ordb.org và osirusoft.com (bạn có thể đọc thêm một số tin tức về RBL từ hai site này).

Cách dùng rblsmtpd trong script run của "qmail-smtpd" đơn giản như sau:

exec /usr/local/bin/softlimit -m 6291456
/usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb -c "$MAXSMTPD"
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /usr/local/bin/rblsmtpd -r relays.ordb.org -r relays.osirusoft.com /var/qmail/bin/qmail-smtpd >> /var/log/qmail/rblsmtpd.log 2>&1
Chương trình rblsmtpd ở trên dùng hai tham số "relays.ordb.org" và "relays.osirusoft.com" chính là hai RBL database mà qmail phải đối chiếu mỗi khi nhận mail vào. Nếu Qmail nhận được dữ kiện từ một trong hai RBL database trên cho biết mail nào đó thuộc dạng "SPAM" nó sẽ không tiếp nhận. Bạn có thể thêm các tham số cho rblsmtpd tùy thích.

Có lẽ bạn sẽ tự hỏi: vậy cứ mỗi lần mail đi vào đều phải được kiểm tra từ RBL thì chắc phải chậm lắm? Ðây là câu hỏi đã được đặt ra nhiều lần. Cá nhân tôi khôn

More...

Qmail as a Mail Gateway - Phần 3

By Huynh Sy Nguyen

Các điều chỉnh quan trọng cho qmail.

3.4.2 Thư mục "qmail-smtpd" trong supervise
- Tương tự như trên bạn tạo ra hồ sơ có tên là run trong thư mục /var/qmail/supervise/qmail-smtpd. Hồ sơ run này có trách nhiệm gọi một số phân bộ quan trọng của qmail để thi hành các chức năng trực thuộc smtp. Hồ sơ "run" này có chi tiết như sau:


#!/bin/sh
# concurincoming is not standard qmail control file
# it is created manually to specify the allowed concurrent incoming messages
#
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurincoming`
if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" ]; then
echo QMAILDUID NOFILESGID or MAXSMTPD is not set in
echo /var/qmail/supervise/qmail-smtpd/run
echo "Have you set qmaild UID & qmaild GID yet?"
exit 1
fi
exec /usr/local/bin/softlimit -m 6291456
/usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb -c "$MAXSMTPD"
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1

Hồ sơ này sẽ có thêm một vài thông số quan trọng cho vấn đề chống "SPAM" sẽ được đi sâu hơn trong phần 5.4 sau này. Ở đây bạn chỉ cần nắm bắt một vài chi tiết quan trọng đó là:
- softlimit -m $MEMSIZE trong đó $MEMSIZE là số lượng memory thích hợp cho các phân bộ của qmail để xử lý khối lượng mail cao nhất trong khoảng thời gian bận rộn nhất.

- tcpserver và các thông số -p -x trong đó -p chỉ định cho tình trạng "hoảng" (paranoid) dùng để kiểm tra IP của host gởi mail đến xem domain MX record và IP của nó có giá trị hay không (tránh tình trạng SPAM theo phương thức đơn giản). -x chỉ định cho tcpserver dùng database (trong phần 3.4 sau đây) để kiểm tra chế độ nhận hoặc từ chối mail từ người gởi dựa trên database này.

- concurincoming variable trong hồ sơ "run" dùng để chỉ định số lượng mail được "đi vào" mail gateway mỗi lần. Bạn có thể cho nó một con số thích đáng tùy theo nhu cầu. Tuy nhiên không nên cho concurincoming có giá trị quá cao để phòng ngừa khả năng bị DOS. Tôi chọn giá trị là 20 cho concurincoming giá trị này đủ sức xử lý vài trăm đến vài ngàn mail mỗi giờ (tùy theo dung tích của mail đi xuyên qua mail gateway).
# echo 20 > /var/qmail/control/concurincoming
# chmod 644 /var/qmail/control/concurincoming

- Ðừng quên đổi hồ sơ "run" này thành "executable":
# chmod 755 /var/qmail/supervise/qmail-smtpd/run

- Bước kế tiếp là tạo ra hồ sơ "run" trong thư mục /var/qmail/supervise/qmail-smtpd/log. Hồ sơ này gọi multilog thi hành nhiệm vụ logging cho các lưu thông thuộc phần hành smtp multilog chuyển các log thuộc smtp vào thư mục /var/log/qmail/smtpd; nó có chi tiết như sau: #!/bin/sh
# set user id and group id for qmail smtp daemon
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s5000000000 /var/log/qmail/smtpd

- Ðừng quên đổi hồ sơ "run" này thành "executable":
# chmod 755 /var/qmail/supervise/qmail-smtpd/log/run

- Cuối cùng là tạo thư mục log cho qmail-smtpd:
# mkdir -p /var/log/qmail/smtpd

- Và đổi chủ quyền của thư mục này cho qmaill (bạn còn nhớ phần tạo tài khoản nhân dụng và nhóm nhân dụng ở phần 2.4.3?):
# chown qmaill /var/log/qmail /var/log/qmail/smtpd

3.5 Bộ quản trị "SMTP Access Control"
Trong qmailctl có một function chuyên chịu trách nhiệm cho phần SMTP access control. Bạn xem lại qmailctl sẽ thấy có dòng như sau thuộc function cdb:
cat /etc/smtprules/qmail-rules.txt | tcprules /etc/tcp.smtp.cdb

Lệnh trên có hai phần: copy qmail-rules.txt và pipe nó sang tcprules để biến nó thành hash database. Database này chứa các thông tin để kiểm tra chế độ nhận hoặc từ chối mail từ người gởi như đã đề cập trong phần 3.4.2 ở trên.

Bạn có thể tạo một hồ sơ có tên là qmail-rules.txt trong thư mục /etc/smtprules và có chi tiết như sau:
- Tạo thư mục /etc/smtprules trước:
# mkdir - p /etc/smtprules

- Ðưa chi tiết vào hồ sơ qmail-rules.txt:
# echo ‘127.:allow RELAYCLIENT="" >> /etc/smtprules/qmail-rules.txt
Lệnh trên đưa vào policy cho phép các host thuộc loopback được phép relay nếu không Qmail không làm việc được.

# echo ‘192.168.1.:allow RELAYCLIENT="" >> /etc/smtprules/qmail-rules.txt
Lệnh trên đưa vào policy cho phép trọn bộ các client thuộc subnet 192.168.1.0/24 được quyền gởi mail đến Qmail gateway

# echo ‘10.10.10.50:allow RELAYCLIENT="" >> /etc/smtprules/qmail-rules.txt
Lệnh trên đưa vào policy cho phép một IP address (có thể là MS Exchange Server bên trong một subnet của LAN) được quyền relay.

# echo spamboy@spamhouse.com:deny >> /etc/smtprules/qmail-rules.txt
Lệnh trên đưa vào policy từ chối mail từ người gởi có tên spamboy từ domain spamhouse.com. Cách này là cách đơn giản đề phóng chống bomb mail. Trên thực tế ứng dụng có nhiều phương pháp hữu hiệu hơn (sẽ bàn sâu hơn trong phần 5.4 sau này).

# echo ‘badhost.net:deny >> /etc/smtprules/qmail-rules.txt
Lệnh trên đưa vào policy từ chối mail của trọn bộ domain badhost.com. Bạn có thể dùng phương cách :allow hoặc :deny một cách linh động cho thích hợp với nhu cầu riêng. Và cuối cùng của hồ sơ qmail-rules.txt này bạn luôn luôn cần một dòng như sau:
.:deny (# echo ‘.:deny >> /etc/smtprules/qmail-rules.txt) với tác dụng từ chối tất cả các trường hợp còn lại.

Hồ sơ qmail-rules.txt đến đây tương tự như sau:

127.:allow RELAYCLIENT=""
192.168.1.:allow RELAYCLIENT=""
10.10.10.50:allow RELAYCLIENT=""
spamboy@spamhouse.com:deny
badhost.net:deny
.:deny

Sau khi đã hoàn tất hồ sơ qmail-rules.txt như ý (đúng syntax như trên cho :allow :deny) bạn có thể dùng function cdb của qmailctl:
# qmailctl cdb

Hoặc kiểu "dài dòng":
# cat /etc/smtprules/qmail-rules.txt | tcprules /etc/tcp.smtp.cdb

Cũng nên đi vào chi tiết của tcprules syntax để giúp bạn tạo thêm các rules theo ý muốn và tránh những sai sót có thể xảy ra. Syntax của tcprules rất đơn giản như sau:
address:action variable

Trong đó
address có thể là một internet address (192.168.1.1) một chuỗi subnet (192.168.1.) một e-mail address (spamboy@spamhouse.com) một domain host (badhost.net) hoặc nếu không chỉ định một address nào thì bất cứ address cũng ứng dụng. Các variables của address có thể tóm gọn như sau:
$TCPREMOTEINFO@$TCPREMOTEIP (spamboy@192.168.1.1)
$TCPREMOTEINFO@$TCPREMOTEHOST (spamboy@spamhouse.com)
$TCPREMOTEIP (192.168.1.1)
$TCPREMOTEHOST (box.spamhouse.com)
Một phần của $TCPREMOTEIP (192.168.1)
Một phần của $TCPREMOTEHOST (spamhouse.com)
Không để address (bất cứ address nào cũng ứng dụng)

action là một trong hai trường hợp allow dành để cho phép address đã định hoặc deny dành để từ chối address đã định.

variable đi sau action được tách ra bởi dấu phẩy ( ) (comma separated) thông thường là variable RELAYCLIENT với giá trị là một empty string (RELAYCLIENT="")

3.6 Tạo ảo dụng "alias" cho Qmail
"alias" đóng vai trò quan trọng trong vấn đề quản lý mail server điều này có nghĩa mỗi "alias" là một "ảo nhân" chịu trách nhiệm cho một số trường hợp điển hình của các hoạt động trên một mail server. Sau đây là 3 "alias" cần thiết nhất :
- postmaster (theo đúng RFC 2821) chỉ cho Administrator của mail server
- mailer-daemon một loại người dùng bán tiêu chuẩn để nhận các mail bị dội (bounce)
- root dùng để chuyển các loại mail mang tính chủ quyền đến system administrator

Giả sử bạn muốn mailbox của chính mình lo luôn cả 3 alias ở trên bạn cần ra các lệnh sau:
# echo myname > /var/qmail/alias/.qmail-root
# echo myname > /var/qmail/alias/.qmai-postmaster
# ln -s /var/qmail/alias/.postmaster /var/qmail/alias/.qmail-mailer-daemon
# chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster

Nên nhớ các alias trên đều là hồ sơ "dấu" (hidden files) nên chúng đều có dấu chấm (.) đằng trước tên của alias. Các alias này có thể dùng để chuyển mail đến các user trên Unix (hoặc Linux) tôi không đi sâu vào vấn đề này vì chủ đề của bài viết là dùng Qmail như một mail gateway để forward mail vào một MTA bên trong LAN (như MS Exchange chẳng hạn).
Ðến đây Qmail có thể hoạt động được. Tuy nhiên có một số vấn đề còn phải thử nghiệm và điều chỉnh để hoàn thiện các configuration của Qmail và daemontools. Ðây là các bước quan trọng và sẽ được đi sâu trong phần kế tiếp.

Nguồn từ HVA.

More...

Qmail as a Mail Gateway - Phần 2

By Huynh Sy Nguyen

Thiết lập ứng dụng qmail như một mail gateway.

[/b]3. Thiết lập ứng dụng Qmail[/b]
3.1 Hồ sơ rc và "defaultdelivery"
Hồ sơ "rc" là boot script của qmail ấn định phương thức chuyển giao mail tùy theo cách sắp xếp và chọn lựa của từng hệ thống. Trong thư mục /var/qmail/boot có sẵn một số script cho từng trường hợp.

Nếu bạn không dùng daemontools mà dùng splogger của qmail để gởi log xuyên qua syslog (tiêu chuẩn Unix) và binmail để chuyển giao thông điệp theo phương thức /var/spool/mail/$USER thì "rc" script tương tự như sau:

Ví dụ thứ nhất:
#!/bin/sh
# Dùng splogger để chuyển log xuyên qua syslog
# Dùng binmail để chuyển giao thông điệp đến /var/spool/mail/$USER theo default
# Dùng V7 binmail interface: /bin/mail -f

exec env - PATH="/var/qmail/bin:$PATH"
qmail-start
`|preline -f /bin/mail -f "${SENDER:-MAILER-DAEMON}" -d "$USER"`
splogger mail
Trong đó
- Phương thức chuyển giao mail đến /var/spool/mail/$USER chính là phương thức chuyển giao mail theo truyền thống Unix.Nếu bạn muốn hiểu rõ hơn nên tham khảo thêm phương thức chuyển giao mail của Unix.
- Các dấu back-slash () chỉ cho sự nối tiếp trong câu lệnh ( là return character)
- Phần lệnh preline -f /bin/mail -f của người gởi là MAILER-DAEMON đến $USER nằm trong dấu backquote (`) chớ không phải là singlequote ( ). Nên phân biệt rõ các dấu quote này khi đánh lệnh trên trong script "rc" (backquote dùng để ứng thế một cụm lệnh singlequote chỉ là một singlequote). Nếu bạn muốn hiểu rõ hơn về khả năng "command subtitution" trên Unix nên đọc thêm phần này.

Dĩ nhiên bạn có thể tạo nên một "rc" như trên và dùng splogger. Tuy nhiên nếu đã install daemontools tại sao không tận dụng chức năng của nó? Hồ sơ "rc" của tôi như sau:

Ví dụ thứ nhì:
#!/bin/sh
# Dùng multilog của daemontools để gởi log đến /var/log/qmail
# Dùng /var/qmail/control/defaultdelivery làm hồ sơ configuration
# Dùng ./Mailbox làm phương thức chuyển giao thông điệp

exec env - PATH="/var/qmail/bin:$PATH"
qmail-start "`cat /var/qmail/control/defaultdelivery`"
- So với hồ sơ "rc" ở trên dùng splogger và hồ sơ "rc" dùng daemontools này thì hồ sơ "rc" này giản tiện hơn nhiều.
- Lệnh exec env xác định môi trường qmail và qmail-start chỉ đơn giản khởi động theo thông số đã định sẵn trong defaultdelivery.
- defaultdelivery không phải là một hồ sơ tiêu chuẩn của qmail. Nó đơn giản chỉ là một phương tiện gởi thông số cho qmail-start.

Sau khi đã tạo ra hồ sơ "rc" trong thư mục /var/qmail có hai việc cần làm là:
- Thay "mod" của hồ sơ này thành "executable: # chmod 755 /var/qmail/rc để script rc này có thể "khởi động" được khi cần.
- Tạo ra thư mục /var/log/qmail để daemontools gởi log của qmail vào vị trí này: # mkdir /var/log/qmail (nếu bạn không muốn dùng daemontools mà chỉ dùng rc như phần ví dụ thứ nhất thì không cần tạo ra thư mục này vì splogger sẽ dùng syslog).

Ðến đây có lẽ bạn sẽ hỏi: defaultdelivery ở đâu ra và trong hồ sơ này chứa những gì? Như đã đề cập ở trên defaultdelivery chỉ đơn giản là một phương tiện gởi thông số cho qmail-start; nó giúp qmail-start xác định phương thức chuyển gởi mail (nếu không muốn dùng .qmail). Có 3 phương thức chuyển gởi mail thông thường trên Unix như sau:

Format Vị trí defaultdelivery Lợi điểm
maildir $HOME ./Maildir/ Ðáng tin cậy nhưng ít MUA hỗ trợ
mbox $HOME ./Mailbox Phổ biến và được các MUA hỗ trợ
username /var/spool/mail xem thêm INSTALL.vsm Mail tiêu chuẩn Unix.

Dựa vào bảng phân tích trên bạn có thể chọn phương thức thích hợp cho mình. Trong thư mục mã nguồn có kèm các hồ sơ INSTALL.mbox INSTALL.maildir và INSTALL.vsm giải thích rất chi tiết các ưu khuyết điểm của từng phương thức nếu bạn muốn tìm hiểu sâu hơn. Cá nhân tôi chọn ./Mailbox vì muốn tạo tiện dụng cho các MUA (Mail User Agent).

Vậy để tạo ra defaultdelivery bạn chỉ cần chọn một phương thức và dùng lệnh echo để đính phương thức đã chọn giả sử như:
# echo ./Mailbox > /var/qmail/control/defaultdelivery

Trong đó
- ./Mailbox là phương thức.
- hồ sơ defaultdelivery được nằm trong thư mục /var/qmail/control nơi trọn bộ các configuration thuộc qmail được lưu trữ.
- lệnh echo đính dòng ./Mailbox (>smilie vào hồ sơ defaultdelivery.

3.2 Hồ sơ khởi động "qmailctl" của hệ điều hành
Ðến đây bạn đã có thể khởi động qmail bằng cách chạy script "rc" đã tạo ở trên. Tuy nhiên để qmail được ứng dụng như một mail gateway có khả năng tự khởi động và tự tắt theo đúng quy chế thì "rc" không có khả năng này. Hơn nữa các chức năng tiện dụng của phần daemontools không được ứng dụng đầy đủ nếu chỉ dùng script "rc" ở trên. Hồ sơ "rc" sẽ được dùng như một phân bộ trong cơ chế chuyển gởi thông điệp (qua smtp) các phần kế tiếp sẽ đi sâu hơn.

Vì lý do trên hồ sơ khởi động qmailctl được hình thành để quản lý các phân bộ của qmail và daemontools đúng hệ thống. Trước khi đi sâu vào nội dung của hồ sơ qmailctl bạn cần biết qua một số binaries và các chức năng của chúng trong phần mềm hỗ trợ "daemontools" để dễ hình dung cơ chế làm việc của hồ sơ qmailctl.

Sau khi compile và build daemontools thành công phần mềm này có 14 binaries được lưu trữ trong /usr/local/bin bạn chỉ cần biết đến một số binaries và chức năng của chúng như sau:

Tên binary Chức năng
supervise: Dùng để khởi động và theo dõi một process. Có khả năng tái khởi động process đó nếu nó bị "chết"
svok: Dùng để kiểm tra xem supervise đang thao tác hay không
svc: Dùng để điều khiển một process được khởi động bởi supervise binary này cho phép Admin ngưng và tái khởi động một process nào đó.
svstat: Dùng để báo cáo tình hình của một process được khởi động bởi supervise
svscan: Dùng để khởi động vào theo dõi một nhóm process được supervise tạo ra

Theo đây là một bản mẫu của hồ sơ qmailctl bạn có thể dùng nó cho hệ thống của mình nếu không muốn tự tạo một "qmailctl" riêng:
#!/bin/sh
# Người dùng RedHat có thể giản tiện chu trình sắp xếp
# "runlevel" với lệnh "chkconfig"
# chkconfig: - 80 30
# description: qmail as MTA

# Phần kế tiếp dùng để chỉnh user environment
PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH

# Xác định variables cho qmail daemon ID và user group ID
QMAILDUID=`id -u qmaild`
NOFILESGID-`id -g qmaild`

# Bắt đầu tạo ra các trường hợp hoạt dụng cho supervise
case "$1" in
start)
echo -n "Starting qmail: svscan"
cd /var/qmail/supervise
env - PATH="$PATH" svscan &
echo $! > /var/run/svscan.pid
echo "."
;;
stop)
echo -n "Stopping qmail: svscan
kill `cat /var/run/svscan.pid`
echo -n " qmail down"
svc -dx /var/qmail/supervise/*
echo -n " logging down too"
svc -dx /var/qmail/supervise/*/log
echo "."
;;
stat)
cd /var/qmail/supervise
svstat * */log
;;
doqueue)
echo "Sending ALRM signal to qmail-send"
svc -a /var/qmail/supervise/qmail-send
;;
queue)
qmail-qstat
qmail-qread
reload)
echo "Sending HUP signal to qmail-send"
svc -h /var/qmail/supervise/qmail-send
;;
pause)
echo "Pausing qmail-send"
svc -p /var/qmail/supervise/qmail-send
echo "Pausing qmail-smtpd"
svc -p /var/qmail/supervise/qmail-smtpd
;;
cont)
echo "Continuing qmail-send"
svc -c /var/qmail/supervise/qmail-send
echo "Continuing qmail-smtpd"
svc -c /var/qmail/supervise/qmail-smtpd"
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd"
svc -d /var/qmail/supervise/qmail-smtpd
echo "* Sending qmail-send SIGTERM and restarting"
svc -t /var/qmail/supervise/qmail-send
echo "* Restarting qmail-smtpd"
svc -u /var/qmail/supervise/qmail-smtpd
;;
cdb)
echo "Do not forget to modify /etc/smtprules/qmail-rules.txt or it will use the old cdb"
cat /etc/smtprules/qmail-rules.txt | tcprules /etc/tcp.smtp.cdb /tmp/tcp.smtp.tmp
chmod 644 /etc/tcp.smtp*
echo "/etc/tcp.smtp.cdb is reloaded"
;;
help)
cat <
stop -- stops mail service (smtp connections refused nothing goes out)
start -- starts mail service (smtp connection accepted mail can go out)
pause -- temporarily stops mail service (connections accepted nothing leaves)
cont -- continues paused mail service
stat -- displays status of mail service
cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp sends qmail-send a TERM & restarts it
doqueue -- sends qmail-send ALRM scheduling queued messages for delivery
reload -- sends qmail-send HUP rereading locals and virtualdomains
queue -- shows status of queue
HELP
;;
*)
echo "Usage: $0 {start|stop|restart|doqueue|reload|stat|pause|cont|cdb|queue|help}"
exit 1
;;
esac
exit 0Ðến đây có lẽ bạn sẽ thấy là binary svc được dùng rất nhiều trong hồ sơ qmailctl và sẽ thắc mắc các thông số -a -h -t -u.... của binary này có những chức năng nào?

Như đã đề cập ở trên về một số binaries của daemontools và các chức năng của chúng; svc dùng để điều khiển một process được khởi động bởi supervise binary này cho phép Admin ngưng và tái khởi động một process nào đó. Việc ứng dụng chức năng "tái khởi động một process nào đó" của svc hết sức quan trọng vì nó bảo đảm sự hoạt động liên tục của qmail và các phân bộ của qmail (nếu không mail sẽ bị bounce và không chuyển gởi được khi một trong những phân bộ của qmail bị ngưng).

Sau đây là bảng tóm gọn các thông số của svc (cho trường hợp bạn cần đào sâu) bạn có thể dùng bảng thông số của svc và đối chiếu với phần script trong hồ sơ qmailctl để hiểu rõ hơn các functions của nó:

Thông số Chức năng

-a Alarm - Dùng để gởi tín hiệu ALRM đến service
-c Continue - Dùng để gởi tín hiệu CONT đến service
-d Down - Dùng để gởi tín hiệu TERM và CONT đến service (nếu service này đang chạy) và không cho phép supervise tái khởi động service này.
-h Hangup - Dùng để gởi tín hiệu HUP đến service
-i Interrupt - Dùng để gởi tín hiệu INT đến service
-k Kill - Dùng để gởi tín hiệu KILL đến service
-o Once - Dùng để khởi động service nếu service này chưa khởi động nếu service này ngừng sau đó once ngăn chặn supervise tái khởi động nó.
-p Pause - Dùng để gởi tín hiệu STOP đến service
-t Terminate - Dùng để gởi tín hiệu TERM đến service
-u Up - Nếu service đang ngưng thông số này khởi động service
-x Exit - Ðình chỉ supervise ngay sau khi service down.

Có hai cách sắp xếp cho hồ sơ "qmailctl" ở trên tự động chạy khi Linux (Unix) system đi xuyên qua "run level". Linux và các Unix System V xử dụng init.d thư mục để chứa các shell scripts cho các run level thông thường thư mục init.d có cấu trúc như:
/etc/init.d hoặc
/etc/rc.d/init.d tùy theo cách sắp xếp và ứng dụng của mỗi Linux distro và Unix System V.
a. Cách "lười" (trên RedHat và một số distro có ứng dụng chkconfig):
- Tạo hồ sơ qmailctl như trên trong /var/qmail/bin (cho tiện)
- Làm cho qmailctl "chạy được" và tạo "soft link" từ hồ sơ qmailctl này vào /etc/rc.d/init.d (hoặc /etc/init.d tùy theo) và /usr/bin
# chmod 755 /var/qmail/bin/qmailctl
# ln -s /var/qmail/bin/qmailctl /etc/rc.d/init.d/qmail
# ln -s /var/qmail/bin/qmailctl /usr/bin

- Chuyển vào thư mục /etc/rc.d/init.d
# cd /etc/rc.d/init.d

- Chạy lệnh chkconfig để đưa các "soft links" vào đúng các "run level"
# chkconfig -add qmail

Nên nhớ phải có phần #chkconfig: - 80 30 và # description: ở phần đầu của qmailctl không thì lệnh chkconfig sẽ không chạy được. 80 và 30 là enable level và disable level của qmail (xem thêm các tài liệu về runlevel trên Sys V)

b. Cách "cổ điển" (trên tất cả các distro và System V):
Cách "cổ điển" để tạo ra runlevel cho System V sau đây rất căn bản và thông thường.
Sau khi tạo hồ sơ qmailctl trong /var/qmail/bin và làm nó "chạy được" với chmod như trên phần "lười" bạn tạo ra các soft link từ qmailctl đến tới từng runlevel như sau:
# ln -s /var/qmail/bin/qmailctl /etc/rc.d/rc0.d/K30qmail
# ln -s /var/qmail/bin/qmailctl /etc/rc.d/rc1.d/K30qmail
# ln -s /var/qmail/bin/qmailctl /etc/rc.d/rc2.d/S80qmail
# ln -s /var/qmail/bin/qmailctl /etc/rc.d/rc3.d/S80qmail
# ln -s /var/qmail/bin/qmailctl /etc/rc.d/rc4.d/S80qmail
# ln -s /var/qmail/bin/qmailctl /etc/rc.d/rc5.d/S80qmail
# ln -s /var/qmail/bin/qmailctl /etc/rc.d/rc6.d/K30qmail

Ở trên cho thấy các symbolic links từ /var/qmail/bin/qmailctl đến mỗi runlevel (của các rcX.d) với chỉ định: qmail ngưng hoạt động ở rc0.d rc1.d và rc6.d và hoạt động ở rc2.d rc3.d rc4.d và rc5.d (ký hiệu K dùng cho Stop và ký hiệu S dùng cho Start trong runlevel). Ở đây tôi chọn S80 và K30 dựa trên runlevel (by default) của Sendmail bạn có thể chọn chỉ số khác thích hợp cho yêu cầu riêng. Tuy nhiên nên sắp xếp runlevel theo đúng trình tự và ưu tiên của mỗi daemon không thì sẽ tạo ra sự cố cho các daemon của system.

3.3 Stop Sendmail và link Sendmail
Có lẽ bạn sẽ tự hỏi tại sao lại có Sendmail ở đây và tại sao phải Stop Sendmail rồi link Sendmail? Câu trả lời như sau: Sendmail gần như là một MTA default cho các Linux Distro cũng như đa số các Unix flavor cho nên cơ hội Sendmail daemon đang chạy và chiếm cứ port 25 trên máy của bạn rất cao. Ðiều này dẫn đến nhiều trục trặc tai quái khi qmail bắt đầu khởi động (cho dù bạn vẫn có thể chỉnh định cho Sendmail và Qmail cùng chạy trên một host nếu sắp xếp cẩn thận). Bước Stop Sendmail và Link Sendmail theo tôi là một bước hết sức quan trọng và cần thiết. Tất nhiên nếu bạn không hề có Sendmail trên máy thì bước này không cần phải đi xuyên qua.

3.3.1 Stop Sendmail:
- Thông thường Stop Sendmail cách đơn giản nhất là dùng runlevel script trong /etc/rc.d/init.d/sendmail để Stop:
# /etc/rc.d/init.d/sendmail stop

- Cách "dã chiến" là kill process ID nào của Sendmail nếu Sendmail đang chạy (hoặc system của bạn không dùng runlevel hoặc Sendmail được khởi động kiểu "dã chiến"...). Dùng lệnh ps để in ra các process nào của Sendmail:
# ps -ef | grep sendmail

- Sau khi ps cho bạn danh sách các process thuộc Sendmail bạn chỉ đơn giản "kill":
# kill PID-of-Sendmail

- Cho an toàn bạn nên tháo bỏ trọn bộ Sendmail nếu đã quyết định không dùng nó nữa hoặc ít nhất là tháo bỏ các symbolic link cho runlevel của Sendmail trong /etc/rc.d/rcX.d. Ðể tháo bỏ các runlevel theo phương pháp tiện dụng chkconfig (trên RedHat và các distro có ứng dụng chkconfig này):
# chkconfig -del sendmail
- Ðể tháo bỏ các symbolic links cho runlevel của Sendmail theo kiểu "dã chiến":# mv /etc/rc.d/init.d/sendmail /etc/rc.d/init.d/sendmail.old
# rm -f /etc/rc.d/rc0.d/K30sendmail
# rm -f /etc/rc.d/rc1.d/K30sendmail
# rm -f /etc/rc.d/rc2.d/S80sendmail
# rm -f /etc/rc.d/rc3.d/S80sendmail
# rm -f /etc/rc.d/rc4.d/S80sendmail
# rm -f /etc/rc.d/rc5.d/S80sendmail
# rm -f /etc/rc.d/rc6.d/K30sendmail

- Ðể tháo bỏ luôn cả binaries của Sendmail trên RedHat hoặc distro nào dùng RPM bằng cách:
# rpm -e -nodeps sendmail

- Hoặc đi vào từng thư mục /usr/sbin hoặc /usr/local/sbin (hoặc /usr/lib /usr/local/lib) để manually rename từng binary thuộc về Sendmail (nếu Sendmail được cài vào máy theo phương thức "compile and build" tổng quát.

3.3.2 Link Sendmail
Ðã muốn xoá luôn Sendmail vậy sao còn link Sendmail là sao? Có rất nhiều chương trình trên Linux và Unix "gọi" Sendmail để chuyển gởi thông điệp theo "default". Nếu Sendmail binary bị hoàn toàn tháo gỡ thì không chóng thì chầy bạn sẽ lâm vào nhiều trục trặc bí ẩn smilie. Cách loại trừ những trục trặc "bí ẩn" có thể xảy ra là dùng phương thức Link Sendmail. Link Sendmail ở đây là link một copy có tên là Sendmail từ binary của Qmail thay vì dùng nguyên bản binary của Sendmail.

- Ðổi tên của nguyên bản binary Sendmail:
# mv /usr/sbin/sendmail /usr/sbin/sendmail.old
# mv /usr/lib/sendmail /usr/lib/sendmail.old

- Link bản Sendmail của Qmail vào các thư mục /usr/sbin và /usr/lib:
# ln -s /var/qmail/bin/sendmail /usr/lib
# ln -s /var/qmail/bin/sendmail /usr/sbin

3.4 Thư mục "supervise" và các ứng động trong thư mục này
Ðến đây bạn cần tạo các thư mục và một số hồ sơ "supervise" cho qmailctl làm việc (bạn xem lại qmailctl có rất nhiều phần svc dùng /var/qmail/supervise/qmail-send hoặc /var/qmail/supervise/qmail-smtpd). Các bước kế tiếp rất đơn giản tuy nhiên bạn nên cẩn thận với các chi tiết không thì sẽ gặp những trục trặc sau này.
Ðầu tiên bạn tạo ra 2 thư mục:
# mkdir -p /var/qmail/supervise/qmail-send/log
# mkdir -p /var/qmail/supervise/qmail-smtpd/log

Trong đó thông số -p (parents) dùng để tạo các thư mục từ trên xuống dưới (từ supervise đến qmail-send và log tương tự cho qmail-smtpd và log). Ðiều này có nghĩa trước khi mkdir tạo ra thư mục log bên trong thư mục qmail-send nó kiểm tra xem thư mục qmail-send có sẵn hay không và tạo ra thư mục này nếu cần. Tương tự nó kiểm tra xem thư mục supervise có sẵn hay không.... (Dùng # mkdir -help để xem thêm chi tiết)

3.4.1 Thư mục "qmail-send" trong supervise
Sau khi tạo ra các thư mục /var/qmail/supervise/qmail-send/log như trên bạn phải đi qua các bước như sau:
- Tạo một hồ sơ gọi là run trong /var/qmail/supervise/qmail-send (hồ sơ run nằm trong thư mục qmail-send - chú ý vị trí của các hồ sơ trong các thư mục). Hồ sơ run này có chi tiết như sau:
#!/bin/sh
exec /var/qmail/rc

Bạn còn nhớ hồ sơ "rc" ở phần 3.1 không? Ðây chính là nơi "rc" được gọi và thi hành nhiệm vụ trong trọn bộ cơ chế hoạt động của qmail và daemontools. Sau khi tạo ra hồ sơ run này bạn phải đổi "mod" của nó thành "executable":
# chmod 755 /var/qmail/supervise/qmail-send/run

- Tạo một hồ sơ khác cũng có tên là run nhưng nằm trong thư mục log của thư mục qmail-send). Hồ sơ run này có trách nhiệm gọi multilog thi hành nhiệm vụ logging của những gì qmail-send gởi đi; nó có chi tiết như sau:
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s5000000000 /var/log/qmail

- Ðừng quan tâm lắm đến các thông số của shell script "run" lúc này. Các chi tiết sẽ đưọc đào sâu thêm trong những phần sau. Nếu bạn quan sát kỹ sẽ thấy mọi bước ăn khớp với nhau từ giai đoạn tạo ra thư mục cho log và thư mục này đến đây được dùng như một thông số trong shell script "run" ở trên. Sau khi tạo ra hồ sơ run này bạn phải đổi "mod" của nó thành "executable":
# chmod 755 /var/qmail/supervise/qmail-send/log/run

Nguồn từ HVA.

More...