(二)Linux 防火墙----网络防火墙,NET,firewalld

六. 网络防火墙

iptables/netfilter网络防火墙
(1) 充当网关
(2) 使用filter表的FORWARD

注意的问题
(1) 请求-响应报文均会经由FORWARD链,要注意规则的方向性
(2) 如果要启用conntrack机制,建议将双方向的状态为ESTABLISHED的报文直接放行

综合实验:

A:net网(内网)
B:桥接网卡(外网)
在这里插入图片描述
中间的要启用路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p生效

希望:内网A可以访问外网,
外网B不能访问内网
穿过forward

iptables  -A FORWARD -j RJECT

iptables -I FORWARD 1 -s 192.168.245.0/24 -p icmp --icmp-type 8 -j ACCEPT  请求同意
iptables -I FORWARD 1 -d 192.168.245.0/24 -p icmp --icmp-type 0 -j ACCEPT 应答

或者(意思是,只要ping出去,回来的报文就能收到)
iptables -I FORWARD 1 -s 192.168.245.0/24 -p icmp --icmp-type 8 -j ACCEPT  请求同意
iptables -I FPRWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT

希望内网可以访问外网的http/https服务mod_ssl

iptables -I FORWARD 2  -s 192.168.245.0/24 -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -I FPRWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT

希望外网可以访问内网的http/https服务

iptables -I FORWARD 2  -d 192.168.245.129 -p tcp -m multiport --dports 80,443 -j ACCEPT

将内访问外网的规则规划为一个新的链
iptabkes -N TOINTERNET
在这里插入图片描述
将自定定义的规则关联到forward中
也就是在forward中塞入一个规则
iptables -I FORWORD 2 -j TOINTERNET
在这里插入图片描述
最后如果想有什么变化,就可以直接修改自定义连,而无需动用FORWARD链

删除自定义链

iptables -D FORWARD 2
iptables -F TOINTERNET
iptables -X TOINTERNET

共有ip
在这里插入图片描述

私有地址
在这里插入图片描述
查看自己先在用什么ip上网(公有地址)
在这里插入图片描述

不能用公有地址,配置自己的局域网
例如:如果自己的局域网配成8.8.8.8/8
那么8.0.0.0/8这个网段的主机会导致所有外网都不能访问
可与用NAT—套NAT解决(不建议)

七. NAT

实现局域网(用私有地址)访问互联网
一般会在NAT上设置正向代理

NAT: network address translation
PREROUTING,INPUT,OUTPUT,POSTROUTING
请求报文:修改源/目标IP,由定义如何修改
响应报文:修改源/目标IP,根据跟踪机制自动实现

在局域网方外外网是,他会将局域网中的私有地址(用NET)转换为共有地址,进而访问外网,同理回应包,也会转换为私有地址,给局域网内部

