Linux中级之netfilter防火墙(iptables)
一、什么是防火墙?
防火墙其实就是一个隔离工具:工作于主机或者网络的边缘
对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配检测
对于能够被规则所匹配的报文做出相应处理的组件(这个组件可以是硬件,也可以是软件)
种类:
主机防火墙、网络防火墙
硬件防火墙、软件防火墙
硬件防火墙:思科(AIR-CT5508-300-K9)、华为(USG6670)
报文:报文也是网络传输的单位,传输过程中会不断的封装成分组、包、帧来传输,封装的方式就是添加一些信息段,那些就是报文头以一定格式组织起来的数据。比如里面有报文类型,报文版本,报文长度,报文实体等等信息。
报文就是在各个系统之间进行请求和响应时用来交换信息的,还需要遵守规定好的格式。另外,应用报文多是多个系统之间需要通信的时候,比如银行的ESB系统到网关系统再到银联系统。在这中间报文就承担了装载数据,运输数据的功能,可能在这三个系统中报文的格式互不相同,但是承载的数据都是一样的。
套接字:套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。
二、四表五链:
1、、功能(表)
filter:过滤,防火墙
nat:network address translation,网络地址转换
mangle:拆分报文,做出修改,封装报文
raw:关闭nat表上启用的连接追踪机制
2、链(内置)chain
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
3、应用优先级
表:filter nat mangle raw
策略应用优先级:raw > mangle > nat > filter
策略常用优先级:filter > nat > mangle > raw
链:prerouting input forward output postrouting
4、表中的链:(各功能可以在哪些链上实现)
filter:INPUT,FORWARD,OUTPUT
nat:PREROUTING(DNAT),OUTPUT,INPUT,POSTROUTING(SNAT)
mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
raw:PREROUTING,OUTPUT
5、数据报文的流向:
流入:PREROUTING --> INPUT
流出:OUTPUT --> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
6、路由发生的时刻(PREROUTING,POSTROUTING)
报文进入本机后:判断目标主机
报文发出之前:判断经由哪个借口送往下一跳
7、添加规则时的考量点:
(1)要实现什么功能:判断添加在哪张表上;
(2)报文流经的路径:判断添加在哪个链上;
三、工具
规则管理工具,就是负责在5个钩子函数中添加删除修改等操作
在6中管理防火墙工具:iptables/netfilter
在7中管理防火墙工具:firewalld
常用选项:
1、链管理
-F: flush,清空规则链:省略链,表示清空指定表上的所有的链
-N: new, 创建新的自定义规则链:
-X: drop, 删除用户自定义的空的规则链
-P: Policy, 为指定链这是默认策略,对filter表中的链而言,默认策略通常有ACCEPT,DROP,REJECT;
2、规则管理
-A:append,将新规则追加于指定链的尾部
-I:insert,将新规则插入至指定链的指定位置
-D:delete,删除指定链上的指定规则:
3、查看防火墙策略
-L:list, 列出指定链上的所有规则:
-n:number,以数字格式显示地址和端口号
-v:verbose,显示详细信息
-vv,-vvv
--line-numbers:显示规则编号:
4、匹配条件
-s, source:检查报文中源ip地址是否符合此处指定的地址范围
-d, destination:检查报文中ip地址是否符合此处指定的地址范围
-p, protocol(udp|tcp|icmp):检查报文中的协议
-i, input-interface:数据报文的流入接口:仅能用于PREROUTING,INPUT,FORWARD链上(从指定网卡流入的报文)
-o, out-interface:数据报文的流出接口:仅能用于POSTROUTING,OUTPUT,FORWARD链上(从指定网卡流出的报文)
-j target:jump至指定的target
ACCEPT:接受
DROP:丢弃
REJECT:拒绝
RETURN:返回调用链
REDIRECT:端口重定向
LOG:记录日志
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装
....
自定义链:由自定义链中的的规则进行匹配
--dport:指定目标端口
--sport:指定源端口
-m:multiport PORT,PORT,[PORT] 设置多个端口
iprange --src-range 192.168.1.1-192.168.1.254
string --algo bm --string 'STRING'
state --state NEW,ESTABLISHED,RELATED,INVALID
保存防火墙配置:iptables-save > filename
恢复防火墙配置:iptables-restore < filename
四、例子:
1、拒绝访问本主机的web服务(80端口)
iptables -t filter -A INPUT -p tcp --dport 80 -j DROP
iptables -t filter -I OUTPUT -p tcp --sport 80 -j DROP
2、限制所有主机拒绝ping本主机
iptables -t filter -A INPUT -s 192.168.254.0/24 -d 192.168.254.13 -p icmp -j REJECT
iptables -t filter -A INPUT -s 192.168.254.1 -d 192.168.254.13 -p icmp -j REJECT
3、拒绝192.168.254.1这个主机发送icmp协议的报文流入本主机的ens33网卡
iptables -t filter -A INPUT -s 192.168.254.1 -i ens33 -p icmp -j REJECT
iptables -t filter -A OUTPUT -d 192.168.254.1 -o ens33 -p icmp -j REJECT
4、修改INPUT链上的默认策略
iptables -P INPUT DROP
5、拒绝192.168.254.1-254的机器访问本主机的21,80端口
iptables -t filter -A INPUT -p tcp -m multiport --dports 21,80 -m iprange --src-range 192.168.254.1-192.168.254.254 -j REJECT
6、访问的报文中出现hello字符的那么就拒绝传输
iptables -I OUTPUT -m string --algo bm --string 'hello' -j REJECT
nat表:
#开启核心转发功能
临时性:
echo 1 > /proc/sys/net/ipv4/ip_forward
永久性:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
7、源地址为192.168.20.2的主机地址经过防火墙都转换成172.16.100.1这个ip地址(SNAT:源地址转换)
iptables -t nat -A POSTROUTING -s 192.168.20.2 -d 172.16.100.2 -j SNAT --to-source 172.16.100.1
8、访问目标地址为172.16.100.1这个机器并且是tcp协议80号端口的都转发给192.168.20.2的80端口(DNAT目标地址转换)
iptables -t nat -A PREROUTING -d 172.16.100.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.20.2:80
9、访问目标地址为172.16.100.1这个机器并且是tcp协议80号端口的都转发给192.168.20.2的8080号端口(DNAT目标端口地址转换)
iptables -t nat -A PREROUTING -d 172.16.100.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.20.2:8080
五、关键技术
1、包过滤技术
防火墙的包过滤技术一般只应用于OSI7层的模型网络层的数据中,其能够完成对防火墙的状态检测,从而预先可以把逻辑策略进行确定。逻辑策略主要针对地址、端口与源地址,通过防火墙所有的数据都需要进行分析,如果数据包内具有的信息和策略要求是不相符的,则其数据包就能够顺利通过,如果是完全相符的,则其数据包就被迅速拦截。计算机数据包传输的过程中,一般都会分解成为很多由目和地质等组成的一种小型数据包,当它们通过防火墙的时候,尽管其能够通过很多传输路径进行传输,而最终都会汇合于同一地方,在这个目地点位置,所有的数据包都需要进行防火墙的检测,在检测合格后,才会允许通过,如果传输的过程中,出现数据包的丢失以及地址的变化等情况,则就会被抛弃。
2、加密技术
计算机信息传输的过程中,借助防火墙还能够有效的实现信息的加密,通过这种加密技术,相关人员就能够对传输的信息进行有效的加密,其中信息密码是信息交流的双方进行掌握,对信息进行接受的人员需要对加密的信息实施解密处理后,才能获取所传输的信息数据,在防火墙加密技术应用中,要时刻注意信息加密处理安全性的保障。在防火墙技术应用中,想要实现信息的安全传输,还需要做好用户身份的验证,在进行加密处理后,信息的传输需要对用户授权,然后对信息接收方以及发送方要进行身份的验证,从而建立信息安全传递的通道,保证计算机的网络信息在传递中具有良好的安全性,非法分子不拥有正确的身份验证条件,因此,其就不能对计算机的网络信息实施入侵。
3、防病毒技术
防火墙具有着防病毒的功能,在防病毒技术的应用中,其主要包括病毒的预防、清除和检测等方面。防火墙的防病毒预防功能来说,在网络的建设过程中,通过安装相应的防火墙来对计算机和互联网间的信息数据进行严格的控制,从而形成一种安全的屏障来对计算机外网以及内网数据实施保护。计算机网络要想进行连接,一般都是通过互联网和路由器连接实现的,则对网络保护就需要从主干网的部分开始,在主干网的中心资源实施控制,防止服务器出现非法的访问,为了杜绝外来非法的入侵对信息进行盗用,在计算机连接的端口所接入的数据,还要进行以太网和IP地址的严格检查,被盗用IP地址会被丢弃,同时还会对重要信息资源进行全面记录,保障其计算机的信息网络具有良好安全性。
4、代理服务器
代理服务器(Proxy Server)的功能是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站,是个人网络和Internet服务商之间的中间代理机构,负责转发合法的网络信息,对转发进行控制和登记。
代理服务器是防火墙技术引用比较广泛的功能,根据其计算机的网络运行方法可以通过防火墙技术设置相应的代理服务器,从而借助代理服务器来进行信息的交互。在信息数据从内网向外网发送时,其信息数据就会携带着正确IP,非法攻击者能够分局信息数据IP作为追踪的对象,来让病毒进入到内网中,如果使用代理服务器,则就能够实现信息数据IP的虚拟化,非法攻击者在进行虚拟IP的跟踪中,就不能够获取真实的解析信息,从而代理服务器实现对计算机网络的安全防护。另外,代理服务器还能够进行信息数据的中转,对计算机内网以及外网信息的交互进行控制,对计算机的网络安全起到保护。
基本功能:
(1) 一个lP地址或Internet帐户供多个用户同时使用
(2) 缓存功能,可以降低费用,提高速度
(3) 对内部网络用户进行权限和信息流量计费管理
(4) 对进入内部网络的Internet信息实施监控和过滤