一、防火墙概述

工作于主机或网络边缘,依据策略决定数据报文的出入规则,可以防范报文进出网络或主机内部,此策略包括ip、进出口、mac、port等规则。

TCP三次握手、4次断开

syn、ack、fin、urg、psh、rst

2、应用层网关:varnish、squid

3、***检测系统(IDS):NIDS(网络***检测系统,软件:snort),HIDS(主机***检测系统,软件:)

4、***防御系统(IPS):实际上是***检测系统和防火墙的联动结合。

5、filesystem:tripwire

二、防火墙内部关键词

input:通往防火墙内部主机的输入报文检查口

output:防火墙主机本身要出去访问外部的检查口

forward:防火墙本身处理数据包转发的检查口。 这个检查口就是可以放规则的位置,也经常被称为钩子函数,hook function。



三、防火墙规则的主要功能:四个表、五个内置链

表:

1、filter:包过滤

2、NAT:地址转换,SNAT/DNAT/PAT

3、mangle:修改报文属性

4、raw:

内置链

perrouting、input、forward、output、postrouting、

四、创建和保存

1、通过iptables来创建的规则会在重启iptables时丢失。

2、自动备份:service iptables save

3、手动备份:iptables-save。

4、恢复策略:iptables-restore

5、默认保存位置:/etc/sysconfig/iptables

规则的属性定义

1、网络层协议属性:ip

2、传输层协议属性:tcp/udp/icmp

tcp三次握手:

1、请求方发送syn,包含主机的随机序列号100

2、接收方收到syn,回应syn和ack,syn为自己的随机序列号200,ack为希望收到对方的下一个序列号101

3、接收方收到syn和ack,继续发送syn为101,ack为201

iptables
        大写字母选项:子命令

        小写字母选项:用来匹配标准及其他

-t:指定表类型

-L:list,

        -n:数字显示IP和port

        -v:显示详细信息

        -vv:更详细信息

        --line-number:显示行号

        -x:显示精确值

规则和默认策略都有两个计数器

packets:匹配的报文数

bytes:报文数的大小

五、表和链的对于关系

filter表:

    INPUT(处理来自外部 的数据)

    FORWARD(处理将数据转发到本机其他网卡上的策略)

    OUTPUT(处理来自内部的数据)

nat表

    PERROUTTING(处理刚到达本机并在路由转发前的数据包,它会转换数据包中的目标ip地址,通常用于DNAT)

    POSTROUTING(处理即将离开本机的数据包,它会转换数据包中的原ip地址,通常用于SNAT)

    OUTPUT

mangle表

    PERROUTTING、POSTROUTING、OUTPUT、INPUT、FORWARD

raw表

    PERROUTING、OUTPUT


六、管理链

    --flush -F:清空所有链中的策略

    -P:设定默认策略

                iptables -P INPUT DROP

    -N:创建自定义链

    -X:删除自定义空链

    -Z:计数器清零

    -E:重命名自定义链

七、管理规则

    -A:append,追加一条新规则rules,默认追加到链尾部。

    -I[n]:在第n条位置插入新的规则

    -D[n]:删除第n条规则

    -R[n]:替换第n条规则

编写规则语法

iptables [-t 表名] 大写选项字命令 [规则号] 链名 匹配标准 -j 目标

目标:

    drop:丢弃,无声无息

    reject:丢弃,有信息提示

    accept:接受

描绘规则的匹配标准

    通用匹配:用于描述数据包的协议、原地址、目的地址、允许经过的网络接口,以及如何处理这些数据包。

  • -s--src --source [!] ip:参数可以是ip地址、网络地址、主机名

  • -d --dst --destination [!] ip/network

  •  -i :指定数据报文流入接口(网卡)

  • -o:指定数据报文流出接口

                    iptables -L --line-number      //查看规则编号

                    iptables -t filter -R 1 INPUT -s 192.168.1.0/24 -d 192.168.1.9 -i eth0 -j ACCEPT

  • -p:指定协议{tcp|upd|icmp|all}默认是all,匹配所有协议。

  • -j:代表“jump to target”目的可以是accept、drop、return、queue。


    扩展匹配:除了通用匹配,这里主要指定端口、tcp标志、icmp类型等内容。

  • “ -m 扩展名称”来引用,每个模块都有自己特有的专用选项,有些是必须提供的。

  • -sport:缺省情况下是所有端口,可以使用冒号匹配范围

  • -dport:

  • --tcp-flags:指定多个参数用“逗号”分隔

  • --icmp-type:


   隐藏扩展

                      -p tcp        

                                --sport 22-30

                                --dport

                                --tcp-flags:要检查的标记,检查是否为1 

