iptables 即 Linux防火墙 的简单介绍及使用

iptables生效位置如下图:

  其中, 网络防火墙也可以使用一台启用了iptables的Linux主机代替; 路由器或集线器等设施在拓扑中省略了;

那么上图显示出了iptables在哪里, 下面说一下iptables的工作原理:

我们知道Linux中所有的数据包接收和发送都是在 内核 中完成的, 但是iptables并不是工作在内核中的, 那如何实现防火墙的功能?

iptables工作在用户空间, 并向工作在内核中的netfilter定义规则, 由netfilter来完成过滤数据包的功能; netfilter是内核提供的框架;

那么iptables是怎么指挥的呢? (iptables规则定义, 四表五链)

五链包括: INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING, 位置请参照上图, 如有不对请指正;

四表包括: filter  <-- nat <-- mangle <-- raw (有优先级顺序)

链表的功能实现:

filter: 过滤: INPUT, FORWARD, OUTPUT
nat: PREROUTING (DNAT做目标地址转换), OUTPUT, POSTROUTING(SNAT, 目标地址转换) 
mangle: 拆解报文, 全部位置
raw: 连接追踪, PREROUTING, OUTPUT

  注意: 连接追踪是一件比较耗资源的事情, 一般情况下不要使用;

小结: iptables用四表五链来设定过滤报文的规则, 而netfilter则根据大哥设定的规则办事;

那么我们下面就简单描述一下iptables的命令应用:

iptables命令使用:

  iptables   [-t table]           SUBCOMMAND   CHAIN    CRETERIA     -j TARGET

             作用于哪个表              子命令                       匹配标准          处理动作

  -t table 省略时, 默认作用于filter

具体使用说明请查看 链接, 详细易懂

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

我们列几个常用的:

  查看: iptables -L -n

  清空: iptables -F

  删除空的自定义链: iptables -X

  设定指定链的默认策略: iptables -P {INPUT | OUTPUT | ... } {DROP | ACCEPT | REJECT ... }

我们假设你已经看过了上面的链接, 并了解了 -s -d -p -i -o 这些选项的含义, 那么下面就举几个简单实例:

首先, 我们打开一台CentOS 7 的虚拟机, 使用 iptables -L -n 查看当前规则设定:

  注意: 如果发现规则比较多, 可以先禁用Firewalld, 并使用 iptables -F && iptables -X 清理, 然后再显示;

    备注: 禁用 firewalld 方法: systemctl disable firewalld

这时, 我们是通过 ssh 远程登陆到 Linux的, 那么我们首先要确保 ssh 登陆的 通过性, 换句话说, 就是, 开放 22 端口的INPUT和OUTPUT

# iptables -I INPUT -d 你的Linux的IP地址 -p tcp -dport 22 -j ACCEPT

# iptables -I OUTPUT -s 你的Linux的IP地址 -p tcp -sport 22 -j ACCEPT

接下来, 我们将 INPUT 和 OUTPUT 的默认策略改为 DROP

# iptables -P INPUT DROP

# iptables -P OUTPUT DROP

不出意外的话, 如果你的主机上有80端口提供web服务, 那么现在已经无法访问了; 为什么呢?

因为我们 DROP 掉了所有的包, 除了访问22端口的, 和从22端口响应出去的;

为什么我要先说明 开放22端口 呢? 因为我第一次设置的时候, 先改了INPUT的默认策略为DROP, 然后我就被自己锁在门外面了......

那么, 现在我需要让web服务能够访问:

# iptables -I INPUT -d 你的Linux的IP地址 -p tcp -dport 80 -j ACCEPT

# iptables -I OUTPUT -s 你的Linux的IP地址 -p tcp -sport 80 -j ACCEPT

那这样一来, 岂不是跟上面开放22端口一模一样, 只是换了个端口? 对, 就是换了个端口...

有没有办法能够一次搞定呢? 有:

