課程:html
iptables -F //清除每一個鏈-表內的規則設定 iptables -X //清除用戶自定的鏈-表: INPUT、FORWARD、OUTPUT iptables -I INPUT -p tcp --dport 22 -j ACCEPT //ssh iptables -I INPUT -p tcp --dport 80 -j ACCEPT //http iptables -I INPUT -p tcp --dport 10:21 -j ACCEPT //ftp iptables -A INPUT -j REJECT iptables -I INPUT -p tcp --dport 9500:9700 -j ACCEPT iptables -I INPUT -p udp --dport 9500:9700 -j ACCEPT iptables -I INPUT -p tcp -s 192.168.1.0/24 --dport 9800 -j ACCEPT -I 插入規則(首部) -A append規則(尾部) -p protocol協議類型 --dport 目標端口(sport源地址) -j 應用規則jump target for rule -s netstat -luntp //l:監聽、u:udp、n:主機name、t:tcp、p:PID/Program //[Linux netstat命令詳解](https://www.cnblogs.com/ftl1012/p/netstat.html)
iptables -I INPUT -i lo -j ACCEPT //lo:本機網卡 iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT //網卡創建監聽鏈接的狀態(ESTABLISHED雙向穩定狀態),ftp創建數據鏈接時中間狀態 iptables-save > /etc/iptables/rules.v4 //持久化iptables規則 iptables-resotre < /etc/iptables/rules.v4 //恢復規則 root@cffycls-PC:~# vim /etc/network/if-pre-up.d/iptables #!/bin/bash /sbin/iptables-restore < /etc/iptables/rules.v4 chmod +x /etc/network/if-pre-up.d/iptables
iptables -t nat -F //清除nat規則設定 #檢查轉發設置,是否忽略 sysctl -a|grep ip_forward //net.ipv4.ip_forward = 1
若是沒有 vim /etc/sysctl.conf 添加這樣一行,或者 echo '1' > proc/sys/net/ipv4/ip_forward,sysctl -p當即生效。linux
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 192.168.1.111 #全部來自 -s 的請求,使用本機1.111的網卡出去 iptables -t nat -nL //查看 --line-numbers iptables -t nat -D POSTROUTING 3 //刪除 iptables -t nat -A PREROUTING -d 192.168.1.111 -p tcp --dport 80 -j DNAT --to 172.0.1.1:8080
--syn: --tcp-flags SYN,ACK,FIN,RST SYN -m:module_name使用模塊名
## *********** 防CC攻擊 *********** #connlimit模塊,防止DOS太多鏈接進來 iptables -I INPUT -p tcp -syn -dport 80 -m connlimit --connlimit-above 15 -j DROP ## *********** 限速 *********** iptables -I -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
創建網絡測試容器git
docker network create mynet --subnet=111.111.0.0/16 報錯舊重啓下 sudo systemctl restart docker //重建docker0網絡
批量ping主機。github
wget http://fping.org/dist/fping-4.2.tar.gz tar -xf fping-4.2.tar.gz && cd fping-4.2 ./configure && make && make install fping -a[--alive] -f[ --file FILE] -g[--generate生成字符串、域列表] fping -a -g 192.168.1.0/16
對目標進行tcp探測;僞造來源ip、模擬Ddos攻擊。docker
wget https://codeload.github.com/antirez/hping/zip/master file master //是zip文件 unzip master && cd hping-master ./configure && make && make install apt-cache search libpcap apt-get install libpcap-dev tcl-dev -y ln -sf /usr/include/pcap-bpf.h /usr/include/net/bpf.h
參數:vim
-p: 端口 -S: 設置tcp模式的syn包 -a: 僞造ip地址
計劃環境,[複製虛擬機]:緩存
192.168.1.111 虛擬機h1 (主) 192.168.1.112 虛擬機h2 (複製)
在虛擬機h1(主)中: 端口開放了2二、80、8084-docker等 在虛擬機h2中: ping 192.168.1.111 通; hping -p 8084 -S 192.168.1.111 通 在虛擬機h1(主)中: 執行 sysctl -w net.ipv4.icmp_echo_ignore_all=1 在虛擬機h2中: ping 192.168.1.111 不通; hping -p 8084 -S 192.168.1.111 通; fping -u 192.168.1.111 獲得; //目標機器拒絕icmp包時,普通ping不通、tcp能夠
apt-get install tcpdump -y 在虛擬機h2中: hping -p 8084 -S 192.168.1.111 -a 10.10.10.10 卡住 在虛擬機h1(主)中: 執行 tcpdump -np -i ens33 src host 10.10.10.10 //網卡請求日誌, 能夠看到一直有TCP包請求過來
檢測路跳轉安全
# apt-get install traceroute -y traceroute -n www.imooc.com //-n 不解析主機名 traceroute -nT -p 80 www.imooc.com //-T:tcp; -p: port
檢測路由丟包率bash
# apt-get install mtr -y mtr www.imooc.com //查看丟包率
批量主機掃描cookie
# apt-get install nmap -y -P icmp掃描 快速有效 -sS tcp.syn半掃描 高效,不易檢測 -sT tcp掃描 真實,可靠 -sU udp掃描 有效透過防火牆 nmap -sP 192.168.1.0/24 //掃描存活
批量主機掃描
# apt-get install netcat -y -w 超時時間 -z 輸入輸出模式 -v 顯示執行過程 -u/t udp/tcp nc -vz -w2 192.168.1.112 10-100 //10-100的端口
# Dockerfile: RUN apt-get install -y autoconf dpkg-dev dpkg file g++ gcc libc-dev make pkgconf re2c wget unzip \ vim tcpdump net-tools inetutils-ping telnet iptables iproute2 iproute2-doc curl \ traceroute mtr nmap netcat \ && mkdir -p /tmp/build && cd /tmp/build \ #============================================== fping ======================================================== && wget http://fping.org/dist/fping-4.2.tar.gz && tar -xf fping-4.2.tar.gz && cd fping-4.2 \ && ./configure && make && make install \ && cd .. && rm -rf fping-4.2 \ #============================================== hping ======================================================== && wget https://codeload.github.com/antirez/hping/zip/master \ && unzip master && cd hping-master/ \ && apt-get install -y libpcap-dev tcl-dev && ln -sf /usr/include/pcap-bpf.h /usr/include/net/bpf.h \ && ./configure && make && make install \ && cd .. && rm -rf hping-master docker network create mynet1 --subnet=111.111.0.0/16 docker network create mynet2 --subnet=222.222.0.0/16
《Docker和iptables》測試(貌似沒啥用):
iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.111 -j DROP # 僅容許從子網192.168.1.0/24訪問 iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.0/24 -j DROP
syn類型DDOS攻擊預防
一、減小發送syn+ack包時重試次數 sysctl -w net.ipv4.tcp_synack_retries=3 sysctl -w net.ipv4.tcp_syn_retries=3 //臨時,永久的能夠在 /etc/sysctl.conf 等相應位置設置 二、syn cookies技術 sysctl -w net.ipv4.tcp_syncookies=1 //當客戶端返回一個ACK包時,根據包頭信息計算cookie,與返回的確認序列號(初始序列號 + 1) //進行對比,若是相同,則是一個正常鏈接,而後,分配資源,創建鏈接 三、增長backlog隊列 sysctl -w net.ipv4.tcp_max_syn_backlog=2048
其它防護策略
一、關閉ICMP協議請求 sysctl -w net.ipv4.icmp_echo_ignore_all=1 二、經過iptables防止掃描 /** -limit: second /minute /hour /day -limit-burst: 併發隊列緩存長度 -tcp-flags: SYN 同步標誌; 表示開始會話請求 ACK 應答標誌 FIN 結束標誌; 結束會話 RST 復位標誌; 中斷一個鏈接 PSH 推標誌; 數據包當即發送 **/ iptables -A FORWARD -p tcp -syn -m limit -limit 1m/s -limit-burst 5 -j ACCEPT iptables -A FORWARD -p tcp -tcp-flags SYN,ACK,FIN,RST RST -m limit -limit 1m/s -j ACCEPT iptables -A FORWARD -p icmp -icmp-type echo-request -m limit -limit 1m/s -j ACCEPT
TCP三次握手與四次揮手詳解
Wireshark抓包:
三次握手: HTTP: GET [DATA] 不發送數據 (C:Client) --> [SYN] Seq(new i=0) --> (S:Server) ==> C: SYN_SEND狀態 S: LISTEN (C) <-- [SYN, ACK] seq(new j=0) Ack(1) ] <--(S) ==> C: -- S: SYN_RECV狀態 (C) --> [ACK] Seq(i+1) Ack(j+1) --> (S) ==> C: ESTABLISHED狀態 S: ESTABLISHED狀態 正常請求: HTTP: GET [DATA] (C) --> [SYN] Seq(i) --> (S:Server) (C) <-- [ACK] Seq(j+15) Ack(i) <-- (S) (C) <-- [ACK] Seq(j+210) Ack(i) <-- (S) (C) <-- [ACK] Seq(j+1210) Ack(i) <-- (S) 四次揮手: (C) --> [ACK] Seq(m) Ack(n) --> (S) (C) <-- [FIN, ACK] Seq(y) Ack(x+36) <-- (S) (C) <-- [FIN, ACK] Seq(y) Ack(x+110) <-- (S) (C) --> [ACK] Seq(x+110) Ack(y+1) --> (S)
當前應答的:Seq=請求的Ack;Ack=請求的Seq+1。
握手:
第一次鏈接:
揮手:
Tcp previous segment lost(tcp先前的分片丟失) Tcpacked lost segment(tcp應答丟失) Tcp window update(tcp窗口更新) Tcp dup ack(tcp重複應答) Tcp keep alive(tcp保持活動) Tcp retransmission(tcp重傳) Tcp ACKed unseen segument (tcp看不見確認應答) tcp port numbers reused(tcp端口重複使用) tcp retransmission(tcp重傳) tcp fast retransmission (tcp快速重傳) TCP Previoussegment lost(發送方數據段丟失) tcp spurious retransmission(tcp僞重傳) tcp segment of a reassembled PDU 重組的協議數據單元