Linux 配置防火墙详细步骤 (iptables 命令使用方法)

如果您使用的是 ssh 远程,而又不能直接操作本机,那么建议您慎重,慎重,再慎重!
无论如何,iptables 是一个需要特别谨慎设置的东西,万一服务器不在你身边,而你贸然设置导致无法 SSH,那就等着被老板骂吧!!!

通过 iptables 我们可以为我们的 Linux 服务器配置有动态的防火墙,能够指定并记住为发送或接收信息包所建立的连接的状态,是一套用来设置、维护和检查 Linux 内核的 IP 包过滤规则的命令包。iptables 定义规则的方式比较复杂,本文对 Linux 防火墙 Iptables 规则写法进行详细介绍。

概览

未分类

未分类

未分类

未分类

未分类

未分类

[root@ppl ~]# iptables -h
iptables v1.4.21

Usage: iptables -[ACD] chain rule-specification [options]
       iptables -I chain [rulenum] rule-specification [options]
       iptables -R chain rulenum rule-specification [options]
       iptables -D chain rulenum [options]
       iptables -[LS] [chain [rulenum]] [options]
       iptables -[FZ] [chain] [options]
       iptables -[NX] chain
       iptables -E old-chain-name new-chain-name
       iptables -P chain target [options]
       iptables -h (print this help information)

介绍

1.Iptables 规则写法的基本格式是:
  

iptables [-t table] COMMAND chain CRETIRIA -j ACTION   

2.Iptables 规则相关参数说明:

  • -t table:3 个:filter nat mangle ;定义如何对规则进行管理

  • chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的;

  • CRETIRIA: 指定匹配标准;

  • -j ACTION: 指定如何进行处理;   

3.Iptables 规则其他写法及说明:
 
iptables -L -n -v #查看定义规则的详细信息

 [root@ppl ~]# iptables -L -n
 Chain INPUT (policy ACCEPT)
 target     prot opt source               destination         
 ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
 ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
 INPUT_direct  all  --  0.0.0.0/0            0.0.0.0/0           
 INPUT_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0           
 INPUT_ZONES  all  --  0.0.0.0/0            0.0.0.0/0           
 DROP       all  --  0.0.0.0/0            0.0.0.0/0            ctstate INVALID
 REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

 Chain FORWARD (policy ACCEPT)
 target     prot opt source               destination         
 ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
 ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
 FORWARD_direct  all  --  0.0.0.0/0            0.0.0.0/0           
 FORWARD_IN_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0           
 FORWARD_IN_ZONES  all  --  0.0.0.0/0            0.0.0.0/0           
 FORWARD_OUT_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0           
 FORWARD_OUT_ZONES  all  --  0.0.0.0/0            0.0.0.0/0           
 DROP       all  --  0.0.0.0/0            0.0.0.0/0            ctstate INVALID
 REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

 Chain OUTPUT (policy ACCEPT)
 target     prot opt source               destination         
 OUTPUT_direct  all  --  0.0.0.0/0            0.0.0.0/0 

iptables 是 Linux 服务器上防火墙配置必备的设置工具,是我们在做好服务器安全及部署大型网络时,常会用到的重要工具,很好的掌握 iptables,可以让我们对 Linux 服务器整个网络的结构有一个比较透彻的了解,更能够很好的掌握 Linux 服务器的安全配置技巧。

配置

我们来配置一个 filter 表的防火墙.

1.首先介绍一下指令和相关配置文件

  • 启动指令:service iptables start
  • 重启指令:service iptables restart
  • 关闭指令:service iptables stop

2.然后是相关配置

/etc/sysconfig/iptables     
vim /etc/sysconfig/iptables

然后进去修改即可,修改完了怎么办?这里很多人会想到 /etc/rc.d/init.d/iptables save 指令,但是一旦你这么干了你刚才的修改内容就白做了。。。

具体方法是:
只修改 /etc/sysconfig/iptables, 使其生效的办法是修改好后先 service iptables restart,然后才调用 /etc/rc.d/init.d/iptables save
因为 /etc/rc.d/init.d/iptables save 会在 iptables 服务启动时重新加载,要是在重启之前直接先调用了 /etc/rc.d/init.d/iptables save 那么你 的 /etc/sysconfig/iptables 配置就回滚到上次启动服务的配置了,这点必须注意!!!

3.下面介绍一些指令用法(主要还是 man iptables 看下相关资料才行)

   -A:指定链名   
   -p:指定协议类型   
   -d:指定目标地址
   -s:IP地址
   --dport:指定目标端口(destination port 目的端口)   
   --sport:指定源端口(source port 源端口)   
   -j:指定动作类型 

