当前位置: 首页 > 工具软件 > FusionPBX > 使用案例 >

docker Debian 安装 fusionpbx步骤与原理

汝跃
2023-12-01

在把docker 部署到云服务器后,需要做如下的几个修改
1,登录web,需要带上172.168.99.105的域名,不然,用户不存在
2,修改 vars中的域名
3,重启服务,检查sip status 中,的域名是公网还是私网的ip.
4, 开放端口 https://blog.csdn.net/smallplane/article/details/46786839
5,修改用户,
6, 登录用户,应该已经正常了。

======================================================

UFW 拦截不了 Docker映射端口
通过iptables -L 可以查看到 nat优先级比较高. 网上很多教程都是说修改iptables 规则优先级.
其实可以启动docker的时候 -p参数增加本地ip 地址
如:

sudo docker run -itd -p 127.0.0.1:3306:3306 -v /home/用户名/mysql/data:/data/mysql/data -v /home/用户名/mysql/log:/data/mysql/log 496080199/alisql

这样ufw就会拦截3306端口,禁止外网连接.

=====================================

端口转发
环境说明
国外目标服务器IP: 103.79.78.76
国内中转服务器IP: 183.60.100.8

iptables 端口转发(CentOS)
注意:一来一去
在中转服务器操作

iptables -t nat -A PREROUTING -p tcp --dport [端口号] -j DNAT --to-destination [目标IP]
iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [端口号] -j SNAT --to-source [中转服务器IP]

$ iptables -t nat -A PREROUTING -p tcp  -m tcp --dport 10000:10010 -j DNAT --to-destination 103.79.78.76
$ iptables -t nat -A POSTROUTING -p tcp  -m tcp -d 103.79.78.76 --dport 10000:10010 -j SNAT --to-source 183.60.100.8

https://www.sundayle.com/iptables-forward/

==========================================

https://blog.csdn.net/smallplane/article/details/46786839 原文

1719	UDP	H.323 Gatekeeper RAS port
1720	TCP	H.323 Call Signaling
3478	UDP	STUN service	Used for NAT traversal
3479	UDP	STUN service	Used for NAT traversal
5002	TCP	MLP protocol server
5003	UDP	Neighborhood service
5060	UDP & TCP	SIP UAS	Used for SIP signaling (Standard SIP Port, for default Internal Profile)
5070	UDP & TCP	SIP UAS	Used for SIP signaling (For default "NAT" Profile)
5080	UDP & TCP	SIP UAS	Used for SIP signaling (For default "External" Profile)
8021	TCP	ESL	Used for mod_event_socket *
16384-32768	UDP	RTP/ RTCP multimedia streaming	Used for audio/video data in SIP and other protocols
5066	TCP	Websocket	Used for WebRTC
7443	TCP	Websocket	Used for WebRTC

===========================================

查看容器的ip和网关 sudo docker inspect debian9

"Gateway": "172.27.0.1",
"IPAddress": "172.27.0.3"

=======================================================

debian环境下postgresql的数据配置文件在 /etc/postgresql/11/main/postgresql.conf, 其中 数据默认位置是:/var/lib/postgresql/11/main

=======================================

https://www.cnblogs.com/Presley-lpc/p/9443744.html
关于Docker目录挂载的总结 https://www.cnblogs.com/zhengah/p/5888807.html
我们可以先把mysqldock容器中所需要的文件拷贝出来到本地的/var/own/mysqldata,通过

docker cp mysqldock:/var/lib/mysql /var/own/mysqldata

=============================

1.用commit命令构建镜像

缺点是反复构建,多次commit提交以后,导致镜像越来越大。

2.用dockerfile文件构建镜像

3.容器与宿主机的通信。

使用firewall的端口转发或者docker的端口映射,但是docker的端口映射比较消耗资源。我把10000个UDP端口号映射到宿主机,导致因为内存消耗过高宿主机shutdown问题。

所以可以结合使用,比如信令端口走docker映射,媒体端口走firewall端口转发。

=====================================================