SNAT:source NAT POSTROUTING, INPUT
让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装(只替换原地址
请求报文:修改源IP

DNAT:destination NAT PREROUTING , OUTPUT
把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP(只替换目标地址

请求报文:修改目标IP

PNAT端口和IP都参与转换(每一台电脑对应一个端口)
端口和IP都进行修改

2. SNAT

请求报文:修改源IP,变成公网ip,也就是最后局域网的地址就会映射为公网ip(代替了内网的私有网络)

实现SNAT:局域网访问外网

网管关心(管理企业内部的网络)
在这里插入图片描述

nat表的target:

SNAT:固定IP,企业专线

--to-source [ipaddr[-ipaddr]][:port[-port]]固定的地址(防火墙上的公网地址)
--random
	最后的汇总用POSTROUTING,必须是局域网
	nat表,做地址转换
	
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP

示例:

 iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j SNAT 
 --to-source 172.18.1.6-172.18.1.9

MASQUERADE:动态IP,如拨号网络
需要伪装

--to-ports port[-port]
--random

-j MASQUERADE  伪装,一直用这一个公有地址替换
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j MASQUERADE

iptables  -nvL -t nat

示例:

 iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j MASQUERADE

实现SNAT局域网访问外网

因为firewall和公网在同一网段,所以这里不需要网关

在这里插入图片描述
所以直接用ApingB,不通,因为B没有网关,消息回不来
所以给他配置SNAT,拿firewall右端的公网替代
注意中间的firewall的路由转发功能必须启用
vim /etc/sysctl.conf
net.ipv4.ip_forward=1

iptables -t nat -A POSTROUTING -s 192.168.245.0/24 -j SNAT --to-sourse 172.16.0.7
iptables -nvL -t nat

在这里插入图片描述

3. DNAT(重点***)(端口映射,只能一对一)

请求报文:修改目标IP(端口映射,只能一对一)

外网访问内网,当做调度器
在prorouting 链
nat表

运维关注:DNAT,反向代理,等
在这里插入图片描述

DNAT

--to-destination [ipaddr[-ipaddr]][:port[-port]]
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --to-destination InterSeverIP[:PORT]

示例

iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 22 -j DNAT --to-destination 10.0.1.22

iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 80 -j DNAT --to-destination 10.0.1.22:8080


例如:外网可以访问内网(局域网),通过DNAT(如SNAT的图)
将访问172.16.0.7,转换成访问192.168.245.129
iptables -t nat -A PROROUTING -d 172.16.0.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.245.129

4. 转发(端口重定向redirect)重点

将用户访问,本地的端口,转发到另一个端口上去
例如将80------转发到 8080上
在本地服务器转发,而不是firewall转发
REDIRECT:
NAT表
可用于:PREROUTING OUTPUT 自定义链
通过改变目标IP和端口,将接受的包转发至不同端口

--to-ports port[-port]

示例:

80 端口转发给8080

 iptables -t nat -A PREROUTING -d 172.16.100.10 -p tcp --dport 80 -j REDIRECT --to-ports 8080

八. firewalld服务(centos 7)

firewalld是CentOS 7.0新推出的管理netfilter的工具
firewalld是配置和监控防火墙规则的系统守护进程。可以实现
iptables,ip6tables,ebtables的功能

firewalld服务由firewalld包提供
firewalld支持划分区域zone,每个zone可以设置独立的防火墙规则
归入zone顺序
先根据数据包中源地址,将其纳为某个zone
纳为网络接口所属zone
纳入默认zone默认为public zone,管理员可以改为其它zone

网卡默认属于public zone,lo网络接口属于trusted zone(信任)
在这里插入图片描述
自己添加协议,端口等
在这里插入图片描述

firewalld zone分类

在这里插入图片描述
dmz两道防火墙,中间夹层(写入局域网可以被访问的主机)

在这里插入图片描述

预定义服务

在这里插入图片描述

firewalld配置

注意iptables和firewall会有所冲突,只能启用一个

firewall-cmd --get-services 查看预定义服务列表
预定义服务的配置
三种配置方法
firewall-config (firewall-config包)图形工具(立即生效)
缺点;如果某些服务,用的不是标准端口,那么就不行
可以自己(定义)添加
firewall-cmd (firewalld包)命令行工具

/etc/firewalld/ 配置文件,一般不建议

firewall-cmd 命令选项

--get-zones 列出所有可用区域
--get-default-zone 查询默认区域

--set-default-zone=<ZONE>设置默认区域
--get-active-zones 列出当前正使用的区域
--add-source=<CIDR>[--zone=<ZONE>]添加源地址的流量到指定区域,如果无--zone= 选项,使用默认区域
--remove-source=<CIDR> [--zone=<ZONE>] 从指定区域中删除源地址的流量,如无--zone= 选项,使用默认区域
--add-interface=<INTERFACE>[--zone=<ZONE>] 添加来自于指定接口的流量到特定区域,如果无--zone= 选项,使用默认区域

--change-interface=<INTERFACE>[--zone=<ZONE>] 改变指定接口至新的区域,如果无--zone= 选项,使用默认区域

--add-service=<SERVICE> [--zone=<ZONE>] 允许服务的流量通过,如果无--zone= 选项,使用默认区域

--add-port=<PORT/PROTOCOL>[--zone=<ZONE>] 允许指定端口和协议的流量,如果无--zone= 选项,使用默认区域

--remove-service=<SERVICE> [--zone=<ZONE>] 从区域中删除指定服务,禁止该服务流量,如果无--zone= 选项,使用默认区域

--remove-port=<PORT/PROTOCOL>[--zone=<ZONE>] 从区域中删除指定端口和协议,禁止该端口的流量,如果无--zone= 选项,使用默认区域
--reload 删除当前运行时配置,应用加载永久配置
--list-services 查看开放的服务
--list-ports 查看开放的端口
--list-all [--zone=<ZONE>] 列出指定区域的所有配置信息,包括接口,源地址,端口,服务等,如果无--zone= 选项,使用默认区域

保存
   在命令的最后加 --permanent
生效 
   用firewall-cmd --reload

查看默认zone
firewall-cmd --get-default-zone
默认zone设为dmz
firewall-cmd --set-default-zone=dmz

在internal zone中增加源地址192.168.0.0/24的永久规则

firewall-cmd --permanent --zone=internal --addsource=192.168.0.0/24

在internal zone中增加协议mysql的永久规则

firewall-cmd --permanent –zone=internal --add-service=mysql

加载新规则以生效
firewall-cmd --reload

在这里插入图片描述

实验:配置firewalld
systemctl mask iptables 无法手动启动iptables
systemctl mask ip6tables 取消无法手动启动
systemctl status firewalld
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --get-default-zone
firewall-cmd --set-default-zone=public
firewall-cmd --permanent --zone=public --list-all
firewall-cmd --permanent --zone=public --add-port 8080/tcp
firewall-cmd —reload

九. firewall其它规则

在centos7中配置完iptables可以看到
而centos8看不到

当基本firewalld语法规则不能满足要求时,可以使用以下更复杂的规则
rich-rules 富规则,功能强,表达性语言

Direct configuration rules 直接规则,灵活性差
帮助:man 5 firewalld.direct

管理rich规则

rich规则比基本的firewalld语法实现更强的功能,不仅实现允许/拒绝,还可以实现日志syslog和auditd,也可以实现端口转发伪装和限制速率(拨号)

rich语法

rule
 [source]
 [destination]
 service|port|protocol|icmp-block|masquerade|forward-port
 [log]
 [audit]
 [accept|reject|drop]

man 5 firewalld.richlanguage

规则
规则实施顺序
该区域的端口转发,伪装规则
该区域的日志规则
该区域的允许规则
该区域的拒绝规则

每个匹配的规则生效,所有规则都不匹配,该区域默认规则生效

rich规则选项

--add-rich-rule='<RULE>'              
		 Add <RULE> to the specified zone, or the default zone if no zone is specified.
--remove-rich-rule='<RULE>' 
	Remove <RULE> to the specified zone, or the default zone if no zone	is specified.
--query-rich-rule='<RULE>' 
	Query if <RULE> has been added to the specified zone, or the default
zone if no zone is specified. Returns 0 if the rule is	present,otherwise 1.

--list-rich-rules 
	Outputs all rich rules for the specified zone, or the default zone if no zone is specified.

rich规则示例
拒绝从192.168.0.11的所有流量,当address 选项使用source 或 destination时,必须用family= ipv4 |ipv6
firewall-cmd --permanent --zone=public --add-rich-rule=‘rule
family=ipv4 source address=192.168.0.11/32 reject’

限制每分钟只有两个连接到ftp服务
firewall-cmd --add-rich-rule=‘rule service name=ftp limit value=2/m
accept’

抛弃esp( IPsec 体系中的一种主要协议)协议的所有数据包
firewall-cmd --permanent --add-rich-rule=‘rule protocol value=esp drop’

接受所有192.168.1.0/24子网端口5900-5905范围的TCP流量
firewall-cmd --permanent --zone=vnc --add-rich-rule=‘rule family=ipv4
source address=192.168.1.0/24 port port=5900-5905 protocol=tcp accept’

rich日志规

log [prefix="<PREFIX TEXT>" [level=<LOGLEVEL>] [limit
value="<RATE/DURATION>"]
<LOGLEVEL> 可以是emerg,alert, crit, error, warning, notice, info, debug.
<DURATION> s:秒, m:分钟, h:小时, d:天
audit [limit value="<RATE/DURATION>"]

接受ssh新连接,记录日志到syslog的notice级别,每分钟最多三条信息

firewall-cmd --permanent --zone=work --add-rich-rule='rule service
name="ssh" log prefix="ssh " level="notice" limit value="3/m" accept

从2001:db8::/64子网的DNS连接在5分钟内被拒绝,并记录到日志到audit,每小时最大记录一条信息

firewall-cmd --add-rich-rule='rule family=ipv6 source
address="2001:db8::/64" service name="dns" audit limit value="1/h" reject' --timeout=300

规则例子

firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source
address=172.25.X.10/32 service name="http" log level=notice
prefix="NEW HTTP " limit value="3/s" accept'

firewall-cmd --reload

tail -f /var/log/messages

curl http://serverX.example.com

伪装和端口转发

NAT网络地址转换,firewalld支持伪装和端口转发两种NAT方式
伪装NAT
firewall-cmd --permanent --zone= --add-masquerade
firewall-cmd --query-masquerade 检查是否允许伪装
firewall-cmd --add-masquerade 允许防火墙伪装IP
firewall-cmd --remove-masquerade 禁止防火墙伪装IP
示例

firewall-cmd --add-rich-rule='rule family=ipv4 source
address=192.168.0.0/24 masquerade'

端口转发

端口转发:将发往本机的特定端口的流量转发到本机或不同机器的另一个端口。
通常要配合地址伪装才能实现

firewall-cmd --permanent --zone=<ZONE> --add-forwardport=port=<PORTNUMBER>:proto=<PROTOCOL>[:toport=<PORTNUM
BER>][:toaddr=<IPADDR>]

说明:toport= 和toaddr= 至少要指定一个
示例
转发传入的连接9527/TCP,到防火墙的80/TCP到public zone 的192.168.0.254
firewall-cmd --add-masquerade 启用伪装
firewall-cmd --zone=public --add-forwardport=port=9527:proto=tcp:toport=80:toaddr=192.168.0.254

rich规则语法

forward-port port=<PORTNUM> protocol=tcp|udp [toport=<PORTNUM>] [to-addr=<ADDRESS>]

示例
转发从192.168.0.0/24来的,发往80/TCP的流量到防火墙的端口8080/TCP
firewall-cmd --zone=work --add-rich-rule=‘rule family=ipv4 source
address=192.168.0.0/24 forward-port port=80 protocol=tcp toport=8080’

例如

firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source
address=172.25.X.10/32 forward-port port=443 protocol=tcp toport=22'

firewall-cmd --reload

ssh -p 443 serverX.example.com

练习

说明:以下练习INPUT和OUTPUT默认策略均为DROP
1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100
个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允
许响应报文离开本机
2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0
网络中的主机访问;数据下载请求的次数每分钟不得超过5个
3、开放本机的ssh服务给172.16.x.1-172.16.x.100中的主机,x为你的学号,新
请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机
4、拒绝TCP标志位全部为1及全部为0的报文访问本机
5、允许本机ping别的主机;但不开放别的主机ping本机

练习:判断下述规则的意义
iptables -N clean_in
iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP
iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP
iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
iptables -A clean_in -d 172.16.100.7 -j RETURN
iptables -A INPUT -d 172.16.100.7 -j clean_in
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i eth0 -m multiport -p tcp --dports 53,113,135,137,139,445 -j DROP
iptables -A INPUT -i eth0 -m multiport -p udp --dports 53,113,135,137,139,445 -j DROP
iptables -A INPUT -i eth0 -m multiport -p tcp --dports 1433,4899 -j DROP
iptables -A INPUT -p icmp -m limit --limit 10/second -j ACCEPT

1 实现主机防火墙
放行telnet, ftp, web服务
放行samba服务
放行dns服务(查询和区域传送)
2 实现网络防火墙
放行telnet, ftp, web服务
放行samba服务
放行dns服务(查询和区域传送)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值