4.如果我不像修改文件直接打命令可以吗,当然没问题,步骤如下:

例如我给 SSH 加放行的语句:
添加 input 记录: iptables -A INPUT -p tcp --dport 22 -j ACCEPT
添加 output 记录: iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
最后注意需要再执行一下 /etc/init.d/iptables save,这样这两条语句就保存到刚才那个 /etc/sysconfig/iptables 文件中了。

5.接下来说明一下步骤,如果机器不在我身边,我只能 SSH 进去做 iptables 规则,那么我必须注意每一步,千万别搞错了,否则就 SSH 链接不上都有可能!

首先要做的是给咱的 SSH 进行 ACCEPT 配置,以免直接无法连接的情况发生:
如果 SSH 端口是 22(这里不建议用默认端口最好改掉 SSH 端口)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
注意要 /etc/rc.d/init.d/iptables save,以下每一步都最好执行一遍此语句,以下不再累述。

6.cat /etc/sysconfig/iptables 确定是否已经加入配置,可以的话执行 service iptables restart 重启后生效.

示例

拒绝某 IPSSH 链接我的 Linux

iptables -t filter -A INPUT -s 192.168.12.12 -p tcp --dport 22 -j DROP

Linux的铜墙铁壁:防火墙之iptables

未分类

来源

所谓防火墙,实质上是指由软硬件组合成的一个在内外网之间构造的一种保护屏障,它是一种隔离技术。因此从物理上区分,可以分为软件和硬件防火墙,从逻辑上区分,可以分为主机和网络防火墙,而我们现在要讲到的iptables,是属于防火墙中的软件防火墙的范畴,但它只是一个命令行工具或者说是一种客户端代理,并不是真正的防火墙,用户通过这个代理,把安全设定执行到真正的防火墙框架中,这个框架叫做Netfilter

原理

Netfilter是Linux中的一个子项目,它的主要功能是进行数据包过滤、连接跟踪、地址转换等,而iptables则是netfilter提供的对用户数据包进行过滤、修改等操作的一种命令行工具,当数据包通过网卡进入进入内核时,它得先经过iptables的五条链,这些链都有相应的处理数据包的规则,而我们正是通过在这些链上设置规则来控制管理数据包,从而达到防火墙的功能。每当数据包到达一个链时,iptables就会从链中的所有规则逐一开始校验该数据包是否符合规则中限定的条件。若满足,系统就会根据每个规则定义的方法来处理该数据包;若不满足,iptables则继续检查下一条规则,如果该数据包不符合链中的任意规则,iptables则会该链的默认策略去处理该数据包。

四个表

iptables的结构是由tables组成,而tables是由链组成,链又是由具体的规则组成。因此我们在编写iptables的规则时,通过要先指定表,再指定链。tables的作用是区分不同功能的规则,并且存储这些规则。

tables的类型分别有:

未分类

五条链

链,也称为钩子函数,它是一系列规则的一个组合,当数据包经过这些狗子函数时,她必须完全匹配每一个钩子函数中的所有规则,方能进入下一个钩子函数。

钩子函数的类型分别有:

未分类

语法规则

语法:iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]

1)常用的命令选项:

  • -t:指定要操纵的表(四个表);

  • -A:向规则链中添加条目;

  • -D:从规则链中删除条目;

  • -i:向规则链中插入条目;

  • -R:替换规则链中的条目;

  • -L:显示规则链中已有的条目;

  • -F:清楚规则链中已有的条目;

  • -Z:清空规则链中的数据包计算器和字节计数器;

  • -N:创建新的用户自定义规则链;

  • -P:定义规则链中的默认目标;

  • -h:显示帮助信息;

  • -p:指定要匹配的数据包协议类型;

  • -s:指定要匹配的数据包源

2)常用的处理动作:

  • ACCEPT:允许数据包通过

  • DROP:直接丢弃数据包,不给任何回应信息

  • REJECT: 拒绝数据包通过,必要时会给数据发送端一个响应的信息

  • LOG:在/var/log/messages文件中记录日志然后将数据包传递给下一条规则

  • REDIRECT: 端口映射

  • SNAT :源地址转换,修改包来源IP为某IP或IP范围,做内网和公网之间的转换

  • DNAT::目标地址转换。 修改数据包目的地IP为某 Ip 或 IP 范围

3)常用的条件匹配:

1、状态匹配:-m state –state 连接状态

  • NEW:与任何连接无关的

  • ESTABLISHED:响应请求或已建立连接的

  • RELATED:与已有连接有相关性的,如FTP数据连接

2、MAC地址匹配:-m mac –mac-source MAC地址

