"Secure" Word Press on Amazon Linux
Revision as of 16:39, 22 December 2017 by Michael.mast (talk | contribs)
These instructions follow my attempts for a generally "locked down" instance for running Word Press without losing sleep.
Version I am working with before updates
Linux ip-172-26-9-250 4.9.51-10.52.amzn1.x86_64 #1 SMP Fri Sep 29 01:16:19 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[1][2]
sudo yum -y update sudo yum -y install libselinux libselinux-utils selinux-policy-minimum selinux-policy-mls selinux-policy-targeted policycoreutils fail2ban httpd mysql mysql-server php php-mysql mod_ssl yum-cron sudo ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime sudo sed -i 's/selinux=/selinux=1\ security=selinux\ enforcing=1/' /etc/grub.conf sudo sed -i 's/selinux=/selinux=1\ security=selinux\ enforcing=1/' /boot/grub/menu.lst sudo echo -e "ServerTokens Prod\nServerSignature Off" >> /etc/httpd/conf/httpd.conf sudo rm -f /etc/httpd/conf.d/welcome.conf sudo sed -i 's/expose_php\ =\ On/expose_php\ =\ off/' /etc/php.ini sudo chkconfig fail2ban on sudo chkconfig mysqld on sudo chkconfig httpd on sudo touch /.autorelabel sudo reboot
- After logging back in make sure services are started.
sudo service httpd status sudo service mysqld status sudo service fail2ban status
- Prepare MySQL for Word Press by creating a database.
sudo mysql_secure_installation mysql -uroot -p
- Grab Word Press and install in the appropriate location
wget https://wordpress.org/latest.tar.gz mkdir build cd build tar -xf ../latest.tar.gz sudo mv wordpress /var/www/html/wordpress
- There are many ways to make this work, I prefer vhosts and sub directories. This will get us up and running with a self signed cert for initial configuration. Afterwards the cert should be updated.
sudo mv /etc/httpd/conf.d/ssl.conf ./ echo -e "LoadModule ssl_module modules/mod_ssl.so\nListen 443\nSSLPassPhraseDialog builtin\nSSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)\nSSLSessionCacheTimeout 300\nSSLMutex default\nSSLRandomSeed startup file:/dev/urandom 256\nSSLRandomSeed connect builtin\nSSLCryptoDevice builtin\n\n<VirtualHost *:80>\nRewriteEngine On\nRewriteCond %{HTTPS} off\nRewriteRule (.*) https://%{HTTP_HOST}:443%{REQUEST_URI}\n</VirtualHost>\n\n<VirtualHost _default_:443>\nDocumentRoot /var/www/html/wordpress\nErrorLog logs/ssl_error_log\nTransferLog logs/ssl_access_log\nLogLevel warn\nSSLEngine on\nSSLCertificateFile /etc/pki/tls/certs/localhost.crt\nSSLCertificateKeyFile /etc/pki/tls/private/localhost.key\n</VirtualHost>" > /etc/httpd/conf.d/vhost.conf sudo apachectl graceful
- Allow the web server to write to the uploads directory for automatic updates. This first chown command shouldn't be needed, I will be doing further testing to ensure it can be removed.
sudo chown -R apache:apache /var/www/html/wordpress/* sudo chcon -R -t httpd_sys_rw_content_t /var/www/html/wordpress/wp-content/uploads/* sudo semanage fcontext -a -t httpd_sys_rw_content_t "/path(/.*)?" sudo setsebool httpd_read_user_content on
- Add various contextual permissions (need to research this. Optionally you should be able to enable httpd_unified)
allow httpd_t etc_mail_t:dir { search getattr }; allow httpd_t http_port_t:tcp_socket name_connect; allow httpd_t httpd_sys_content_t:dir write; allow httpd_t initrc_t:unix_stream_socket connectto; allow httpd_t user_home_t:file read;
- Reboot again just for the fun of it.
- Install Wordfence Security plugin. Modify settings to fit your needs.
SELinux Notes
- From before making any changes.
#============= httpd_t ============== #!!!! This avc can be allowed using one of the these booleans: # httpd_can_network_relay, httpd_graceful_shutdown, allow_ypbind, httpd_can_network_connect allow httpd_t http_port_t:tcp_socket name_connect; #!!!! This avc can be allowed using one of the these booleans: # httpd_read_user_content, httpd_enable_homedirs allow httpd_t user_home_t:dir getattr;