LINUX常用工具之iptables主机防火墙

一、什么是主机Iptables?

iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。在日常Linux运维工作中,经常会设置iptables防火墙规则,用来加固服务安全。

iptables其实不是真正的防火墙,我们可以把它理解成一个命令行工具,用户通过iptables这个工具,将用户的安全策略执行到对应的安全空间中,这个安全空间才是真正的防火墙,在linux上这个框架的名字叫netfilter,所以netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。

iptables其实就是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。

iptables工作依据------规则(rules)

规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为"如果数据包头符合这样的条件,就这样处理这个数据包"。规则存储在内核空间的信息 包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。

当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept),拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作是添加,修改和删除等规则。

其中:

匹配(match):符合指定的条件,比如指定的 IP 地址和端口。

丢弃(drop):当一个包到达时,简单地丢弃,不做其它任何处理。

接受(accept):和丢弃相反,接受这个包,让这个包通过。

拒绝(reject):和丢弃相似,但它还会向发送这个包的源主机发送错误消息。这个错误消息可以指定,也可以自动产生。

目标(target):指定的动作,说明如何处理一个包,比如:丢弃,接受,或拒绝。

跳转(jump):和目标类似,不过它指定的不是一个具体的动作,而是另一个链,表示要跳转到那个链上。

规则(rule):一个或多个匹配及其对应的目标。

二、iptables的四表五链

1、表

iptables中每个"规则链"上都设置了一串规则,把不同的"规则链"组合成能够完成某一特定功能集合的分类,而这个集合分类我们就称为表,iptables中共有4张表:

filter表------过滤数据包

Nat表------用于网络地址转换(IP、端口)

Mangle表------修改数据包的服务类型、TTL、并且可以配置路由实现QOS

Raw表------决定数据包是否被状态跟踪机制处理

2、链

防火墙的作用就在于对经过的报文匹配"规则",然后执行对应的"动作",所以,当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了"链",iptables中共有5条链:

INPUT链------进来的数据包应用此规则链中的策略

OUTPUT链------外出的数据包应用此规则链中的策略

FORWARD链------转发数据包时应用此规则链中的策略

PREROUTING链------对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)

POSTROUTING链------对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

3、表与链之间的关系

我们在实际的使用过程中,往往是通过"表"作为操作入口,对规则进行定义,而某些"链"中注定不会包含"某类规则",各"表"与"链"的关系参考如下:

filter表可以使用哪些链定义规则:INPUT,FORWARD,OUTPUT

nat表中可以使用哪些链定义规则:PREROUTING,OUTPUT ,POSTROUTING,INPUT

mangle 表中可以使用哪些链定义规则:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

raw表中可以使用哪些链定义规则:PREROUTING,OUTPUT

4、iptables中表的优先级

iptables为我们定义了4张"表",当他们处于同一条"链"时,执行的优先级如下:

raw-mangle-nat-filter(由高至低)

三、Iptables数据包走向

四、iptables常用命令

1)iptables的基本语法格式

iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]

说明:

表名、链名:用于指定iptables命令所操作的表和链;

命令选项:用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等;

条件匹配:用于指定对符合什么样 条件的数据包进行处理;

目标动作或跳转:用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转(Jump)给其它链处理。

2)iptables命令的管理控制选项

-A 在指定链的末尾添加(append)一条新的规则

-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除

-I 在指定链中插入(insert)一条新的规则,默认在第一行添加

-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换

-L 列出(list)指定链中所有的规则进行查看(默认是filter表,如果列出nat表的规则需要添加-t,即iptables -t nat -L)

-E 重命名用户定义的链,不改变链本身

-F 清空(flush)

-N 新建(new-chain)一条用户自己定义的规则链

-X 删除指定表中用户自定义的规则链(delete-chain)

-P 设置指定链的默认策略(policy)

-Z 将所有表的所有链的字节和数据包计数器清零

-n 使用数字形式(numeric)显示输出结果

-v 查看规则表详细信息(verbose)的信息

-V 查看版本(version)

-h 获取帮助(help)

3)防火墙处理数据包的四种方式ACCEPT 允许数据包通过

DROP 直接丢弃数据包,不给任何回应信息

REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。

LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

4)iptables防火墙规则的保存与恢复

iptables-save把规则保存到文件中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动装载

使用命令iptables-save来保存规则。

一般用:

iptables-save > /etc/sysconfig/iptables

生成保存规则的文件/etc/sysconfig/iptables,

也可以用:

service iptables save

它能把规则自动保存在/etc/sysconfig/iptables中。

当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,就会自动恢复规则。

五、iptables黑、白名单示例

1、黑名单

默认规则全放通访问,如果有想禁用的端口规则,则添加drop规则,再依次往上写策略放通。

bash 复制代码
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
#################1521#####################################
-A RH-Firewall-1-INPUT -s  1.1.1.1 -p tcp --dport  22 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport  22 -j DROP
########################################################
-A RH-Firewall-1-INPUT -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

2、白名单

默认规则全禁止访问(对出访不做限制),如果有想禁用的端口规则,则添加accept规则,再依次往上写策略放通。

bash 复制代码
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
########allow ip############
-A RH-Firewall-1-INPUT -s 192.168.0.0/24   -j ACCEPT


-A RH-Firewall-1-INPUT -m state --state ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
相关推荐
tmacfrank26 分钟前
网络编程中的直接内存与零拷贝
java·linux·网络
数据与人工智能律师2 小时前
虚拟主播肖像权保护,数字时代的法律博弈
大数据·网络·人工智能·算法·区块链
James. 常德 student3 小时前
网络安全知识点
安全·web安全·php
QQ2740287563 小时前
Soundness Gitpod 部署教程
linux·运维·服务器·前端·chrome·web3
qwfys2003 小时前
How to configure Linux mint desktop
linux·desktop·configure·mint
南方以南_3 小时前
Ubuntu操作合集
linux·运维·ubuntu
purrrew3 小时前
【Java ee初阶】HTTP(2)
网络·网络协议·http
冼紫菜4 小时前
[特殊字符]CentOS 7.6 安装 JDK 11(适配国内服务器环境)
java·linux·服务器·后端·centos
Chuncheng's blog5 小时前
RedHat7 如何更换yum镜像源
linux
爱莉希雅&&&5 小时前
shell脚本之条件判断,循环控制,exit详解
linux·运维·服务器·ssh