eg:iptables -A INPUT -m mac --mac-source f0:1b:12:12:22:4f -j DROP

3、IP范围匹配:-m iprange –src-range IP范围

eg:iptables -A FORWARD -p tcp -m iprange --src-range 192.168.0.1-192.168.0.10 -j ACCEPT

4、多端口匹配:-m multiport –sports 源端口列表 和 -m multiport –sports 目的端口列表

eg:iptables -A INPUT -p tcp -m multiport --dport 11,29,116,121 -j ACCEPT

4)常用的一些iptables策略:

1、拒绝转发来自192.168.2.33主机的数据

iptables -A FORWARD -s 192.168.2.33 -j REJECT 

2、允许转发来自192.168.2.1/99网段的数据

iptables -A FORWARD -s 192.168.2.1/99 -j ACCEPT

3、允许本机开放从TCP端口20-1024提供的应用服务。

iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT 

iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT

4、只允许管理员从202.13.0.0/16网段使用SSH远程登录防火墙主机。

iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT 

iptables -A INPUT -p tcp --dport 22 -j DROP

5、 允许转发来自192.168.0.0/24局域网段的DNS解析请求数据包。

iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT 

iptables -A FORWARD -d 192.168.0.0/24 -p udp --sport 53 -j ACCEPT

6、屏蔽ip 110.1.1.1的访问

iptables -I INPUT -s 110.1.1.1 -j DROP

7、屏蔽从123.0.0.1到123.255.255.254iptables -I INPUT -s 123.0.0.0/8 -j DROP

8、屏蔽从从123.45.0.1到123.45.255.254iptables -I INPUT -s 124.45.0.0/16 -j DROP

9、屏蔽从从123.45.6.1到123.45.6.254iptables -I INPUT -s 123.45.6.0/24 -j DROP

10、允许所有本机向外的访问iptables -A OUTPUT -j ACCEPT

11、允许访问22端口iptables -A INPUT -p tcp –dport 22 -j ACCEPT

5)常用的iptables命令:

1、查看当前 IPTABLES 规则

service iptables status

2、 将所有iptables以序号标记显示

iptables -L -n --line-numbers

3、 比如要删除INPUT里序号为22的规则

iptables -D INPUT 22

docker – 启动具有多个网络接口的容器

容器启动后,您可以使用 docker network connect 进行操作,但这意味着该进程已经在运行,可能会错过新的.

这个问题是关于码头和多个网络接口的搜索.虽然不是所需的版本在我离开这里的一些信息:

使用Docker 1.12,可以向docker容器添加多个网络接口,但首先需要创建容器,然后在启动容器之前附加第二个(和后续的)网络NIC:

$docker create --network=network1 --name container_name containerimage:latest
$docker network connect network2 container_name
$docker start container_name

需要先创建网络:

$docker network create --driver=bridge network1 --subnet=172.19.0.0/24
$docker network create --driver=bridge network2 --subnet=172.19.1.0/24

此外,您可以使用docker运行中的–network = host参数启动Dockerhost网络接口的容器:

$docker run --net=host containerimage:latest

代码日志版权声明:

翻译自:http://stackoverflow.com/questions/34110416/start-container-with-multiple-network-interfaces

Win10下使用Docker运行redis

在windows下安装一些服务器的开发组件并不是很方便,通常都会用到虚拟机。

Docker 是个好东西,有现成的镜像直接可以使用。不用费时费力在windows上折腾服务器需要的环境。

只要几步就能搞定,非常方便

  1. 注册账号,安装Docker
  2. 获取Redis
  3. 运行Redis
    OK

安装Docker

1、注册一个Docker账号
2、下载并安装Docker

官网下载Docker: https://www.docker.com/get-started

安装完成后,在托盘里有个小鲸鱼图标。在命令行cmd下输入 docker version,可以看到相关信息

D:>docker version
Client:
 Version:           18.06.1-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        e68fc7a
 Built:             Tue Aug 21 17:21:34 2018
 OS/Arch:           windows/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.1-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       e68fc7a
  Built:            Tue Aug 21 17:29:02 2018
  OS/Arch:          linux/amd64
  Experimental:     false

获取Redis

运行命令行(cmd)工具,直接下载 redis镜像。

d:> docker pull redis

从服务器上拉取redis镜像包,可以使用docker images查看现有的镜像。

D:>docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
redis                      latest              e1a73233e3be        5 weeks ago         83.4MB

运行Redis 并进行端口映射和持久化

一条语句就搞定

docker run -d --name myredis -p6379:6379 -v /d/dockerdata/redis/data:/data redis-server --appendonly yes

