本系列文章参考朱双印博客,原文链接: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文件中记录日志信息,然后将数据包传递给下一条规则,除了记录之外不对数据包做任何操作,仍然让下一条规则去匹配。
posted on 2023-07-25 18:40  jiayou111  阅读(24)  评论(0编辑  收藏  举报