练习:1、放行对web服务的访问

            iptables -t filter -A INPUT -d 192.168.1.9 -p tcp  --dport 80 -j ACCEPT 

            iptalbes -t filter -A OUTPUT -s 192.168.1.9 -p tcp --sport 80 -j ACCEPT

            2、本机是DNS服务器,放心本地的DNS服务,并为本地客户端做递归解析,本机ip:192.168.1.9

                                iptables -t -A INPUT -p tcp --dport 53 -j ACCEPT

                                iptables -t -A OUTPUT -p tcp --sport 53 -j ACCEPT      //作为服务器端

                               iptables -t -A INPUT -p tcp --sport 53 -j ACCEPT

                               iptables -t -A OUTPUT -p tcp --dport 53 -j ACCEPT        //作为客户端替用户递归查询

                        -p icmp

                             --icmp-type

                                    请求:8

                                    响应:0

             3、本机能ping通对方主机(此为单方向发送,如果要远程可以ping本地,需要另写一组)

                    iptables -t filter -A INPUT -p icmp --icmp-type 0 -j ACCEPT

                    iptables -t filter -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT

            显示扩展 /lib/xtablies/

                    -m state --state

                            NEW,ESTABLISHED,RELATED,INVALID

              4、允许NEW、ESTABLISHED通过iptables。


              5、允许防火墙放行ftp服务。

                       模块位置:  ll /lib/modules/2.6.32-431.el6.i686/kernel/net/netfilter/

              6、多端口匹配,可以指定15个以内的离散端口(分散)

                        -m multiport

                                --source-ports

                                --destination-ports

                                --ports

                                          练习:  iptables -I INPUT 1 -p tcp  -m multiport --destination-ports 53,21,22 -j ACCEPT

               7、多ip范围

                        -m iprange 192.168.1.1-192.168.1.22

                        -m iprange --src-range 192.168.1.1-192.168.1.20

                                            --dst-range

               8、速率配置

                        -m limit

                                --limit  表示单位时间内可以有多少数据包进入/days/min/hours

                                --limit-burst 表示一次同时可以进入几个

                9、字符串匹配

                        -m string           

                                    --string “”

                                    --algo {bm|kmp}

               10、时间限制

                        -m time    

                                    --timestart

                                    --timestop

                        需要安装nf_conntrack_ftp模块,可以手动装载modeprobe nf_conntrack_ftp ,也可以通过修改配置文件/etc/sysconfig/iptables-config配置文件中IPTABLES_MODULES=""

添加模块名称

练习:INPUT和OUTPUT策略默认为DROP

1、限制本地主机的web服务器在周一不允许访问:且新请求的速率不能超过100个/秒,web服务包含admin字符串的页面不允许访问,仅允许响应报文离开本地。

iptables -I INPUT 1 -m state --state ESTABLISHED -j ACCEPT

1、iptables -A INPUT -d 127.0.0.1 -p tcp --dport 80 -m time --weekdays Tue,Web,Thu,Fri,Sat,Sun -m limit --limit 100/sec -m string --algo kmp ! --string "admin" -m state --state NEW -j ACCEPT

2、 iptables -A OUTPUT -m state --state ENSTABLISHED RELATED -j ACCEPT

2、在工作时间,即周一至周五的8:30-18:30,开发本机的ftp服务给172.16.0.0网络中的主机访问,数据下载请求的次数为每秒5个。

1、iptables -A INPUT -p tcp -d 127.0.0.1 -s 192.168.1.0/24 --dport 21 -m time --weekdays Mon-Fri --timestart 08:30  -j ACCEPT