参数说明:

  • -d —— 后台运行
  • –name —— 实例运行后的名字 myredis
  • -p6379:6379 —— 端口映射,冒号前面是windows下的端口,后面是虚拟机的端口
  • -v /d/dockerdata/redis/data:/data —— 保存数据的位置。

  • d:dockerdataredisdata 前面是windows下的实际保存数据目录

  • /data 虚拟机内的目录

  • redis-server –appendonly yes —— 在容器执行redis-server启动命令,并打开redis持久化配置。

第一次映射时,会提示需要输入windows的密码,直接输入即可。

查看运行状态和执行命令

执行完成后,可以使用docker ps查看运行状态

D:>docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
443ea1afa978        redis               "docker-entrypoint.s…"   About an hour ago   Up About an hour    0.0.0.0:6379->6379/tcp   myredis

可以看到myredis在运行。

在docker下运行redis客户端,就能使用命令来测试

docker exec -it myredis redis-cli

D:>docker exec -it myredis redis-cli
127.0.0.1:6379> info
# Server
redis_version:4.0.11
redis_git_sha1:00000000
redis_git_dirty:0
... ...

重新恢复启动容器

电脑关闭重启或重启docker后,如果没有设置自动启动容器。通过docker ps -a可以看到所有关闭的容器,启动容器。

docker ps -a #看到关闭的容器
docker start your_container_name
docker attach your_container_name

如启动刚才的myredis

D:>docker start myredis
myredis

D:>docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
443ea1afa978        redis               "docker-entrypoint.s…"   2 hours ago         Up 5 seconds        0.0.0.0:6379->6379/tcp   myredis

OK 搞定

Docker是个非常棒的东东,解决了不同环境下大量的部署工作。同样方法非常方便的安装其他镜像,如debian、mysql等等。如想安装mysql,使用docker的search命令就能找到一堆。STARS越高使用的人越多,相对比较安全。

D:>docker search mysql
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                                                  MySQL is a widely used, open-source relation…   7119                [OK]
mariadb                                                MariaDB is a community-developed fork of MyS…   2284                [OK]
mysql/mysql-server                                     Optimized MySQL Server Docker images. Create…   521                                     [OK]
zabbix/zabbix-server-mysql                             Zabbix Server with MySQL database support       133                                     [OK]
hypriot/rpi-mysql                                      RPi-compatible Docker Image with Mysql          98

利用Docker搭建FRP内网穿透

去年的时候,我曾经写过一篇关于内网穿透的文章。

内网穿透(Frp)-拯救没有公网IP的你:https://post.smzdm.com/p/566063/

一年过去了,不断的有人咨询我关于使用的问题,而且我发现用这个的人也是越来越多,能问运营商要到公网IP的几率越来越小。我用的移动宽带,客服都直接回复,我们不提供公网IP。另外作者对frp也更新了很多,所以今天想再更新一下关于FRP,来张大妈骗点金币吧。

特别是在路由器、NAS没有公网IP是一件很不方便的事情,尤其是在国内的网络环境。为了解决这个问题,则需要内网穿透,而内网穿透的方法有很多种,例如使用花生壳、NGROK等,但是我感觉frp是相对更为稳定。

frp是什么

frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。

说白了,就是利用一台有公网IP的机子,实现访问你家没有公网IP的设备。

在我使用过的穿透软件中,感觉frp在稳定性、功能和维护方面做得比较好,我也稳定使用了快2年了。

准备工具

从上面的内网穿透的原理可以看出,我么至少需要一台有公网IP的主机,目前来看VPS是最好的选择,以及一个域名。

关于VPS用法、域名购买以及有关工具在我过去的文章中已经详细的说明了。如果对VPS有不明白的地方可以看一下教程 由于我今天只想说说FRP,所以就不赘述了。

域名一定要做泛解析,有时容易忽视这里。不论是二级域名还是三级域名,都可以做泛解析。比如我f.anys.ga做域名泛解析,填入.f就可以吧.f.anys.ga进行解析。

未分类

FRP服务端搭建

利用docker

我选择了Docker方式,好处在于十分方便,容易部署,沙盒机制可以不破坏系统环境。最近docker用的多了感觉十分非常顺手,如果你不喜欢docker可以自行研究。

搭建服务端

我的OS是Ubuntu14.04 x64。首先安装Docker,这里不推荐apt-get 或者yum的形式安装,建议直接从官网下载docker。如果你不关心Docker是什么,那么你也不用深究,如果你有兴趣研究一下,可以自行google。

#安装Docker                                                                                                                                                                  
wget -qO- https://get.docker.com/ | sh

#在宿主机建立目录
mkdir /var/frp && mkdir /var/frp/conf &&cd /var/frp/conf

