(網絡學習)五、iptables防火牆與網絡攻擊

課程:html

  1. 用iptables搭建一套強大的安全防禦盾
  2. Linux系統掃描技術及安全防範

一、白環境初始化

a. 置空鏈表、初始化端口

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)

b.本機自訪問、外網

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

c.SNET源、DNET目標 地址轉換

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

d.防CC攻擊

--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

二、linux安全掃描

創建網絡測試容器git

docker network create mynet --subnet=111.111.0.0/16
報錯舊重啓下
sudo systemctl restart docker //重建docker0網絡

a.fping:批量ping主機

批量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

b.hping:tcp探測

對目標進行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 (複製)

ICMP禁ping

在虛擬機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能夠

僞造來源ip:[syn包攻擊]

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包請求過來

c.路由掃描:檢測跳轉、丟包率

traceroute

檢測路跳轉安全

# apt-get install traceroute -y 
traceroute -n www.imooc.com //-n 不解析主機名
traceroute -nT -p 80 www.imooc.com //-T:tcp; -p: port

mtr

檢測路由丟包率bash

# apt-get install mtr -y 
mtr www.imooc.com //查看丟包率

d.批量主機掃描

nmap

批量主機掃描cookie

# apt-get install nmap -y 
-P          icmp掃描            快速有效
-sS         tcp.syn半掃描       高效,不易檢測
-sT         tcp掃描             真實,可靠
-sU         udp掃描             有效透過防火牆

nmap -sP 192.168.1.0/24 //掃描存活

ncat

批量主機掃描

# apt-get install netcat -y 
-w          超時時間
-z          輸入輸出模式
-v          顯示執行過程
-u/t        udp/tcp

nc -vz -w2 192.168.1.112 10-100 //10-100的端口

三、防攻擊

a.工具測試容器

# 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

b.常見的攻擊方法

  • SYN攻擊
  • DDOS攻擊
  • 惡意掃描

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

四、http請求理解

a.http協議理解

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。
握手:
握手:鏈接創建
第一次鏈接:
第一次鏈接
揮手:
揮手

b.Wireshark抓包錯誤狀態

  • tcp常見錯誤狀態

Tcp抓包以及tcp狀態解釋

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 重組的協議數據單元
相關文章
相關標籤/搜索