production环境中iptables常用参数配置

                                        作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

   我相信在实际生产环境中有很多运维的兄弟跟我一样,很少用到iptables的这个命令。因为大家的服务器的防火墙都是关闭的,但是如果你的

服务器是有公网IP的话就会面临各种安全的问题呢,所以我建议大家还是开启防火墙,这个命令其实挺有意思的,就是配置起来比较繁琐,但是原理还

是很容易理解的,关于其原理百度上面一大堆,我这就不再废话啦~

一.在配置之前,我们需要扫盲一下知识点:

1.iptables简介:

            简单的说iptables就是一个给用户用的管理工具(就好比我们在服务器上用的解释器shell,最总还是要交个内核去处理),我们使用iptables写好规则,最终执行这些交个netfilter内核去执行这些规则。
2.iptables基础:
            规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的
地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃
(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
3.iptables工作流程:
           我将其的工作流程通过绘图的方式,具体的可以参考下面这个图:

注意,大家子啊man iptables的时候会发现里面的解释有4个表,即raw表。我们几乎用不上他,可以忽略它。如果有遇到的这个表的精密用法的小姐姐可以发我一下啊,万分感谢!

看了上图,你如果对每个表的功能不够清楚,那么就一起来缕一缕吧:

二.四标五链的作用,

四表:

1.filter表:

      1>.实现过滤数据包 ;

      2>.内核模块:iptables_filter

      3>.三个链:INPUT、FORWARD、OUTPUT;

2.nat表:

      1>.实现地址转换(IP、端口);

      2>.内核模块:iptable_nat;

      3>.三个链:PREROUTING、POSTROUTING、OUTPUT;

3.mangle表:

      1>.数据包管理(修改包头信息,例如ttl等信息;修改数据包的服务类型;并且可以配置路由实现QOS[流量控制]);

      2>.内核模块:iptable_mangle;

      3>.五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD;

4.raw表:

      1>.数据包跟踪,决定数据包是否被状态跟踪机制处理 ;

      2>.内核模块:iptable_raw

      3>.两个链:OUTPUT、PREROUTING

五链:

PREROUTING:数据包进入路由表之前

INPUT:通过路由表后目的地为本机

FORWARDING:通过路由表后,目的地不为本机

OUTPUT:由本机产生,向外转发

POSTROUTIONG:发送到网卡接口之前。

其实从上面的那个iptables的工作流程图可以看出来规则表之间的顺序:(raw——)mangle——nat——filter,一般我们很少对raw做配置,我生产环境中几乎没有用到呢,

规则链之间的优先顺序:

第一种情况:入站数据流向

从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标主机是防火墙本机(比

如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进

行响应。

第二冲情况:转发数据流向

    来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网关访问QQ站点的数据包),则

内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地址等)进行处理。

第三种情况:出站数据流向
     防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据

包的地址等)进行处理。

三.iptables参数详解

Iptalbes 是用来设置、维护和检查Linux内核的IP包过滤规则的。 可以定义不同的表,每个表都包含几个内部的链,也能包含用户定义的链。每个链都是一个规则列表,对对应的包进行匹配:每条规则

指定应当如何处理与之相匹配的包。这被称作'target'(目标),也可以跳向同一个表内的用户定义的链。

TARGETS 
防火墙的规则指定所检查包的特征,和目标。如果包不匹配,将送往该链中下一条规则检查;如果匹配,那么下一条规则由目标值确定.该目标值可以是用户定义的链名,或是某个专用值,如ACCEPT[通过],

DROP[删除], QUEUE[排队], 或者 RETURN[返回]。 ACCEPT 表示让这个包通过。DROP表示将这个包丢弃。QUEUE表示把这个包传递到用户空间。RETURN表示停止这条链的匹配,到前一个链的规

则重新开始。如果到达了一个内建的链(的末端),或者遇到内建链的规则是RETURN,包的命运将由链准则指定的目标决定。

常见的管理选项

防火墙规则的条件:

