CentOS 7防火墙配置

服务操作

启动服务

1
systemctl start firewalld
  • start:启动防火墙
  • stop:关闭防火墙
  • enable:开启开机自启动防火墙服务
  • disable:关闭开机自启动防火墙服务
  • reload:重启防火墙

查看服务状态

1
systemctl status firewalld

命令操作

查看服务状态

1
firewall-cmd --state

常见参数及说明:

参数 说明
--reload 重启防火墙服务
--list-ports 查看开放端口
--list-services 查看开放服务

查询端口开放状态

1
firewall-cmd --query-port=80/tcp

添加开放端口

1
firewall-cmd --zone=public --add-port=80/tcp --permanent
  • --zone=public:作用域
  • --add-port=80/tcp:开放80端口,格式:端口号/通讯协议
  • --permanent:永久生效,不添加此参数则重启后失效

注:添加端口后,必须使用firewall-cmd --reload重新加载后才生效。

移除开放端口

1
firewall-cmd --zone=public --remove-port=80/tcp --permanent

禁止指定IP访问

1
firewall-cmd --zone=public --add-rich-rule="rule family='ipv4' source address='10.0.0.1/24' port port=80 protocol='tcp' drop" --permanent
  • port port=80:不设置port则禁止源IP访问所有端口。

解除禁止指定IP访问

1
firewall-cmd --zone=public --remove-rich-rule="rule family='ipv4' source address='10.0.0.1/24' port port=80 protocol='tcp' drop" --permanent
  • drop:直接丢弃请求,不返回任何数据,直到客户端连接尝试超时。WEB服务推荐,既节省资源,又可以延缓被攻击进度。
  • reject:直接断开,并返回ICMP错误信息包。推荐内网使用,方便诊断、调试网络设备或防火墙造成的问题。

查看链表规则

1
iptables -t filter -vL INPUT

Docker部署svn

启动svn server

创建Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mkdir -p /usr/local/src/svn && cd /usr/local/src/svn
cat > "Dockerfile" << EOF
FROM maisi/alpine:latest

CMD ["/usr/bin/svnserve", "--daemon", "--foreground", "--root", "/var/opt/svn"]
EXPOSE 3690
HEALTHCHECK CMD netstat -ln | grep 3690 || exit 1
VOLUME ["/var/opt/svn"]
WORKDIR /var/opt/svn

RUN echo http://mirrors.aliyun.com/alpine/v3.14/main/ > /etc/apk/repositories && apk update && apk upgrade
RUN apk add --no-cache \
subversion wget
EOF

构建svn server镜像

1
docker build -t svn .

生成svn server容器

1
2
3
4
5
docker run --name svn \
--privileged=true \
-v /data/svn:/var/opt/svn \
-p 3690:3690 \
-d svn:latest

开放防火墙端口

1
2
firewall-cmd --zone=public --add-port=3690/tcp --permanent
firewall-cmd --reload

配置svn server

创建用户组及用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat > /data/svn/authz << EOF
[groups]
maisi = alice,bob

[/]
alice = rw

[maisi:/]
@maisi = rw
EOF

cat > /data/svn/passwd << EOF
[users]
alice = 123456789
EOF
  • [/]:所有仓库
  • [maisi:/]:仅maisi仓库
  • @maisi = rw:maisi组内所有用户拥有读写权限

创建示例仓库maisi

1
docker exec -it svn svnadmin create maisi

每个仓库都有独立的conf/svnserve.conf配置文件,配置文件中指定密码文件(passwd)和授权文件(authz)的路径。

可以将每个仓库的passwd和authz都指向同一个文件,这样只需要建立一套账号和授权即可。

配置仓库

1
2
3
4
5
6
docker exec -it svn /bin/sh -c "cd /var/opt/svn/maisi/conf/ \
&& sed -i '/# anon-access = read/a\anon-access = none' svnserve.conf \
&& sed -i '/# auth-access = write/a\auth-access = write' svnserve.conf \
&& sed -i '/# password-db = passwd/a\password-db = \/var/opt\/svn\/passwd' svnserve.conf \
&& sed -i '/# authz-db = authz/a\authz-db = \/var/opt\/svn\/authz' svnserve.conf \
&& sed -i '/# realm = /a\realm = Maisi Lab' svnserve.conf"

当多个仓库共用同一个passwd和authz时,可以让这些仓库使用相同的realm(默认值是仓库的UUID)。当客户端检测到相同的realm后,则可以共用保存在客户端的用户名和密码进行认证。

重启svn server

1
docker restart svn

Docker部署rabbitmq

拉取镜像并创建容器

