Moving emails to new host with imapsync

More info about imapsync here

Install imapsync

CentOS 7, Works on cPanel servers too

yum install epel-release && yum install imapsync

Once installed check and make sure it works.

imapsync --version

If it gives you the version number you should be good to go.

Move email account

imapsync --host1 mail.emaildomain.com --user1 username@emaildomain.com --password1  "password1" --host2 mail.exampledomain.com --user2 username@movetodomain.com --password2  "password2"

Example :

imapsync --host1 mail.myemail.com --user1 bob@myemail.com --password1  "password1" --host2 mail.incredigeek.com --user2 bob@incredigeek.com --password2  "password2"

Moving Multiple accounts

Best way to move multiple accounts is to use a script and and a list that contains all the usernames and passwords to the accounts you want to move.

example scripts can be found on the imapsync website here is a script example and here is the example file.txt

Example script.

#!/bin/sh
#
# $Id: sync_loop_unix.sh,v 1.6 2015/11/04 18:23:04 gilles Exp gilles $

# Example for imapsync massive migration on Unix systems.
# See also http://imapsync.lamiral.info/FAQ.d/FAQ.Massive.txt
#
# Data is supposed to be in file.txt in the following format:
# host001_1;user001_1;password001_1;host001_2;user001_2;password001_2;
# ...
# Separator is character semi-colon ";" it can be changed by any character changing IFS=';' 
# in the while loop below.
# # Each line contains 6 columns, columns are parameter values for 
# --host1 --user1 --password1 --host2 --user2 --password2
# and a trailing empty fake column to avaid CR LF part going 
# in the 6th parameter password2. Don't forget the last semicolon.
#
# You can add extra options after the variable "$@" 
# Use character backslash \ at the end of each suplementary line, except for the last one.
# You can also pass extra options via the parameters of this script since
# they will be in "$@"

# The credentials filename "file.txt" used for the loop can be renamed 
# by changing "file.txt" below.


echo Looping on account credentials found in file.txt
echo

{ while IFS=';' read  h1 u1 p1 h2 u2 p2 fake
    do 
        { echo "$h1" | egrep "^#" ; } > /dev/null && continue # this skip commented lines in file.txt
        echo "==== Starting imapsync from host1 $h1 user1 $u1 to host2 $h2 user2 $u2 ===="
        imapsync --host1 "$h1" --user1 "$u1" --password1 "$p1" \
                 --host2 "$h2" --user2 "$u2" --password2 "$p2" \
                 "$@"  
        echo "==== Ended imapsync from host1 $h1 user1 $u1 to host2 $h2 user2 $u2 ===="
        echo
    done 
} < file.txt

Example list of accounts to

mail.maildomain.com;user1@incredigeek.com;password1;mail.incredigeek.com;user2@incredigeek.com;password2;

 

How to use,

You can run these command from a Linux computer

Download script

wget www.incredigeek.com/home/downloads/imapsync/imapsync_loop.sh

Make the script executable

chmod +x imapsync_loop.sh

Create a text file named “imapsync_list.txt”

This file will contain the mail server to transfer from, username, and password, and then the mail server to transfer to, username and password.  Add one line per account.

Example:

mail.servertotransferfrom.com;Username1;Password1;mail.servertomoveto.com;Username2;Password2;
mail.servertotransferfrom.com;testuser;123456;mail.servertomoveto.com;bob;123456;

Execute the script to start moving mail

./imapsync_loop.sh

Troubleshooting

In the username you may need to use the username@domainname.tld, so if the username is bob, and the mail domain is incredigeek.com, use bob@incredigeek.com for the username in the imapsync_list.txt.

Install Slackcat on Raspberry Pi (Raspbian)

Slackcat allows you to send Slack messages from the Linux command line.

Update pi

sudo apt-get update

Install Ruby and other components

sudo apt-get install ruby1.9.1 ruby ruby-dev rubygems

Install Slackcat

sudo gem install slackcat

Use Slackcat.  You will need to generate an API Key from Slacks website.

echo "Hello World" | slackcat -k API-KEY -p --channels=#CHANNEL_NAME

Examples :
Send to Channel

echo "Hello World" | slackcat -k xoxp-94827839414-94819543146-441447827184-h7dt2hg2h8ggs7d24ce638edrw9q8def -p --channels=#General

Send Direct Message

echo "Hello World" | slackcat -k xoxp-94827839414-94819543146-441447827184-h7dt2hg2h8ggs7d24ce638edrw9q8def -p --users=#General

 

Set Bash as users default shell

You can change the default shell for a Linux user with the following command.  Change “/bin/bash” to whatever shell you want and replace USERNAME with the Linux user.

chsh /bin/bash USERNAME

Enter in the users password and then log out and back in and the users shell will be whatever shell you specified.  In this case bash.

You can also do this by manually editing the /etc/passwd file.  Find the user by their username, and then replace the last part of the line with the new shell path.

Some Linux distributions (like Kali Linux) use /bin/sh as the default shell for new users.  Changing it to bash makes the shell a little more usable.

Kali Linux Mirrors

I had issues after installing Kali Linux with apt not working, ended up there were no repositories in the apt sources list, added the following line and did an apt-get update and everything started working.

Add this line to /etc/apt/sources.list

deb http://http.kali.org/kali kali-rolling main non-free contrib

Update

apt-get update

And dist upgrade

apt-get dist-upgrade

You may need to reboot.

reboot

Cannot open mailbox /var/mail/pi: Permission denied

This is on a Raspberry Pi, but should be the same on any Linux distro.

Error :

pi@raspberrypi:~ $ mail
Cannot open mailbox /var/mail/pi: Permission denied
No mail for pi
pi@raspberrypi:~ $ 

Fix :

sudo touch /var/mail/$USER
sudo chown $USER:mail /var/mail/$USER
sudo chmod 660 /var/mail/$USER

You can replace “$USER” if you need to run the commands for a different account.
Example:

sudo touch /var/mail/pi
sudo chown pi:mail /var/mail/pi
sudo chmod 660 /var/mail/pi

How To export private SSH key on Linux

All that needs to be done is the “id_rsa” key needs to be copied to the “new” host.  You can do this with SCP or sftp.

Example with SCP

The following examples are showing how to export a RSA private key, if your using DSA, then replace id_rsa with id_dsa.

Copy private key from remote server to local machine for the local user

scp root@192.168.1.1:~/.ssh/id_rsa ~/.ssh/

Copy private key from localhost to remote host.  This command copies the local users private key to the root user @ 192.168.1.1

scp ~/.ssh/id_rsa root@192.168.1.1:~/.ssh/

 

Mikrotik Backup Script

This is a Linux script for creating and backing up backups on Mikroitk routers.

Features

  • Creates the backups automatically, no need to manually create a backup on the Mikrotik
  • Uses SSH and SCP for encrypted communication between the router and the server
  • Runs on linux
  • Easy to use command line interface
  • Can back up single or multiple routers

Future Features

These are features I am planning on adding to the script in the future

  • Ability to compare backups and remove duplicates
  • Make the script smarter so it can detect a backup on a router and leave it instead of deleting it
  • Add better logging
  • Add the functionality to upload the backups to an online service like DropBox, or OneDrive automatically
  • Add alert mechanism to alert you if a backup failed or router is unreachable

Current Bugs or limitations

  • Deletes all backups off of the router, so if you manually created a backup it will delete it without asking
  • To stop backing up a router, you’ll need to manually delete the IP address out of the IP database i.e(ip.lst file.)
  • It does not currently have the ability to delete backups

 

Requirements

  1. Linux box to run the script from and to store the backups.  You can run it from a laptop or VirtualBox.
  2. You’ll need the following programs for this script to work(fping, sshpass)
  3. The Linux box need to be able to ping the routers, if it can’t the script will fail

Installing

Download program

wget www.incredigeek.com/home/downloads/mtbackup/mtbackup.sh
chmod +x mtbackup.sh

Now open up the script and edit the variables at the top for your username, password, and where you want the backups.

 nano mtbackup.sh

When you have finished editing the variables, hit CTRL+x, and then “y” and then “enter” to save the file.

If you want to setup the script to backup on a regular basis then setup the script to run in cron.

Run “crontab -e” and add the following line

10 1 * * 1 cd /root/mtbackup-1.0/ & sh mtbackup -b

Hit CTRL+x, and then “y” and then “enter” to save the file.

Adding routers to backup

Adding routers is really easy.  All you have to do is run the script with the -a option and then the ip address and the script will check if it can reach the IP and then add it to the IP Database i.e.(ip.lst file that contains all the routers ip addresses)
./mtbackup.sh -a 192.168.88.1

Example:

[root@localhost mtbackup-1.0]# ./mtbackup.sh -a 192.168.88.1
#################################################################

This is a Mikrotik Backup Utility.  Still being updated and worked on!!!

#################################################################

Adding 192.168.88.1 to the ip DB
Added 192.168.88.1 to ipDB
[root@localhost mtbackup-1.0]#

Backing up all routers

You can manually backup all the routers by running the script with just the “-b” option.  It’ll read every IP in the IP database and create a backup for each one and put it in the backup folder with is normally “./backups”, you can change it in the variables portion of the script.

./mtbackup.sh -b

Other examples

List routers in the IP Database

 [root@localhost mtbackup-1.0]# ./mtbackup.sh -L
#################################################################
This is a Mikrotik Backup Utility. Still being updated and worked on!!!
#################################################################
Listing Hosts...
192.168.88.1
10.200.1.1
172.20.1.1
33.11.2.22
[root@localhost mtbackup-1.0]#

Backup Single router

[root@localhost mtbackup-1.0]# ./mtbackup.sh -B 192.168.88.1
#################################################################

This is the Mikrotik Backup Utility. Currently under construction!!!

#################################################################

Starting to do backup on 10.9.0.1

Configuration backup saved
[root@localhost mtbackup-1.0]#

Other commands

[root@localhost mtbackup-1.0]# ./mtbackup.sh -h
#################################################################

This is the Mikrotik Backup Utility.  Still being updated and worked on!!!

#################################################################

Usage
./mtbackup.sh [OPTIONS]
./mtbackup.sh -b 192.168.88.1

-l      List backups
-L      List Hosts
-b      Backup all hosts in the IP database
-B {ip} Backup Single Host, Specife IP
-a {ip} Add ip to IP database
-v      Version

[root@localhost mtbackup-1.0]#

Allow SSH access from a specific host using hosts.allow and hosts.deny on Linux

This is just a quick write on the hosts.allow and deny files.  You can lookup “spawn” and/or “twist” for some advanced usage.

 

So to limit an IP address, or a IP range access to SSH, do the following

Deny all incoming request for SSH

Edit the “hosts.deny” file

vi /etc/hosts.deny

add the following line

sshd : ALL

Now edit “hosts.allow” and allow the client IP, or IP range to access SSH

vi /etc/hosts.allow

add the following line to allow a single IP

sshd : 192.168.1.182

If you want to allow the whole subnet, then replace the above line with this one

sshd : 192.168.1.

hosts.allow overrides hosts.deny.  So you deny everything and then allow exceptions.