2、iptables -A INPUT -s 192.168.1.0/24 -d 127.0.0.1 -p tcp --dport 21 -m state --state RELATED -m limit --limit 5/min -j ACCEPT

3、开发本机的ssh服务给192.1681.1-55的主机,新请求建立的速率一分钟不超过2个,仅允许响应报文离开本地

iptables -A INPUT -m iprange --src-range 192.168.1.1-192.168.1.55 -m limit --limit 2/min -p tcp --dport 22 -m state --state NEW -j ACCEPT

4、拒绝tcp标志位全部为1和全部为0的报文访问本机。

iptables -N clean-in

iptables -I clean-in 1 -p tcp --tcp-flags ALL ALL -j DROP

iptables -I clean-in 1 -p tcp --tcp-flags ALL NONE -j DROP

iptables -A clean-in -d 192.168.1.1 -j RETURN


iptables -I INPUT 1 -d 192.168.1.1 -j clean-in

5、允许本机ping别的主机,不许其他主机ping本地。

iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT

-m connlimit

        --connlimit-above  设置连接数上限,默认是超出后采取的措施,通常采用取反的方法来实现其功能。

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 80 -m connlimit !  --connlimit-above 5 -j ACCEPT

利用iptables的recent模块来抵御DOS***,建立一个列表,保存所有访问过指定服务的客户端ip地址

1、创建访问指定服务的访问列表

iptables -I INPUT 1 -p tcp --dport 22 -m state --state NEW -m recent --set --name ssh

文件存储在/proc/net/ipt_recent/ssh

2创建规则,指定访问22端口的链接在超过3个链接就拒绝再链接,拒绝时间为5分钟

iptables -I INPUT -p tcp --dport 22 -m state --state NEW    -m --recent --update --second 300 --hitcount 3 --name ssh -j ACCEPT

ipv4的内核管理功能

主要用于阻挡外部***

1、/proc/sys/net/ipv4/tcp_syncookies

用于预防dos***,(通过发送大量的无效连接请求syn,来阻止正常请求访问),方法是服务器在响应客户端发送的请求时,要求客户端对自己的请求内容进行一次验证,如果能够对自己发送的内容进行确定,就建立连接。

2、/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

预付死亡ping***,通过不响应ping broadcast来阻止。

3、/proc/sys/net/ipv4/conf/eth*/

               rp_filter:逆向路径过滤,通过分析网络接口的路由信息,配合数据包的来源,来分析数据包合理性。

                log_martians:记录不合法的IP地址到/var/log/message

                accept_redirects:

                send_redirects:

NAT技术

私网

C:192.168.1.0-192.168.254.0

B:172.16.0.0-192.31.0.0

A:10.0.0.0

私网地址实现访问互联网的方法

1、NAT

2、PROXY

SNAT:内部客户机访问外部网络,iptables配置在postrouting

             -j SNAT --to-source IP

             -j MASQUERADE        适合外网ip地址是动态的,类似adsl获取的外网ip地址。

设置方法:

1、设置SNAT        

iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j SNAT --to-source 192.168.1.9

2、设置forward策略

iptables -A FORWARD -s 192.168.100.0/24 -p tcp --dport 80 -m time --timestart 08:30 --timestop 10:30 -j ACCEPT

iptables -A FORWARD  -d 192.168.100.0/24 -m time --timestart 08:30 --timestop 10:30 -j ACCEPT

注意此限制时间是以防火墙的时间为准。

DNAT:实现内部服务器可以被外部网络访问,prerouting

            -j DNAT   --to-destination IP:p ort

          iptables -t nat -A -p tcp -dport 80 -j --to-destination 192.168.1.1:8080

linux内核打补丁

1、比较文件的区别,创建补丁:diff

-c:文件比较

-u:放在一起比较

打补丁:diff  oldfile newfile >1.patch

2、打补丁:patch

进入需要打补丁的文件目录

cd old_dir

打补丁

-p:忽略补丁路径的“/”数目。建议直接将补丁文件放在需要打补丁到的文件里,方便打补丁。

patch oldfile <1.patch

还原会未打补丁状态

patch -R old_file 1.patch

SRC格式的rpm源程序包:ftp://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/