LAMP集群分布式安全方案主要涉及确保Linux、Apache、MySQL和PHP(LAMP)组合构成的集群环境的安全性和稳定性。
- 本次实验通过网络层安全对防火墙配置:使用防火墙(如iptables或firewalld)来限制对集群的访问,只允许必要的端口(如HTTP/HTTPS端口、SSH端口等)对外开放。
LAMP集群分布式安全方案
- (一)Web 服务器
- 1. 配置步骤+前期准备
- 1.1 修改IP和主机名
- 1.2 关闭防火墙和SELinux
- 1.3 修改ssh服务的端口并进行远程连接
- 2. 安装httpd(Apache HTTP Server)
- 3. 安装PHP及其相关扩展
- 4. 安装phpMyAdmin并配置它以连接到MariaDB服务器
- 4.1 安装phpMyAdmin并测试
- 4.2 配置并连接到MariaDB服务器
- (二)数据库服务器
- 1. 配置步骤+前期准备
- 2. 安装MariaDB。
- 3. 创建一个数据库和相应的用户,并为该用户授予适当的权限。
- 4. 确保防火墙和安全组规则允许来自Web服务器的数据库连接(通常是TCP端口3306)。
- (三)测试机
- 1. 修改IP和主机名、ssh的端口、关闭防火墙和SELinux
- 2. 测试
- (四)在网络层安全对防火墙配置
- 1. 增加httpd端口
- 2. 修改端口
- 3. 防火墙安全设置
- 3.1 web服务器防火墙配置
- 3.2 数据库防火墙配置
- 3.3 sshd防火墙配置
搭建LANP集群
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和主机名
[root@ley-306 ~]# hostnamectl set-hostname ley-web //修改主机名
[root@ley-306 ~]# hostname
ley-web修改成ley-web,重启主机输入reboot生效
修改IP参考此博客固定IP地址配置
1.2 关闭防火墙和SELinux
[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服务的端口并进行远程连接
[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
- 如果重启报错!!!
[root@ley-web ~]# yum -y install openssh
//查看是否安装了openssh服务,安装完后重启reboot,就能成功修改sshd服务的端口
- 远程连接,将默认端口22改成10022
2. 安装httpd(Apache HTTP Server)
[root@ley-web ~]# yum -y install httpd //安装
[root@ley-web ~]# systemctl start httpd //启动httpd服务
[root@ley-web ~]# systemctl enable httpd //开机自启动httpd服务
3. 安装PHP及其相关扩展
[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的文件
[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
<?phpphpinfo();?>
[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并测试
[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 //解压缩
[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/目录下
[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,出现空白界面
[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服务器
[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
$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 路径
[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
# 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。
[root@ley-mari ~]# yum -y install mariadb-server
[root@ley-mari ~]# systemctl start mariadb.service //启动
[root@ley-mari ~]# systemctl enable mariadb.service //开机自启
3. 创建一个数据库和相应的用户,并为该用户授予适当的权限。
[root@ley-mari ~]# mysql_secure_installation
//更改root用户密码,并允许远程登录
[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 ServerCopyright (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
- 测试:输入http://10.0.0.99/phpMyAdmin/index.php
通过 web 浏览器访问 phpMyAdmin,并使用你配置的用户名和密码登录到 MariaDB 数据库。
4. 确保防火墙和安全组规则允许来自Web服务器的数据库连接(通常是TCP端口3306)。
确保防火墙和安全组规则允许对Web服务器的HTTP和HTTPS访问。
(三)测试机
1. 修改IP和主机名、ssh的端口、关闭防火墙和SELinux
操作如上
- 关闭防火墙和SELinux
# 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互相访问
实验要求
- 长方形内的服务在web服务器已经搭好了,在httpd增加至三个端口中,只允许10080端口访问web服务器,而web服务器也只能通过30306端口访问数据库
- 配置防火墙,阻止三台主机ssh互相访问
1. 增加httpd端口
[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. 修改端口
- 在数据库中
[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中
[root@ley-web httpd]# vim /var/www/html/phpMyAdmin/config.inc.php //将port改成30306
3. 防火墙安全设置
现在端口设置完成了,我们要打开防火墙,远程连接可能会断开,我们在本机操作,使用防火墙(如iptables或firewalld)来限制对集群的访问
3.1 web服务器防火墙配置
httpd有三个端口,通过防火墙设置只允许10080对集群进行访问,同时禁止80和8080端口访问。
//启动防火墙并设置开机自启
[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: defaulticmp-block-inversion: nointerfaces: ens160sources: services: cockpit dhcpv6-client sshports: protocols: forward: yesmasquerade: noforward-ports: source-ports: icmp-blocks: rich rules: rule family="ipv4" source address="10.0.0.88" port port="10080" protocol="tcp" acceptrule family="ipv4" source address="10.0.0.88" port port="80" protocol="tcp" rejectrule family="ipv4" source address="10.0.0.88" port port="8080" protocol="tcp" reject//设置成功!
- 测试:
- 在测试机访问通过三个端口访问phpMyAdmin,只有10080端口访问成功
3.2 数据库防火墙配置
//开启防火墙并设置开机自启
[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: defaulticmp-block-inversion: nointerfaces: ens160sources: services: cockpit dhcpv6-client sshports: protocols: forward: yesmasquerade: noforward-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
[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服务互相登录,如同下图所示,主机之间可以互相登录,这不安全,我们要在三台主机之间设置拒绝登录
[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
[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
[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
- 测试:
拒绝访问
防火墙安全策略配置完成!!!