#获取服务器端配置文件
wget https://frp.anys.ga/frps.ini

未分类

#建立镜像
sudo docker run --name frps -d -v /var/frp/conf:/var/frp/conf -p 5000-5100:5000-5100 -p 7000:7000 -p 7500:7500 -p 7001:7001 -p 8089:80 -p 8443:443 ruiny/frps

未分类

这样服务器就搭建好了。按照以上配置完成的话,服务端口7000,状态查询(web)端口7500,http服务端口8089,https端口为8443,同时开放5000-5100端口用于其他TCP/UDP连接。

之所以用8089/8443端口是因为本机上的80/443端口用给Nginx了,如果你们确保端口没冲突的话可以用80/443端口。(有些强迫症患者只用80端口)

之后登陆你VPS地址IP地址:7500可以查询具体状态,用户名/密码为admin/Qwert123。

未分类

配置文档修改

好了,如果实在懒得动配置,上面的可以正常使用,但一般总要改一下密码什么的吧。我在制作镜像的时候,把配置文件放在了/var/frp/conf下,在上面过去服务器配置的时候,我直接用了作者的官方配置,很多配置是不合适的,如果需要更改:

nano /var/frp/conf/frps.ini

至少你应该修改以下几项内容:(ctrl+x保存,或者习惯用vi编辑器的)

#设置用户名和密码,注意是状态面板的用户名和密码。
dashboard_user = admin
dashboard_pwd = admin
#令牌,很重要,用于验证与客户端的通信。
token = 12345678
#自定义二级域名,如果设置了,之后在客户端的http、https类型的代理中可以不配置custom_domains,而是配置一个 subdomain 参数。可以不配置,默认没有配置。
subdomain_host = frps.com

我只开放了5000-5100用于TCP/UDP端口,如果需要更多端口请修改以下内容。但同时docker run中也要修改-p 5000-5100:5000-5100的端口范围。我测试,如果一次性开放端口过多,会导致docker卡死,所以不建议开太多哦。

# only allow frpc to bind ports you list, if you set nothing, there won't be any limit
allow_ports = 5000-5100

FRP客户端配置

不论是梅林、老毛子或者是群晖,在frp客户端中的设置都大同小异,但是我一般喜欢用配置文档的方式,简单说说配置文档。完整的客户端配置模板可以在查看

配置文档

配置文档分为两部分,第一部分是common开头的通用配置,第二部分就是每个穿透服务项目

未分类

下面将几个例子:

1.主路由web界面

[router]  #主路由web界面
type = http  #穿透类别为http
local_ip = 192.168.1.1  #内网地址
local_port = 80  #穿透服务内网端口
remote_port = 8089
custom_domains = router.f.anys.ga   #外网域名
use_encryption = true #开启加密
use_compression = true #开启压缩

在梅林的界面中对应内容如下:

未分类

2.GEN8中window的远程桌面

[Gen8-Winser]
type = tcp  #类别为tcp
local_ip = 192.168.1.5 内网Gen8的ip地址
local_port = 3389  #注意穿透端口是远程桌面的端口3389
remote_port = 5000 #外网端口随便填一个吧
use_encryption = true
use_compression = true

由于是tcp所以这里不需要外网域名了,这个就类似于端口转发。

未分类

3.DSM黑群晖

[dsm]
type = https #黑群晖DSM的web用https,所以类别是https
local_ip = 192.168.1.7 #黑群晖的地址
local_port = 5001 #群晖的https端口是5001
remote_port = 8443 #外网https端口对应是8443
custom_domains = dsm.f.anys.ga
use_encryption = true
use_compression = true

我黑群晖的内网地址是192.168.1.7,https端口是8443,对应访问域名就是dsm.f.anys.ga:8443。对于https的穿透,需要导入相应证书,否则不会有小绿锁哒~

未分类

群晖和梅林都有导入的地方,比如群晖在这里:

未分类

frp的作者还搞了一些高级用法,特殊情况可以尝试用一下:

4.转发 DNS 查询请求

可以通过frp转发自己的DSN请求,在客户端配置文件中设置。将DNS请求转发到google的8.8.8.8

[dns]
type = udp
local_ip = 8.8.8.8
local_port = 53
remote_port = 6000

5.stcp 类型的代理

stcp利用了一个sk验证,使得只有sk一直的两个客户端能够点对点互访,防止公网上的随意访问。

家里的路由器:

[secret_ssh]
type = stcp #类型是stcp
sk = router1 # 只有 sk 一致的用户才能访问到此服务
local_ip = 192.168.1.1
local_port = 22

另外一台PC:

