{"id":211,"date":"2022-10-30T14:36:48","date_gmt":"2022-10-30T14:36:48","guid":{"rendered":"https:\/\/marshallpdavis.com\/?page_id=211"},"modified":"2022-11-01T03:00:51","modified_gmt":"2022-11-01T03:00:51","slug":"lamp-stack-on-arch","status":"publish","type":"page","link":"https:\/\/marshallpdavis.com\/?page_id=211","title":{"rendered":"LAMP Stack on Arch"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This is how I did it &#8211; there may be better ways, but this one is mine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ln -s \/usr\/bin\/vim \/usr\/bin\/vi<br>vi \/etc\/pacman.conf #Enable Parallel downloads<br>pacman -Sy<br>pacman -Su<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lockdown:<br><code>iptables -N my-ips<br>iptables -A my-ips -s IP\/32 -p tcp -j ACCEPT<br>iptables -A my-ips -j RETURN<br>iptables -A INPUT -p tcp -j my-ips<br>iptables -A INPUT -i lo -j ACCEPT<br>iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT<br>iptables -A INPUT -m conntrack --ctstate INVALID -j DROP<br>iptables -A INPUT -j DROP<br>iptables -A OUTPUT -j my-ips<br>iptables -A OUTPUT -o lo -j ACCEPT<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>pacman -S --needed base-devel apache mariadb mariadb-clients php php-fpm php-gd php-intl imagemagick php-imagick<\/code> <code>git wget<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uncomment lines from \/etc\/php\/php.ini:<br><code>extension=exif<br>extension=gd<br>extension=iconv<br>extension=intl<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uncomment line from \/etc\/php\/conf.d\/imagick.ini:<br><code>extension = imagick<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">https:\/\/wiki.archlinux.org\/title\/Apache_HTTP_Server<br>1, 2.4, 3.1, 3.1.3<br>tested phpinfo, and worked<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">More lockdown!<br><code>pacman -S logwatch fail2ban<\/code><br>config fail2ban, enable, start<br>setup iptables-save timer and service, enable and start timer<br>setup wordpress update bash script, execute parts needed for now<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>mariadb-install-db --user=mysql --basedir=\/usr --datadir=\/var\/lib\/mysql<br>systemctl enable mariadb<br>systemctl start mariadb<br>mysql_secure_installation<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">https:\/\/wiki.archlinux.org\/title\/PHP<br>4.1, 4.2, 4.5<br><code>systemctl restart php-fpm<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>pacman -S certbot certbot-apache<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">https:\/\/wiki.archlinux.org\/title\/Apache_HTTP_Server<br>2.3 except the Include<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Setup backup user:<br><code>mysql -u root -p<br>MariaDB&gt; GRANT SELECT, LOCK TABLES ON <em>.<\/em> TO 'backup_user'@'localhost' IDENTIFIED BY '###';<br><code>MariaDB&gt; <\/code>FLUSH PRIVILEGES;<\/code><br><code>MariaDB&gt; EXIT<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Make swap a last resort:<br><code>sysctl vm.swappiness=1<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For each site:<br>Restore from backups<br>create database and grant privileges for wp_user<br><code>mysql -u root -p<br>MariaDB&gt; CREATE DATABASE wordpress;<br>MariaDB&gt; GRANT ALL PRIVILEGES ON wordpress.* TO \"wp-user\"@\"localhost\" IDENTIFIED BY \"choose_db_password\";<br>MariaDB&gt; FLUSH PRIVILEGES;<br>MariaDB&gt; EXIT<br>cp -R \/backups\/uncomp*\/www\/site \/srv\/http\/<br>chown -R http:http \/srv\/http\/site<br>mysql -u wp_user -p database &lt; backup.sql<br>create new section in \/etc\/httpd\/conf\/extra\/httpd-vhosts.conf<br>systemctl restart httpd<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open ports 80, 443 for usage:<br>iptables -I INPUT 3 -p tcp -m tcp &#8211;dport 80 -m conntrack &#8211;ctstate NEW,ESTABLISHED -j ACCEPT<br>iptables -I INPUT 4 -p tcp -m tcp &#8211;dport 443 -m conntrack &#8211;ctstate NEW,ESTABLISHED -j ACCEPT<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Setup SSL:<br>certbot<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Final touches:<br>setup wordpress update script, timer, and service<br>setup webbackups script, timer, and service<br>setup certbot renewal timer and service<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is how I did it &#8211; there may be better ways, but this one is mine. ln -s \/usr\/bin\/vim \/usr\/bin\/vivi \/etc\/pacman.conf #Enable Parallel downloadspacman -Sypacman -Su Lockdown:iptables -N my-ipsiptables -A my-ips -s IP\/32 -p tcp -j ACCEPTiptables -A my-ips -j RETURNiptables -A INPUT -p tcp -j my-ipsiptables -A INPUT -i lo -j ACCEPTiptables -A &hellip; <a href=\"https:\/\/marshallpdavis.com\/?page_id=211\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">LAMP Stack on Arch<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-211","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/marshallpdavis.com\/index.php?rest_route=\/wp\/v2\/pages\/211","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marshallpdavis.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/marshallpdavis.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/marshallpdavis.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/marshallpdavis.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=211"}],"version-history":[{"count":3,"href":"https:\/\/marshallpdavis.com\/index.php?rest_route=\/wp\/v2\/pages\/211\/revisions"}],"predecessor-version":[{"id":216,"href":"https:\/\/marshallpdavis.com\/index.php?rest_route=\/wp\/v2\/pages\/211\/revisions\/216"}],"wp:attachment":[{"href":"https:\/\/marshallpdavis.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=211"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}