【Linux】LAMP集群分布式安全方案

LAMP集群分布式安全方案主要涉及确保Linux、Apache、MySQL和PHP(LAMP)组合构成的集群环境的安全性和稳定性。

  • 本次实验通过网络层安全对防火墙配置:使用防火墙(如iptables或firewalld)来限制对集群的访问,只允许必要的端口(如HTTP/HTTPS端口、SSH端口等)对外开放。

LAMP集群分布式安全方案

  • [(一)Web 服务器](#(一)Web 服务器)
    • [1. 配置步骤+前期准备](#1. 配置步骤+前期准备)
      • [1.1 修改IP和主机名](#1.1 修改IP和主机名)
      • [1.2 关闭防火墙和SELinux](#1.2 关闭防火墙和SELinux)
      • [1.3 修改ssh服务的端口并进行远程连接](#1.3 修改ssh服务的端口并进行远程连接)
    • [2. 安装httpd(Apache HTTP Server)](#2. 安装httpd(Apache HTTP Server))
    • [3. 安装PHP及其相关扩展](#3. 安装PHP及其相关扩展)
    • [4. 安装phpMyAdmin并配置它以连接到MariaDB服务器](#4. 安装phpMyAdmin并配置它以连接到MariaDB服务器)
      • [4.1 安装phpMyAdmin并测试](#4.1 安装phpMyAdmin并测试)
      • [4.2 配置并连接到MariaDB服务器](#4.2 配置并连接到MariaDB服务器)
  • (二)数据库服务器
    • [1. 配置步骤+前期准备](#1. 配置步骤+前期准备)
    • [2. 安装MariaDB。](#2. 安装MariaDB。)
    • [3. 创建一个数据库和相应的用户,并为该用户授予适当的权限。](#3. 创建一个数据库和相应的用户,并为该用户授予适当的权限。)
    • [4. 确保防火墙和安全组规则允许来自Web服务器的数据库连接(通常是TCP端口3306)。](#4. 确保防火墙和安全组规则允许来自Web服务器的数据库连接(通常是TCP端口3306)。)
  • (三)测试机
    • [1. 修改IP和主机名、ssh的端口、关闭防火墙和SELinux](#1. 修改IP和主机名、ssh的端口、关闭防火墙和SELinux)
    • [2. 测试](#2. 测试)
  • (四)在网络层安全对防火墙配置
    • [1. 增加httpd端口](#1. 增加httpd端口)
    • [2. 修改端口](#2. 修改端口)
    • [3. 防火墙安全设置](#3. 防火墙安全设置)
      • [3.1 web服务器防火墙配置](#3.1 web服务器防火墙配置)
      • [3.2 数据库防火墙配置](#3.2 数据库防火墙配置)
      • [3.3 sshd防火墙配置](#3.3 sshd防火墙配置)

搭建LANP集群
ssh port10022 ssh port10022 ssh port10022 测试机 web服务器 远程连接MobaXterm 数据库
通过80端口访问web服务器 测试机 httpd php-fpm phpmyadmin 数据库

hostname ip 系统
ley-web 10.0.0.99 rhel-baseos-9.0-x86_64-dvd.iso
ley-mari 10.0.0.110 rhel-baseos-9.0-x86_64-dvd.iso
ley-test 10.0.0.88 rhel-baseos-9.0-x86_64-dvd.iso

(一)Web 服务器

1. 配置步骤+前期准备

httpd (Apache HTTP Server) :这是一个流行的Web服务器软件,用于托管网站和提供HTTP服务。
PHP :PHP是一种用于Web开发的服务器端脚本语言。它允许您在HTML中嵌入代码来生成动态网页内容。
phpMyAdmin:phpMyAdmin是一个基于Web的MySQL管理工具,您可以使用它来管理MySQL或MariaDB数据库。它使用PHP编写,并通过Web服务器(如Apache)进行访问。

  • 安装httpd(Apache HTTP Server)。
    安装PHP及其相关扩展(如php-mysql,用于与数据库通信)。
    安装phpMyAdmin并配置它以连接到MariaDB服务器。
    配置Apache以支持PHP和phpMyAdmin(例如,通过.htaccess文件或httpd.conf)。
    确保防火墙和安全组规则允许对Web服务器的HTTP和HTTPS访问。

1.1 修改IP和主机名

javascript 复制代码
[root@ley-306 ~]# hostnamectl set-hostname ley-web  //修改主机名
[root@ley-306 ~]# hostname
ley-web

修改成ley-web,重启主机输入reboot生效

修改IP参考此博客固定IP地址配置

1.2 关闭防火墙和SELinux

javascript 复制代码
[root@ley-web ~]# systemctl stop firewalld.service 
[root@ley-web ~]# vim /etc/selinux/config 
[root@ley-web ~]# systemctl disable firewalld.service 
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

1、临时关闭:输入命令setenforce 0,重启系统后还会开启。 
2、永久关闭:输入命令vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled


1.3 修改ssh服务的端口并进行远程连接

javascript 复制代码
[root@ley-web ~]# vim /etc/ssh/sshd_config
//编辑/etc/ssh/sshd_config,找到port,去掉"#",将22改成1002
[root@ley-web ~]# systemctl restart sshd  //重启sshd服务
[root@ley-web ~]# netstat -tunlp | grep sshd
tcp        0      0 0.0.0.0:10022           0.0.0.0:*               LISTEN      860/sshd: /usr/sbin 
tcp6       0      0 :::10022                :::*                    LISTEN      860/sshd: /usr/sbin 
  • 如果重启报错!!!
javascript 复制代码
[root@ley-web ~]# yum -y install openssh   
//查看是否安装了openssh服务,安装完后重启reboot,就能成功修改sshd服务的端口
  • 远程连接,将默认端口22改成10022

2. 安装httpd(Apache HTTP Server)

javascript 复制代码
[root@ley-web ~]# yum -y install httpd   //安装
[root@ley-web ~]# systemctl start httpd   //启动httpd服务
[root@ley-web ~]# systemctl enable httpd	//开机自启动httpd服务

3. 安装PHP及其相关扩展

javascript 复制代码
[root@ley-web ~]# yum install php php-mysqlnd php-fpm		//安装
[root@ley-web ~]# systemctl start php-fpm.service		//启动
[root@ley-web ~]# systemctl enable php-fpm.service		//开机自启
Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.
  • 测试php:创建一个PHP测试页面来验证LAMP服务器是否已正确安装和配置。在Apache的文档根目录(通常是/var/www/html/)中创建一个名为info.php的文件
javascript 复制代码
[root@ley-web html]# systemctl restart httpd
[root@ley-web html]# cd
[root@ley-web ~]# systemctl restart httpd
[root@ley-web ~]# cd /var/www/html/
[root@ley-web html]# cat info.php
<?php
 phpinfo();
 ?>
[root@ley-web html]# systemctl restart httpd
  • 回到虚拟机进入火狐输入web服务器IP:10.0.0.99,测试http
  • 输入10.0.0.99/info.php,测试php

    测试成功!!!

4. 安装phpMyAdmin并配置它以连接到MariaDB服务器

4.1 安装phpMyAdmin并测试

javascript 复制代码
[root@ley-web html]# cd   //在/root目录下获取压缩包
[root@ley-web ~]# wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz		
[root@ley-web ~]# tar -xvzf phpMyAdmin-latest-all-languages.tar.gz		//解压缩
javascript 复制代码
[root@ley-web ~]# ls    //看到解压缩后phpMyAdmin-5.2.1-all-languages
[root@ley-web ~]# mv phpMyAdmin-5.2.1-all-languages phpMyAdmin   //对phpMyAdmin-5.2.1-all-languages重命名为phpMyAdmin
[root@ley-web ~]# ls   //查看到phpMyAdmin
[root@ley-web ~]# mv phpMyAdmin /var/www/html/
//将其移到/var/www/html/目录下
javascript 复制代码
[root@ley-web html]# systemctl restart httpd
[root@ley-web html]# systemctl restart php-fpm
  • 输入10.0.0.99/phpMyAdmin/index.php,测试成功!!!

报错!!!

    • 输入10.0.0.99/phpMyAdmin/index.php,出现空白界面
javascript 复制代码
[root@ley-web httpd]# yum -y update   //更新,再尝试重启服务,刷新页面就能成功!
[root@ley-web html]# systemctl restart httpd
[root@ley-web html]# systemctl restart php-fpm

4.2 配置并连接到MariaDB服务器

javascript 复制代码
[root@ley-web ~]# cd /var/www/html
[root@ley-web html]# ls
info.php  phpMyAdmin
[root@ley-web html]# cd phpMyAdmin/
[root@ley-web phpMyAdmin]# ls
//如果不是config.inc.php,而是config.sample.inc.php,就将文件改成config.inc.php
[root@ley-web phpMyAdmin]# vim config.inc.php
javascript 复制代码
$cfg['Servers'][$i]['host'] = '10.0.0.110';		// 如果你的数据库服务器在另一台机器上,这里改为该机器的 IP 或域名
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;
$cfg['Servers'][$i]['user'] = 'ley'; // 这里填入你的 MySQL/MariaDB 用户名
$cfg['Servers'][$i]['password'] = '123456'; // 这里填入你的 MySQL/MariaDB 密码
$cfg['Servers'][$i]['port'] = '3306'; // 默认 MariaDB/MySQL 端口是 3306
$cfg['Servers'][$i]['socket'] = ''; // 如果你的服务器使用 socket 连接,这里指定 socket 路径


javascript 复制代码
[root@ley-web phpMyAdmin]# systemctl restart httpd.service
[root@ley-web phpMyAdmin]# systemctl restart php-fpm.service

(二)数据库服务器

1. 配置步骤+前期准备

安装MariaDB。

配置MariaDB以允许来自Web服务器的连接(修改my.cnf或mariadb.cnf配置文件中的bind-address)。

创建一个数据库和相应的用户,并为该用户授予适当的权限。

确保防火墙和安全组规则允许来自Web服务器的数据库连接(通常是TCP端口3306)。

  • IP和ssh的端口设为10022,操作如web服务器
    并进行远程连接

  • 关闭防火墙和SELinux
javascript 复制代码
# systemctl stop firewalld.service 
# vim /etc/selinux/config 
# systemctl disable firewalld.service 
1、临时关闭:输入命令setenforce 0,重启系统后还会开启。 
2、永久关闭:输入命令vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled

2. 安装MariaDB。

javascript 复制代码
[root@ley-mari ~]# yum -y install mariadb-server
[root@ley-mari ~]# systemctl start mariadb.service    //启动
[root@ley-mari ~]# systemctl enable mariadb.service		//开机自启

3. 创建一个数据库和相应的用户,并为该用户授予适当的权限。

javascript 复制代码
[root@ley-mari ~]# mysql_secure_installation
//更改root用户密码,并允许远程登录


javascript 复制代码
[root@ley-mari ~]# mysql -u root -p
Enter password:				//输入root用户密码
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.5.22-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> SELECT User, Host FROM mysql.user;			//查看MariaDB中的所有用户,可以执行SQL查询
+-------------+-----------+
| User        | Host      |
+-------------+-----------+
| mariadb.sys | localhost |
| mysql       | localhost |
| root        | localhost |
+-------------+-----------+
3 rows in set (0.001 sec)

MariaDB [(none)]> CREATE USER 'ley'@'10.0.0.99' IDENTIFIED BY '123456';			//创建一个新用户并为其设置密码,可以使用CREATE USER语句
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON mysql.* TO 'ley'@'10.0.0.99';		//使用GRANT语句为用户授予权限
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;			//刷新权限后退出
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> \q
Bye

4. 确保防火墙和安全组规则允许来自Web服务器的数据库连接(通常是TCP端口3306)。

确保防火墙和安全组规则允许对Web服务器的HTTP和HTTPS访问。

(三)测试机

1. 修改IP和主机名、ssh的端口、关闭防火墙和SELinux

操作如上

  • 关闭防火墙和SELinux
javascript 复制代码
# systemctl stop firewalld.service 
# vim /etc/selinux/config 
# systemctl disable firewalld.service 
1、临时关闭:输入命令setenforce 0,重启系统后还会开启。 
2、永久关闭:输入命令vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled

2. 测试

http://10.0.0.99/phpMyAdmin/index.php

输入账号和密码

在此LAMP集群搭建完毕!!!

(四)在网络层安全对防火墙配置

上面的LAMP集群搭建操作是在防火墙关闭的情况下,而LAMP集群分布式安全方案主要涉及确保Linux、Apache、MySQL和PHP(LAMP)组合构成的集群环境的安全性和稳定性。

  • 开启三台主机的防火墙,通过网络层安全对防火墙配置,使用防火墙(如iptables或firewalld)来限制对集群的访问,只允许必要的端口(如HTTP/HTTPS端口、SSH端口等)对外开放。
  • 为了使用防火墙(如iptables或firewalld)来限制对集群的访问,我们为httpd增加两个端口8080和10080 ,修改mariadb的端口为30306,而且三台主机在同一个网段可以通过ssh互相访问

实验要求

  1. 长方形内的服务在web服务器已经搭好了,在httpd增加至三个端口中,只允许10080端口访问web服务器,而web服务器也只能通过30306端口访问数据库

只通过10080端口访问web服务器 只通过30306端口访问数据库服务器 测试机 httpd php-fpm phpmyadmin 数据库

  1. 配置防火墙,阻止三台主机ssh互相访问

禁ssh 禁ssh ssh port10022 禁ssh 禁ssh ssh port10022 ssh port10022 测试机 web服务器 远程连接MobaXterm 数据库

1. 增加httpd端口

javascript 复制代码
[root@ley-web httpd]# vim /etc/httpd/conf/httpd.conf
//增加httpd端口
Listen 8080
Listen 10080
[root@ley-web httpd]# systemctl restart httpd		//重启httpd服务
  • 测试:10080端口和8080端口是否可以访问

http://10.0.0.99:80/phpMyAdmin/index.php

http://10.0.0.99:8080/phpMyAdmin/index.php

http://10.0.0.99:10080/phpMyAdmin/index.php

  • 报错:如果在火狐访问phpMyAdmin出现拒绝访问,如下图所示。是火狐启动了安全机制,我们要修改火狐设置。

    在火狐输入about:config,点击Accept the Risk and Continue

    输入network.security.ports.banned.override,选择String

    点击加号键,将需访问网站的端口号添加8080和10080端口,中间用逗号隔开

    刷新http://10.0.0.99:10080/phpMyAdmin/index.php网页,就能成功访问了!

2. 修改端口

  • 在数据库中
javascript 复制代码
[root@ley-mari ~]# cd /etc/my.cnf.d/
[root@ley-mari my.cnf.d]# ls
auth_gssapi.cnf  client.cnf  enable_encryption.preset  mariadb-server.cnf  mysql-clients.cnf  spider.cnf
[root@ley-mari my.cnf.d]# vim mariadb-server.cnf
[root@ley-mari my.cnf.d]# systemctl restart mariadb.service
[root@ley-mari my.cnf.d]# netstat -tunlp | grep mariadb
tcp6       0      0 :::30306                :::*                    LISTEN      2975/mariadbd
//30306设置成功
  • 在phpmyadmin中
javascript 复制代码
[root@ley-web httpd]# vim /var/www/html/phpMyAdmin/config.inc.php  //将port改成30306

3. 防火墙安全设置

现在端口设置完成了,我们要打开防火墙,远程连接可能会断开,我们在本机操作,使用防火墙(如iptables或firewalld)来限制对集群的访问

3.1 web服务器防火墙配置

httpd有三个端口,通过防火墙设置只允许10080对集群进行访问,同时禁止80和8080端口访问。

javascript 复制代码
//启动防火墙并设置开机自启
[root@ley-web ~]# systemctl start firewalld.service 
[root@ley-web ~]# systemctl restart firewalld.service 

[root@ley-web ~]# firewall-cmd --list-all

[root@ley-web ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.88" port protocol="tcp" port="10080" accept'			//允许测试机IP通过10080端口访问httpd
success
[root@ley-web ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.88" port protocol="tcp" port="80" reject'		//拒绝测试机通过80端口访问httpd
success
[root@ley-web ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.88" port protocol="tcp" port="8080" reject'		//拒绝测试机通过8080端口访问httpd
success
[root@ley-web ~]# firewall-cmd --reload		//重新加载firewalld
success
[root@ley-web ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	rule family="ipv4" source address="10.0.0.88" port port="10080" protocol="tcp" accept
	rule family="ipv4" source address="10.0.0.88" port port="80" protocol="tcp" reject
	rule family="ipv4" source address="10.0.0.88" port port="8080" protocol="tcp" reject

//设置成功!
  • 测试
  • 在测试机访问通过三个端口访问phpMyAdmin,只有10080端口访问成功



3.2 数据库防火墙配置

javascript 复制代码
//开启防火墙并设置开机自启
[root@ley-mari ~]# systemctl start firewalld.service 
[root@ley-mari ~]# systemctl restart firewalld.service 
[root@ley-mari ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.99" port protocol="tcp" port="30306" accept'		允许web服务器通过30306端口访问数据库
success
[root@ley-mari ~]# firewall-cmd --reload
success
[root@ley-mari ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	rule family="ipv4" source address="10.0.0.99" port port="30306" protocol="tcp" accept
  • 测试
    通过10080端口,登录phpMyadmin界面,访问数据库

3.3 sshd防火墙配置

此时的所有的远程连接应该已经断开,因为防火墙开启限制了sshd服务的端口10022

javascript 复制代码
[root@ley-web ~]# firewall-cmd --add-port=10022/tcp --permanent			//允许10022端口访问
success
[root@ley-web ~]# firewall-cmd --reload
success
[root@ley-web ~]# firewall-cmd --list-all

设置完成后,远程连接就能成功了,数据库和测试机也同理!

三台主机之间在同一个网段,可以通过ssh服务互相登录,如同下图所示,主机之间可以互相登录,这不安全,我们要在三台主机之间设置拒绝登录

javascript 复制代码
[root@ley-web ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.110" port protocol="tcp" port="10022" reject'
success
[root@ley-web ~]# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.88" port protocol="tcp" port="10022" reject'
success
[root@ley-web ~]# firewall-cmd --reload
success
[root@ley-web ~]# firewall-cmd --list-all
javascript 复制代码
[root@ley-mari ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.99" port protocol="tcp" port="10022" reject'
success
[root@ley-mari ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.88" port protocol="tcp" port="10022" reject'
success
[root@ley-mari ~]# firewall-cmd --reload
success
[root@ley-mari ~]# firewall-cmd --list-all
javascript 复制代码
[root@ley-test ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.99" port protocol="tcp" port="10022" reject'
[root@ley-test ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.110" port protocol="tcp" port="10022" reject'
[root@ley-test ~]# firewall-cmd --reload
success
[root@ley-test ~]# firewall-cmd --list-all
  • 测试
    拒绝访问

防火墙安全策略配置完成!!!

相关推荐
数据智能老司机5 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机6 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
宁zz6 小时前
乌班图安装jenkins
运维·jenkins
无名之逆6 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
大丈夫立于天地间6 小时前
ISIS协议中的数据库同步
运维·网络·信息与通信
cg50176 小时前
Spring Boot 的配置文件
java·linux·spring boot
数据智能老司机6 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
IT成长日记6 小时前
【Kafka基础】Kafka工作原理解析
分布式·kafka
暮云星影7 小时前
三、FFmpeg学习笔记
linux·ffmpeg
rainFFrain7 小时前
单例模式与线程安全
linux·运维·服务器·vscode·单例模式