课程: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 重组的协议数据单元