自学内容网 自学内容网

iptables防火墙详解

iptables防火墙详解

一、iptables概念
  1. 防火墙基础

从逻辑上讲,防火墙可以大体分为主机防火墙和网络防火墙。网络防火墙和主机防火墙并不冲突,可以理解为,网络防火墙主外(集体),主机防火墙主内(个人)。

  • 主机防火墙:针对于单个主机进行防护。
  • 网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。

从物理上讲,防火墙可以分为硬件防火墙和软件防火墙。

  • 硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。
  • 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。

Linux防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(也称网络层防火墙)。Linux防火墙体系基于内核编码实现,具有非常稳定的性能和高效率,因此被广泛的应用。

  1. Netfilter和iptables的区别

    • Netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“内核态”(KernelSpace,又称内核空间)的防火墙功能体系(filter是过滤器的意思,netfilter即网络层过滤)。Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有网络地址转换(NetworkAddressTranslate)、数据包内容修改以及数据包过滤的防火墙功能。
    • Iptables:指的是用来管理Linux防火墙的命令程序,通常位于/sbin/iptables,属于“用户态”(UserSpace,又称用户空间)的防火墙管理体系(iptables:IP信息包过滤系统)。虽然我们使用service iptables start启动iptables服务,但是其实准确的来说,iptables并没有一个守护进程,所以并不能算是真正意义上的服务,而应该算是内核提供的功能。

包过滤主要是网络层,针对IP数据包;体现在对包内的IP地址、端口等信息的处理上;而iptables作用是为包过滤机制的实现提供规则(或策略),通过各种不同的规则,告诉netfilter对来自某些源、前往某些目的或具有某些协议特征的数据包应该如何处理。

iptables默认维护着4个表和5个链,所有的防火墙策略规则都被分别写入这些表与链中。规则链上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了链,ip请求将这条链上的所有规则匹配一遍,如果有符合条件的规则,则执行规则对应的动作。

  • 规则:的作用是对数据包进行过滤或处理。
  • :的作用是容纳各种防火墙规则;链的分类依据是处理数据包的不同时机。

总共有五种5种规则链,分别是:

  • INPUT:处理入站数据包。
  • OUTPUT:处理出站数据包。
  • FORWARD:处理转发数据包。
  • POSTROUTING链:在进行路由选择后处理数据包(对数据链进行源地址修改转换)。
  • PREROUTING链:在进行路由选择前处理数据包(做目标地址转换)。

INPUT、OUTPUT链主要用在“主机型防火墙”中,即主要针对服务器本机进行保护的防火墙;而FORWARD、PREROUTING、POSTROUTING链多用在“网络型防火墙”中。

  1. 规则表

表的作用是容纳各种规则链;表的划分依据是防火墙规则的作用相似,默认包括4个规则表。

  • raw表:确定是否对该数据包进行状态跟踪以及处理异常,表内包含两个链:OUTPUT、PREROUTING。为数据包的TOS(服务类型)、TTL(生命周期)值,或者为数据包设置Mark标记,以实现流量整形、策略路由等高级应用。其对应iptable_mangle,表内包含五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD。
  • mangle表:为数据包设置标记。
  • nat表:修改数据包中的源、目标IP地址或端口;其对应的模块为iptable_nat,表内包括三个链:PREROUTING、POSTROUTING、OUTPUT(centos7中还有INPUT,centos6中没有)。
    • PREROUTING链:处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
    • POSTROUTING链:处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
    • OUTPUT链:处理本机产生的数据包。
  • filter表:确定是否放行该数据包(过滤);其对应的内核模块为iptable_filter,表内包含三个链:INPUT、FORWARD、OUTPUT。
    • INPUT链:处理来自外部的数据。
    • OUTPUT链:处理向外发送的数据。
    • FORWARD链:将数据转发到本机的其他网卡设备上。

规则表之间的顺序:raw->mangle->nat->filter。

规则链之间的顺序:

  • 入站:PREROUTING->INPUT
  • 出站:OUTPUT->POSTROUTING
  • 转发:PREROUTING->FORWARD->POSTROUTING

规则链内的匹配顺序:按顺序依次检查,匹配即停止(LOG策略例外),若找不到相匹配的规则,则按该链的默认策略处理。

表和链的关系:表下面是链,表容纳链。

  1. 规则

根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理。

  • 匹配条件:基本匹配条件源地址Source IP,目标地址Destination IP。除了上述的条件可以用于匹配,还有很多其他的条件可以用于匹配,这些条件泛称为扩展条件,这些扩展条件其实也是netfilter中的一部分,只是以模块的形式存在,如果想要使用这些条件,则需要依赖对应的扩展模块。源端口Source Port,目标端口Destination Port。
  • 处理动作:在iptables中被称为target,动作也可以分为基本动作和扩展动作。此处列出一些常用的动作:
    • ACCEPT:允许数据包通过。
    • DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
    • REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
    • SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
    • MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
    • DNAT:目标地址转换。
    • REDIRECT:在本机做端口映射。
    • LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。
二、iptables规则管理
  1. iptables规则操作

    • iptables信息查询

