防火墙

隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略;

国内有很多防火墙厂家如:华为、深信服、天融信、网康、启明星辰等等;

市场主流的防火墙叫做下一代防火墙,即能够识别应用层信息并设置安全策略,当然,很多厂家的防火墙设备其软件核心都是linux内核,如天融信、深信服;

iptables

linux中的防火墙功能是由集成在内核中的netfilter组件提供,即内核空间,而iptables只是用户空间的一个工具,用它来调用内核空间的netfilter组件。在centos7上,

firewalld是类似于iptables的一个用户工具;

iptables由四表五链组成:

四表:

filter:        过滤规则表,根据预定义的规则过滤符合条件的数据包
nat:          network address translation 地址转换规则表
mangle:   修改数据标记位规则表
Raw:        关闭NAT表上启用的连接跟踪机制,加快封包穿越防火墙速度

五链:

INPUT
OUTPUT
FORWARD
PREROUTING
POSTROUTING

结合‘四表五链’,数据流经过防火墙时一般有三种流向:

1、流入本机:PREROUTING流入本机:PREROUTING --> INPUT-->用户空间进程
2、流出本机:用户空间进程-->OUTPUT--> POSTROUTING
3、转发:PREROUTING --> FORWARD --> POSTROUTING

数据流经过防火墙的具体过程如下:

a、当流量进入防火墙时先检查PREROUTING链,如果此链未设置拒绝策略,则进入下一步;

b、检查路由表,判断此流量是否是发给自己的,如果是发给本防火墙自身的则执行‘c’步骤,如果不是发给本机则执行步骤‘e’;

c、先匹配INPUT链,如果此链允许通过,则交由本机进程处理流量数据;

d、本机进程处理结束,封装数据包,并检查OUTPUT链,执行相应策略并转发出去,进入步骤‘f’;

e、本机只是转发此数据,交由FORWARD链处理;

f、再次查看路由表,找到去往目标的路径;

g、匹配POSTROUTING链,并执行策略

配置iptablles时需要明确是对哪个表哪个链做什么匹配并执行何种操作

下面我们举个例子说明

iptables -A INPUT -s 192.168.1.101 -j DROP

#未指定具体表,默认是filter表,本例中是对filter表中的INPUT链做操作

#-A是添加链,-s指定源地址,-j是对匹配的数据包执行的操作

#即在filter表INPUT链中,匹配来自192.168.1.101访问本机的所有流量,操作是统统丢弃

下面结合例子说明iptables常用的参数:

例子1、

iptables -t nat -vnL

#-t指明使用的表的类型,此处使用的是nat表

#-v详细信息,-n以数字显示ip地址和端口而不是域名和服务名称,-L列出表上所有链的信息

例子2、

iptables -A INPUT ! -s 192.168.1.101 -p icmp --icmp-type 8 -j REJECT

#叹号!表示非,即源地址为非192.168.1.101的所有地址

#-p协议,此处是icmp协议

#--icmp-type 8是ping的请求包,一次完整的ping操作由本端的request请求和对端replay回应组成,数字8表示request报文,数字0表示回应replay报文

#-j执行的动作是拒绝,REJECT与DROP都是拒绝的意思,但前者会明确回应不可到达,后者则一直不返回任何消息

#此命令含义是源地址非192.168.1.101的ping请求报文全部拒绝,也就是说只允许192.168.1.101能ping

例子3、

iptables -A INPUT -m iprange --src-range 192.168.1.101-192.168.1.102 -p tcp -m multiport --dports 80,22 -j REJECT

#-m显式扩展,iptables必须使用指定模块即iprange和multiport,实现特定功能,从字面意思就能理解模块的意思

#--src-range源地址范围

#--dports多个目标端口,以逗号隔开,如果是连续的端口可以以冒号‘ : ’表示

例子4、

iptables -A INPUT -m time --timestart 00:00 --timestop 12:00 -p tcp --dport 80 -j REJECT

#在每天凌晨到中午十二点访问http的服务全部拒绝,此命令中用到了time的扩展模块

iptables -A OUTPUT -m time --timestart 00:00 --timestop 12:00 -m string --algo bm --string 'google' -j REJECT

#在每天凌晨到中午十二点访问包含‘google’字符串的流量全部拒绝

#此命令用到了time和strin的扩展模块,--algo bm是字符串匹配算法

例子5、

iptables -A INPUT -m connlimit --connlimit-above 1 -p tcp --dport 22 -j REJECT

#每ip的ssh连接超过1个就会拒绝,即每ip只允许一个ssh连接

#ssh使用tcp的22端口

#用到了扩展模块connlimit,--connlimit-above连接超过多少,--connlimit-upto连接达到多少

