iptables 防火墙(上)

1. 防火墙概述

1.1 概念与作用

网络中的防火墙是一种将内部网络和外部网络分开的方法,是一种隔离技术。防火墙在内网与外网通信时进行访问控制,依据所设置的规则对数据包作出判断,最大限度地阻止网络中的黑客破坏企业网络,从而加强企业网络安全。

1.2 防火墙分类

1.2.1 硬件防火墙

如思科的ASA防火墙,H3C的Sepath防火墙等。

1.2.2 软件防火墙

如iptables等。

按架设的位置,可以分为主机防火墙,网关防火墙

1.3 iptables防火墙

Linux操作系统中默认内置一个软件防火墙, 即iptables防火墙

1.3.1 netfilter

位于Linux内核中的包过滤功能体系,称为Linux防火墙的“内核态”

1.3.2 iptables

位于/sbin/iptables,用来管理防火墙规则的工具,称为Linux防火墙的“用户态”

1.4 包过滤的工作层次

主要是网络层,针对IP数据包,体现在对包内的IP地址,端口等信息的处理上。

2. iptables规则链

2.1 规则链

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

2.2 默认包括5种规则链

  • INPUT:处理入站数据包
  • OUTPUT:处理出站数据包
  • FORWARD:处理转发数据包
  • POSTROUTING:在进行路由选择后处理数据包
  • PREROUTING:在进行路由选择前处理数据包

3. iptables规则表

3.1 规则表

  • 表的作用: 容纳各种规则链
  • 表的划分依据:防火墙规则的动作相似

3.2 默认包括4个规则表

  • raw表:确定是否对该数据包进行状态跟踪
  • mangle表:为数据包设置标记
  • nat表:修改数据包中的源、目标IP地址或端口
  • filter表:确定是否被放行该数据包(过滤)

3.3 链表结构关系图

4. iptables匹配流程

4.1 规则表之间的顺序:

raw--->mangle--->nat--->filter

4.2 规则链之间的顺序:

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

4.3 规则链内的匹配顺序

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

5. iptables命令

5.1 语法构成

iptables[-t表名]选项[链名] [条件] [j控制类型]


注意事项:

  • 不指定表名时,默认指filter 表
  • 不指定链名时,默认指表内的所有链
  • 除非设置链的默认策略,否则必须指定匹配条件
  • 选项、链名、控制类型使用大写字母,其余均为小写

5.2 数据包的常见控制类型

  • ACCEPT: 允许通过
  • DROP: 直接丢弃,不给出任何回应
  • REJECT: 拒绝通过,必要时会给出提示
  • LOG: 记录日志信息,然后传给下一条规则继续匹配

5.3 命令简介

5.3.1 查看规则

  1. [root@iptables01 /]# iptables -L -nv #查看规则(默认查看filter表)
  2. Chain INPUT (policy ACCEPT 97 packets, 7567 bytes)
  3. pkts bytes target prot opt in out source destination
  4. Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
  5. pkts bytes target prot opt in out source destination
  6. Chain OUTPUT (policy ACCEPT 59 packets, 6728 bytes)
  7. pkts bytes target prot opt in out source destination
  1. [root@iptables01 /]# iptables -t nat -L #指定查看nat表
  2. Chain PREROUTING (policy ACCEPT)
  3. target prot opt source destination
  4. Chain POSTROUTING (policy ACCEPT)
  5. target prot opt source destination
  6. Chain OUTPUT (policy ACCEPT)
  7. target prot opt source destination

5.3.2 清空规则

  1. [root@iptables01 /]# iptables -F #清空规则
  1. [root@iptables01 /]# service iptables stop #清空的更彻底

5.4 项目小实战(一)

项目要求:查出xshell的连接链

5.4.1 已知现表规则

  1. [root@iptables01 ~]# iptables -L
  2. Chain INPUT (policy ACCEPT)
  3. target prot opt source destination
  4. Chain FORWARD (policy ACCEPT)
  5. target prot opt source destination
  6. Chain OUTPUT (policy ACCEPT)
  7. target prot opt source destination

5.4.2 禁掉转发链FORWARD

  1. [root@iptables01 /]# iptables -P FORWARD DROP
  2. [root@iptables01 /]#
  3. [root@iptables01 /]# iptables -L
  4. Chain INPUT (policy ACCEPT)
  5. target prot opt source destination
  6. Chain FORWARD (policy DROP)
  7. target prot opt source destination
  8. Chain OUTPUT (policy ACCEPT)
  9. target prot opt source destination

xshell依据存活,说明它的连接跟FORWARD没关系

5.4.3 禁掉进站链INPUT(或出站链OUTPUT)

  1. [root@iptables01 /]# iptables -P INPUT DROP
  2. [root@iptables01 /]#
  3. Socket error Event: 32 Error: 10053.
  4. Connection closing...Socket close.
  5. Connection closed by foreign host.
  6. Disconnected from remote host(iptables01) at 15:26:29.
  7. Type `help' to learn how to use Xshell prompt.
  8. [C:\~]$
  9. Reconnecting in 3 seconds. Press any key to exit local shell.
  10. ...

xshell掉了,说明它的连接直接与进站链(出站链)有关

  • 重启iptables即可恢复连接

5.5 命令演练

5.5.1 DROP

  1. [root@iptables01 ~]# iptables -I INPUT -p icmp -j DROP #禁掉ping的本机IP

  1. [root@iptables01 ~]# iptables -F #清空链规则
  1. #清空规则后,本机IP又可以ping的通了

5.5.2 REJECT

  1. [root@iptables01 ~]# iptables -I INPUT -p icmp -j REJECT #禁掉ping的本机IP(但是有提示)

  1. [root@iptables01 ~]# iptables -F #清空链规则
  1. #清空规则后,本机IP又可以ping的通了

小结:由此可以看出DROP与REJECT的区别,DROP无回复,REJECT拒绝,但有回复

6. 常用选项

6.1 增加新的规则

  • A:在链的末尾追加一条规则
  • I:在链的开头(或指定序号)插入一条规则

6.2 实战演练

  1. [root@iptables01 ~]# iptables -A INPUT -p icmp -j ACCEPT
  2. [root@iptables01 ~]# iptables -L
  3. Chain INPUT (policy ACCEPT)
  4. target prot opt source destination
  5. ACCEPT icmp -- anywhere anywhere
  6. Chain FORWARD (policy ACCEPT)
  7. target prot opt source destination
  8. Chain OUTPUT (policy ACCEPT)
  9. target prot opt source destination
  1. [root@iptables01 ~]# iptables -I INPUT -p tcp -j ACCEPT
  2. [root@iptables01 ~]# iptables -L
  3. Chain INPUT (policy ACCEPT)
  4. target prot opt source destination
  5. ACCEPT tcp -- anywhere anywhere #在这里
  6. ACCEPT icmp -- anywhere anywhere
  7. Chain FORWARD (policy ACCEPT)
  8. target prot opt source destination
  9. Chain OUTPUT (policy ACCEPT)
  10. target prot opt source destination
  1. [root@iptables01 ~]# iptables -I INPUT 2 -p udp -j ACCEPT
  2. [root@iptables01 ~]# iptables -L
  3. Chain INPUT (policy ACCEPT)
  4. target prot opt source destination
  5. ACCEPT tcp -- anywhere anywhere
  6. ACCEPT udp -- anywhere anywhere #在这里
  7. ACCEPT icmp -- anywhere anywhere
  8. Chain FORWARD (policy ACCEPT)
  9. target prot opt source destination
  10. Chain OUTPUT (policy ACCEPT)
  11. target prot opt source destination

6.3 查看规则列表

  • L: 列出所有的规则条目
  • n: 以数字形式显示地址、端口等信息
  • V: 以更详细的方式显示规则信息
  • line-numbers: 查看规则时,显示规则的序号。-line 与之同效

6.4 删除、清空规则

  • D: 删除链内指定序号(或内容)的一条规则
  • F: 清空所有的规则
  1. [root@iptables01 ~]# iptables -D INPUT 3
  2. [root@iptables01 ~]# iptables -L
  3. Chain INPUT (policy ACCEPT)
  4. target prot opt source destination
  5. ACCEPT tcp -- anywhere anywhere
  6. ACCEPT udp -- anywhere anywhere
  7. Chain FORWARD (policy ACCEPT)
  8. target prot opt source destination
  9. Chain OUTPUT (policy ACCEPT)
  10. target prot opt source destination

6.5 修改、替换规则

R: 修改替换规则

6.6 设置默认规则

P:为指定的链设置默认规则

6.7 项目小实战(二)

项目要求:在三条链都DROP的情况下,如可保证xshell的正常连接

  1. [root@iptables01 ~]# iptables -L
  2. Chain INPUT (policy ACCEPT)
  3. target prot opt source destination
  4. Chain FORWARD (policy DROP)
  5. target prot opt source destination
  6. Chain OUTPUT (policy ACCEPT)
  7. target prot opt source destination
  1. [root@iptables01 ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
  2. #设置tcp协议22端口
  3. [root@iptables01 ~]# iptables -P INPUT DROP
  4. [root@iptables01 ~]#
  5. [root@iptables01 ~]# #xshell正常工作
  6. [root@iptables01 ~]#
  1. [root@iptables01 ~]# iptables -L
  2. Chain INPUT (policy DROP)
  3. target prot opt source destination
  4. ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
  5. Chain FORWARD (policy DROP)
  6. target prot opt source destination
  7. Chain OUTPUT (policy ACCEPT)
  8. target prot opt source destination

需要注意的是:若要设置filter 表中INPUT链或者OUTPUT链的默认规则为DROP时,要先设置tcp协议22端口(ssh 远程连接)为ACCEPT,否则通过远程操控的主机将断开连接,若在真实生产环境中,需要到服务器所在机房重新设置才可以,造成不必要的麻烦。

7. 规则的匹配类型

7.1 通用匹配

  • 可直接使用,不依赖与其他条件或扩展
  • 包括网络协议、IP 地址、网络接口等条件

7.2 隐含匹配

  • 要求以特定的协议匹配作为前提
  • 包含端口、TCP标记、ICMP 类型等条件

7.3 显式匹配

  • 要求以“-m扩展模块”的形式明确指出类型
  • 包括多端口、MAC地址、IP 范围、数据包状态等条件

7.4 常用管理选项汇总表

8. 常见的通用匹配条件:

8.1 协议匹配: -p 协议名



上图为:除了icmp协议,其他都丢弃

8.2 地址匹配:-s 源地址,-d 目的地址

8.3 接口匹配: -i入站网卡、-0出站网卡

9. 项目实战

项目要求:三台主机,要求其中两台主机可以在不同网段下互ping,其中一台模拟网关转换

9.1 部署环境

主机名 主机IP(1) 主机IP(2) 网卡模式(1) 网卡模式(2) 主机网关
iptables01 192.168.200.99 NET8 192.168.200.100
iptables02 192.168.200.100 192.168.100.100 NET8 NET1(仅主机)
iptables03 192.168.100.110 NET8 192.168.100.100

9.2 部署网卡配置文件

9.2.1 iptables01的网卡配置文件

  1. [root@iptables01 network-scripts]# pwd
  2. /etc/sysconfig/network-scripts
  3. [root@iptables01 network-scripts]# cat ifcfg-eth0
  4. DEVICE=eth0
  5. TYPE=Ethernet
  6. ONBOOT=yes
  7. NM_CONTROLLED=yes
  8. BOOTPROTO=none
  9. IPADDR=192.168.200.99 #本主机的IP
  10. NETMASK=255.255.255.0
  11. GATEWAY=192.168.200.100 #本主机的网关,iptables02第一个网卡的IP

9.2.2 iptables02的网卡配置文件

  1. [root@iptables02 network-scripts]# pwd
  2. /etc/sysconfig/network-scripts
  3. [root@iptables02 network-scripts]# cat ifcfg-eth0
  4. DEVICE=eth0
  5. TYPE=Ethernet
  6. ONBOOT=yes
  7. NM_CONTROLLED=yes
  8. BOOTPROTO=none
  9. IPADDR=192.168.200.100 #本主机的IP,iptables01的网关
  10. NETMASK=255.255.255.0
  11. [root@iptables02 network-scripts]# cat ifcfg-eth1
  12. DEVICE=eth1
  13. TYPE=Ethernet
  14. ONBOOT=yes
  15. NM_CONTROLLED=yes
  16. BOOTPROTO=none
  17. IPADDR=192.168.100.100 #本主机的IP,iptables03的网关
  18. NETMASK=255.255.255.0

9.2.3 iptables03的网卡配置文件

  1. [root@iptables03 network-scripts]# pwd
  2. /etc/sysconfig/network-scripts
  3. [root@iptables03 network-scripts]# cat ifcfg-eth0
  4. DEVICE=eth0
  5. TYPE=Ethernet
  6. ONBOOT=yes
  7. NM_CONTROLLED=yes
  8. BOOTPROTO=none
  9. IPADDR=192.168.100.110 #本主机的IP
  10. NETMASK=255.255.255.0
  11. GATEWAY=192.168.100.100 #本主机的网关,iptables02第二个网卡的IP

9.3 修改iptables02转发的配置

  1. [root@iptables02 /]# sed -n '7p' /etc/sysctl.conf
  2. net.ipv4.ip_forward = 1 #修改成1

9.4 实验如下

  1. [root@iptables01 /]# ping 192.168.100.110
  2. PING 192.168.100.110 (192.168.100.110) 56(84) bytes of data.
  3. 64 bytes from 192.168.100.110: icmp_seq=1 ttl=63 time=62.5 ms
  4. 64 bytes from 192.168.100.110: icmp_seq=2 ttl=63 time=0.851 ms
  5. 64 bytes from 192.168.100.110: icmp_seq=3 ttl=63 time=0.935 ms
  6. ^C
  7. --- 192.168.100.110 ping statistics ---
  8. 3 packets transmitted, 3 received, 0% packet loss, time 2585ms
  9. rtt min/avg/max/mdev = 0.851/21.430/62.504/29.043 ms
  1. [root@iptables03 /]# ping 192.168.200.99
  2. PING 192.168.200.99 (192.168.200.99) 56(84) bytes of data.
  3. 64 bytes from 192.168.200.99: icmp_seq=1 ttl=63 time=0.473 ms
  4. 64 bytes from 192.168.200.99: icmp_seq=2 ttl=63 time=2.37 ms
  5. 64 bytes from 192.168.200.99: icmp_seq=3 ttl=63 time=0.880 ms
  6. ^C
  7. --- 192.168.200.99 ping statistics ---
  8. 3 packets transmitted, 3 received, 0% packet loss, time 2316ms
  9. rtt min/avg/max/mdev = 0.473/1.242/2.373/0.816 ms

iptables 防火墙(上)的更多相关文章

  1. (转载)Linux上iptables防火墙的基本应用教程

    (转载)http://www.vpser.net/security/linux-iptables.html iptables是Linux上常用的防火墙软件,下面vps侦探给大家说一下iptables的 ...

  2. inux上iptables防火墙的基本应用教程

    iptables是Linux上常用的防火墙软件,下面vps侦探给大家说一下iptables的安装.清除iptables规则.iptables只开放指定端口.iptables屏蔽指定ip.ip段及解封. ...

  3. Linux上iptables防火墙的基本应用教程

    iptables是Linux上常用的防火墙软件,下面vps侦探给大家说一下iptables的安装.清除iptables规则.iptables只开放指定端口.iptables屏蔽指定ip.ip段及解封. ...

  4. Linux上iptables防火墙的基本应用

    1.安装iptables防火墙 yum install iptables -y 2. 清除已有的iptables规则 iptables -F iptables -X iptables -Z 3.显示i ...

  5. CentOS系统配置 iptables防火墙

    阿里云CentOS系统配置iptables防火墙   虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FO ...

  6. 编译内核实现iptables防火墙layer7应用层过滤 (三)

    在前面的两篇文章中我们主要讲解了Linux防火墙iptables的原理及配置规则,想博友们也都知道iptables防火墙是工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙.以 ...

  7. [moka同学摘录]iptables防火墙规则的添加、删除、修改、保存

    文章来源:http://www.splaybow.com/post/iptables-rule-add-delete-modify-save.html 本文介绍iptables这个Linux下最强大的 ...

  8. linux 的iptables防火墙

    .a文件就是*.o文件的集合, 是object文件的归档文件, 所以, 用nm -A  ???.a看到的 symbolic符合名称都是 相应的,  包含的  .o文件.... linux 2.4内核中 ...

  9. Netfilter/iptables防火墙

    http://os.51cto.com/art/201107/273443.htm [51CTO独家特稿]Linux系统管理员们都接触过Netfilter/iptables,这是Linux系统自带的免 ...

随机推荐

  1. RbMQ 简介

    Broker:简单来说就是消息队列服务器实体. Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列. Queue:消息队列载体,每个消息都会被投入到一个或多个队列. Binding:绑 ...

  2. windows server 进入组策略管理

    方法: win+R 然后输入   gpmc.msc 即可在域服务器上进行组策略管理了.

  3. Caused by: java.lang.NoClassDefFoundError: javax/validation/ParameterNameProvider

    问题现象:今天部署代码的时候发现,在beta环境可以正常部署,但是到了test环境就一直不成功,我以为是环境问题,就重新部署,但是没效,看了看日志发现问题是:Caused by: java.lang. ...

  4. deep features for text spotting 在linux,windows上使用

    做文本检测这个方向的同学应该都知道 deep features for text spotting 这篇ECCV14的文章. 用的是Matconvnet这个是深度学习框架来做文本检测,同时他还提供了代 ...

  5. 最大流的SAP算法模板

    明天补充~~~先上代码 #include<iostream> #include<string> #include<queue> #include<vector ...

  6. css3 序列帧动画抖动

    页面需要一个动画,设计师给了动画的序列帧 项目由vue构建,使用css3做动画 html <div class="work_two_main"></div> ...

  7. Spring Boot和Spring Cloud学习资源推荐

    Spring Boot和Spring Cloud学习资源推荐   比较好的学习资源,分享一下. 1.Spring Boot官方文档:http://projects.spring.io/spring-b ...

  8. Python--前端之HTML

    html概述和基本结构 HTML概述 HTML是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是标签,是一种用来制作网页的语言 ...

  9. svn服务端安装、迁移教程、Eclipse切换svn连接库

    svn服务端安装.迁移教程.Eclipse切换svn连接库 安装教程 1.下载svn服务端安装程序 2.运行程序,安装 这里端口号根据自己定义,避免与其他程序冲突 到这里就安装完成 迁移教程 这里举例 ...

  10. Delphi直接读取XmL

    有时,只需要用XML作一些小的应用,比如只是简单地保存日志或者一些配置,这时我们只需要直接读写XML就好,效率第一. Delphi盒子有一个直接读写XML文件 (例子和代码),其核心函数为下面两个函数 ...