mail server with mysql pop3 - fetchmail - webmail
apt-get install postfix-mysql
apt-get install mutt
apt-get install telnet
apt get install mysql-common mysql-client mysql-server libmysqlclient15-dev
apt-get instal openssl
apt-get install libsasl2 libsasl2-modules libsasl2-modules-sql libauthen-sasl-cyrus-perl libauthen-sasl-perl
apt-get install courier-base courier-authlib-mysql courier-ssl courier-pop
sysv-rc-conf --level 235 mysqld on
sysv-rc-conf --level 235 postfix on
apt-get install apache2
apt-get install vim
sysv-rc-conf --level 235 apache2 on
If not already done...
mysqladmin -u root password new_password
# log in as root
mysql -u root -p
# then enter password for the root account when prompted
Enter password:
# then we create the mail database
create database maildb;
# then we create a new user: "mail"
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON maildb.* TO 'mail'@'localhost' IDENTIFIED by 'apassword';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON maildb.* TO 'mail'@'%' IDENTIFIED by 'apassword';
exit;
# log in to mysql as the new mail user
mysql -u mail -p maildb
# enter the newly created password
Enter password:
#then run this commands to create the tables;
CREATE TABLE `aliases` (
`pkid` smallint(3) NOT NULL auto_increment,
`mail` varchar(120) NOT NULL default '',
`destination` varchar(120) NOT NULL default '',
`enabled` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`pkid`),
UNIQUE KEY `mail` (`mail`)
) ;
CREATE TABLE `domains` (
`pkid` smallint(6) NOT NULL auto_increment,
`domain` varchar(120) NOT NULL default '',
`transport` varchar(120) NOT NULL default 'virtual:',
`enabled` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`pkid`)
) ;
CREATE TABLE `users` (
`id` varchar(128) NOT NULL default '',
`name` varchar(128) NOT NULL default '',
`uid` smallint(5) unsigned NOT NULL default '5000',
`gid` smallint(5) unsigned NOT NULL default '5000',
`home` varchar(255) NOT NULL default '/var/spool/mail/virtual',
`maildir` varchar(255) NOT NULL default 'blah/',
`enabled` tinyint(3) unsigned NOT NULL default '1',
`change_password` tinyint(3) unsigned NOT NULL default '1',
`clear` varchar(128) NOT NULL default 'ChangeMe',
`crypt` varchar(128) NOT NULL default 'sdtrusfX0Jj66',
`quota` varchar(255) NOT NULL default '',
`procmailrc` varchar(128) NOT NULL default '',
`spamassassinrc` varchar(128) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ;
#edit the main.cf flile
myhostname = server.sbs.com
smtpd_banner = $myhostname ESMTP $mail_name
relayhost =
inet_interfaces = all
mynetworks_style = subnet
local_recipient_maps =
mydestination =
# how long if undelivered before sending warning update to sender
delay_warning_time = 4h
# will it be a permanent error or temporary
unknown_local_recipient_reject_code = 450
# how long to keep message on queue before return as failed.
# some have 3 days, I have 16 days as I am backup server for some people
# whom go on holiday with their server switched off.
maximal_queue_lifetime = 7d
# max and min time in seconds between retries if connection failed
minimal_backoff_time = 1000s
maximal_backoff_time = 8000s
# how long to wait when servers connect before receiving rest of data
smtp_helo_timeout = 60s
# how many address can be used in one message.
# effective stopper to mass spammers, accidental copy in whole address list
# but may restrict intentional mail shots.
smtpd_recipient_limit = 16
# how many error before back off.
smtpd_soft_error_limit = 3
# how many max errors before blocking it.
smtpd_hard_error_limit = 12
# not sure of the difference of the next two
# but they are needed for local aliasing
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
# this specifies where the virtual mailbox folders will be located
virtual_mailbox_base = /var/spool/mail/virtual
# this is for the mailbox location for each user
virtual_mailbox_maps = mysql:/etc/postfix/mysql_mailbox.cf
# and their user id
virtual_uid_maps = mysql:/etc/postfix/mysql_uid.cf
# and group id
virtual_gid_maps = mysql:/etc/postfix/mysql_gid.cf
# and this is for aliases
virtual_alias_maps = mysql:/etc/postfix/mysql_alias.cf
# and this is for domain lookups
virtual_mailbox_domains = mysql:/etc/postfix/mysql_domains.cf
# this is how to connect to the domains (all virtual, but the option is there)
# not used yet
# transport_maps = mysql:/etc/postfix/mysql_transport.cf
cp /etc/aliases /etc/postfix/aliases
postalias /etc/postfix/aliases
# to add if there is not a virtual user
mkdir /var/spool/mail/virtual
groupadd virtual -g 5000
useradd virtual -u 5000 -g 5000
chown -R virtual:virtual /var/spool/mail/virtual
Edit(create) /etc/postfix/mysql_mailbox.cf
user=mail
password=apassword
dbname=maildb
table=users
select_field=maildir
where_field=id
hosts=127.0.0.1
additional_conditions = and enabled = 1
Edit /etc/postfix/mysql_uid.cf
user=mail
password=apassword
dbname=maildb
table=users
select_field=uid
where_field=id
hosts=127.0.0.1
Edit /etc/postfix/mysql_gid.cf
user=mail
password=apassword
dbname=maildb
table=users
select_field=gid
where_field=id
hosts=127.0.0.1
Edit /etc/postfix/mysql_alias.cf
user=mail
password=apassword
dbname=maildb
table=aliases
select_field=destination
where_field=mail
hosts=127.0.0.1
additional_conditions = and enabled = 1
Edit /etc/postfix/mysql_domains.cf
user=mail
password=apassword
dbname=maildb
table=domains
select_field=domain
where_field=domain
hosts=127.0.0.1
additional_conditions = and enabled = 1
Pop/IMAP: Courier IMAP
Edit /etc/courier/authdaemonrc, and change the module line to this:
authmodulelist="authmysql"
Edit authmysqlrc and make sure these setting lines are set correctly. Empty spaces at the end of lines are a common mistake.
MYSQL_SERVER localhost
MYSQL_USERNAME mail
MYSQL_PASSWORD apassword
MYSQL_PORT 0
MYSQL_OPT 0
MYSQL_DATABASE maildb
MYSQL_USER_TABLE users
# comment out this field,
# as I now longer use the encrypted pw options
#MYSQL_CRYPT_PWFIELD crypt
MYSQL_CLEAR_PWFIELD clear
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD id
MYSQL_HOME_FIELD "/var/spool/mail/virtual"
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD concat(home,'/',maildir)
MYSQL_WHERE_CLAUSE enabled=1
/etc/init.d/postfix restart
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-pop restart
Now add the user in the database and test for individual users
test:~# telnet server.sbs.com 25
Trying 192.168.0.244...
Connected to test.sbs.com.sbs.com.
Escape character is '^]'.
220 server.sbs.com ESMTP Postfix
ehlo server.sbs.com
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from: user2@mega.com
250 2.1.0 Ok
rcpt to: user2@mega.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
this is a test mail for user two frm user2@mega.com
.
250 2.0.0 Ok: queued as BF9C92AEAD
wuit
502 5.5.2 Error: command not recognized
quit
221 2.0.0 Bye
Connection closed by foreign host.
test:~# mutt -f /var/spool/mail/virtual/mega.com/user1
test:~# telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc. See COPYING for distribution information.
a login user1@mega.com user1
a OK LOGIN Ok.
a logout
* BYE Courier-IMAP server shutting down
a OK LOGOUT completed
Connection closed by foreign host.
Installing fetchmail
apt-get install fetchmail
vi /etc/default/fetchmail ( changed to yes )
START_DAEMON=yes
We create /etc/fetchmailrc
set daemon 60 # Pool every 1 minutes
set syslog # log through syslog facility
set postmaster root
set no bouncemail # avoid loss on 4xx errors
# on the other hand, 5xx errors get
# more dangerous...
#########################################################################
# Hosts to pool
#########################################################################
poll 216.185.43.191 protocol POP3 user 'agnello@qualispace.com ' there with password 'agn1234' is 'user1@mega.com' here
chmod 600 /etc/fetchmailrc
chown fetchmail /etc/fetchmailrc
/etc/init.d/fetchmail start
Setting up of webmail
Apt-get install squirrelmail php4-mysql
ln -s /usr/share/squirrelmail /var/www/squirrelmail
<VirtualHost *>
ServerAdmin user1@mega.com
ServerName user1@mega.com
DocumentRoot /var/www/squirrelmail
<Directory /var/www/squirrelmail>
Options Indexes FollowSymLinks MultiViews
AllowOverride AuthConfig
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error-webmail.log
LogLevel warn
CustomLog /var/log/apache2/access-webmail.log combined
ServerSignature On
</VirtualHost>
End
--
Backup server module ( using RSYNC and cygwin )
Back up server module ( using RSYNC and cygwin )
On the linux server end
Apt-get install rsync
/etc/init.d/rsync start
Edit the vi /etc/default/rsync
Change RSYNC_ENABLE=false to true
sysv-rc-conf –levels 1235 rsync on
Now we create a rsync.conf in /etc/
Vi /etc/rsyncd.conf
[agnellobackup]
path = /home/agnello/backup
comment = all agnello's backup
uid = agnello
gid = users
read only = false
auth user = agnello
secrets file = /etc/rsyncd.secrets
chown root:root /etc/rsyncd.conf
chmod 644 /etc/rsyncd.conf
Now we create the rsyncd.secrets in the /etc dir this is used for the windows client for passwordless login to the linux server ( it s in the format usename:password )
vi /etc/rsyncd.secrets
agnello:agnello
chown root:root /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets
Create user
Adduser agnello
Mkdir /home/agnello/backup
All data will be backed up in this directory
On the client side ( windows xp ) ( make sure you are loged in as administrator )
Install cygwing on you windows machine
at the time of installation it will give a option to install certain application install the following
Editors = Install nano for use as a simple text editor
Net = install rsync for remote sync
Create a batch file with following
@cls
@echo off
rem Rsync job control file
C:\Cygwin\bin\rsync -vrtz --password-file=c:\cygwin\secret --delete "/cygdrive/c/Data" agnello@192.168.0.244::agnellobackup
An explanation:
C:\Cygwin\bin\rsync - is the full path to ' rysync.exe'.
-vrtz - verbose (tell us what is being copied), recursive (descend into directories), transfer modification times, z (compress data).
--password-file=c:\cygwin\secret - Path to 'secret' file. (Note: Remember this is for backup to a Linux based Rsync Server; a Windows based Rsync Server cannot authenticate!)
--delete - delete remote files that are deleted locally.
/cygdrive/d/Data - in this example means D:\Data.
agnello@192.168..244::agnellobackup - is the user ID, hostname (can be IP address if over Local Network), and the module connection name (in this example 'modulename').
Now to create the password ( same as /etc/rsyncd.secrets ) on the windows client for passwordless login
Go to C:/cygwin/ run cygwin
Go to cd /
Create a secret ( vi secret ) with content agnello give it 600 permission
Now create a scheduled tals to rund every day ( if you want to run it in minimized mode , create short cut of the batch file --- go to its properties ---- run minimized
END
--
Windows File Sharing (Samba )
Windows File Sharing (Samba ) module
apt-get install samba samba-client
add a work group
Edit the smb.conf file:
vi /etc/samba/smb.conf
search for security and uncomment it to look like this
security = user
In the section [homes] change from writable = no to yes
/etc/init.d/samba restart
Adding Samba Shares
( share 1)
mkdir -p /home/shares/generalfolder
edit etc/samba/smb.conf append to the end of the line
[generalfolder]
comment = All Users
path = /home/shares/generalfolder
valid users = @users
force group = users
writable = yes
adduser agnello users
/etc/init.d/samba restart
#smbpasswd -a agnello
(share 2 )
* This option is for the technicalsupport dept users
mkdir –p /home/share/technicalsupport
addgroup tecnicalsupport
edit etc/samba/smb.conf append to the end of the line
[technicalsupport]
comment = only technicalsupport
path = /home/shares/technicalsupport
valid users = @technicalsupport
force group = technicalsupport
writable = yes
adduser Rodney ( if user is not created )
useradd rodney -G technicalsupport
/etc/init.d/samba restart
sysv-rc-conf --level 235 samba on
for testing purpose
--
Installing jabber chat server
Installing jabber chat server module
#apt-get install jabber
# /etc/init.d/jabber stop
configuration files are located inside the directory /etc/jabber
edit the file /etc/jabber/jabber.cfg to have your hostname
JABBER_HOSTNAME (which is then passed to jabberd in the -h switch)
JABBER_HOSTNAME=chatserver.quali.com
Now we can start the server up
# /etc/init.d/jabber start
The roster lists are all maintained upon the server side, in a directory beneath /var/lib/jabber named after the servers hostname.
To check the logs
tail -f /var/log/jabber/record.log
now install the chat client on a windows PC
http://jabberstudio.org/projects/exodus/releases/download.php?file=exodus_0.9.1.0.exe
--
how to telnet localhost 143
test:~# telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc. See COPYING for distribution information.
a login user2@mega.com user2
a OK LOGIN Ok.
a logout
--
port forwarding to access internal pc from exteral network
if your computer is 10.0.0.5 and and it connects to a router for internet connection with eth1 ( 10.0.0.1 ) and eth0 ( 192.168.0.244 ) , and now you want to access the the PC 10.0.0.5 through remote access from a 192.168.0.X network on port 3389.. type the following command
iptables -t nat -A PREROUTING -p tcp -i eth0 -d 192.168.0.244 --dport 3389 -j DNAT --to 10.0.0.5:3389
iptables -A FORWARD -p tcp -i eth0 -d 10.0.0.5 --dport 3389 -j ACCEPT
/etc/init.d/iptables save
hope this helps all !!!
--
how to block gtalk on gmail
.talk.google.com
--
ftp error: 500 invalid port connection
Connected to XXX.XXX.XXX.XXX
220 Microsoft FTP Service
User (XXX.XX.XXX.XXX:(none)): user-name
331 Password required for user-name
Password:
230 User user-name logged in.
ftp> dir
500 Invalid PORT Command.
150 Opening ASCII mode data connection for /bin/ls.
A PORT command is again issued, but this time it is from the server to the client. The client connects to the server for data transfer. Since the connection is in the same sense as the original ftp connection, passive ftp is inherently more secure than active ftp, but note that this time we know even less about the port numbers. Now we have a connection between almost arbitrary port numbers.
Enter the ip_conntrack_ftp module once more. Again, this module is able to recognize the PORT command and pick-out the port number. Instead of NEW in the state match for the OUTPUT chain, we can use RELATED. The following rules will suffice:
iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
--