firewall

firewall引进了区域的概念,区域即一个功能独立的模块

【九大区域】

public:默认开机区域,公共区域 只有设置为允许的通信可以通过

trusted:信任区域   允许所有通信通过

drop:丢弃区域   拒绝所有通信

block:类似于drop   拒绝所有外部通信,允许内部通信

external:nat区域   开启nat代理和端口映射

dmz:非军事区 允许外部访问的服务器

work:工作区域

home:家庭区域

internal:内部区域


工作机制:审核网卡所在的区域


实验拓扑图:客户端A:202.0.0.1 ------ Re0:202.0.0.2;Re1:192.168.10.1 ------- B:192.168.10.2


实验:

1、安装软件包:

firewalld、firewall-config、system-config-firewall-base


2、重启服务

7.0版,将firewall启动,默认iptables是关闭的

systemctl restart firewall

systemctl enable firewall


firewall规则:


【查看】

firewall-cmd --state 查询firewall的状态=systemctl status firewall

firewall-cmd --get-default-zone 查看默认区域

firewall-cmd --list-all 查看默认区域的所有规则

firewall-cmd --get-zones 查看所有区域

firewall-cmd --get-services 查看所有支持的服务

firewall-cmd --get-zone-of-interface = eno16777736 查看接口所在的区域

firewall-cmd --zone = trusted --list-all 通过查看区域的规则查看网卡所在的位置

firewall-cmd --list-all-zones 查看所有区域的规则


【修改】

firewall-cmd --set-default-zone = trusted 修改默认区域

firewall-cmd --add-service = http 在当前默认区域中添加服务

firewall-cmd --zone = trusted --add-interface = eno16777736 将某个网卡添加到某个区域中,添加之前该网卡处于无区域的状态

firewall-cmd --zone = trusted --change-interface = eno16777736 改变某个接口所在的区域

firewall-cmd --add-port = 80/tcp 指定端口和协议,必须写清是tcp,还是udp


【移除】

firewall-cmd --remove-service = http 在当前区域中移除http

firewall-cmd --zone = trusted --remove-interface = eno16777736 从某个区域中移除网卡,该网卡的状态将变为无区域


< NAT网络地址转换(内访外)>


第一种方式:将默认区域修改到external

firewall-cmd --set-default-zone = external


第二种方式:

因为外网卡代替内网上网,所有将网卡加入到external区域中

firewall-cmd --zone = external --change-interface =  eno16777736


验证:

telnet (B ---> A)

netstat -n  查询通信端口


(外访内)

< 端口映射 >


firewall-cmd --zone = external --add-masquerade 开启端口映射功能

firewall-cmd --zone = external --add-forward-port =(port = 2300):proto = tcp:toport = 23 

(: toaddr = 192.168.10.2)

port:在外网卡开启的映射口

proto:指定协议

toproto:内网进行映射的端口

toaddr:指定内网服务器IP地址



若防火墙出问题

1、修改默认区域drop


2、紧急机制开启,拒绝所有外来通信

firewall-cmd --panic-on 开启紧急机制

firewall-cmd --query-panic 查看当前紧急机制的状态


以上所有设置重启服务将全部失效

永久生效,修改配置文件

firewall-cmd --permanent(永久的) --add-service = http

该规则帮助我们修改配置文件,使其永久生效

重启服务生效

systemctl restart firewalld


3、firewall中可以对服务端口和协议进行保护,也可以对通信服务进行保护,对服务设置的保护实质上还是设置的端口保护

服务的配置文件:记录了服务的相关信息,使其协议和端口与服务名相对应

/usr/lib/firewalld/services

例:cd /usr/lib/firewalld/services

ls

发现里面的文件格式都是xxx.xml

例:cat http.xml

<port protocol = "tcp" port = "80">

所以虽然添加的是服务,但还是端口保护。


mysql的端口:3306

Oracle的端口:1521


自定义服务的配置文件

#cd /usr/lib/firewalld/services

#ls

#cp http.xml qq.xml

<description>    </description>

<port protocol = "tcp" port "8000">9

保存退出

重启服务进行加载

systemctl restart firewalld

systemctl status firewalld


7.0后默认开启firewall,iptables自动关闭,但是firewall的底层还是iptables

所有的保护还是要依靠iptables的三个链进行保护

iptables -L


firewall里针对本机的服务的保护,生效给iptables的INPUT链


路由器为转发功能,为了保护子网,将规则生效给iptables的forward链