[secret_ssh_visitor]
type = stcp
role = visitor # 访问者
server_name = secret_ssh # 对应穿透服务的名称与上面一直
sk = router1 # 只有 sk 一致的用户才能访问到此服务
bind_addr = 127.0.0.1 
bind_port = 8022 # 绑定本地的端口

在本地访问ssh,地址127.0.0.1,端口8022就会穿透到家里的路由器22端口。

未分类

测试

一个不知道什么时候就会消失的测试服务器,注意人多容易重名,不要当作正式用途。

Web地址:网址   admin/Qwert123
FRP服务地址:f.anys.ga:7000 
token:f.anys.ga 
TCP/UDP端口:8089,443, 5000-5100
三级域名 *.f.anys.ga

其它问题

1.修改frps.ini后需要重新启动容器 docker restart frps

2.服务器端只适用于64位的系统

3.0.17以后的版本和之前的不兼容,注意客户端和服务器版本一致

4.由于frp是封装在docker里面运行的,如果要讨论效率的话我不好说。

说真的FRP真的很好用,之前用Vultr做服务器的时候,带宽足够可以在线看家里NAS的视频,而且非常稳定,不论是客户端还是服务端都很稳,基本不用操心。

『高级篇』docker之微服务业务分析(九)

从本节开始微服务的开发,说到开发有几个问题需要解决,首先要知道我们需要开发什么?什么样的业务场景,分析业务场景,有几个微服务,每个微服务需要完成什么样的功能,微服务之间的关系,之间的依赖关系,他们之间是如何通迅的,这些都了解的之后,我们就可以进入开发阶段了。

业务场景

  • 用户可以注册和登录

现在的登录系统一般都是单点登录,支持跨域,在去使用其他系统的时候就不需要登录了,最好是不要使用session,最好是无状态的,避免使用session。

  • 登录用户可以对课程进行CURD操作

上边这个不是大而全的系统,只是微服务的功能,老铁咱们的目的很明确是搞微服务,不是学web开发的,我们通过上边的几个功能上从0开始了解微服务,一行不拉的完成开发微服务,让大家去开发有个真切的体会的。

基本的微服务的流程

  1. 用户访问api网关
  2. api网关访问2个用户的edgeservice(java) 和 课程的edgeservice(java)
  3. 这2个接口提供的http协议(rest)
  4. 用户的edgeservice 访问的用户服务
  5. 课程的edgeservice 访问的课程服务
  6. 用户服务对外接口是Thrift 跨语言的协议
  7. 课程服务对外接口使用Dubbo,只限java
  8. 用户服务(java) 后端有个数据库
  9. 课程服务(java) 后端也有一个数据库
  10. 信息服务(python)对外接口是Thrift (用户注册的时候,可能发送短信,或者邮件确认可能需要信息服务)
  11. redis 来进行用户的信息存储,提供给用户服务使用
  12. 课程的edgeservice 和 课程服务 通过 zookeeper 来完成服务的发现
  13. 用户查询课程 需要调用课程服务,这也就是微服务之间的调用

未分类

Docker 安装mediawiki

一、install and config

1.1 db

pre

#在运行docker容器时可以加如下参数来保证每次docker服务重启后容器也自动重启:
$docker run --restart=always
#如果已经启动了则可以使用如下命令:
$docker update --restart=always <CONTAINER ID>

mariadb

docker pull mariadb:latest
docker run -p 3307:3306 --restart 策略名称 -v 宿主机数据目录:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysql密码 -d 镜像ID
docker run --name mymariadb  -p 3306:3306 --restart always -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=2240881 -d 54514d54a4a5
docker run --name mymariadb  -p 3307:3306 --restart always -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=2240881 -d  mariadb #同上

echo 'mymariadb  192.168.10.105' >>/etc/hosts
 mysql -uroot -p2240881 -h 192.168.10.105 -P3307  #连接 

mysql

docker pull mysql:5.7
#config and run 
docker run -p 3307:3306 --restart 策略名称 -v 宿主机数据目录:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysql密码 -d 镜像ID
docker run --name mymariadb  -p 3306:3306 --restart always -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=2240881 -d 54514d54a4a5

通过Docker安装和使用MariaDB:https://mariadb.com/kb/en/library/installing-and-using-mariadb-via-docker/

Docker使用MariaDB:https://www.jianshu.com/p/32542630c2bd

1.2 wiki

docker run --name mymediawiki  -p 88:80  --link mymariadb:mysql -d  mediawiki #is good 
docker  cp LocalSettings.php  3c0002c21a6a:/var/www/html/LocalSettings.php
--net=host 

mediawiki   这个不会自启动 


docker run --name mymediawiki --link mymariadb:mysql -d   wikimedia/mediawiki  #起来 这个感觉不对 
#is old
docker pull mediawiki

#还是指定目录比较好  但是现在 官方的好像不支持 -v了 
docker run  --restart=always --name mediawiki -p 8080:80 -v  /data/mediawiki -d 8d721d068c81 #2018  但是没办法直接数据交互 下面的用了有问题呢
#mysql 填写 192.168.0.10:3307

docker run --name mediawiki -p 8080:80  -v /data/mediawiki:/var/www/html/ -d id
#docker run --name mediawiki -p 8080:80  -v /data/mediawiki:/var/www/html/ -d mediawiki
docker cp /data/LocalSettings.php  mediawiki:/var/www/html/LocalSettings.php
默认上传目录 /var/www/html/images/


#解说 
使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest

#交互  
sudo docker exec -it facethink-mediawiki /bin/bash

#开机自启动
#在运行docker容器时可以加如下参数来保证每次docker服务重启后容器也自动重启:
$docker run --restart=always
#如果已经启动了则可以使用如下命令:
$docker update --restart=always <CONTAINER ID> #上次就是这样解决了重启后nginx问题

1.3 mysql

Docker mysql:https://wiki.linuxchina.net/index.php?title=Docker_mysql

1.4 nginx

#这个在内网其实可以不用呢
server {
    listen       80;
    server_name  wiki.linuxsa.org;

    charset utf-8;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        proxy_pass   http://192.168.50.206:8080;
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

docker  cp default.conf  nginx:/etc/nginx/conf.d/default.conf

Docker nginx:https://wiki.linuxchina.net/index.php?title=Docker_nginx

1.5 Memcached

Docker 安装 Memcached:https://wiki.linuxchina.net/index.php?title=Docker_%E5%AE%89%E8%A3%85_Memcached

二、see also

Docker for mediawiki:https://www.mediawiki.org/wiki/Docker

https://hub.docker.com/_/mediawiki/

使用 Docker 部署 MediaWiki:https://www.jianshu.com/p/a644988684d8

docker安装mediawiki教程:https://yq.aliyun.com/ziliao/65666

使用 Docker 部署 MediaWiki:https://cloud.tencent.com/developer/article/1193750

Docker 安装 Memcached:https://wiki.linuxchina.net/index.php?title=Docker_%E5%AE%89%E8%A3%85_Memcached

Docker 实践 3:fig 搭建 mediawiki:http://wiki.jikexueyuan.com/project/docker-practice/fig-creat-mediawiki.html

Docker Hello World容器运行报错的解决办法

费了好大力气从Docker官网下载了Docker Community Editor的安装镜像,Docker.dmg, 总共将近500MB,双击进行安装:

未分类

命令行里使用docker version查看版本:

未分类

然后使用命令行docker run hello-world,遇到错误信息:Error response from daemon: unauthorized: incorrect username or password:

未分类

解决方案

使用命令docker login首先进行登录:

未分类

然后hello world的Docker 容器就能正常工作了:

未分类

使用Docker安装phabricator的配置和使用方法

我这里使用的是ubuntu16.04的系统。

使用docker进行安装

我们使用https://hub.docker.com/r/redpointgames/phabricator/ 中提供的镜像。

在则这个镜像中已经为我们提供了多种插件,不过需要我们自己提供一个mysql数据库的地址。

所以我们可以先使用docker安装一个mysql数据库。可以参考:https://www.jb51.net/article/148880.htm

按照上面的教程,我们安装了mysql,账号为root,密码为123456

通过

docker inspect <container id> |grep IPAddress

我们可以知道mysql这个容器的ip地址。加入我们查到的这个容器的私有ip为172.17.0.2。

下面我们就可以来使用docker安装phabricator了。

docker pull redpointgames/phabricator    # 拉取最新版的phabricator

启动

docker run --name phabricator -p 443:443 -p 332:22 -p 8891:80 -v /root/phabricator/backup:/repos -e PHABRICATOR_HOST=xxxxxx:8891 -e MYSQL_HOST=172.17.0.2 -e MYSQL_USER=root -e MYSQL_PASS=123456 -e PHABRICATOR_REPOSITORY_PATH=/repos -e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -it redpointgames/phabricator /bin/bash /app/init.sh

其中xxxx为你服务器的外网ip,这个就可以通过http://xxxxx:8891来访问你服务器上docker部署的phabricator了。不过记得开启安全组。

安装完成后,我们就可以通过外网ip
加端口号8891来访问了。

未分类

这时我们添加的用户,会默认为系统的管理员,就可以登录到后台进行其他的设置了。但是先不要推出这个页面。因为要进行一些设置才行。

如果你第一次访问不是这个界面, 我们也可以在控制台通过命令 的方式添加用户.

进入容器
cd /srv/phabricator/phabricator
./bin/accountadmin

如果你的管理员用户退出来了,提示下面的信息了

This Phabricator install is not configured with any enabled authentication providers which can be used to log in. If you have accidentally locked yourself out by disabling all providers, you can use phabricator/bin/auth recover <username> to recover access to an administrative account.

你应该运行命令

进入容器
cd /srv/phabricator/phabricator
./bin/auth recover luanpeng(在网页中创建的管理员账号)

会提示通过一个网页进入。

Use this link to recover access to the "luanpeng" account from the web interface:
  http://xxxxxx:8891/login/once/recover/1/xxxxxxxxxx/
After logging in, you can use the "Auth" application to add or restore authentication providers and allow normal logins to succeed.

根据提示进行操作

在主页左侧栏选择Auth,进入下图

允许用户登录注册

到此为止,phabricator就安装完毕了

如果你不想使用docker安装,可以自己独立部署。不过步骤比较繁琐,所以建议还是通过docker部署。

使用安装脚本安装

创建安装脚本。打开网址将网页中的脚本内容复制到新建的sh文件中,https://secure.phabricator.com/source/phabricator/browse/master/scripts/install/install_ubuntu.sh

将网址中的脚本文件下载下来,或者直接在本地创建一个sh文件,将网页上的sh代码复制下来。形成本地的安装脚本install_ubuntu.sh

创建安装目录/home/luanpeng/work/phabricator

将安装脚本拷贝到安装目录,执行脚本

sh install_ubuntu.sh

执行脚安装本按照屏幕提示进行操作。脚本会自动帮你安装git, apache, mysql, php…等一系列工具。

注意:在安装mysql时,会有几次让你输入root密码的提示。这里推荐将密码设置为空,以方便后面的使用。

下载Phabricator以及其依赖包

$ cd somewhere/ # pick some install directory 切换到安装目录
somewhere/ $ git clone git://github.com/facebook/libphutil.git
somewhere/ $ git clone git://github.com/facebook/arcanist.git
somewhere/ $ git clone git://github.com/facebook/phabricator.git

WEB服务器:配置Apache

加入sverver name
(1)修改httpd.conf,这个文件在刚装完Apache时应该是空的。(2.4.x版本在/etc/apache2路径下创建httpd.conf文件即可)
加入如下内容: ServerName localhost
(2)保存退出。

验证Apache安装
(1)重启Apache服务
/etc/init.d/apache2 restart
(2)验证页面
打开浏览器,在地址栏中输入 localhost。看是否会出现“It works”的字样,如果出现代表Apache运行正常。否则,就需要去查看一下httpd.conf是否配置正确了。

更新Phabricator

由于Phabricator一直处于发展状态,所以你应该经常更新它。如何更新:

  • 停止webserver的运行
  • 运行git拉取libphutil/,arcanist/,phabricator
  • 运行phabricator/bin/storage upgrade
  • 重新启动webserver

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

Ubuntu Server下Docker实战 02: Docker进阶配置

在上一篇文章里《Ubuntu Server下Docker实战 01: 安装Docker,见 https://www.linuxidc.com/Linux/2018-10/154873.htm》,我们已经把docker安装起来了,并运行了一个hello-world

这一篇,我们继续讲进阶配置。

1. 配置docker在系统启动时候自动启动

sudo /lib/systemd/systemd-sysv-install enable docker
sudo systemctl enable docker
sudo systemctl restart docker.service

这样我们重启服务器后,docker服务也自动启动了

2. 转移docker数据文件路径

修改配置文件

vi /etc/default/docker

我们假设要把数据移动到 /data/docker下,那么在配置文件中添加如下内容,保存退出

OPTIONS=--graph="/data/docker" -H fd://

停止docker

service docker stop

确认不存在 /data/docker 目录

rm -rf /data/docker

转移文件,将docker数据从/var/lib/docker 移到 /data/docker,并创建连接

sudo mv /var/lib/docker /data/docker
sudo ln -s /data/docker /var/lib

启动docker

service docker start

3. 创建docker子网,docker默认使用 172.17.0.0/24 子网,但我们可能有自己的需要,那么可以通过下面方法创建子网

显示已有子网

docker network ls

创建一个172.18.0.0/24的子网

docker network create --subnet=172.18.0.0/24 dockernetwork

我们看下现在的子网列表

docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
b295fdf8279f        bridge              bridge              local
b338774b3d02        dockernetwork      bridge              local
88b7535d052a        host                host                local
79814a08c6d1        none                null                local