防火墙概念
防火墙的核心是数据报文过滤
网络模块由内核实现,而过滤的实现必须在内核中,而用户是 无法直接访问内核,更别说把过滤规则放置到内核中,因此在TCP/IP协议栈上,选取了几个不同的位置,开放给用户空间的应用程序,该应用程序可以通过系统调用将规则发送到指定的内核位置。
工作流程:网口数据包由底层的网卡NIC接收,通过数据链路层的解包之后(去除数据链路帧头),就进入了TCP/IP协议栈 (本质就是一个处理网络数据包的内核驱动)和Netfilter混合的数据包处理流程中了。数据包的接收、处理、转发流程构成 一个有限状态向量机,经过一些列的内核处理函数、以及Netfilter Hook点,最后被转发、或者本次上层的应用程序消化 掉。
工作在主机或者网络的边缘,对进出的数据报文进行检查,监控,并且能够根据事先定义的匹配条件和规则做出相应的动作的 组件,机制或者系统
防火墙分类
1. 从软、硬件形式上分为软件防火墙和硬件防火墙以及芯片级防火墙。
2.从防火墙技术分为 “包过滤型”和“应用代理型”两大类。
3.从防火墙结构分为 < 单一主机防火墙、分布式防火路由器集成式防火墙和墙三种。
4. 按防火墙的应用部署位置分为 边界防火墙、个人防火墙和混合防火墙三大类。
5. 按防火墙性能分为 百兆级防火墙和千兆级防火墙两类。
常见的访问控制包括:哪些ip可以访问服务器、可以使用哪些协议、哪些接口,是否通过数据包进行修改等
防火墙的功能
1.可以保护易受攻击服务;
2.控制内外网之间网络系统的访问;
3.集中管理内网的安全性,降低管理成本;
4.提高网络的保密性和私有性;
5.记录网络的使用状态,为安全规划和网络维护提供依据
包过滤防火墙
包过滤防火墙原理
包过滤防火墙的配置
第一,管理员必须明确企业网络的安全策略;
第二,必须用逻辑表达式清楚地表述数 据包的类型;
第三,必须用设备提供商可支持的语法重写这些表达式。
包过滤防火墙分类
静态包过滤防火墙:
利用静态包过滤规则建立的防火墙叫静态包过滤型防火墙
对于静态包过滤防火墙来说,决定接收还是拒绝一个数据包,取决于对数据包中IP头和协 议头等特定域的检查和判定,这些特定域包括:
1)数据源地址;2)目的地址;3)应用或协议;4)源端口号; 5)目的 端口号。
主要实现3个主要功能
1、接收每个到达的数据包;
2、对数据包采用过滤规则,对数据包的IP头和传输字段内容进行检 查。如果数据包的头信息与一组规则匹配,则根据该规则确定是转发还是丢弃该数据包。
3、如果没有规则与数据包头信息 匹配,则对数据包施加默认规则。默认规则可以丢弃或者接收所有数据包。默认丢弃数据包规则更加严格,而默认接收数 据包规则更加开放。通常,防火墙首先默认丢弃所有数据包,然后再逐个执行过滤规则,以加强对数据包的过滤。
静态包过滤防火墙的安全性:
无法区分真实的IP地址和伪造的IP地址,即无法防御IP地址欺骗攻击;由于静态包过滤防 火墙仅检查那些特定的协议头信息:1)源/目的IP地址;2)源/目的端口号(服务类型),因此黑客可能将恶意的命令或 数据隐藏在那些未经检查的头信息中,即“隐信道攻击”;缺少状态感知能力:一些需要动态分配端口的服务需要防火墙 打开许多端口,即管理员必须为静态包过滤规则打开所有的端口,因此增大了网络的安全性风险。
动态包过滤防火墙
动态包过滤防火墙是就是后来的包状态监测(Stateful Inspection)技术,监控每一个连接,自动临时增加适当的规则。
iptables
命令格式
-m:extend matches,这个选项用于提供更多的匹配参数,如:
- -A:新增一条规则,到该规则链列表的最后
- -I:插入一条规则,原本该位置上的规则会往后顺序移动,没有指定编号则为2
- -D:从规则链中删除一条规则,要么输入完整的规则,或者指定规则编号加以删除
- -R:替换某条规则,规则替换不会改变顺序,而且必须指定编号。
- -P:设置某条规则链的默认动作
- -nL:-L、-n,查看当前运行的防火墙规则列表
- -F : 清除所有规则
- [-i|o 网卡名称]:i是指定数据包从哪块网卡进入,o是指定数据包从哪块网卡输出
- [-p 协议类型]:可以指定规则应用的协议,包含tcp、udp和icmp等
- -p tcp --tcp-flags mask comp: 只检查mask指定的标志位,是以逗号分隔的标志位列表;comp:此列表中出
- 现的标记位必须为1,comp中没有出现,而mask中出现的必须为1(--tcp-flags SYN,FIN,ACK,RST SYN=--syn)
- [-s 源IP地址]:源主机的IP地址或子网地址
- [--sport 源端口号]:数据包的IP的源端口号
- [-d目标IP地址]:目标主机的IP地址或子网地址
- [--dport目标端口号]:数据包的IP的目标端口号
- -m state --state NEW ESTABLISHED,RELATED
-
#iptables -A INPUT -s 192.168.153.131 -p tcp --dport 22 -m state --state NEW -j DROP
-
ACCEPT(当前已经连接其他主机可以连接我当前主机,但是在开一个新的链接就不可以)
-
#iptables -I INPUT -p tcp -s 172.16.30.160 --dport 22 -j REJECT
-m tcp --dport 22
- -m multiport --dports 80,8080
iptables安装
#yum install iptables-services
案例
1、搭建web服务,并且能够访问
#开放web服务端口
防火墙默认执行动作改为DROP
[root@localhost ~]# iptables -P INPUT DROP
[root@mail html]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
#列出规则表中的编号
#iptables -L --line-numbers
#删除刚刚添加的规则,并进行测试
[root@mail html]# iptables -D INPUT 1
2、禁止所有人ssh远程登陆该服务器
[root@mail html]# iptables -I INPUT -p tcp --dport 22 -s 192.168.24.0/24 -j REJECT
#删除刚刚添加的规则,并进行测试
[root@mail html]# iptables -D INPUT 1
3、禁止某个主机地址ssh远程登陆该服务器
#拒绝144主机访问服务器的22端口
[root@mail ~]# iptables -I INPUT -p tcp -s 172.24.8.144 --dport 22 -j REJECT
#开启服务器的web服务,并用144客户端进行访问
[root@mail html]# iptables -I INPUT -p tcp -s 192.168.171.144 --dport 80 -j ACCEPT
#查看所有规则
Iptables -t filter -P INPUT DROP
Iptables -A INPUT -s 172.16.30.128 -d 172.16.30.200 -p tcp --dport 22 -j ACCEPT
Netstat -lntup | grep 80 查看开放的端口
[root@localhost ~]# iptables-save > /etc/sysconfig/iptables [root@localhost ~]# systemctl restart iptables.service [root@localhost ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination REJECT tcp -- 192.168.24.0/24 anywhere tcp dpt:ssh reject-with icmp-port-unreachable --------------------------------------------------------------------------------------------------------------------------- [root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -s 192.168.24.0/24 -j DROP [root@localhost ~]# iptables-save > /etc/sysconfig/iptables [root@localhost ~]# iptables [root@localhost ~]# iptables-restore < /etc/sysconfig/iptables [root@localhost ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination DROP tcp -- 192.168.24.0/24 anywhere tcp dpt:ssh REJECT tcp -- 192.168.24.0/24 anywhere tcp dpt:ssh reject-with icmp-port-unreachable REJECT tcp -- 192.168.24.0/24 anywhere tcp dpt:ssh reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT) target prot opt source destination
Chain OUTPUT (policy ACCEPT) target prot opt source destination |
练习
1、添加iptables规则禁止用户访问域名为www.baidu.com的网站
iptables -I FORWARD -d www.baidu.com -j DROP
2、添加iptables规则禁止用户访问ip地址为20.20.20.20的网站
iptables -I FORWARD -D 20.20.20.20 -j DROP
3、添加iptables规则禁止IP地址为192.168.171.144的客户机上网
iptables -I FORWARD -s 192.168.171.144 -j DROP
4、添加iptables规则禁止192.168.171.0子网所有的客户机上网
iptables -I FORWARD -s 192.168.171.0/24 -j DROP
5、禁止192.168.171.0子网所有客户机使用ftp协议下载
iptables -I FORWARD -s 192.168.171.0/24 -p tcp --dport 21 -j DROP
6、禁止192.168.171.0子网所有客户机使用telnet协议连接远程计算机
iptables -I FORWARD -s 192.168.171.0/24 -p tcp --dport 23 -j DROP
7、强制所有的客户机访问192.168.171.1这台web服务器
iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.171.1:80
将内网转为公网将源地址转为公网地址111.112.113.114
Iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth1 -j SNAT --to-source 111.112.113.114
8、禁止internat上的计算机通过ICMP协议ping到nat服务器的ppp0接口,但允许内网的客户机通过ICMP协议ping通
iptables -I INPUT -i ppp0 -p icmp -j DROP
-i eth0:从这块网卡流入的数据
流入一般用在INPUT和PREROUTING上
-o eth0:从这块网卡流出的数据
流出一般在OUTPUT和POSTROUTING上
9、发布内网192.168.171.143主机的web服务,internet用户通过访问防火墙的IP地址即可访问该主机的web服务
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.171.143:80
10、发布内网192.168.171.143主机的终端服务,internat用户通过访问防火墙的IP地址访问该主机的终端服务
iptables -t nat -I PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 192.168.171.143:3389
#开放常用的端口
iptables -A INPUT -p TCP --dport 80 -j ACCEPT
iptables -A INPUT -p TCP --sport 80 -j ACCEPT
iptables -A INPUT -p TCP --dport 25 -j ACCEPT
iptables -A INPUT -p TCP --sport 25 -j ACCEPT
iptables -A INPUT -p TCP --dport 110 -j ACCEPT
iptables -A INPUT -p TCP --sport 110 -j ACCEPT
iptables -A INPUT -p TCP --dport 143 -j ACCEPT
iptables -A INPUT -p TCP --sport 143 -j ACCEPT
#SSH
iptables -A INPUT -p TCP --dport 59687 -j ACCEPT
iptables -A INPUT -p TCP --dport 9900 -j ACCEPT
iptables -A INPUT -p UDP --sport 53 -j ACCEPT
iptables -A INPUT -p TCP --sport 53 -j ACCEPT
#antispam
iptables -A INPUT -p TCP --sport 6220 -j ACCEPT
iptables -A INPUT -p TCP --sport 6610 -j ACCEPT
iptables -A INPUT -p TCP --sport 6611 -j ACCEPT
#SSL
iptables -A INPUT -p TCP --dport 995 -j ACCEPT
iptables -A INPUT -p TCP --dport 993 -j ACCEPT
iptables -A INPUT -p TCP --dport 465 -j ACCEPT
iptables -A INPUT -p TCP --dport 443 -j ACCEPT
#NTP date
iptables -A INPUT -p UDP --sport 123 -j ACCEPT
#snmp
iptables -A INPUT -i eth0 -p udp -s 125.76.229.215 --dport 161 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s 60.195.249.83 --dport 161 -j ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -j REJECT
iptables -P OUTPUT ACCEPT
#防止同步包洪水(Sync Flood)
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
#防止各种端口扫描
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
#Ping洪水攻击(Ping of Death)
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
#屏蔽 SYN_RECV 的连接
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
FirewallD 使用服务(service) 和区域(zone)来代替 iptables 的规则(rule)和链(chain)。
firewalld的认识
1、firewalld提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。
2、firewalld将网卡分为不同的区域(区域),这些区域的区别在于对待来访的用户及传输的数据包的默认动作的不同,通过制定一 些安全 策略从而保证系统在被访问或传输数据时的安全。
/usr/lib/firewalld service ssh.xml
默认情况下,有以下的区域(zone)可用:
firewalld分为九个区域,含义如下:
trust(信任):可接受所有的网络连接;
home(家庭):用于家庭网络,仅接受ssh、mdns、ipp-client、samba-client或dhcpv6-client服务连接;
internal(内部):用于内网络,仅接受ssh、ipp-client、mdns、samba-client或dhcpv6-client服务连接;
work(工作区):用于工作区,仅接受ssh、ipp-client、dhcpv6-client服务连接;
public(公共):用于公共区域的使用,仅接受ssh、dhcpv6-client服务,为firewalld的默认区域;
external(外部区域):出去的ipv4的网络连接经过此区域的伪装和转发,只支持ssh服务;
dmz(隔离区):仅接受ssh服务;
block(限制):拒绝所有的网络服务;
drop(丢弃):任何访问的网络数据包都会被丢弃,没有任何回应。
预定义服务/添加端口
1 直接编辑配置文件/etc/firewalld/
2 使用firewall-config图形工具
通过这个图形工具,可以更改和检查firewalld内存中的配置(Runtime),也可以修改磁盘上的持久配置(Permanent)
3 使用firewall-cmd命令
预定义服务
使用firewall-config来启动图形界面查看预定义服务,在有条件的情况下推荐使用
预定义服务可以通过查看firewalld.service(5)man手册
也可以通过查看目录了解更详细,该目录下面的禁止编辑
[root@localhost ~]# ls /usr/lib/firewalld/services/
也可以查看该目录下的,该目录下的可以编辑
[root@localhost ~]# ls /etc/firewalld/services/
#使用命令查看所有支持的服务
[root@localhost ~]# firewall-cmd --get-services
#添加服务
[root@mail ~]# firewall-cmd --add-service=http
#设置服务超时时间,即服务的开启时间,单位秒
[root@mail ~]# firewall-cmd --add-service=http --timeout=10
熟练和习惯使用tab进行选项补全和参数补全
#启用紧急模式(所有的 规则出入都拒绝)
[root@mail ~]# firewall-cmd --panic-on
#禁用紧急模式
[root@mail ~]# firewall-cmd --panic-off
#查询紧急模式状态
[root@mail ~]# firewall-cmd --query-panic
#查看当前区域
[root@mail ~]# firewall-cmd --get-default-zone
#查看所有支持的区域
[root@mail ~]# firewall-cmd --get-zones
#设置trusted区域为当前区域
[root@mail ~]# firewall-cmd --set-default-zone=trusted
#根据接口查询区域
[root@mail ~]# firewall-cmd --get-zone-of-interface=eno16777736
#添加当前源地址
[root@mail ~]# firewall-cmd --add-source=192.168.171.1/24
#添加一个端口
[root@mail ~]# firewall-cmd --add-port=8080/tcp
#删除源地址
[root@mail ~]# firewall-cmd --remove-source=192.168.171.1/24
#删除端口
[root@mail ~]# firewall-cmd --remove-port=8080/tcp
#以上都为运行时生效
#永久生效
#添加规则
[root@mail ~]# firewall-cmd --permanent --add-service=http
#重新加载
[root@mail ~]# firewall-cmd --reload
#列出所支持的ICMP类型
[root@mail ~]# firewall-cmd --get-icmptypes
#列出所有区域的详细信息
[root@mail ~]# firewall-cmd --list-all-zones
#添加ssh服务进行测试
[root@mail ~]# firewall-cmd --permanent --add-service=ssh
--add-source=目标ip
--remove-source=目标ip
--add-source=ip --zone=drop (指定不同区域对当前区域不生效)
#列出指定区域的规则
[root@mail ~]# firewall-cmd --zone=trusted --list-all
#启用伪装功能,但因为内核限制,只支持ipv4
[root@mail ~]# firewall-cmd --add-masquerade
#添加禁止icmp报文
[root@mail ~]# firewall-cmd --add-icmp-block=echo-request
永久模式不直接影响运行时状态,只有在重启服务或者重载时生效
运行模式,直接模式不保存规则,在重载或者重启服务后必须再次提交,传递的参数和iptable一致
#添加一个列表
[root@mail ~]# firewall-cmd --direct permanent --add-chain ipv4 raw blacklist
#给列表添加一个规则
[root@mail ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.171.0/24 -j blacklist
#定义列表的动作
[root@mail ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP