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 查看规则

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

5.3.2 清空规则

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

5.4 项目小实战(一)

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

5.4.1 已知现表规则

[root@iptables01 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination

5.4.2 禁掉转发链FORWARD

[root@iptables01 /]# iptables -P FORWARD DROP
[root@iptables01 /]#
[root@iptables01 /]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination Chain FORWARD (policy DROP)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination

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

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

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

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

  • 重启iptables即可恢复连接

5.5 命令演练

5.5.1 DROP

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

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

5.5.2 REJECT

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

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

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

6. 常用选项

6.1 增加新的规则

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

6.2 实战演练

[root@iptables01 ~]# iptables -A INPUT -p icmp -j ACCEPT
[root@iptables01 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@iptables01 ~]# iptables -I INPUT -p tcp -j ACCEPT
[root@iptables01 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere #在这里
ACCEPT icmp -- anywhere anywhere Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@iptables01 ~]# iptables -I INPUT 2 -p udp -j ACCEPT
[root@iptables01 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere
ACCEPT udp -- anywhere anywhere #在这里
ACCEPT icmp -- anywhere anywhere Chain FORWARD (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination

6.3 查看规则列表

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

6.4 删除、清空规则

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

6.5 修改、替换规则

R: 修改替换规则

6.6 设置默认规则

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

6.7 项目小实战(二)

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

[root@iptables01 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination Chain FORWARD (policy DROP)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@iptables01 ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
#设置tcp协议22端口
[root@iptables01 ~]# iptables -P INPUT DROP
[root@iptables01 ~]#
[root@iptables01 ~]# #xshell正常工作
[root@iptables01 ~]#
[root@iptables01 ~]# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh Chain FORWARD (policy DROP)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
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的网卡配置文件

[root@iptables01 network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@iptables01 network-scripts]# cat ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.200.99 #本主机的IP
NETMASK=255.255.255.0
GATEWAY=192.168.200.100 #本主机的网关,iptables02第一个网卡的IP

9.2.2 iptables02的网卡配置文件

[root@iptables02 network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@iptables02 network-scripts]# cat ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.200.100 #本主机的IP,iptables01的网关
NETMASK=255.255.255.0 [root@iptables02 network-scripts]# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.100.100 #本主机的IP,iptables03的网关
NETMASK=255.255.255.0

9.2.3 iptables03的网卡配置文件

[root@iptables03 network-scripts]# pwd
/etc/sysconfig/network-scripts
[root@iptables03 network-scripts]# cat ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.100.110 #本主机的IP
NETMASK=255.255.255.0
GATEWAY=192.168.100.100 #本主机的网关,iptables02第二个网卡的IP

9.3 修改iptables02转发的配置

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

9.4 实验如下

[root@iptables01 /]# ping 192.168.100.110
PING 192.168.100.110 (192.168.100.110) 56(84) bytes of data.
64 bytes from 192.168.100.110: icmp_seq=1 ttl=63 time=62.5 ms
64 bytes from 192.168.100.110: icmp_seq=2 ttl=63 time=0.851 ms
64 bytes from 192.168.100.110: icmp_seq=3 ttl=63 time=0.935 ms
^C
--- 192.168.100.110 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2585ms
rtt min/avg/max/mdev = 0.851/21.430/62.504/29.043 ms
[root@iptables03 /]# ping 192.168.200.99
PING 192.168.200.99 (192.168.200.99) 56(84) bytes of data.
64 bytes from 192.168.200.99: icmp_seq=1 ttl=63 time=0.473 ms
64 bytes from 192.168.200.99: icmp_seq=2 ttl=63 time=2.37 ms
64 bytes from 192.168.200.99: icmp_seq=3 ttl=63 time=0.880 ms
^C
--- 192.168.200.99 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2316ms
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. netbean out of memory java heap space

    When run test file in netbean. all dependency and resource are right, but it raise up java.lang.OutO ...

  2. spring整合mybatis后,mybatis一级缓存失效的原因

    一般来说,可以在5个方面进行缓存的设计: 最底层可以配置的是数据库自带的query cache, mybatis的一级缓存,默认情况下都处于开启状态,只能使用自带的PerpetualCache,无法配 ...

  3. shell位置参数处理举例

  4. 二、sql新增后返回主键|sql 使用 FOR XML PATH实现字符串拼接|sql如果存在就修改不存在就新增

    一.sql新增后返回主键 1,返回自增的主键: INSERT INTO 表名 (字段名1,字段名2,字段名3,…) VALUES (值1,值2,值3,…) SELECT @@IDENTITY 2,返回 ...

  5. StarUML 破解方法2.X(转)

    下载地址:https://www.jb51.net/softs/558248.html#download 在安装目录的:StarUML\www\license\node 找到LicenseManage ...

  6. 力扣 —— Two Sum ( 两数之和) python实现

    题目描述: 中文: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利 ...

  7. 数据库索引原理,及MySQL索引类型(转)

    在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable( ID INT NOT NULL, username ) NOT N ...

  8. HTML+CSS+JS是什么

    html:整合网页结构和内容显示的一种语言 css:是一种用来表现HTML或XML等文件样式的计算机语言 js:增加表现力的脚本 做网页前台设计的标准套装,html是一些网页控件,css是美化这些控件 ...

  9. 【串线篇】MyBatis简介

    一.MyBatis 和数据库进行交互:持久化层框架(SQL映射框架): 1).纯手工 从原始的JDBC----dbutils(QueryRunner)-------JdbcTemplate----xx ...

  10. AcWing 215. 破译密码 (莫比乌斯反演)打卡

    达达正在破解一段密码,他需要回答很多类似的问题: 对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd(x,y)=d. 作为达达的同学,达达希望得到你的帮助. ...