iptables-防火,防盗,防老王

    防火墙,其实说白了将,就是用于实现linux下访问控制的功能的,它分为两种方式,硬件防火墙和软件防火墙。不过无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义防火墙如何工作的,这就是防火墙的策略,规则,以达到让它对出入网络的IP,数据进行检测。

    目前市面上比较常见的有3,4层的防火墙,叫做网络层的防火墙,还有7层的防火墙1,其实是代理层的防火墙。

    对于TCP/IP的7层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和目标地址进行检测。但是对于七层的防火墙,不管你源端口或者目标端口,源地址或者目标地址什么的,都将对于你所有的东西进行检查。所以,对于设计原理来讲,七层防火墙更加安全,但是者却带来了效率更低。所以市面通常的防火墙方案,都是两者结合的。也即是说防火墙的工作效率就成了用户能够访问数据多少的一个最重要的控制,配置的不好甚至有可能成为流量的瓶颈。

    iptables的工作机制

四表五链:

四表:

1.filter:过滤,防火墙;
2.nat:network address 
3.translation;用于修改报文的源地址或目标地址,甚至是端口;
4.mangle:拆解报文,做出修改,并重新封装起来;

raw:关闭nat表上启用的连接追踪机制;

conntrack:追踪连接机制

数据包匹配流程的优先级次序(由高而低):
raw –> mangle –> nat –> filter

五链:

PREROOUTING:路由前
INPUT:  数据包流入入口
FORWARD:  转发管卡
OUTPUT:  数据包流出出口
POSTROUTING;: 路由后

#这是Netfilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链

#iptables还支持自己定义链。但是自己定义的链,必须是跟某种特定的链关联起来的。

功能<–>钩子:
raw:PREROUTING,OUTPUT
mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat:PREROUTING,INPUT,OUTPUT,POSTRUTING
filter:INPUT,FORWARD,OUTPUT


报文流向:
到本机某进程的报文:PREROUTING –> INPUT
由本转发的报文:PREROUTING –> FORWARD –> POSTROUTING
由本某进程发出的:OUTPUT –> POSTROUTING 


    规则的写法:

添加规则之时需要考量的问题:
(1) 报文的流经路径,判断添加规则至哪个链上;
(2) 确定要实现的功能,判断添加规则至哪个表上;
(3) 要指定的匹配条件,以用于匹配目标报文;
#同类规则  访问量大的,放前面   //仅供参考
#不同规则  访问量多的放前面
注意:规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查
iptables的通用格式:   

iptables [-t table] COMMAND chain [-m matchname [per-match-options]] [-j targetname [per-target-options]]

-t table:
默认为filter;其它可用的有raw, mangle, nat;

COMMAND:
链:
-P:policy,策略,定义默认策略; 一般有两种选择,ACCEPT和DROP;
-N:new,新建一条自定义的规则链;被内建链上的规则调用才能生效;[-j  chain_name];
-X:drop,删除自定义的引用计数为0的空链;
-F:flush,清空指定的链;
-E:重命名自定义的引用计数和为0的链;
规则:
-A:append,追加,在指定链的尾部追加一条规则;
-I:insert,插入,在指定的位置(省略位置时表示链首)插入一条规则;
-D:delelte,删除,删除指定的规则;
-R:replace,替换,将指定的规则替换为新规则;不能仅修改规则中的部分,而是整条规则完全替换;
查看:
-L:list,列出表中的链上的规则;
-n:numeric,以数值格式显示;
-v:verbose,显示详细格式信息; 
-vv, -vvv
-x:exactly,计数器的精确结果;
–line-numbers:显示链中的规则编号;

处理动作(目标)
-j targetname [per-target-options]
targetname:
ACCEPT:接受;
DROP:丢弃;
REJECT:拒绝;

计数器:
规则,以及默认策略有专用的计数器;
记录被当前规则所匹配到的:
(1) 报文个数;
(2) 字节总数;

重置规则计数器:
-Z:zero,置0;

chain:
(1) 内建链;
(2) 自定义链;

扩展模块介绍:
    tcp:定义协议的模块
        –sport:定义源端口,可以定义连续的端口,如22:80
        –dport:目标端口,性能同–sport
        –tcp-flags:tcp标记位
            –tcp-flags SYN,ACK,FIN,RST, SYN:这个表示匹配SYN,ACK,FIN,RST中以SYN为1,ACK,FIN,RST为0,其余的忽略
        –syn:是–tcp-flags的一个扩展,就是匹配三次握手的第一次


    connlimit:允许的最大连接数
        [!] –connlimit-above NUMBER:最大允许连接的个数,可取反
    iprange:定义一个ip范围,可用作源IP与目标IP的范围
        [!] –src-range:源地址范围
        [!] –dst-range:目标地址范围


    limit:这个模块用于定义连接频率与首次连接最大连接个数(令牌筒)
        –limit RATE:定义其连接速率
        –limit-burst NUM:定义首次连接次个数


    state:这个模块是根拒据状态来判定数据包
        [!] –state STATE:对状态流量进行操作
        STATE:
            ESTABLISHED:已连接
            NEW:新建立连接
            RELATED:关联的连接,追踪连接
            INVALID:不能识别的
            UNTRACKED:未追踪的连接


    string:这个模块是对内容中的字符串进行匹配
        –algo {bm|kmp}:匹配字符串的算法
        [!] –string STRING:所要匹配的字符串


    time:时间匹配数据包
        –datestart:开始日期时间
        –datestop:结束日期时间
        –timestart:开始时间
        –timestop:结束时间
        [!] –monthdays:一个有的那一日
        [!] weekdays:一周的那一天


    multiport:定义多个不连续的端口的模块
        [!] –sport:源端口21,22,80:200
        [!] –dport:目标端口


