centos7-firewall

centos7系统上firewalld的坑

事故:线上环境中部署的是docker(事先不知道容器的ip地址转发依赖于防火墙)容器,并使用rancher(docker web管理工具)管理的,当自己由于部署zabbix_agentd把防火墙关闭时,容器里的resin服务都不可以访问了
处理过程:立即启动防火墙,然后在rancher web管理界面重启容器

在CentOS7中,引入Firewalld,防火墙守护firewalld服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持ipv4与ipv6,并支持网桥,采用firewall-cmd(command)或firewall-config(gui)来动态的管理kernel netfilter的临时或永久的接口规则,并实时生效而无需重启服务

zone

Firewall 能将不同的网络连接归类到不同的信任级别,Zone提供了一下几个级别

  • drop:丢弃所有进入的包,而不给出任何响应
  • block:拒绝所有外部发起的连接,允许内部发起的连接
  • public:允许指定的进入连接
  • external:同上,对伪装的进入连接,一般用于路由转发
  • dmz:允许受限制的进入连接
  • work:允许受信任的计算机被限制的进入连接,类似workgroup
  • home:同上,类似homegroup
  • internal:同上,范围针对所有互联网用户
  • trusted:信任所有连接

过滤规则

  • source:根据源地址过滤
  • interface:根据网卡过滤
  • service:根据服务名过滤
  • port:根据端口过滤
  • icmp-block:icmp报文过滤,按照icmp类型配置
  • masquerade:ip地址伪装
  • forward-port:端口转发
  • rule:自定义规则
    其中,过滤规则的优先级遵循如下顺序

1.source
2.interface
3.firewalld.conf

使用方法

systemctl start   firewalld    #启动
systemctl enable  firewalld    #开机启动
systemctl stop    firewalld    #关闭
systemctl disable firewalld    #取消开机启动

具体的规则管理,可以使用firewall-cmd,具体的使用方法可以

firewall-cmd --help
--zone=NAME       #指定 zone
--permanent       #永久修改,--reload 后生效
--timeout=seconds #持续效果,到期后自动移除,用于调试,不能与--permanent 同时使用

1 查看规则

查看运行状态

firewall-cmd --state

查看已被激活的Zone信息

firewall-cmd --get-active-zone
public
   interfaces:eth0 eth1

查看指定级别的接口

firewall-cmd --zone=public --list-interfaces
eth0

查看指定级别的所有信息,譬如public

firewall-cmd --zone=public --list-all
public (default,active)
  interfaces:eth0
  sources:
  ports:
  masquerade:no
  forward-ports:
  icmp-blocks:
  rich rules:

查看所有级别被允许的信息

firewall-cmd --get-service

查看重启后所有Zones级别中被允许的服务,即永久放行的服务

firewall-cmd --get-service --permanent

2 管理规则

firewall-cmd --panic-on          #丢弃
firewall-cmd --panic-off         #取消丢弃
firewall-cmd --reload            #更新规则,不重启服务
firewall-cmd --complete-reload   #更新规则,重启服务

添加某接口至某信任等级,譬如添加eth0至public,永久修改

firewall-cmd  --zone=public --add-interface=eth0 --permanent

设置public为默认的信任级别

a 管理端口

列出dmz 级别的被允许的进入端口

firewall-cmd --zone=dmz --list-ports

允许tcp端口8080至dmz级别

firewall-cmd --zone=dmz --add-port=8080/tcp

允许某范围的udp端口至public级别,并永久生效

firewall-cmd  --zone=public --add-port=10050-10051/udp --permanent

b 网卡接口

列出public zone所有网卡

firewall-cmd --zone=public --list-interfaces

将eth0添加至public zone,永久

firewall-cmd --zone=public --permanent --add-interface=eth0

eth0存在与public zone,将该网卡添加至work zone,并将之从public zone中删除

firewall-cmd --zone=work --permanent --change-interface=eth0

删除public zone中的eth0,永久

firewall-cmd --zone=public --permanent --remove-interface=eth0

c 管理服务

添加smtp服务至work zone

firewall-cmd  --zone=work --add-service=smtp

移除work zone中的smtp服务

firewall-cmd --zone=work --remove-service=smtp

d 配置external zone中的ip地址伪装

查看

firewall-cmd  --zone=external --query-masquerade

打开伪装

firewall-cmd --zone=external --add-masquerade

关闭伪装

firewall-cmd --zone=external --remove-masquerade

e 配置public zone的端口转发

打开端口转发,则需要先

firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=3753

转发22端口数据至另一个ip相同端口上

firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100

转发 22 端口数据至另一 ip 的 2055 端口上

firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100

f 配置public zone的icmp

查看所有支持的icmp类型

firewall-cmd --get-icmptypes
destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded

列出

firewall-cmd --zone=public --list-icmp-blocks

添加echo-request屏蔽

firewall-cmd --zone=public --add-icmp-block=echo-request [--timeout=seconds]

移除 echo-reply 屏蔽

firewall-cmd --zone=public --remove-icmp-block=echo-reply

g IP封禁

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='222.222.222.222' reject"

当然,我们仍然可以通过 ipset 来封禁 ip
封禁 ip

firewall-cmd --permanent --zone=public --new-ipset=blacklist --type=hash:ip
firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=222.222.222.222

封禁网段

firewall-cmd --permanent --zone=public --new-ipset=blacklist --type=hash:net
firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=222.222.222.0/24

倒入 ipset 规则

firewall-cmd --permanent --zone=public --new-ipset-from-file=/path/blacklist.xml
``` bash
然后封禁 blacklist
``` bash
firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset=blacklist drop'

重新载入以生效

firewall-cmd --reload

文章转载至:


文章作者: 阿培
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 阿培 !
 上一篇
Day5 Day5
re模块常用的正则表达式符号'.' 默认匹配除\n之外的任意单个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^' 匹配字符串开头 '$' 匹配字符串的结尾,或e.
2017-07-22
下一篇 
Day4 Day4
装饰器:定义:本质是函数,(装饰其他函数)就是为其它函数添加附加功能原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰函数的的调用方式 实现装饰器知识储备:1.函数即”变量”2.高阶函数 a: 把一个函数名当作实参传
2017-07-04
  目录