防火墙:
保证数据的安全性是继数据可用性之后的最为重要的一项工作
防火墙作为公网和内网之间的保护屏障
防火墙种类:
硬件防火墙:网关服务器
软件防火墙:装在操作系统中的软件
防火墙管理工具
主要功能:依据策略对穿越防火墙的自身流量进行过滤。
在centos和RHEL系统中:
firewalld:7版本以上(centos7.x,RHEL7.x)
iptables:6版本(centos6.x,RHEL6.x)
注:iptables和firewalld都不是真正的防火墙,他们都只是定义防火墙策略的防火墙管理工具而已,或者说,他们只是一种服务
firewalld和iptables的区别:
iptables服务会把配置好的防火墙策略交给内核层的
netfilter网络过滤器来处理
firewalld服务会把配置好的防火墙策略交给内核层的nftables包过滤框架来处理
firewalld和iptables的区别:
firewalld | iptables | |
---|---|---|
配置文件 | /usr/lib/firewalld/ 和 /etc/firewalld/ | /etc/sysconfig/iptables |
对规则的修改 | 不需要全部刷新策略,不丢失现行连接 | 需要全部刷新策略,丢失连接 |
防火墙类型 | 动态防火墙 | 静态防火墙 |
第一个防火墙管理工具——firewalld
centos1版本以上默认使用的防火墙配置管理工具
拥有基于CLI(命令行界面)和GUI(图形化用户界面)两种管理方式。
定义:基于firewalld服务的防火墙会查询每个网络数据包的头部。
依据头部中包含的信息,可以配置规则来过滤每个数据包。
通过网络发送信息的过程:
信息在通过网络发送之前,会被分解成更小的单元(称为数据包)。
数据包:数据类型、源ip地址、目标ip地址,还有源端口。
数据包通过网络到达目的地,防火墙会检查每一个数据包的头部的字段,按照已配置好的规则,去采取以下动作:
1、允许数据包进入系统
2、如果当前系统时网络间的网关或者路由器,则将数据包转发给其他系统
3、对数据包的传输速率进行限制
4、拒绝数据包,并给原始ip地址发送一条消息
5、丢弃数据包,并且不发送任何类型的信息。
-----------------------以上都是有关firewalld的基本概念-------------------------------
创新互联建站客户idc服务中心,提供中国电信云锦天府、成都服务器、成都主机托管、成都双线服务器等业务的一站式服务。通过各地的服务中心,我们向成都用户提供优质廉价的产品以及开放、透明、稳定、高性价比的服务,资深网络工程师在机房提供7*24小时标准级技术保障。
相较于传统的防火墙管理工具,firewalld支持动态更新技术,并加入了区域(zone)的概念
简单来说,firewalld基于区域,区域就是firewalld预先准备了几套防火墙策略的结合(策略模板),用户可以根据生产环境场景的不同选择合适的策略集合
常见区域:
drop(丢弃) | 任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接 |
---|---|
block(限制) | 任何接收的网络连接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohited信息所拒绝 |
public(公共) | 在公共区域内使用,不能相信网络的其他计算机不会对宁的计算机造成危害,只能接收经过选取的连接 |
external(外部) | 特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信他们不会对您的计算机造成危害,只能接收经过选择的连接 |
dmz(非军事区) | 用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接 |
work(工作) | 用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收过选择的连接 |
home(家庭) | 用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接 |
internal(内部) | 用于内部网络。您可以基本上信任网络内的其他计算机。仅仅接收经过限制的连接 |
trusted(信任) | 可接收所有的网络连接 |
9大区域:trusted home internal work public external dmz block drop
常见区域元素:
interfaces(接口)网卡 | 与区域相关的网络接口 |
---|---|
sources(源地址) | 与区域相关的源ip地址 |
services(服务) | 允许通过区域的入战服务 |
ports(端口) | 允许通过区域的目标端口 |
protocols(协议) | 目标端口的协议,tcp、udp |
masquerade(伪装) | 指定是否启用源网络地址转换(NAT) |
forward-ports(转发端口) | 端口转发规则(将发送给本地端口的流量映射到同一台或另一台主机上的其他端口上) |
source-ports(源端口) | |
icmp-blocks(ICMP堵塞) | 用于堵塞ICMP信息 |
rich rules(福规则) | 写高级的防火墙规则 |
注:如果使用多个区域的话,必须有关联源地址或接口
firewalld拥有两种配置模式:
1、运行时配置(runtime) 当前生效模式,重启会生效
2、永久配置模式(permanent) 不会立即生效,只会重新启动或者重加载才会生效。
firewalld配置方法:
1、firewall-cmd 命令行,终端管理工具
2、firewall-config 图形化界面工具
3、/etc/firewalld中的配置文件
/etc/firewalld:用户自定义配置文件存放目录,可以在、/usr/lib/firewalld中拷贝模板,优先读取
/usr/bil/firewalld:默认配置文件
firewalld操作:
查看:
firewall-cmd --get-区域元素名 //查看指定的元素有哪些
firewall-cmd --get-default-zone //查看firewall默认区域
firewall-cmd --set-default-zone=区域名 //设置firewalld默认区域
firewalld默认区域是public区域
firewall-cmd --get-zones //列出所有fiewalld区域
注:firewall-cmd 是firewalld防火墙配置管理工具CLI版本使用的命令
永久生效:
firewall-cmd --set-default-zone=区域名 --permanent
firewall-cmd --get-active-zone //查看当前正在运行的区域
网卡
firewall-cmd --zone=work --add-interface=网卡名称 //添加一块网卡到指定区域中
firewall-cmd --get-zone-of-interfce=网卡名称 //查看指定网卡所在区域
firewall-cmd --zone=work --change-interface=网卡名称 //为指定区域更改网卡
firewall-cmd --zone=work --remove-interface=网卡名称 //为指定区域删除某块网卡
firewall-cmd --zone=区域名 --query-unterface=网卡名称 //判断指定区域中有没有该网卡
firewall-cmd --list-all-zones //查看所有区域里面的详细信息
firewall-cmd --zone=区域 --list-all // 查看指定区域的详细信息
firewall-cmd --list-all 当没有 --zone的选项,查看的是默认区域中详细信息
源ip地址:
firewall-cmd --zone=work --add-source=源ip地址 为指定区域添加源ip地址
firewall-cmd --zone=work --remove-source=源ip地址 为指定区域删除ip地址
写一个富规则,规则内容为:将来自192.168.80.0/24的访问流量,从端口的80端口转发到本地的25端口。
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.80.0/24 forward-port port=80 protocol=tcp to-port=25' --permanent
firewalld防火墙富规则,规则内容为:将来自192.168.10.0/24的访问流量,从端口的8080端口转发到本地的5423端口
firewall-cmd --add-rich-rule=’rule family=ipv4 source address=192.168.10.0/24 forward-port port=8080 protocol=tcp toport=5423’ --permanent
firewalld防火墙富规则,规则内容为:允许来自192.168.80.0/24的流量访问http服务
firewall-cmd --add-rich-rule=’rule family=ipv4 source address=192.168.80.0/24 service name=http ACCEPT’
firewalld防火墙富规则,规则内容为:拒绝来自192.168.90.0/24的流量访问端口3260.
firewall-cmd --add-rich-rule=’rule family=ipv4 source address=192.168.90.0/24 port port=3260 protocol=tcp drop’
防火墙firewalld,将80端口,转换为2000端口:
firewall-cmd --add-forward-port=port=80:proto=tcp:to-port=2000 --permanent
在同一台服务器中端口转发:
firewall-cmd --add-forward-port=port=源端口:proto=协议:toport=目的端口
firewall-cmd --add-forward-port=port=8000:proto=tcp:toport=80
在不同服务器上端口转发:
firewall-cmd --add-forward-port=port=源端口:proto=协议:toport=目的端口:toaddr=目标服务器IP地址
192.168.80.101:8000相当于访问192.168.80.101:80
例子:
192.168.80.105
firewall-cmd --add-forward-port=port=8000:proto=tcp:toport=80:toaddr=192.168.80.100
永久打开转发功能:
方法一:(centos6和7)
echo 1 > /proc/sys/net/ipv4/ip_forward
方法二:(centos7)
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p //生效
iptables防火墙富规则:
1、让内网通过外网卡上网
方法一:
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens37 -j SNAT --to 192.168.90.100
方法二:
iptables -t nat -A POSTROUTING -s 192.168.80.100 -o ens37 -j SNAT --to 192.168.90.100
注:192.168.80.100是内网卡ip地址
192.168.90.100是外网卡ip地址
客户端和内网服务器必须都要指定网关,否则无效
2、当外部客户端访问外部地址(90.100)时,服务器将请求转发给内网服务器(80.102)
iptables -t nat -A PREROUTING -i ens33 -d 192.168.90.100 -p tcp --dport 80 -j DNAT --to 192.168.80.102
注:同样客户端和内网服务器都需要网关
iptables策略,访问192.168.90.100的时候,访问的是192.168.80.101
iptables -t nat -A PREROUTING -i ens32 -d 192.168.90.100 -j DNAT --to-destination 192.168.80.101
备份保存:iptables-save > /opt/a.txt
还原:iptables-restore < /opt/a.txt
iptables -nL --line //查看 iptables 当前所有规则的命令
请求或禁止来自 10.0.0.188 ip 地址访问 80 端口的请求
iptables -A INPUT -s 10.0.0.188 -p tcp --dport 80 -j DROP/ACCEPT
实现把访问 10.0.0.8:80 的请求转到 172.16.1.17:80
iptables -t nat -A PREROUTING -i ens32 -d 10.0.0.8 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.17:80
实现 192.168.80.0/24 段所有主机通过 10.0.0.8 外网 IP 共享上网。
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens32 -j SNAT --to 10.0.0.8
禁止ping本机,但是本机可以ping通其它主机
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -j DROP
iptables防火墙规则:当一个公网主机去访问 服务器的外网口公网地址(80.182)的时候,服务器把请求转发给内网真正提供服务的内网服务器(90.181)。
iptables -t nat -A PREROUTING -i ens33 -d 192.168.80.182 -j DNAT --to 192.168.90.181
实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网。
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o ens32 -j SNAT --to 124.32.54.26
将来自192.168.10.0/24的数据,其源地址转换为192.168.90.100
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens34 -j SNAT --to-source 192.168.90.100
iptables策略,访问192.168.90.100的时候,访问的是192.168.80.101
iptables -t nat -A PREROUTING -i ens32 -d 192.168.90.100 -j DNAT --to-destination 192.168.80.101
iptables防火墙规则: 拒绝转发源地址是80网段的,目的地址是192.168.90.100,且协议是TCP21端口的数据包。
iptables -A INPUT -s 192.168.80.0/24 -d 192.168.90.100 -p tcp --dport 21 -j REJECT
拒绝192.168.0.0/24网段的1024-65534的源端口访问SSH
iptables -A INPUT -p tcp -s 192.168.0.0/24 --sport 1024-65534 --dport ssh -j REJECT
写一个防火墙配置脚本,只允许远程主机访问本机的80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -P INPUT DROP
拒绝源地址是80网段的,目的地址是90网段的,且协议是TCP的21端口的数据包。
iptables -I FORWARD -s 192.168.80.0/24 -d 192.168.90.0/24 -p tcp --dport 21 -j DROP/REJECT
禁止转发源IP地址位于192.168.80.21与192.168.80.28之间的TCP数据包。
iptables -A FORWARD -m iprange --src-range 192.168.80.21-192.168.80.28 -p tcp -j DROP/REJECT
允许192.168.80.20到192.168.80.100的ip地址主机的ICMP流量能够访问本服务器
iptables -A INPUT -p icmp -m iprange --src-range 192.168.80.20-192.168.80.100 -j ACCEPT
iptables的匹配类型:
通用匹配:协议-p,-s,-d,-i,-o
隐含匹配:--sport,--dport,TCP协议标记,icmp类型
显式匹配:多端口,mac地址,ip地址范围,数据包状态
iptables控制类型有哪些:
ACCEPT 允许
REJECT 拒绝
DROP 丢弃
LOG 记录日志
iptables中规则、规则链、规则表的关系:
多条规则组成规则链,规则链在规则表中,规则链中设置默认策略。
将nat的默认策略设置为drop:
iptables -t nat -P INPUT DROP
删除nat表OUTPUT链中的第5条策略:
iptables -t nat -D OUTPUT 5
iptables -t nat -F OUTPUT