1
2
3
4
5
6
7
8
9
10
11
docker run -id --name=rabbitmq \
-p 5671:5671 \
-p 5672:5672 \
-p 4369:4369 \
-p 15671:15671 \
-p 15672:15672 \
-p 25672:25672 \
-p 1883:1883 \
-p 15675:15675 \
-e RABBITMQ_DEFAULT_USER=root \
-e RABBITMQ_DEFAULT_PASS=dcIvMA3EHignTxAV maisi/rabbitmq:4.2.2

开放防火墙端口

1
2
firewall-cmd --zone=public --add-port={5671,15671,5672,15672,25672,4369,1883,15675}/tcp --permanent
firewall-cmd --reload

开启web管理功能

1
2
docker exec -it rabbitmq /bin/bash
rabbitmq-plugins enable rabbitmq_management

登录管理平台:http://192.168.1.54:15672

安装延时插件

下载插件:https://www.rabbitmq.com/community-plugins

安装延时插件

1
2
3
cd /usr/local/src
wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/v4.2.0/rabbitmq_delayed_message_exchange-4.2.0.ez
docker cp ./rabbitmq_delayed_message_exchange-4.2.0.ez rabbitmq:/plugins

开启延时插件

1
2
docker exec -it rabbitmq /bin/sh
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

重启rabbitmq

1
docker restart rabbitmq

开启mqtt插件

1
rabbitmq-plugins enable rabbitmq_web_mqtt

开启rabbitmq_web_mqtt会自动开启rabbitmq_mqtt。

mqtt连接参数示例值:

ws mqtt
Name mqtt mqtt
Host ws://192.168.1.54 mqtt://192.168.1.54
Port 15675 1883
Path /ws
Username root root
Password dcIvMA3EHignTxAV dcIvMA3EHignTxAV

Docker部署redis

创建redis配置文件

1
2
3
4
5
6
7
8
mkdir -p /data/redis
cat >> /data/redis/redis.conf << EOF
bind 0.0.0.0
daemonize no
protected-mode no
requirepass 2wjbLIPLC2e2KQBp
appendonly yes
EOF
  • daemonize:是否以守护线程方式启动,默认no。
  • appendonly:是否持久化数据,默认no。

拉取镜像并创建容器

1
2
3
4
5
6
docker run --name=redis \
--privileged=true \
-p 6379:6379 \
-v /data/redis:/etc/redis \
-v /data/redis/data:/data \
-d --restart=always maisi/redis:8.4.0 redis-server /etc/redis/redis.conf --appendonly yes
  • --privileged=true:容器内的root用户拥有宿主机root权限,否则容器内root用户只是外部普通用户权限;
  • --appendonly yes:开启数据持久化(如果配置文件中已配置,可忽略)

开放防火墙端口

1
2
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload

安装Docker

CentOS 7安装Docker

1
2
3
4
5
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce

systemctl enable --now docker

安装Docker Compose

1
2
3
4
curl -L "https://github.com/docker/compose/releases/download/v2.29.7/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

chmod a+x /usr/local/bin/docker-compose
docker-compose version

配置加速镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"https://registry.cn-shanghai.aliyuncs.com"
],
"insecure-registries": [
"docker.njito.com"
]
}
EOF

systemctl daemon-reload
systemctl restart docker
  • insecure-registries:默认情况下,Docker只允许通过https与镜像仓库通信,insecure-registries允许Docker与此项中的镜像仓库使用http或自签名证书进行通信。

Docker部署php

部署php 5.4

拉取镜像并生成php5.6容器

1
2
3
4
5
6
7
8
9
docker pull maisi/php:5.6-fpm

docker run –name php5.6 \
-e TZ=Asia/Shanghai \
-v /data/wwwroot:/data/wwwroot \
-v /tmp:/tmp \
-p 9000:9000 \
–privileged=true –restart=always \
-d maisi/php:5.6-fpm

安装php mysqli扩展

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker exec -it php5.6 /bin/sh

ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo “Asia/Shanghai” > /etc/timezone

cat > /etc/apt/sources.list << EOF
deb [trusted=yes] http://mirrors.aliyun.com/debian-archive/debian/ stretch main contrib non-free
deb [trusted=yes] http://mirrors.aliyun.com/debian-archive/debian-security/ stretch/updates main contrib non-free
EOF

apt-get update \
&& apt-get -y –no-install-recommends install \
zlib1g-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
&& docker-php-ext-configure gd \
–with-freetype-dir=/usr –with-jpeg-dir=/usr –with-png-dir=/usr \
&& docker-php-ext-install -j$(nproc) bcmath gd pcntl opcache \
mysqli pdo pdo_mysql

注:php 5.6-fpm基于debian stretch(debian 9),目前已经EOL,/etc/apt/sources.list需要使用Debian过期源地址。

部署php 7.4

拉取镜像并生成php7.4容器

1
2
3
4
5
6
7
8
9
10
11
docker pull maisi/php:7.4-fpm