filter负责过滤功能,比如允许哪些IP地址访问,拒绝哪些IP地址访问,允许访问哪些端口,禁止访问哪些端口# filter表会根据我们定义的规则进行过滤,filter表应该是我们最常用到的表了# 下面两种都可以# 默认不加-t就是指的filter表iptables -t filter --list。

  1. 检查iptables状态

在开始配置iptables之前,首先要确保iptables服务是否已启动并检查当前的规则。

  • 查看iptables服务状态:systemctl status iptables。此命令会显示iptables服务是否正在运行。
  • 查看当前iptables规则:iptables -nL。此命令列出当前生效的iptables规则。若未安装iptables或无配置规则,可能不会显示任何内容。
  1. 安装iptables

如果服务器上未安装iptables,可以使用以下步骤进行安装。

  • 下载iptables安装包:通过wget命令下载所需的安装包。
  • 安装iptables:使用rpm命令安装下载的包。
  • 备份默认配置:cp /etc/sysconfig/iptables /etc/sysconfig/iptables_bak。为了防止误操作,建议备份默认的iptables配置文件。
  1. 配置iptables规则

安装完成后,可以根据需求编辑iptables规则文件。以下是一个示例配置:

  • 编辑iptables配置文件:vim /etc/sysconfig/iptables
  • 在配置文件中输入以下内容
 

shell复制代码

# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports / services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED, ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 添加白名单 IP
-A INPUT -s 35.241.119.219 -j ACCEPT
-A INPUT -s 192.168.13


-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

复制代码

* **保存并退出**:按Esc键,输入:wq保存并退出。
5. **重启iptables服务**
编辑完成后,需要重启iptables服务以应用新的配置。
* **重启iptables服务**:systemctl restart iptables。此命令将重启iptables服务并应用新的规则配置。
6. **验证iptables规则**
重启服务后,可以使用以下命令验证iptables规则是否已正确应用。
* **查看iptables规则**:iptables -nL。此命令将列出当前生效的iptables规则,确认新规则是否已添加。
7. **iptables规则解释**
* **filter表**:iptables默认使用filter表,用于控制数据包的过滤。
* **链**:INPUT、FORWARD、OUTPUT是filter表中的三条链,分别用于处理进入、转发和离开本机的数据包。
* **规则**:每条规则都包含匹配条件和处理动作。例如,`-A INPUT -p tcp --dport 22 -j ACCEPT`表示允许所有目标端口为22的TCP数据包进入本机。
8. **iptables规则管理**
* **添加规则**:使用`-A`参数向指定链添加规则。例如,`iptables -A INPUT -p tcp --dport 80 -j ACCEPT`表示允许所有目标端口为80的TCP数据包进入本机。
* **删除规则**:使用`-D`参数从指定链删除规则。可以通过规则编号或具体匹配条件来删除规则。例如,`iptables -D INPUT 1`表示删除INPUT链中的第一条规则。
* **修改规则**:iptables本身不支持直接修改规则的功能,但可以通过删除旧规则并添加新规则的方式来实现修改。
* **保存规则**:为了在系统重启后保留iptables规则,需要将规则保存到配置文件中。在CentOS 7中,可以使用`service iptables save`命令将当前规则保存到`/etc/sysconfig/iptables`文件中。在Ubuntu中,可以使用`iptables-save > /etc/iptables/rules.v4`命令将规则保存到指定文件中,并在系统启动时通过`iptables-restore < /etc/iptables/rules.v4`命令恢复规则。
9. **iptables日志记录**
* **启用日志记录**:可以使用`-j LOG`动作将匹配的数据包记录到系统日志中。例如,`iptables -A INPUT -p tcp --dport 23 -j LOG --log-prefix "Failed SSH login attempt: "`表示将所有目标端口为23的TCP数据包记录到系统日志中,并在日志前添加前缀“Failed SSH login attempt: ”。
* **查看日志**:可以使用`tail -f /var/log/messages`或`journalctl -u iptables`等命令查看系统日志,以了解iptables的日志记录情况。
10. **iptables高级应用**
* **地址转换(NAT)**:NAT允许将一个IP地址空间映射到另一个IP地址空间。在iptables中,可以使用SNAT(源地址转换)和DNAT(目标地址转换)来实现NAT功能。例如,`iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 1.2.3.4`表示将所有源IP地址为192.168.1.0/24的数据包在通过eth0网卡时,将源IP地址转换为1.2.3.4。
* **端口转发**:端口转发允许将某个端口的流量转发到另一个端口或另一个主机上。在iptables中,可以使用DNAT和REDIRECT动作来实现端口转发功能。例如,`iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-ports 80`表示将所有目标端口为8080的TCP数据包转发到本机的80端口上。
#### 三、总结
iptables是Linux系统下强大的防火墙工具,通过配置iptables规则,可以实现数据包过滤、地址转换、端口转发等多种网络安全功能。在使用iptables时,需要了解表、链、规则等基本概念,并熟悉如何添加、删除、修改和保存规则。同时,通过启用日志记录和查看系统日志,可以了解iptables的匹配和处理情况,以便进行进一步的优化和调整。在配置iptables时,需要谨慎操作,避免误删除或误配置规则导致网络中断或安全问题。

原文地址:https://blog.csdn.net/2401_87322981/article/details/144313420

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!