Linux中级之netfilter/iptables应用及补充
一、iptables介绍
Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制。特别是它可以在一台非常低的硬件配置服务器上跑的非常好,提供近400人的上网服务丝毫不逊色企业级专业路由器防火墙。 iptables + zebra + squid (企业常用网络开源产品)。
iptables是linux2.4及2.6内核中集成的服务,其功能与安全性比其老一蜚ipfwadm,ipchains 强大的多,iptables主要工作在0SI七层的二、三、四层,如果重新编译内核,iptables也可以支持 7 层控制(squid代理+iptables)。
iptables是Linux内核中内置的防火墙,可以允许管理员通过设置table,chain以及相关的规则来进行数据包过滤和NAT。 一般来讲,iptables防火墙已经内置于CentOS 6及其他Linux版本中,而且iptables服务默认都是启动的。 iptables应用于IPv4,如果要用IPv6,需要使用ip6tables。
1、iptables名词和术语
(1)容器
容器就是用来包装或装载物品的贮存器(如箱、罐、坛)或者成形或柔软不成形的包覆材料。
在iptables里就是用来描述这种包含或者说属于的关系。
(2)Netfilter/iptables
Netfilter是表(tables)的容器,如果把Netfilter看成是某个小区的一栋楼。那么表(tables)就是楼里的其中的一套房子。这套房子"表(tables)"属于这栋“Netfilter”。
(3)表(tables)
表(tables)是链的容器,即所有的链(chains)都属于其对应的表(tables)。如上,如果把Netfilter看成是某个小区的一栋楼,那么表(tables)就是楼里的其中的一套房子。
(4)链(chains)
链(chains)是规则(Policys)的容器。接上,如果把表(tables)当作有一套房子,那么链(chains)就可以说是房子里的家具(柜子等)。
(5)规则(Policy)
规则(Policy)就比较容易理解了,就是iptables系列过滤信息的规范和具体方法条款了,可以理解为柜子如何增加并摆放柜子东西等。
Netfilter |
表(tables) |
链(chains) |
规则(policy) |
一栋楼 |
楼里的房子 |
房子里的柜子 |
柜子里的衣服,摆放规则 |
2、四表五链
表(tables) |
链(chains) |
|
filter |
这是默认表,实现防火墙数据过滤功能(过滤流入流出主机的数据包)。 |
|
INPUT |
对于指定到本地套接字的包,即到达本地防火墙服务器的数据包。负责过滤所有目标是本机地址的数据包 |
|
FORWARD |
路由穿过的数据包,即经过本地防火墙服务器的数据包。负责转发流经主机的数据包。起到转发的作用,和NAT关系很大。 |
|
OUTPUT |
本地创建的数据包,处理所有源地址是本机地址的数据包 |
|
nat |
负责网络地址转换的,即来源与目的的IP地址和port的转换。当遇到新创建的数据包连接时将参考这个表 |
|
FREROUTING |
一进来就对数据包进行改变,在数据包到达防火墙时,进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等 |
|
OUTPUT |
本地创建的数据包在路由前进行改变,和主机放出去的数据包有关,改变主机发出数据包的目的地址。 |
|
POSTROUTING |
在数据包即将出去时改变数据包信息,在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址,源端口等。 |
|
mangle |
主要负责修改数据包中特殊的路由标记,如TTL,TOS,MARK等,这个表定义了5个链(chains). |
|
INPUT |
进入到设备本身的包 |
|
FORWARD |
对路由后的数据包信息进行修改 |
|
FREROUTING |
在路由之前更改传入的包 |
|
OUTPUT |
本地创建的数据包在路由之前改变 |
|
POSTROUTING |
在数据包即将离开时更改数据包信息 |
|
raw |
加速数据包穿过防火墙的表,也就是增强防火墙性能的表。 |
|
PREROUTING |
||
OUTPUT |
每个链对应的都是同名称的数据包,如INPUT链针对的是INPUT数据包。
INPUT链的作用是为了保护本机。例如,如果进入的数据包的目标是本机的80端口,且发来数据包的地址为192.168.100.9时则丢弃,这样的规则应该写入本机的INPUT链。但是要注意,这个本机指的是防火墙所在的机器,如果是硬件防火墙,那么一定会配合FORWARD链。
OUTPUT链的作用是为了管制本机。例如,限制浏览www.taobao.com网页。
INPUT和OUTPUT链很容易理解,FORWARD链起的是什么作用呢?数据包从一端流入,但是不经过本机,那么就要从另一端流出。对于硬件防火墙这很容易理解,数据总要转发到另一个网卡接口然后进入防火墙负责为其"防火"的网段。也就是说,FORWARD链的作用是保护"后端"的机器。
3、防火墙状态机制配置
状态集 |
说明 |
NEW |
表示新建立连接的数据包状态 |
ESTABLISHED |
表示新建立连接数据包发送之后,回复响应的数据包状态 |
RELATED |
表示借助已经建立的链路,发送新的连接数据包 |
INVALID |
无效无法识别的数据包 |
4、iptables工作流程小结
(1)防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
(2)如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。
(3)如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
(4)防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。
二、基础配置
具体的语法规则:https://linux.die.net/man/8/iptables
1、配置22/ssh端口访问控制规则
iptables -A INPUT -p tcp --dprot 22 -j DROP # 禁止所有人访问22端口
iptables -I INPUT -p tcp --dprot 22 -j ACCEPT # 恢复连接方法
iptables -I INPUT 2 -p tcp --dprot 22 -j ACCEPT # 通过插入指定行号信息,指定将规则插入到第几行
iptables -D INPUT -p tcp --dport 22 -j ACCEPT # 删除指定规则
iptables -D INPUT 2 # 根据规则行号,删除相应的规则
iptables -I INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT #只允许10.0.0.1的ip通过ssh连接这台服务器
2、禁止网段连入(禁止172.16.1.0网段访问172.16.1.188)
iptables -A INPUT -s 172.16.1.0/24 -d 172.16.1.188 -j DROP
3、禁止某个172.16.1.0网段访问服务器主机的22端口
iptables -A INPUT -s 172.16.1.0/24 -d 172.16.1.188 -p tcp --dport 22 -j DROP
方向说明:
# 在入方向控制
iptables -I INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
# 在出方向控制
iptables -I OUTPUT -o eth0 -p tcp --sport 22 -j DROP
4、除10.0.0.0网段可以进行连接服务器主机外,其余网段都禁止
方法1:修改默认规则,将默认规则改为拒绝
iptables -A INPUT -s 10.0.0.0/24 -d 172.16.1.8 -j ACCEPT
方法2: !--- 表示对规则信息进行取反
iptables -A INPUT ! -s 10.0.0.0/24 -d 172.16.1.8 -j DROP
5、测试匹配列举端口范围
iptables -A INPUT -p tcp --dport 22:80 -j DROP # 设置连续多端口控制策略
iptables -A INPUT -p tcp -m multiport --dport 22,80 -j DROP # 设置不连续多端口控制策略
三、企业级防火墙配置
开始操作之前:
注意:一定要把你在DigitalOcean/ Linode/ 阿里云上的服务器做一下快照备份 , 否则一旦你 iptables的配置出了问题,极有可能把你自己挡在门外,你自己都无法连接到服务器了!! 出现这种情况可是会欲哭无泪呀,除了重新做系统好像没有更好的办法了。( DigitalOcean提供了一个web console的界面,有时候会给你反悔和擦除iptables设置的机会,但阿里云没有)
决定哪些端口需要开放
首先, SSH 的端口22自然是需要开放的,否则我们就无法登录服务器了。
一般来讲,CentOS的VPS经常作为用LAMP搭建的Web服务器,FTP服务器, Mail服务器等。
对于Web服务来说,需要开放80端口,如果是HTTPS/SSL协议的话,还需用开放443端口
对于Mail服务来说,由于涉及SMTP, POP3, IMAP协议,需要开放的端口如下:
SMTP : 25 Secure SMTP:465 POP3: 110 Secure POP3: 995 IMAP: 143 IMAP over SSL: 993
对于FTP服务来说,需要开放 20, 21两个端口
第一步: 屏蔽最常见的攻击
缺省情况下,CentOS的iptables的设置是允许任何数据通过的。
我们首先要清空iptables中的所有的规则:
1、iptables -F #清除所有已制定的rule
2、iptables -X #清除用户自定义的chain/table
3、iptables -Z #将所有的chain的计数和流量统计归零
然后我们加上阻止简单扫描和攻击的规则:
1、iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP #NONE 包(所有标识bit都没有设置)主要是扫描类的数据包
2、iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP #防止sync-flood 攻击
3、iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP #ALL包(所有的标注bit都被设置了)也是网络扫描的数据包
第二步: 为相应的服务开放对应的端口
首先我们应该接受本机localhost的任何请求,否则,数据库连接等将无法工作
1、iptables -A INPUT -i lo -j ACCEPT
对于不同的服务需要开放不同的端口:
1、iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH
2、iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
3、iptables -A INPUT -p tcp --dport 443 -j ACCEPT #HTTPS
4、iptables -A INPUT -p tcp --dport 25 -j ACCEPT #SMTP
5、iptables -A INPUT -p tcp --dport 465 -j ACCEPT #Secure SMTP
6、iptables -A INPUT -p tcp --dport 110 -j ACCEPT #POP3
7、iptables -A INPUT -p tcp --dport 995 -j ACCEPT #Secure POP3
8、iptables -A INPUT -p tcp --dport 143 -j ACCEPT #IMAP
9、iptables -A INPUT -p tcp --dport 993 -j ACCEPT #Secure IMAP
第三步: 加上通用的规则
首先要允许所有从服务器端发起的连接,由此返回的响应数据应该是允许的!比如VPS发起的yum update , 必须要允许外部的update数据进来
1、iptables -I INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
最后,设置缺省的策略:屏蔽任何进入的数据请求,允许所有从Server发出的请求
1、iptables -P OUTPUT ACCEPT
2、iptables -P INPUT DROP
至此,规则设置完毕
第四步: 保存设置
首先通过下面的命令查看一下我们的设置是否正确!
1、iptable -L -n
确认没有问题后,执行下面的命令
1、service iptables save
或者iptables-save > /etc/sysconfig/iptables
执行上述命令后,相应的规则会写入 /etc/sysconfig/iptables这个文件,你可以检查一下看看。
最后执行
1、service iptables restart
重新启动iptables防火墙,以使上述设置生效。
Linux中级之netfilter/iptables应用及补充的更多相关文章
- (一)洞悉linux下的Netfilter&iptables:什么是Netfilter?
转自:http://blog.chinaunix.net/uid-23069658-id-3160506.html 本人研究linux的防火墙系统也有一段时间了,由于近来涉及到的工作比较纷杂,久而久之 ...
- 洞悉linux下的Netfilter&iptables:什么是Netfilter?
本人研究linux的防火墙系统也有一段时间了,由于近来涉及到的工作比较纷杂,久而久之怕生熟了.趁有时间,好好把这方面的东西总结一番.一来是给自己做个沉淀,二来也欢迎这方面比较牛的前辈给小弟予以指点,共 ...
- Linux中级之netfilter防火墙(iptables)
一.什么是防火墙? 防火墙其实就是一个隔离工具:工作于主机或者网络的边缘 对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配检测 对于能够被规则所匹配的报文做出相应处理的组件(这个组件可以是硬 ...
- Linux 防火墙:Netfilter iptables
一.Netfilter 简介 (1) Netfilter 是 Linux 内置的一种防火墙机制,我们一般也称之为数据包过滤机制,而 iptables 只是操作 netfilter 的一个命令行工具(2 ...
- 【Linux 驱动】Netfilter/iptables (八) Netfilter的NAT机制
NAT是Network Address Translation的缩写,意即"网络地址转换". 从本质上来说,是通过改动IP数据首部中的地址,以实现将一个地址转换成还有一个地址的技术 ...
- linux中级之netfilter防火墙(firewalld)
一.firewalld主要概念 dynamic firewall daemon.支持ipv4和ipv6.Centos7中默认将防火墙从iptables升级为了firewalld.firewalld相对 ...
- linux下的防火墙iptables
防火墙(firewall),也称为防护墙,是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网.它是一项信息安全的防护系统,依照特定的规则,允许或者是限制传输的数据通过. ...
- linux平台下防火墙iptables原理(转)
原文地址:http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646466.html iptables简介 netfilter/iptables( ...
- Netfilter/iptables防火墙
http://os.51cto.com/art/201107/273443.htm [51CTO独家特稿]Linux系统管理员们都接触过Netfilter/iptables,这是Linux系统自带的免 ...
随机推荐
- Pyinstaller原理详解
Pyinstaller原理详解 什么是Pyinstaller Pyinstaller可以把Python程序打包成exe文件,可以在没有Python的电脑上运行,主要用于生产用. Python.h! 在 ...
- 20 行简单实现一个 unstated-next 🎅
前言 unstated-next 基于 React 心智模型(hook+context)而设计的状态管理. 在 react hook 出现之前,有基于单一数据源,使用纯函数修改状态的 redux &a ...
- JVM学习笔记(三):JVM基本参数
1 来源 来源:<Java虚拟机 JVM故障诊断与性能优化>--葛一鸣 章节:第三章 本文是第三章的一些笔记整理. 2 GC日志:-Xlog:gc 要打印GC日志的话,可以加上-Xlog: ...
- kafka管理工具-kafka manager安装
kafka-manager 简介 # 项目信息 https://github.com/yahoo/kafka-manager 安装 环境要求: Kafka 0.8.. or 0.9.. or 0.10 ...
- 逻辑引擎、工作流、CMDB小感
工作流是啥? 在界面上画画点点就能生成代码,这是很吸引人的事情,也是很多自动化工具追求的目标.工作流就是这么一个东西,通过定义流程和输入,就能实现你想要的东西,不需要编写代码. 工作流的实现 通过解析 ...
- 网络广告计费方式CPM、CPA、CPS、CPT、CPC及比较分析
网络上的广告计费方式,主要有以下几种: 按展现付费(CPM).每展现一千次,收费多少. 按点击付费(CPC).每带来一个点击收多少钱. 按时间付费(CPT).每放一天或者几个小时,收费多少. 按效果付 ...
- 病毒木马查杀实战第012篇:QQ盗号木马之逆向分析
前言 在本系列的文章中,对每一个病毒分析的最后一个部分,若无特殊情况,我都会采用逆向分析的手段来为读者彻底剖析目标病毒.但是之前的"熊猫烧香"病毒,我用了三篇文章的篇幅(每篇250 ...
- CVE-2012-0774:Adobe Reader TrueType 字体整数溢出漏洞调试分析
0x01 TrueType 字体 TTF 字体是 Apple 和 Microsoft 两家公司共同推出的字体格式,现在已经广泛的运用于 Windows 操作系统,其中 PDF 文档也可以嵌入 TTF ...
- 绕过CDN查找网站真实ip
在渗透测试过程中,经常会碰到网站有CDN的情况.CDN即内容分发网络,主要解决因传输距离和不同运营商节点造成的网络速度性能低下的问题.说的简单点,就是一组在不同运营商之间的对接点上的高速缓存服务器,把 ...
- [转载] 关于Win7 x64下过TP保护的一些思路,内核层过保护,驱动过保护
首先特别感谢梦老大,本人一直没搞懂异常处理机制,看了他的教程之后终于明白了.在他的教程里我学到了不少东西.第一次在论坛发帖,就说说Win7 x64位下怎么过TP保护.如果有讲错的地方,还望指出.说不定 ...