docker run –name php7.4 \
-e TZ=Asia/Shanghai \
-v /data/wwwroot:/data/wwwroot \
-v /tmp:/tmp \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-p 9001:9000 \
–privileged=true –restart=always \
-d maisi/php:7.4-fpm
  • /usr/bin/docker:/usr/bin/docker非必须,但如果php需要调用docker程序,则必须设置docker映射。
  • yum install docker方式安装的docker最高版本为:1.13.1,使用-v /usr/bin/docker:/usr/bin/docker,在容器中执行docker命令会报错:Can't open /etc/sysconfig/docker,必须完全卸载后再安装高版本的docker-ce

安装php mysqli扩展

1
2
3
4
5
6
7
8
9
10
11
12
13
docker exec -it php7.4 /bin/sh
ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo “Asia/Shanghai” > /etc/timezone

sed -i ‘s/deb.debian.org/mirrors.aliyun.com/;s/security.debian.org/mirrors.aliyun.com/g’ /etc/apt/sources.list

apt-get update \
&& apt-get -y –no-install-recommends install \
cron rsyslog supervisor \
zlib1g-dev libpng-dev libzip-dev \
&& docker-php-ext-configure gd \
&& docker-php-ext-install -j$(nproc) bcmath gd pcntl opcache zip \
mysqli pdo pdo_mysql

修改用户ID

1
2
docker exec -it php7.4 /bin/sh
usermod -u 1000 www-data && groupmod -g 1000 www-data

CentOS 7终端上传文件

1
2
3
4
5
6
7
8
yum install -y lrzsz
cd /usr/local/bin/
# 弹出的对话框选择需要上传的文件
rz

mv docker-compose-linux-x86_64 docker-compose
chmod a+x /usr/local/bin/docker-compose
docker compose version

Microsoft Office 零售版(RETAIL)转批量授权版(VOL)

示例:Office 2016

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cd %ProgramFiles%\Microsoft Office\Office16

# 重置试用期激活状态,重置为30天试用期(默认允许重置3次)
cscript ospp.vbs /rearm

# 安装KMS许可证
cscript ospp.vbs /inslic:"..\root\Licenses16\ProPlusVL_KMS_Client-ppd.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\ProPlusVL_KMS_Client-ul.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\ProPlusVL_KMS_Client-ul-oob.xrm-ms"

# 安装KMS密钥
cscript ospp.vbs /inpkey:XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99

# 设置KMS服务器
cscript /nologo ospp.vbs /sethst:kms.wiseidc.com
cscript /nologo ospp.vbs /act

# 卸载密钥
cscript ospp.vbs /dstatus
cscript ospp.vbs /unpkey:BTDRB

Docker部署mysql

部署mysql 5.6

创建配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mkdir -p /data/mysql/{data,etc}

cat > data/mysql/etc/my.cnf << EOF
[mysqld]
lower_case_table_names=1
basedir=/usr/
datadir=/var/lib/mysql/
socket=/tmp/mysql.sock
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
sql_mode=ONLY_FULL_GROUP_BY,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

[mysql]
default-character-set=utf8mb4
EOF

创建mysql容器

1
2
3
4
5
6
7
8
9
10
docker run -d --name mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=maisi_db \
-e MYSQL_USER=maisi \
-e MYSQL_PASSWORD=123456789 \
-p 3306:3306 \
-v /data/mysql/etc/my.cnf:/etc/my.cnf \
-v /data/mysql/data:/var/lib/mysql \
maisi/mysql:5.7
  • 生产环境必须设置复杂的root密码(环境变量MYSQL_ROOT_PASSWORD的值)。

测试登录

1
docker exec -it mysql mysql -u root -p

查看配置信息

1
show variables like '%character%';

部署mysql 8.0

创建配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
mkdir -p /data/mysql/{data,etc}

cat > /data/mysql/etc/my.cnf << EOF
[mysql]
default-character-set=utf8mb4

[mysqld]
lower_case_table_names=1
basedir=/usr/
datadir=/var/lib/mysql/
socket=/tmp/mysql.sock
default_authentication_plugin=mysql_native_password
EOF

创建mysql容器

1
2
3
4
5
6
docker run -d --name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 3306:3306 \
-v /data/mysql/etc/my.cnf:/etc/my.cnf \
-v /data/mysql/data:/var/lib/mysql \
maisi/mysql:8.0

查看mysql版本

1
docker exec -it mysql mysql --version

返回:

1
mysql  Ver 8.0.42 for Linux on x86_64 (MySQL Community Server - GPL)

或者通过sql查询:

1
docker exec -it mysql mysql -uroot -p -e "select version();"

返回:

1
2
3
4
5
+-----------+
| version() |
+-----------+
| 8.0.42 |
+-----------+