更加相信的参数请参考:http://www.cnblogs.com/yinzhengjie/p/6256727.html

四.最小化想对来说安全的防火墙部署策略

[root@yinzhengjie ~]# iptables -F
//清空所有的策略
[root@yinzhengjie ~]# iptables -Z
//清空计数器
[root@yinzhengjie ~]# iptables -X
//清空自定义的链
[root@yinzhengjie ~]# iptables -A INPUT -p tcp --dport 22 -s 172.30.1.0/24 -j ACCEPT
//允许管理的网段通过
[root@yinzhengjie ~]# iptables -A INPUT -i lo -j ACCEPT
[root@yinzhengjie ~]# iptables -A OUTPUT -o lo -j ACCEPT
//开启回环地址
[root@yinzhengjie ~]# iptables --policy OUTPUT ACCEPT
[root@yinzhengjie ~]# iptables -P FORWARD DROP
[root@yinzhengjie ~]# iptables -P INPUT DROP
//设置默认的策略为drop
[root@yinzhengjie ~]# iptables -A INPUT -s 172.30.1.0/24 -p all -j ACCEPT
//允许管理的网段通过
[root@yinzhengjie ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
//开启http的访问
[root@yinzhengjie ~]# iptables -A INPUT -p tcp --dport 443 -j ACCEPT
//开启https的访问
[root@yinzhengjie ~]# iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
//开启icmp协议
[root@yinzhengjie ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@yinzhengjie ~]# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
//运行关联状态的包通过
[root@yinzhengjie ~]# /etc/init.d/iptables save
//保存iptables的rules
[root@yinzhengjie ~]# more /etc/sysconfig/iptables
//保存规则的配置文件,也就是说我们可以通过编辑该配置文件也能实现规则的允许,而且不许要允许保存,但是需要重启服务

五.利用iptables处理DOSS攻击

[root@yinzhengjie ~]# iptables -I INPUT -s 203.100.83.11 -j DROP
//可以对攻击服务的IP进行丢弃处理,仅仅适用于IP较少的情况,如果较多的话,可以基于协议,参考下面的配置
 
TCP/IP协议重要参数整理:

根据TCP/IP协议的握手原理,最常见的非法组和为SYN/FIN包,由于SYN包是用来初始化连接的,因此当它和FIN以及RST一起出现的时候就是恶意攻击。以下是相关配置
[root@yinzhengjie ~]# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
[root@yinzhengjie ~]# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
[root@yinzhengjie ~]# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
[root@yinzhengjie ~]# iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
[root@yinzhengjie ~]# iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
[root@yinzhengjie ~]# iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,RST -j DROP
[root@yinzhengjie ~]# iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
[root@yinzhengjie ~]# iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
[root@yinzhengjie ~]# iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
[root@yinzhengjie ~]# iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
[root@yinzhengjie ~]#
 
 
 
六.iptables命令使用技巧:

      1>. 可以不指定表,默认为filter表;

      2>. 可以不指定链,默认为对应表的所有链;

      3>. 除非设置默认策略,否则必须指定匹配条件;

      4>. 选项/链名/目标操作用大写字母,其余都小写;

 
 
 
 
 

Production环境中iptables常用参数配置的更多相关文章

  1. 明白生产环境中的jvm参数

    明白生产环境中的jvm参数 写代码的时候,程序写完了,发到线上去运行,跑一段时间后,程序变慢了,cpu负载高了--一堆问题出来了,所以了解一下生产环境的机器上的jvm配置是有必要的.比如说: JDK版 ...

  2. Weblogic内存溢出及常用参数配置

        http://www.360doc.com/content/14/0306/14/16134804_358216319.shtml 一.WebLogic内存溢出 最近访问量门户访问量突然增大, ...

  3. CDH集群中YARN的参数配置

    CDH集群中YARN的参数配置 前言:Hadoop 2.0之后,原先的MapReduce不在是简单的离线批处理MR任务的框架,升级为MapReduceV2(Yarn)版本,也就是把资源调度和任务分发两 ...

  4. vue项目webpack中Npm传递参数配置不同域名接口

    项目开发中,前端在配置后端api域名时很困扰,常常出现:本地开发环境: api-dev.demo.com测试环境: api-test.demo.com线上生产环境: api.demo.com, 这次是 ...

  5. [Hive_add_8] Hive 常用参数配置

    0. 说明 记录 Hive 常用参数的配置 1. 设置本地模式 让 Hive 自动使用 Hadoop 的本地模式运行作业,提升处理性能 适合小文件,一般用于测试 set hive.exec.mode. ...

  6. (转)如何在maven环境中设置JVM参数

    有时候我们需要设定maven环境下的JVM参数,以便通过maven执行的命令或启动的系统能得到它们需要的参数设定.比如:当我们使用jetty:run启动jetty服务器时,在进行热部署时会经常发生:J ...

  7. Django中HttpRequest常用参数介绍

    HttpRequest对象常用参数介绍,以及前端不同请求方式(http方法/Content-Type类型)对应的参数获取方式. 一.HttpRequest对象 django请求对象的详细参数以及实现方 ...

  8. hive常用参数配置设置

    hive.exec.mode.local.auto 决定 Hive 是否应该自动地根据输入文件大小,在本地运行(在GateWay运行) true hive.exec.mode.local.auto.i ...

  9. logback 常用参数配置详解

    logback 常用配置详解(二) <appender> <appender>: <appender>是<configuration>的子节点,是负责写 ...

随机推荐

  1. HDU1003 简单DP

    Max Sum Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the ...

  2. BZOJ 2431 & DP

    题意:求逆序对数量为k的长度为n的排列的个数 SOL: 显然我们可以对最后一位数字进行讨论,判断其已经产生多少逆序对数量,然后对于前n-1位同样考虑---->每一个长度的排列我们都可以看做是相同 ...

  3. c语言指针疑惑[转载]

    c99的动态数组是在栈上面开辟的,而new出来的是在堆上面开辟的.栈和堆的地址是从两端相向增长的.栈很小,一般只有几十k,vc6好像是64k.堆很大,在win32的虚拟地址空间可以分配到2g的内存.栈 ...

  4. DB2数据库参数建议(Linux)

    内核参数配置: kernel.shmall=<物理内存的90%,以页为单位> kernel.shmax=<实际的物理内存> kernel.shmmni= kernel.msgm ...

  5. ajax详细介绍

    a.什么是Ajax    Asynchronous JavaScript and XML(异步JavaScript和XML)     节省用户操作,时间,提高用户体验,减少数据请求    传输获取数据 ...

  6. C#解析HTML

    第一种方法:用System.Net.WebClient下载Web Page存到本地文件或者String中,用正则表达式来分析.这个方法可以用在Web Crawler等需要分析很多Web Page的应用 ...

  7. 安卓中級教程(4):ScrollView與ListView之間的高度問題

    在scrollView中加插ListView是一個大難題.其中一個難題是Listview的高度難以計算,輸出效果往往強差人意,就讓我們看看當中的問題 . <LinearLayout xmlns: ...

  8. Google 云计算中的 GFS 体系结构

          google 公司的很多业务具有数据量巨大的特点,为此,google 公司研发了云计算技术.google 云计 算结构中的 google 文件系统是其云计算技术中的三大法宝之一.本文主要介 ...

  9. 访问API安全性认证设计

    1.用户POST登录(账号+密码) | |成功 |2.返回(Private key+时间戳)加密字符串+用户信息+缓存到内存中 | |发起其它请求 |3.发起请求时携带Request参数和(Reque ...

  10. Android 操作系统的内存回收机制(转载)

    Android 操作系统的内存回收机制(转载) Android APP 的运行环境 Android 是一款基于 Linux 内核,面向移动终端的操作系统.为适应其作为移动平台操作系统的特殊需要,谷歌对 ...