iptables -I INPUT -m limit --limit 6/minute --limit-burst 10 -p icmp --icmp-type 8 -j ACCEPT

#扩展模块limit,--limit-burst 10表示前10个icmp的请求包不做限制

#--limit 6/minute 超过10个icmp请求包后,就限制每分钟允许6个icmp请求包通过

#此命令实现了对流量的限制

例子6、

ftp是文件传输协议,使用tcp连接,但是其控制连接和数据连接使用的tcp端口不同,那么针对这种情况iptables怎么限制呢?

比如,我们只想要192.168.1.101主机能够访问ftp服务器,其他全部拒绝,应该怎么做?

首先我们要明白,ftp的工作原理:

1)、客户端开启随机端口与服务器的21端口建立tcp连接;

2)、双方协商使用何种模式传输数据,在linux上是被动模式,在windows上是主动模式;

3)、所谓被动、主动都是针对服务器端而言的,即服务器是被动接收客户端请求还是主动向客户端发出请求;

4)、此处我们只讨论linux上的被动模式,被动模式服务器与客户端之间建立数据连接使用的都是任意端口

所以在iptables上才不好根据端口限制,不过linux提供状态模块state,可以跟踪多端口的状态,具体请看下面例子

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#扩展模块state,ESTABLISHED已经建立的连接,RELATED关联的连接
iptables -A INPUT -s 192.168.1.101 -p tcp --dport 21 -m state --state NEW -j ACCEPT

#NEW新建立的连接

#上述两条命令意思就是与tcp21端口建立的连接及其关联的连接(数据连接),和已经建立的连接都执行ACCEPT允许操作

#state模块能够识别ftp的后续数据连接并放行,还是比较智能的
iptables -A INPUT -j REJECT

#本例中ftp服务器与防火墙是同一台设备

#默认策略是拒绝所有ip和协议连接到本机

#本例就是只允许ftp连接(控制连接和数据连接),其他任何协议、ip、端口全部拒绝

#注意要达到state记录状态的效果还得安装一个模块,命令为'modprobe nf_conntrack_ftp'

注意:

上述例子全部未指定表类型,所以默认都是在filter表中操作

NAT和端口转发

防火墙还有一个常用的表:nat表

NAT就是网络地址转换的意思,根据应用场景分为源NAT(source)、目的NAT(destination),下面我们来分析二者的用途:

SNAT:

将数据包的源ip地址转换为特定ip。一般企业内部都会使用私网地址如10.0.0.0/8或者172.16.0.0/16-172.31.0.0/16或者192.168.0.0/24,

但是私网地址在公网上是无法得到回应包的,即源地址是私网地址的数据包虽然能够到达目的地,但是目标没有回去的路由信息,即私网地址无法在公网传输。SNAT就是将数据包ip头中的源地址转换为能在公网路由的公网地址,一般用于内网用户访问外网资源,其优点就是节省了公网地址;

SNAT用到nat表中的链有:POSTROUTING

DNAT:

SNAT是转换请求方的源ip地址,而DNAT则是转换请求方的目标地址。即防火墙收到请求,读取数据包中的目的ip,并将目的ip转换为内网某台服务器的私网地址然后将数据包转发给那台服务器,一般用于外网用户访问企业内部服务器,其优点是可以隐藏内网服务器ip,避免收到攻击。

DNAT用到nat表的链有:PREROUTING

PNAT:

端口和ip都可以进行转换,更加灵活

下面三个例子分别说明NAT的三种应用场景:

SNAT

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j SNAT --to-source 172.32.253.237

#不能再使用默认表,此处使用的是nat表,-j的动作是进行SNAT的转换

#源地址是192.168.1.0/24网段的,访问外网资源时都会转换为172.32.253.237,对于目的而言,其认为数据包是由172.32.253.237发来的,

#而不是192.168.1.0/24中的某一主机发来的

#目标主机回包时的目的地址就是172.32.253.237,由于防火墙本身会有一份表,专门记录私网地址、端口转换为公网地址、端口的对应关系

#所以防火墙会根据这张表找到私网主机,完成整个通信

DNAT

iptables -t nat -A PREROUTING -s 172.18.0.0/16  -d 172.32.253.237 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.101:8080

#将172.32.253.237:80转换为192.168.1.101:8080

#完成公网到私网的转换

PAT

iptables -t nat -A PREROUTING -d 192.168.1.101 -p tcp --dport 80 -j REDIRECT --to-ports 8080

#通过改变目标IP和端口,将接收的包转发至不同地址、端口

本文转自  a_pan  51CTO博客,原文链接:http://blog.51cto.com/panpangao/1974660

linux防火墙简介相关推荐

  1. Linux 防火墙简介

    Linux 防火墙 1 安全技术和防火墙 1.1 安全技术 入侵检测与管理系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化.定位来自内外网络的威胁情况,主 ...

  2. Linux防火墙入门:简介(转)

    Linux防火墙入门:简介(转) 前言 一旦连上网络,就充满各种危机. 许多人基于各式各样的理由,想侵入你的系统,这种人俗称为 cracker.尤有甚者,近年来,cracker 圈里流行一种结合病毒行 ...

  3. (一)linux系统简介, centos简介及特点,设置静态IP,防火墙

    本章重点 linux系统简介及特点 下载安装 网络和防火墙的相关命令 具体内容 linux系统简介: Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds) 在赫尔辛基大学上学 ...

  4. Linux防火墙与iptables命令

    Linux防火墙与iptables命令 防火墙概念 一.Firewalld与iptables简介 1.1Firewalld 1.2Firewalld.iptables 二.iptables 2.1四表 ...

  5. 世界级安全技术专家力作——《Linux防火墙》

    媒体评论 我看过数百部安全技术方面的著作,但本书可谓出类拔萃,我是一个FreeBSD用户,但在看过这本书后,我已在考虑在某些场合使用Linux了! --Richard Bejtlich,通用电气公司应 ...

  6. linux防火墙常用控制协议,linux防火墙配置及管理.doc

    linux防火墙配置与管理2 ufw防火墙简介 我们在工作中使用防火墙保护服务器的网络服务,实际上是通过防火墙来拒绝对服务器的访问.iptable 工具根据系统管理员编写的一系列规则筛选网络数据包对于 ...

  7. 防火墙简介(一)——iptables防火墙

    防火墙简介(一)--iptables防火墙 一.iptables防火墙 1.iptables概述 2.netfilter 和 iptables ①.netfilter ②.iptables ③.net ...

  8. linux防火墙策略文件夹,Linux防火墙iptables的策略

    iptables策略 iptables -L #查看现有防火墙所有策略 iptables -F #清除现有防火墙策略 只允许特定流量通过,禁用其他流量 1.允许SSH流量(重要) iptables - ...

  9. linux防火墙ip黑名单,【转】Linux防火墙(iptables)之黑名单

    iptables删除规则 So if you would like to delete second rule : iptables -D INPUT 2 ---------------------- ...

最新文章

  1. poj 3461 Oulipo(kmp统计子串出现次数)
  2. #每日播报# 8月6日 Github 热门项目汇总
  3. python脚本根据cookies自动登录网站_python模拟登录并且保持cookie的方法详解
  4. phpMyAdmin 配置
  5. 华为手机连接电脑用什么软件_屏幕镜像怎么连接电脑?使用这款软件,轻松投屏苹果手机到电脑...
  6. 路由器-配置(思科)
  7. php 实现静态链接,在PHP中链接静态方法?
  8. mysql怎么查询两页数据_mysql分页查询踩坑报告
  9. 一步一步理解拖拽Drag(一)
  10. android 电视盒子 软件安装,电视盒子无法安装第三方软件怎么办?当贝市场这样一招搞定...
  11. 惠普M1005打印机驱动-LaserJet提供下载
  12. Python的伪造数据生成器:Faker
  13. SN号获取及显示不全的问题
  14. Telink/BDT使用说明
  15. 硬盘性能测试DD命令详解
  16. C语言实现:输出明天的日期
  17. Axis2 报错 Faulty Services
  18. 大数据运维架构师培训(5):大数据管理平台(Cloudera CM/CDH/CDP)
  19. ubuntu三行命令更新谷歌浏览器版本
  20. 人工智能急需变革?比起英特尔的焦虑,互联网企业更想蹚这一池芯片水...

热门文章

  1. c语言编译及下载环境变量,windows 下使用g++ 编译器-Go语言中文社区
  2. vue 生命周期_深入理解Vue实例生命周期
  3. java正则表达式去除xml标签之间的空格_HTML解析器——htmlparser2使用详解,换个姿势解析html和xml
  4. 鸿蒙os2.0公测结束了,鸿蒙OS2.0系统公测版发布时间-鸿蒙OS2.0系统公测版适配机型推荐...
  5. matlab数学实验课件4,数学实验4_数学实验_doc_大学课件预览_高等教育资讯网
  6. 西南交大计算机组成原理考试大纲,西南交大计算机组成原理实验二七段LED数码管显示译码器的设计.docx...
  7. java null 对象吗_java中new一个对象和对象=null有什么区别
  8. python中打印所有的关键字_python 查看所有的关键字
  9. php 获取对象中的元素个数组长度,获取php类中的数组长度
  10. 编写函数求字母出现次数c语言,c语言,程序设计题,输入一个字符串,统计该字符串中the出现次数。...