部分扩展动作介绍:
    DNAT:目标地址转换
        –to-destination:转到那一个地址,可以跟端口,也可以跟多个连续的端口
    SNAT:源地址转换
        –to-source:转到那一个地址,可以跟一个商品,也可以跟多个端口
    LOG:是一个开启日志的动作
        –log-level NUM:开启日志的日志级别
        –log-prefix:日志的前缀
    MASQUERADE:IP为动态IP,连接猫的时候可以用户这个动作
        –to-ports:转化的商品有那些,如80-100
    REDIRECT:端口重定向
        –to-ports 9090:将指定商品生定向为9090


保存和重载规则:
iptables-save > /PATH/TO/SOME_RULE_FILE (/etc/sysconfig/iptables)
iptables-restore < /PATH/FROM/SOME_RULE_FILE

规则优化:
(1) 可安全放行所有入站及出站,且状态为ESTABLISHED的连接;
(2) 服务于同一类功能的规则,匹配条件严格的放前面,宽松放后面;
(3) 服务于不同类功能的规则,匹配报文可能性较大扩前面,较小放后面;
(4) 设置默认策略;
(a) 最后一条规则设定;
(b) 默认策略设定; 

实例演练:

1.假如我们允许自己ping别人,但是别人ping自己ping不通如何实现呢?

分析:对于ping这个协议,进来的为8(ping),出去的为0(响应).我们为了达到目的,需要8出去,允许0进来
 
在出去的端口上:iptables -A OUTPUT -p icmp –icmp-type 8 -j ACCEPT
在进来的端口上:iptables -A INPUT -p icmp –icmp-type 0 -j ACCEPT

小扩展:对于127.0.0.1比较特殊,我们需要明确定义它

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中的主机访问;数据下载请求的次数每分钟不得超过5个;

iptables -A INPUT -p tcp –dport 21 -s172.16.0.0/16 -m time –weekdays 1,2,3,4,5 –timestart 8:30 –timestop 18:00 -mconnlimit –connlimit-above 5  -j ACCEPT

3、开放本机的ssh服务给172.16.x.1-172.16.x.100中的主机,x为你的座位号,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;

iptables -A INPUT -m iprange –src-range172.16.1.1 -172.16.1.100 -m limit –limit 2/m –limit-burst 2 -j ACCEPT

iptables -A OUTPUT -p tcp –dport 22 -mstate –state ESTABLISHED -j ACCEPT


4、拒绝TCP标志位全部为1及全部为0的报文访问本机;

iptables -A INPUT -p tcp -m –tcp-flag ALL ALL -j DROP

iptables -A INPUT -p tcp -m –tcp-flag ALL NONE -j DROP

原创文章,作者:All well,如若转载,请注明出处:http://www.178linux.com/74599

(1)
All wellAll well
上一篇 2017-05-02
下一篇 2017-05-02

相关推荐

  • vsftpd基于mysql实现用户认证

    一、前言   ftp介绍:     ftp全程是File Transfer Protocol(文件传输协议),方便于实文件交换;但是在文件传输以及账号密码发送时都是以明文传输,因此是一个明文协议 ftp是C/S方式:   常见的客户端有:     GUI方式:browers、FileZilla-cl…

    Linux干货 2015-06-15
  • 基于haproxy的全站https

          前一段时间新疆等地用户访问国务院官网,在首页上发现大量淫秽信息及广告,后反映给相关工作人员。经排查,并非是网站被劫持和入侵,而是运营商流量劫持导致的这个结果……此处且不论该时间后续事宜,作为一名优秀的运维工程师,我们面对运营商如此流氓的行为,应该怎么办? 当然是全站HTTPS了,目前,百度、阿…

    2017-05-18
  • Net22-第一周作业-linux基础知识

    1、描述计算机的组成及其功能。    计算机硬件由五大部件组成,分别是运算器、控制器、存储器、输入和输出设备组成。 其中,运算器和控制器合称为cpu,接受指令,加工数据。 存储器又分为内存和外存(硬盘、U盘等等),这里指的是内存,给cpu提供数据和指令。 输入设备对数据进行输入,如鼠标,键盘等。 输出设备对计算结果进行显示或者打印等,如显…

    Linux干货 2016-08-22
  • Linux基础知识之用户和组的配置文件解析

    实验环境:  Linux系统的版本为CentOS6.8_x86_64版本,以root用户远程用xshell连接,进行实验。 1.创建用户设置的配置文件:/etc/default/useradd        useradd 的配置文件如下图所示:        &nbs…

    Linux干货 2016-08-02
  • Linux软件包管理(YUM)及编译安装

    YUM 一、yum安装使用: 1、Yum:rpm的前端程序,用来解决软件包相关依赖性,可以在多个库之间定位软件包,up2date的替代工具 2、yum repository:yum repo,存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下) 3、yum客户端配置文件: /etc/yum.conf:为所有仓库提供公共配置 /et…

    Linux干货 2016-08-26
  • mariadb数据库的主从复制

    mariadb的主从复制

    2018-02-27