一、防火墙概念
linux下防火墙一般分为软件防火墙、硬件防火墙
硬件防火墙:在硬件的级别实现防火墙过滤功能,性能高,但成本也很高
软件防火墙:在软件系统内核级别实现网络流量过滤,性能稍弱,但是成本也很低
1.软件防火墙
在linux上提供的软件防火墙,名字叫做iptables,它是一个防火墙命令行工具,iptables还是一个客户端代理
通过iptables的代理,将用户配置的安全策略,执行到对应的安全框架中netfilter
iptables只是个命令行工具,处于用户空间,离用户最近
真正实现流量过滤的软件是netfileter,处于系统内核空间,和操作系统离得是最近的
iptables+netfilter共同组成了linux的软件防火墙,一般就用来代替昂贵的硬件防火墙了
centos7系统下
firewalld软件,有替代了iptables工具
iptables是把用户配置的防火墙规则,交给内核层的netfiler工具去处理
firewalld服务把用户配置的防火墙规则交给内核层的nftables网格过滤器去处理
2.iptables默认规则
iptables默认会自上而下的读取防火墙规则,匹配到正确规则后,就结束匹配的工作,并且执行对应的工作。
如果读取的防火墙所有规则都没有符合,就执行默认的策略。
默认策略一般分为两种:
- 允许
- 拒绝
当默认规则全都是拒绝的时候,你就得设置一些允许通过的流量,否则所有的流量都禁止了
当默认的规则全部都是允许的时候,就得设置一些拒绝的匹配规则,以保证服务器的安全
防火墙的规则默认是存储在linux内核空间的信息包中,这些规则定义了源地址信息,目的地址信息,传输协议类型,服务类型
当数据包符合规则条件的时候,iptables就根据所定义的动作,来处理这些数据包,放行,拒绝,丢弃
3.iptables的五链
iptables把用于处理和过滤流量的策略,称之为规则,多条规则就组成了一个规则链,并且规则链,还有默认的动作,规则链根据数据包所处的不同位置进行不同的分类
linux默认的五个规则链
- 路由选择前处理数据包,prerouting链
- 处理流入的数据包,input链
- 处理流出的数据包,output链
- 处理转发的数据包,forward链
- 进行路由选择后处理数据包,postrouting链
主要使用的都是input链
4.iptables动作
服务器流量在通过input链之后,进入到服务器内,还得遵循一些动作去处理数据包
- accpet,允许数据包通过
- reject,拒绝数据包通过,还会给客户端一个响应,告知对方被拒绝
- log,在linux系统的日志目录下/var/log/message中记录防火墙日志,在进行下一个数据包处理
- drop,直接丢弃数据包,不给予任何的回复
- SNAT,源地址转换,解决内网用户用同一个公网的问题,用于forward链
- DNAT,目标地址转换
- redirect,在本机做端口映射
5.四表五链
表:
- raw:高级功能,如:网址过滤
- mangle:数据包修改(QOS),用于实现服务质量
- net:地址转换,用于网关路由器
- filter:包过滤,用于防火墙规则
链:
- input链:处理输入数据包
- output链:处理输出数据包
- forward链:处理转发数据包
- prerouting链:用于目标地址转化(DNAT)
- postouting链:用于源地址转换(SNAT)
动作:
- accpet,允许数据包通过
- reject,拒绝数据包通过,还会给客户端一个响应,告知对方被拒绝
- log,在linux系统的日志目录下/var/log/message中记录防火墙日志,在进行下一个数据包处理
- drop,直接丢弃数据包,不给予任何的回复
- SNAT,源地址转换,解决内网用户用同一个公网的问题,用于forward链
- DNAT,目标地址转换
- redirect,重定向,映射,透明代理
- masquerade:IP伪装(NAT),用于ADSL
- LOG:日志记录
6.iptables实例
禁止服务器被ping
# -A 指定链 -p 指定协议 --icmp-type 8 指定icmp协议的类型 -s 指定源ip端 -j 动作 iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j REJECT
删除指定规则
iptables -D INPUT 1
禁止访问服务器的80端口
iptables -A INPUT -p tcp --dport 80 -j DROP
禁止服务器被ping(动作为丢弃)
# -A 指定链 -p 指定协议 --icmp-type 8 指定icmp协议的类型 -s 指定源ip端 -j 动作 iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP