本系列文章参考朱双印博客,原文链接:https://www.zsythink.net/archives/1199
写在前面
设置iptables防火墙,需要明确的2点:
1.本机开通了哪些服务端口
2.有哪些机器需要访问本机
一般为了安全性考虑,先只开通需要本机对需要访问本机的22端口和本机的服务端口。
# 阻止所有流量
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# 允许回环设备
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# 允许已经建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许SSH连接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许HTTP和HTTPS连接
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许DNS查询
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
# 允许ping
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
相关概念
1.防火墙分类
从逻辑上可以分为主机防火墙和网络防火墙。
- 主机防火墙:针对于单个主机进行防护。
- 网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。
网络防火墙和主机防火墙并不冲突,可以理解为,网络防火墙主外(集体), 主机防火墙主内(个人)。
从物理上讲,防火墙可以分为硬件防火墙和软件防火墙。
- 硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。
- 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。
2.iptables简介
iptables其实是一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”netfilter中,netfilter才是真正的防火墙,也就是安全框架(framework),位于内核空间。
iptables是一个命令行工具,位于用户空间,用这个工具操作真正的框架。
netfilter/iptables(下文中简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
netfilter是Linux操作系统核心层内部的一个数据包处理模块,具有如下功能:
- 1.网络地址转换(Network Address Translate)
- 2.数据包内容修改
- 3.数据包过滤
所以虽然使用service iptables start
启动iptables服务,但是准确的来说,iptables并没有一个守护进程,所以并不能算是真正意义上的服务,而应该算是内核提供的功能。
3.iptables基础
3.1链的概念
每个经过某个链的报文,都要将这条链上的所有规则都匹配一遍,如果有符合条件的规则,则执行规则对应的动作。
链有5种,位于用户空间:prerouting,forward,postrouting,input(流向web服务),output
- 到本机某进程的报文流向:prerouting -> input
- 由本机转发的报文流向:prerouting -> forward -> postrouting
- 由本机的某进程发出报文(响应报文)流向:output -> postrouting
3.2表
具有相同功能的规则的集合叫做表。表一共分4种:filter表,nat表(network address translation),mangle表,raw表。
- filter表:负责过滤功能,防火墙;内核模块:iptables_filter
- nat表:网络地址转换功能;内核模块:iptables_nat
- mangle表:拆解报文,做出修改,并重新封装;内核模块:iptables_mangle
- raw表:关闭nat表上启用的连接追踪机制;内核模块:iptables_raw
3.3表链关系
每条“链”上的规则都存在于哪些”表“,即某条链只拥有哪张表相应的功能。
- prerouting链的规则只能存放在:nat表,raw表,mangle表
- input链的规则只能存放在:mangle表,filter表(centos7中有nat表,centos6中没有)
- forward链的规则只能存放在:mangle表,filter表
- output链的规则只能存放在:raw表,mangle表,filter表,nat表
- postrouting链的规则只能存放在:mangle表,raw表
实际使用中,是针对“表”作为操作入口,对规则进行定义。
3.4表(功能)<->链(钩子)
- raw表规则可被哪些链使用:prerouting,output
- mangle表规则可被哪些链使用:prerouting,input,forward,postrouting,output
- nat表规则可被哪些链使用:prerouting,output,postrouting(centos7中有input)
- filter表规则可被哪些链使用:input,forward,output
数据包在经过一条“链”的时候,会将当前链的所有规则都匹配一遍,但匹配时会有先后顺序,哪张“表”的规则会放在“链”的最前面执行呢,这就涉及到表的优先级。
3.5表的优先级
由高到低:raw -> mangle -> nat -> filter
3.6数据经过防火墙的流程
3.7规则
根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理。
规则的组成:匹配条件+动作
匹配条件:基本匹配条件、扩展匹配条件
基本匹配条件:源地址SourceIP,目标地址Destination IP
扩展匹配条件:以模块形式存在,需要依赖对应的扩展模块。比如源端口Source Port,目标端口Destination Port
3.8处理动作
在iptables中被称为target,动作也分为基本动作和扩展动作。
- ACCEPT:允许数据包通过。
- DROP:直接丢弃数据包,不给任何回应消息。
- REJECT:拒绝数据包通过,必要时会给数据发送段一个响应的信息,客户端刚请求就会收到拒绝的信息。
- SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
- MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的IP上。
- DNAT:目标地址转换。
- REDIRECT:在本机做端口映射。
- LOG:在
/var/log/messages
文件中记录日志信息,然后将数据包传递给下一条规则,除了记录之外不对数据包做任何操作,仍然让下一条规则去匹配。