Skynet服务器框架(十) CentOS 防火墙设置
引言:
今天修改了 skynet 服务器的 IP 地址(即 config 文件中的 address
和 master
两项参数,IP 与当前及其的保持一致,端口号为 2017),然后使用一个简单的客户端去连接服务器,结果服务器完全没有收到 Socket 连接请求,客户端也出现了连接超时,猜想应该是 CentOS 中防火墙导致的,在真正排查解决此问题之前,我们先来了解一下 CentOS 7.0 的防火墙机制。
firewall 简介:
CentOS 默认就安装了 firewall ,取代了旧版本中的 iptables,而且默认是开机启动的,可以通过以下指令查询当前防火墙的版本:
# firewall-cmd --version
0.4.3.2
可以查询帮助文档了解防火墙的一些指令:
# firewall-cmd --help
Usage: firewall-cmd [OPTIONS...]
General Options
-h, --help Prints a short help text and exists
-V, --version Print the version string of firewalld
-q, --quiet Do not print status messages
...
内容太多就不贴完整版了,我们需要知道的主要有以下几点:
1.查询防火墙的状态:
仅获取状态:
firewall-cmd --state
获取详细信息:
systemctl status firewalld.service
2.启动和关闭:
启动:
systemctl start firewalld.service #启动firewall systemctl enable firewalld.service #允许firewall开机启动
重启:
systemctl restart firewalld.service #重启firewall
由于 firewall 支持修改的动态更新,所以一般修改参数后不用重启即可生效。
关闭:
systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动
3.查询所有开放的端口列表:
firewall-cmd --zone=dmz --list-ports
zone
是作用域,根据添加开放端口时的具体情况在查询时做相应的修改。
4.禁用或开放端口:
开放端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent
zone
表示作用域add-port
添加需要开放端口(格式:端口号/协议类型,如:2017/tcp)permanent
永久生效,没有此参数重启后失效
禁用端口:
firewall-cmd --zone=public --remove-port=80/tcp --permanent
格式与开放接口参数一致。
5.修改生效:
上面提到对 firewall 修改可以不重启生效,但前提就是需要调用一下以下接口来使修改应用:
firewall-cmd --reload
6.其他:
1. firewall-cmd --state ##查看防火墙状态,是否是running
2. firewall-cmd --reload ##重新载入配置,比如添加规则之后,需要执行此命令
3. firewall-cmd --get-zones ##列出支持的zone
4. firewall-cmd --get-services ##列出支持的服务,在列表中的服务是放行的
5. firewall-cmd --query-service ftp ##查看ftp服务是否支持,返回yes或者no
6. firewall-cmd --add-service=ftp ##临时开放ftp服务
7. firewall-cmd --add-service=ftp --permanent ##永久开放ftp服务
8. firewall-cmd --remove-service=ftp --permanent ##永久移除ftp服务
9. iptables -L -n ##查看规则,这个命令是和iptables的相同的
排查和修正:
首先,我们先查询一下当前防火墙的状态:
# firewall-cmd --state
running
再查询一下详细信息:
# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 二 2017-08-08 09:37:18 CST; 16min ago
Docs: man:firewalld(1)
Main PID: 511 (firewalld)
CGroup: /system.slice/firewalld.service
└─511 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
8月 08 09:37:18 linsh systemd[1]: Starting firewalld - dynamic firewall daemon...
8月 08 09:37:18 linsh systemd[1]: Started firewalld - dynamic firewall daemon.
可以看到当前状态是 running
运行状态,而且还有启动时间,发现防火墙是在开机就自动启动的,那么再来查看一下当前防火墙运行外部连接的端口列表:
# firewall-cmd --zone=public --list-ports
发现列表是空的,即表示不允许任何端口被外部连接,由于我们的 Socket 连接需要使用到服务器的 2017 端口,所以需要将其添加到开放端口列表中:
# firewall-cmd --zone=public --add-port=2017/tcp --permanent
success
需要应用修改内容:
firewall-cmd --reload
success
再次查询开放列表:
firewall-cmd --zone=public --list-ports
2017/tcp
可以看到端口已经开启,接下来再使用客户端尝试连接服务器:
[root@linsh skynet]# ./skynet ./examples/config
[:01000001] LAUNCH logger
[:01000002] LAUNCH snlua bootstrap
[:01000003] LAUNCH snlua launcher
[:01000004] LAUNCH snlua cmaster
[:01000004] master listen socket 192.168.169.22:2017
[:01000005] LAUNCH snlua cslave
[:01000005] slave connect to master 192.168.169.22:2017
[:01000004] connect from 192.168.169.22:45876 4
[:01000006] LAUNCH harbor 1 16777221
[:01000004] Harbor 1 (fd=4) report 0.0.0.0:2526
[:01000005] Waiting for 0 harbors
[:01000005] Shakehand ready
[:01000007] LAUNCH snlua datacenterd
[:01000008] LAUNCH snlua service_mgr
[:01000009] LAUNCH snlua main
[:01000009] Server start
[:0100000a] LAUNCH snlua protoloader
[:0100000b] LAUNCH snlua console
[:0100000c] LAUNCH snlua debug_console 8000
[:0100000c] Start debug console at 127.0.0.1:8000
[:0100000d] LAUNCH snlua simpledb
[:0100000e] LAUNCH snlua watchdog
[:0100000f] LAUNCH snlua gate
[:0100000f] Listen on 0.0.0.0:8888
[:01000009] Watchdog listen on 8888
[:01000009] KILL self
[:01000002] KILL self
[:01000004] connect from 192.168.169.1:4130 8
可以看到成功接收到连接 "[:01000004] connect from 192.168.169.1:4130 8"
,这就表示我们的防火墙设置成功了。
参考:
Skynet服务器框架(十) CentOS 防火墙设置的更多相关文章
- Centos防火墙设置与端口开放的方法
Centos升级到7之后,内置的防火墙已经从iptables变成了firewalld.所以,端口的开启还是要从两种情况来说明的,即iptables和firewalld.更多关于CentOs防火墙的最新 ...
- linux设置iptables防火墙的详细步骤(centos防火墙设置方法)
CentOS系统也是基于linux中的它的防火墙其实就是iptables了,下面我来介绍在CentOS防火墙iptables的配置教程,希望此教程对各位朋友会有所帮助. iptables是与Lin ...
- Skynet服务器框架(八) 任务和消息调度机制
引言: 在我看来,消息和任务调度应该是skynet的核心,整个skynet框架的核心其实就是一个消息管理系统.在skynet中可以把每个功能都当做一个服务,整个skynet工程在执行过程中会创建很多个 ...
- 解决宿主机不能访问虚拟机CentOS中的站点 | 更新CentOS防火墙设置开启80端口访问
前阵子在虚拟机上装好了centos6.0,并配好了nginx+php+mysql,但是本机就是无法访问.一直就没去折腾了. 具体情况如下 1.本机能ping通虚拟机 2.虚拟机也能ping通本机 3. ...
- Centos防火墙设置与端口开放
前言 最近在部署项目的时候遇到了一些问题,阿里云主机要配置安全组策略和端口.对于这点看到了一片好的博文,特此总结记录下. iptables 方法一 打开某个端口 // 开启端口 iptables -A ...
- centos 防火墙设置
1.安装iptables防火墙 怎么知道系统是否安装了iptables?执行iptables -V,如果显示如: iptables v1.3.5 说明已经安装了iptables. 如果没有安装ipta ...
- Skynet服务器框架(九) snax框架
什么是 snax 由于 skynet 的 API 还是比较偏底层,为简化服务的编写提供一套简单的 API ,便有了这套 snax 框架,解决的问题: "编写一个 skynet 内部服务,处理 ...
- 关于centos 防火墙设置(nginx无法访问)
参考:http://blog.csdn.net/rosten/article/details/25053523 或者:http://blog.csdn.net/zhang197093/article/ ...
- 虚拟机CentOS防火墙设置
CentOS6关闭防火墙使用以下命令, 开启防火墙 systemctl start firewalld //临时关闭 # service iptables stop //禁止开机启动 # chkcon ...
随机推荐
- django多对多中间表详解
我们都知道对于ManyToMany字段,Django采用的是第三张中间表的方式.通过这第三张表,来关联ManyToMany的双方.下面我们根据一个具体的例子,详细解说中间表的使用. 一.默认中间表 首 ...
- Linux 后台进程管理和就几个“Ctrl+”命令 【转载】
一.后台进程管理命令 fg.bg.jobs.&.ctrl + z.ctrl + c.ctrl + \.ctrl + d1. &加在一个命令的最后,可以把这个命令放到后台执行 ,如gft ...
- js、jq对象互转
1.js对象转jq对象: $() $('#kw') $(document.getElementById("kw")) 2.jq对象转js对象: $(this).get(0) ...
- 监控视频采集与Web直播开发全流程分析
内容概要: 摄像头 => FFmpeg => Nginx服务器 => 浏览器 从摄像头拉取rtsp流 转码成rtmp流向推流服务器写入 利用html5播放 1.开发流程 1.1 通过 ...
- Java 常用对象-StringBuffer类
2017-11-02 20:57:02 StringBuffer:线程安全的可变字符序列.一个类似于 String 的字符串缓冲区,但不能修改.虽然在任意时间点上它都包含某种特定的字符序列,但通过某些 ...
- yii第二步
yii第二步: main.php 'urlManager'=>array('urlFormat'=>'path','rules'=>array('game/guess/<g:\ ...
- 筛选datatable
当从数据库里取出一些数据,然后要对数据进行整合,很容易就会想到: DataTable dt = new DataTable();//假设dt是由"SELECT C1,C2,C3 FROM T ...
- 雷林鹏分享:Ruby 变量
Ruby 变量 变量是持有可被任何程序使用的任何数据的存储位置. Ruby 支持五种类型的变量.您已经在前面的章节中大概了解了这些变量,本章节将为您详细讲解这五种类型的变量. Ruby 全局变量 全局 ...
- 雷林鹏分享:Ruby 方法
Ruby 方法 Ruby 方法与其他编程语言中的函数类似.Ruby 方法用于捆绑一个或多个重复的语句到一个单元中. 方法名应以小写字母开头.如果您以大写字母作为方法名的开头,Ruby 可能会把它当作常 ...
- Lightoj Halloween Costumes
题意:给出要n个时间穿的服装.服装脱下就不能再穿.问最少要准备多少? dp[i][j]表示i到j之间最少花费.如果n=1(n指长度),肯定结果为1,n=2时,也很好算.然后n=3的时候dp[i][j] ...