https://stackoverflow.com/questions/43987001/freeswitch-with-docker
大端口范围问题
由于docker 中存在问题,映射大端口范围就像-p 60535-65535:60535-65535/udp可以吃掉大量内存。启动docker --userland-proxy=false部分解决了这个问题,但启动仍然很慢。作为解决方法,您可以从docker命令行中删除它并手动添加iptables规则:

CIP=$(sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' $CID)

sudo iptables -A DOCKER -t nat -p udp -m udp ! -i docker0 --dport 60535:65535 -j DNAT --to-destination $CIP:60535-65535
sudo iptables -A DOCKER -p udp -m udp -d $CIP/32 ! -i docker0 -o docker0 --dport 60535:65535 -j ACCEPT
sudo iptables -A POSTROUTING -t nat -p udp -m udp -s $CIP/32 -d $CIP/32 --dport 60535:65535 -j MASQUERADE

=================================================

Large port range issue
Because of an issue in docker, mapping a large port range like in -p 60535-65535:60535-65535/udp can eat a lot of memory. Starting docker with --userland-proxy=false solves this partially, but startup will still be slow. As a workaround you can remove this from the docker commandline and manually add the iptables rules instead:

CIP=$(sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' $CID)

sudo iptables -A DOCKER -t nat -p udp -m udp ! -i docker0 --dport 60535:65535 -j DNAT --to-destination $CIP:60535-65535
sudo iptables -A DOCKER -p udp -m udp -d $CIP/32 ! -i docker0 -o docker0 --dport 60535:65535 -j ACCEPT
sudo iptables -A POSTROUTING -t nat -p udp -m udp -s $CIP/32 -d $CIP/32 --dport 60535:65535 -j MASQUERADE
The container exposes the following ports:

5060/tcp 5060/udp 5080/tcp 5080/udp as SIP Signaling ports.
5066/tcp 7443/tcp as WebSocket Signaling ports.
8021/tcp as Event Socket port.
64535-65535/udp as media ports.

https://hub.docker.com/r/bettervoice/freeswitch-container

==================================

docker run -d \
    --name freeswitch \
    -h freeswitch.local \
    -p "11000:10000" \
    -p "11000:10000/udp" \
    -p "16384-16484:16384-16484/udp" \
    -p "8031:8031" \
    -e "FREESWITCH_DISABLE_NAT_DETECTION=false" \
    -e "FREESWITCH_RTP_PORT_RANGE=16384-16484" \
    -e "ERLANG_COOKIE=test-cookie" \
    --cap-add IPC_LOCK \
    --cap-add SYS_NICE \
    --cap-add SYS_RESOURCE \
    --cap-add NET_ADMIN \
    --cap-add NET_RAW \
    --cap-add NET_BROADCAST \
    telephoneorg/freeswitch:latest

https://hub.docker.com/r/telephoneorg/freeswitch

=============================================

CID=$(sudo docker run --name freeswitch -p 5060:5060/tcp -p 5060:5060/udp -p 5080:5080/tcp -p 5080:5080/udp -p 8021:8021/tcp -p 7443:7443/tcp -p 60535-65535:60535-65535/udp -v /home/ubuntu/freeswitch/conf:/usr/local/freeswitch/conf bettervoice/freeswitch-container:1.6.6)

iptables的
Iptables用于Debian安装脚本。
基本规则

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 5060:5069 -j ACCEPT
iptables -A INPUT -p udp --dport 5060:5069 -j ACCEPT
iptables -A INPUT -p tcp --dport 5080 -j ACCEPT
iptables -A INPUT -p udp --dport 5080 -j ACCEPT
iptables -A INPUT -p udp --dport 16384:32768 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

可选规则

OpenVPN的: iptables -A INPUT -p udp --dport 1194 -j ACCEPT
ICMP: iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

友好的扫描仪
阻止不那么友好的扫描仪的规则

iptables -I INPUT -j DROP -p tcp --dport 5060 -m string --string "friendly-scanner" --algo bm
iptables -I INPUT -j DROP -p tcp --dport 5080 -m string --string "friendly-scanner" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "friendly-scanner" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5080 -m string --string "friendly-scanner" --algo bm

可选的

iptables -I INPUT -j DROP -p tcp --dport 5060 -m string --string "VaxSIPUserAgent" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "VaxIPUserAgent" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5080 -m string --string "VaxSIPUserAgent" --algo bm
iptables -I INPUT -j DROP -p tcp --dport 5080 -m string --string "VaxIPUserAgent" --algo bm
``

iptables -I INPUT -j DROP -p tcp --dport 5060 -m string --string “VaxSIPUserAgent/3.1” --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string “VaxSIPUserAgent/3.1” --algo bm
iptables -I INPUT -j DROP -p udp --dport 5080 -m string --string “VaxSIPUserAgent/3.1” --algo bm
iptables -I INPUT -j DROP -p tcp --dport 5080 -m string --string “VaxSIPUserAgent/3.1” --algo bm

显示iptable规则

sudo iptables -L -v

显示行号  `iptables -L -v --line-numbers`
删除一行 
删除第2行 `iptables -D INPUT 2`
冲洗出来的iptables 

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F

打开特定IP地址的端口

iptables -A INPUT -j ACCEPT -p tcp -d port 5432 -s xxxx / 32

阻止IP地址

iptables -I INPUT -s 62.210.245.132 -j DROP

同花顺的iptables 
如何刷新iptables而不失去对ssh的访问权限。

iptables -P INPUT ACCEPT
iptables -F

保存更改
Debian / Ubuntu

apt-get install iptables-persistent
service iptables-persistent save
dpkg-reconfigure iptables-persistent


=======================================================

安装之前要安装的包:

apt-get install -y openssh-server
supervisor
vim
tar
wget
curl
rsync
bzip2
iptables
tcpdump
less
telnet
net-tools
lsof
sysstat
cron
rsyslog


openssh-server supervisor vim tar wget curl rsync bzip2 iptables tcpdump less telnet net-tools lsof


#apt-get install -y wget
#apt-get install -y lsb-release
#apt-get install -y systemd
#apt-get install -y systemd-sysv
#apt-get install -y ca-certificates
#apt-get install -y dialog
#apt-get install -y nano


–allow-unauthenticated


在安装freeswitch的时候,有一个 systemctl 命令。

systemctl enable freeswitch
systemctl unmask freeswitch.service
systemctl daemon-reload
systemctl start freeswitch

启动命令 debian需要+ `/sbin/init`   centos `/usr/bin/init`
例如: `sudo docker run -v /home/bamboo/debian-last:/bamboo --privileged -tid --name debian-pbx debian-last-switch   /sbin/init`
不然就要报错。 说没有这个文件和目录
https://www.cnblogs.com/theWinter/p/10148370.html

https://www.cnblogs.com/HemJohn/p/5961904.html

软件安装与查找  如何列出 Ubuntu 和 Debian 上已安装的软件包

apt list --installed | grep program_name


RedHat和SUSE系列下有比较好用的iptables管理工具,可以像控制服务进程一样来对防火墙进行管理及控制,Debian系发行版默认不开启iptables,
当然也没有与之相关的能直接管理的工具了。
正常情况下,我们写入的iptables规则将会在系统重启时消失。即使我们使用iptables-save命令将iptables规则存储到文件,
在系统重启后也需要执行iptables-restore操作来恢复原有规则。Debian有两种方法可以让系统重启时规则不消失也就是实现持久化iptables规则。

iptables -V
iptables -h ,#可以查看iptables的帮助列表
iptables -L #命令,可以查看当前系统的防火墙列表信息.
/etc/init.d/iptables status #查看iptables的服务状态

关闭开启防火墙服务(不建议永久关闭防火墙):
永久生效:chkconfig iptables on/off(重启生效)

通过 netfilter-persistent save 命令就可以保持防火墙当前的配置规则,系统重启后也不会丢失。

在debian中,有一个 netfilter-persistent服务,是代替 防火墙配置的。

service snmpd restart

通过  netfilter-persistent  save  命令就可以保持防火墙当前的配置规则,系统重启后也不会丢失。
snmp 是用来过滤路由的
sngrep捕获sip数据包  是带图形界面的。

service php7.1-fpm restart

**Fail2ban 用途,安装。**

fail2ban是一款实用软件,可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作。

功能
1、支持大量服务。如sshd,apache,qmail,proftpd,sasl等等
2、支持多种动作。如iptables,tcp-wrapper,shorewall(iptables第三方工具),mail notifications(邮件通知)等等。
3、在logpath选项中支持通配符
4、需要Gamin支持(注:Gamin是用于监视文件和目录是否更改的服务工具)
5、需要安装python,iptables,tcp-wrapper,shorewall,Gamin。如果想要发邮件,那必需安装postfix或sendmail

cat /etc/debian_version

启动 fail2ban的时候,需要有 /var/log/auth.log, 否则 启动不成功, 还需要freeswitch.log, 这个服务安装后,才会有

问题 、/var/log/auth.log 找不到

service ssh start # ssh服务 产生了 /var/log/auth.log

rsyslog 服务产生了 /var/log/syslog

====================== 分界 ======================

Our Ecosystem
We are a global community that has an open and very friendly ecosystem. We encourage community engagement, contribution and feedback. Please join us by getting involved with giving feedback, new feature ideas, helping out with code or Documentation.

Most of the core folks who develop and use FusionPBX can be found hanging out in Freenode IRC in the #fusionpbx channel. Come join us and meet the team.

我们的生态系统
我们是一个拥有开放和非常友好的生态系统的全球社区。我们鼓励社区参与,贡献和反馈。请加入我们,参与提供反馈,新功能创意,帮助提供代码或文档。

开发和使用FusionPBX的大多数核心人员可以在#fusionpbx频道的Freenode IRC中找到。快来加入我们,与团队见面吧。

============================== 分界 =============================

https://www.fusionpbx.com/download  官方安装文档

Debian Install 
Debian 9 are the recommended operating systems. Start with a minimal install. You can download Debian 9 from here or Debian 8 from here. Then run the following commands as 'root'. 

wget -O - https://raw.githubusercontent.com/fusionpbx/fusionpbx-install.sh/master/debian/pre-install.sh | sh;


cd /usr/src/fusionpbx-install.sh/debian && ./install.sh



如果系统符合安装环境的要求,上边的两条命令,就可以安装完整
由于我使用的是Docker,debian镜像, 最初使用的是163的,因为第一次搞,有很多解释不了的错误,
后来从docker官方下载了,debian镜像的最后版本,9.9,安装中少了一些问题,但还是有很多错误,没办法,就分步骤安装,然后逐步排除,如果全自动安装,会影响下一个环节的问题。
核心安装文件:
./install.sh
主要内容:

#!/bin/sh

#move to script directory so all relative paths work
cd “$(dirname “$0”)”

#includes
. ./resources/config.sh
. ./resources/colors.sh
. ./resources/environment.sh

removes the cd img from the /etc/apt/sources.list file (not needed after base install)

sed -i ‘/cdrom:/d’ /etc/apt/sources.list

#Update to latest packages
verbose “Update installed packages”
apt-get update && apt-get upgrade -y

#Add dependencies
apt-get install -y wget
apt-get install -y lsb-release
apt-get install -y systemd
apt-get install -y systemd-sysv
apt-get install -y ca-certificates
apt-get install -y dialog
apt-get install -y nano

#SNMP
apt-get install -y snmpd
echo “rocommunity public” > /etc/snmp/snmpd.conf
service snmpd restart

#IPTables
resources/iptables.sh

#sngrep
resources/sngrep.sh

#FusionPBX
resources/fusionpbx.sh

#PHP
resources/php.sh

#NGINX web server
resources/nginx.sh

#Fail2ban
resources/fail2ban.sh

#FreeSWITCH
resources/switch.sh

#Postgres
resources/postgresql.sh

#set the ip address
server_address=$(hostname -I)

#add the database schema, user and groups
resources/finish.sh


 类似资料: