CentOS 7.x automated setup of postfix, dovecot and squirrelmail on single server
From Notes_Wiki
Home > CentOS > CentOS 7.x > DevOps > Automated Configuration > Ansible > Ansible Playbooks > CentOS 7.x automated setup of postfix, dovecot and squirrelmail on single server
Automated setup of postfix, dovecot and squirrelmail on single server can be done using:
--- - name: Script for configuring complete mail server hosts: mail-server remote_user: root vars: myhostname: mail2.example.com mydomain: example.com org_name: "Example Organization" tasks: - name: Enable epel-release yum: name=epel-release state=present - name: Install httpd, mod_ssl, squirrelmail for HTTP; postfix for SMTP; dovecot for IMAP; vim, mailx, bind-utils for administration yum: name={{item}} state=present with_items: - httpd - mod_ssl - postfix - vim - bind-utils - dovecot - squirrelmail - mailx - name: Change listen to 0.0.0.0:80 in httpd.conf lineinfile: dest: /etc/httpd/conf/httpd.conf regexp: Listen .*80 line: Listen 0.0.0.0:80 notify: - restart httpd - name: Start httpd and enable it to run on startup service: name=httpd state=started enabled=yes - name: Set correct hostname for mail server lineinfile: dest: /etc/postfix/main.cf regexp: myhostname=.* line: myhostname={{myhostname}} - name: Set correct domain for mail server lineinfile: dest: /etc/postfix/main.cf regexp: mydomain=.* line: mydomain={{mydomain}} - name: Set origin for mail server to $domain lineinfile: dest: /etc/postfix/main.cf regexp: myorigin=.* line: "myorigin=$mydomain" - name: Set inet_interfaces for mail server to all lineinfile: dest: /etc/postfix/main.cf regexp: "^inet_interfaces *=.*" line: "inet_interfaces=all" - name: Set correct mydestination for mail server lineinfile: dest: /etc/postfix/main.cf regexp: "^mydestination *=.*" line: "mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain" - name: Set home_mailbox for mail server lineinfile: dest: /etc/postfix/main.cf regexp: "^home_mailbox *=.*" line: "home_mailbox = mail/" - name: Restart postfix and enable it on startup service: name=postfix state=restarted enabled=yes - name: Set mail_location for imap server lineinfile: dest: /etc/dovecot/conf.d/10-mail.conf regexp: "^mail_location *=.*" line: "mail_location = maildir:~/mail" - name: Restart dovecot and enable it on startup service: name=dovecot state=restarted enabled=yes - name: Configure squirrelmail using template template: src=config.php.j2 dest=/etc/squirrelmail/config.php owner=root group=apache mode=640 handlers: - name: restart httpd service: name=httpd state=restarted
The ansible script requires =config.php.j2= file with following contents:
<?php /** * SquirrelMail Configuration File * Created using the configure script, conf.pl */ global $version; $config_version = '1.4.0'; $config_use_color = 1; $org_name = "{{org_name}}"; $org_logo = SM_PATH . 'images/sm_logo.png'; $org_logo_width = '308'; $org_logo_height = '111'; $org_title = "SquirrelMail $version"; $signout_page = ''; $frame_top = '_top'; $provider_uri = 'http://squirrelmail.org/'; $provider_name = 'SquirrelMail'; $motd = ""; $squirrelmail_default_language = 'en_US'; $default_charset = 'iso-8859-1'; $lossy_encoding = false; $domain = '{{mydomain}}'; $imapServerAddress = 'localhost'; $imapPort = 993; $useSendmail = true; $smtpServerAddress = 'localhost'; $smtpPort = 25; $sendmail_path = '/usr/sbin/sendmail'; $sendmail_args = '-i -t'; $pop_before_smtp = false; $pop_before_smtp_host = ''; $imap_server_type = 'dovecot'; $invert_time = false; $optional_delimiter = '/'; $encode_header_key = ''; $default_folder_prefix = 'mail/'; $trash_folder = 'Trash'; $sent_folder = 'Sent'; $draft_folder = 'Drafts'; $default_move_to_trash = true; $default_move_to_sent = true; $default_save_as_draft = true; $show_prefix_option = true; $list_special_folders_first = true; $use_special_folder_color = true; $auto_expunge = true; $default_sub_of_inbox = false; $show_contain_subfolders_option = true; $default_unseen_notify = 2; $default_unseen_type = 1; $auto_create_special = true; $delete_folder = false; $noselect_fix_enable = false; $data_dir = '/var/lib/squirrelmail/prefs/'; $attachment_dir = '/var/spool/squirrelmail/attach/'; $dir_hash_level = 0; $default_left_size = '150'; $force_username_lowercase = false; $default_use_priority = true; $hide_sm_attributions = false; $default_use_mdn = true; $edit_identity = true; $edit_name = true; $hide_auth_header = false; $allow_thread_sort = true; $allow_server_sort = true; $allow_charset_search = true; $uid_support = true; $plugins[0] = 'delete_move_next'; $plugins[1] = 'squirrelspell'; $plugins[2] = 'newmail'; $theme_css = ''; $theme_default = 0; $theme[0]['PATH'] = SM_PATH . 'themes/default_theme.php'; $theme[0]['NAME'] = 'Default'; $theme[1]['PATH'] = SM_PATH . 'themes/plain_blue_theme.php'; $theme[1]['NAME'] = 'Plain Blue'; $theme[2]['PATH'] = SM_PATH . 'themes/sandstorm_theme.php'; $theme[2]['NAME'] = 'Sand Storm'; $theme[3]['PATH'] = SM_PATH . 'themes/deepocean_theme.php'; $theme[3]['NAME'] = 'Deep Ocean'; $theme[4]['PATH'] = SM_PATH . 'themes/slashdot_theme.php'; $theme[4]['NAME'] = 'Slashdot'; $theme[5]['PATH'] = SM_PATH . 'themes/purple_theme.php'; $theme[5]['NAME'] = 'Purple'; $theme[6]['PATH'] = SM_PATH . 'themes/forest_theme.php'; $theme[6]['NAME'] = 'Forest'; $theme[7]['PATH'] = SM_PATH . 'themes/ice_theme.php'; $theme[7]['NAME'] = 'Ice'; $theme[8]['PATH'] = SM_PATH . 'themes/seaspray_theme.php'; $theme[8]['NAME'] = 'Sea Spray'; $theme[9]['PATH'] = SM_PATH . 'themes/bluesteel_theme.php'; $theme[9]['NAME'] = 'Blue Steel'; $theme[10]['PATH'] = SM_PATH . 'themes/dark_grey_theme.php'; $theme[10]['NAME'] = 'Dark Grey'; $theme[11]['PATH'] = SM_PATH . 'themes/high_contrast_theme.php'; $theme[11]['NAME'] = 'High Contrast'; $theme[12]['PATH'] = SM_PATH . 'themes/black_bean_burrito_theme.php'; $theme[12]['NAME'] = 'Black Bean Burrito'; $theme[13]['PATH'] = SM_PATH . 'themes/servery_theme.php'; $theme[13]['NAME'] = 'Servery'; $theme[14]['PATH'] = SM_PATH . 'themes/maize_theme.php'; $theme[14]['NAME'] = 'Maize'; $theme[15]['PATH'] = SM_PATH . 'themes/bluesnews_theme.php'; $theme[15]['NAME'] = 'BluesNews'; $theme[16]['PATH'] = SM_PATH . 'themes/deepocean2_theme.php'; $theme[16]['NAME'] = 'Deep Ocean 2'; $theme[17]['PATH'] = SM_PATH . 'themes/blue_grey_theme.php'; $theme[17]['NAME'] = 'Blue Grey'; $theme[18]['PATH'] = SM_PATH . 'themes/dompie_theme.php'; $theme[18]['NAME'] = 'Dompie'; $theme[19]['PATH'] = SM_PATH . 'themes/methodical_theme.php'; $theme[19]['NAME'] = 'Methodical'; $theme[20]['PATH'] = SM_PATH . 'themes/greenhouse_effect.php'; $theme[20]['NAME'] = 'Greenhouse Effect (Changes)'; $theme[21]['PATH'] = SM_PATH . 'themes/in_the_pink.php'; $theme[21]['NAME'] = 'In The Pink (Changes)'; $theme[22]['PATH'] = SM_PATH . 'themes/kind_of_blue.php'; $theme[22]['NAME'] = 'Kind of Blue (Changes)'; $theme[23]['PATH'] = SM_PATH . 'themes/monostochastic.php'; $theme[23]['NAME'] = 'Monostochastic (Changes)'; $theme[24]['PATH'] = SM_PATH . 'themes/shades_of_grey.php'; $theme[24]['NAME'] = 'Shades of Grey (Changes)'; $theme[25]['PATH'] = SM_PATH . 'themes/spice_of_life.php'; $theme[25]['NAME'] = 'Spice of Life (Changes)'; $theme[26]['PATH'] = SM_PATH . 'themes/spice_of_life_lite.php'; $theme[26]['NAME'] = 'Spice of Life - Lite (Changes)'; $theme[27]['PATH'] = SM_PATH . 'themes/spice_of_life_dark.php'; $theme[27]['NAME'] = 'Spice of Life - Dark (Changes)'; $theme[28]['PATH'] = SM_PATH . 'themes/christmas.php'; $theme[28]['NAME'] = 'Holiday - Christmas'; $theme[29]['PATH'] = SM_PATH . 'themes/darkness.php'; $theme[29]['NAME'] = 'Darkness (Changes)'; $theme[30]['PATH'] = SM_PATH . 'themes/random.php'; $theme[30]['NAME'] = 'Random (Changes every login)'; $theme[31]['PATH'] = SM_PATH . 'themes/midnight.php'; $theme[31]['NAME'] = 'Midnight'; $theme[32]['PATH'] = SM_PATH . 'themes/alien_glow.php'; $theme[32]['NAME'] = 'Alien Glow'; $theme[33]['PATH'] = SM_PATH . 'themes/dark_green.php'; $theme[33]['NAME'] = 'Dark Green'; $theme[34]['PATH'] = SM_PATH . 'themes/penguin.php'; $theme[34]['NAME'] = 'Penguin'; $default_use_javascript_addr_book = false; $abook_global_file = ''; $abook_global_file_writeable = false; $abook_global_file_listing = true; $abook_file_line_length = 2048; $addrbook_dsn = ''; $addrbook_table = 'address'; $prefs_dsn = ''; $prefs_table = 'userprefs'; $prefs_user_field = 'user'; $prefs_key_field = 'prefkey'; $prefs_val_field = 'prefval'; $addrbook_global_dsn = ''; $addrbook_global_table = 'global_abook'; $addrbook_global_writeable = false; $addrbook_global_listing = false; $no_list_for_subscribe = false; $smtp_auth_mech = 'none'; $imap_auth_mech = 'login'; $smtp_sitewide_user = ''; $smtp_sitewide_pass = ''; $use_imap_tls = true; $use_smtp_tls = false; $session_name = 'SQMSESSID'; $only_secure_cookies = true; $disable_security_tokens = false; $check_referrer = ''; $config_location_base = ''; @include SM_PATH . 'config/config_local.php';
The script requires host file similar to:
[mail-server] 192.168.122.233
Note that password-change plugin setup is not automated as part of above script.
Home > CentOS > CentOS 7.x > DevOps > Automated Configuration > Ansible > Ansible Playbooks > CentOS 7.x automated setup of postfix, dovecot and squirrelmail on single server