# iptables -I INPUT -d 你的Linux的IP地址 -p tcp -m multiport --dports 22,80 -j ACCEPT

# iptables -I OUTPUT -s 你的Linux的IP地址 -p tcp -m multiport --sports 22,80 -j ACCEPT

-m 是什么呢?

显式扩展: 必须显式指明使用的扩展模块; 查看当前主机支持的扩展模块方法: rpm -ql iptables | grep "\.so"

有关显式扩展的文章

如何保存及重载规则:

保存规则至指定文件:
iptables-save > /root/iptables.1 存储当前防火墙规则

从指定文件重载规则:
iptables-restore < /root/iptables.1 读取并启用以保存的防火墙规则

上文提到过使用Linux做为网络防火墙来使用, 下面简单介绍下:

  • 准备: Linux主机四台, 一台做网络防火墙,配置两个网卡; 一台做外网主机; 两台做内网主机;
  • 网络防火墙主机: 一个网卡对内, 设置ip地址为 192.168.50.1/24; 一个网卡对外
  • 需要打开Linux的地址转发功能:
    • sysctl -w net.ipv4.ip_forward=1
    • cat /proc/sys/net/ipv4/ip_forward 为1
  • 内网主机: 添加 192.168.50.0/24 的任意一个地址
  • 外网主机: 添加路由规则 route add -net 192.168.50.0/24 gw 10.0.0.5 --> 注意此处用的是外网主机同一网段IP地址
  • 测试ping
  • 网络防火墙主机设置 iptables 的 FORWARD 链
    # iptables -P FORWARD DROP
    # iptables -I FORWARD -d 192.168.50.2 -p tcp --dport -j ACCEPT --> 放行进来的
    # iptables -I FORWARD -s 192.168.50.2 -p tcp --sport -j ACCEPT --> 放行出去的
  • 同时放行httpd和ssh服务

    # iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT
    # iptables -A FORWARD -d 192.168.50.2 -p tcp -m multiport --dports , -m state --state NEW -j ACCEPT
  • 外网主机需要访问内网ftp服务器怎么办?
    • 网络防火墙 完成上面的三步走

      # modprobe nf-conntrack_ftp --> 加载模块
      # iptables -R FORWARD -m state --state RELATED,ESTABLISHED --> 添加RELATED规则
      # iptables -R FORWARD -d 192.168.50.2 -p tcp -m multiport --dports ,, -m state --state NEW -j ACCEPT

总结: iptables的使用灵活多变, 稍显复杂, 但只要弄懂了原理, 再复杂的规则也经不起慢慢推敲;

iptables 简单介绍及应用 Linux防火墙的更多相关文章

  1. linux防火墙iptables简单介绍

    --append  -A chain        Append to chain  --delete  -D chain        Delete matching rule from chain ...

  2. linux防火墙(一)—— iptables架构介绍

    一.防火墙的分类 一般宏观来说,防火墙分为主机型防火墙,例如我们为了防止个人电脑被攻击,而开启的防火墙,还分为网关型防火墙,一般部署在企业的网关,用于过滤和转发,保证整个企业的网络环境安全性. 按照物 ...

  3. iptables简单配置

    iptables简单配置 分类: Linux 安全2010-10-20 16:56 4241人阅读 评论(0) 收藏 举报 input防火墙tcpfilterubuntuservice # iptab ...

  4. Linux防火墙详解

    1.Linux防火墙基础 作为隔离内外网.过滤非法数据的有力屏障,防火墙通常按实现环境的不同分为硬件防火墙和软件防火墙.硬件防火墙是功能专一的硬件设备,具有比较全面的功能,其工作效率较高,但是加个昂贵 ...

  5. Linux防火墙iptables介绍

    介绍网络防火墙是通过一个或多个允许或拒绝的规则来过滤网络流量的网络设备或软件.网络防火墙还可以执行更复杂的任务,例如网络地址转换,带宽调整,提供加密隧道以及更多与网络流量相关的任务.而我们的任务就是需 ...

  6. Linux防火墙简介 – iptables配置策略

    Linux防火墙简介 – iptables配置策略 Netfilter/iptables简介 要想真正掌握Linux防火墙体系,首先要搞清楚Netfilter和iptables的关系,Netfilte ...

  7. Linux防火墙iptables学习

    http://blog.chinaunix.net/uid-9950859-id-98277.html 要在网上传输的数据会被分成许多小的数据包,我们一旦接通了网络,会有很多数据包进入,离开,或者经过 ...

  8. iptables实用知识 ,一文学会配置linux防火墙

    目录 1.防火墙的概念 2. linux防火墙 3.linux数据包处理流程 3.1 linux 防火墙将以上流程,固定区分为5个流程节点 3.2 数据流程 4 linux防火墙的实现机制 4.1 i ...

  9. 【Redhat系列linux防火墙工具】firewalld与iptables防火墙工具的激烈碰撞

    前言 iptables与firewalld防火墙管理工具在linux发行版Redhat7系列使用较为广泛. UFW则是在linux发行版Ubuntu下进行管理防火墙的一款管理工具. 在选用防火墙工具的 ...

随机推荐

  1. SQL Server-聚焦移除Bookmark Lookup、RID Lookup、Key Lookup提高SQL查询性能

      前言 前面几节都是讲的基础内容,本节我们讲讲索引性能优化,当对大数据进行处理时首先想到的就是索引,一旦遇到这样的问题则手忙脚乱,各种查资料,为何平常不扎实基本功呢,我们由浅入深,简短的内容,深入的 ...

  2. ZBrush中的实时遮罩

    在ZBrush®中有许多遮罩类型,包括柔滑遮罩.反转遮罩,实时遮罩等.其中,实时遮罩又包含很多种类,它不同于一般的遮罩是不显示的,实时遮罩是根据实时信息产生新的遮罩. 在“Brush”菜单下“Auto ...

  3. Python_study_day_1_while_if

    1.什么是计算机 cpu:大脑 3GHz 内存:缓冲硬盘和cpu,提高计算机运算速度 硬盘:存储数据 2.编程语言的简单分类 编译型,解释型,混合型 3.python是什么编程语言 解释类语言 //. ...

  4. FreeCodeCamp初级算法部分学习

    Reverse a String 翻转字符串 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串. 你的结果必须得是一个字符串 当你完成不了挑战的时候,记得开大招 ...

  5. React 中的 AJAX 请求:获取数据的方法

    React 中的 AJAX 请求:获取数据的方法 React 只是使用 props 和 state 两处的数据进行组件渲染. 因此,想要使用来自服务端的数据,必须将数据放入组件的 props 或 st ...

  6. 【codeforces 794C】Naming Company

    [题目链接]:http://codeforces.com/contest/794/problem/C [题意] 有n个位置; 两个人; 每个人都有n个字符组成的集合s1,s2(可以有重复元素); 然后 ...

  7. DQL查询语句使用(select)

      9)DQL查询语句使用   SELECT语句在PL/SQL中使用,必须 采用下面用法:     select id INTO 变量   from t001 where id=5;    将记录字段 ...

  8. 彻底理解tomcat是怎样多线程处理http请求并将代码执行到controller里的的

    彻底理解tomcat是怎样多线程处理http请求并将代码执行到controller里的的 1.线程池,thread = threadPool.getThread(),thread.executeHtt ...

  9. c++友元实现操作符重载

    运算符重载的本质是一个函数 #include <iostream> using namespace std; class A { private: int m_a; int m_b; fr ...

  10. JavaScript DOM(一)

    文件夹: DOM家谱树 节点的基本属性和方法 document与getElement方法 DOM家谱树 DOM能够将不论什么HTML或XML文档描绘成一个由多层次节点构成的结构.当中节点被分为几种不同 ...