原创

Skynet服务器框架(十) CentOS 防火墙设置

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://linsh-tech.blog.csdn.net/article/details/76887250

引言:

今天修改了 skynet 服务器的 IP 地址(即 config 文件中的 addressmaster 两项参数,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

808 09:37:18 linsh systemd[1]: Starting firewalld - dynamic firewall daemon...
808 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",这就表示我们的防火墙设置成功了。


参考:

文章最后发布于: 2017-08-08 10:48:53
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览