概述
iptables 基础
并发场景测试:
node1:192.168.1.118
node2:192.168.1.109
在node2上搭建搭apache服务器192.168.1.109/1.txt 是可以访问的
在node1上搭建ab压测环境,先安装apache2,关闭apache2,利用ab压测
执行步棸:
-n总请求数, -c 每次累计并发的数量
ab -n 1000000 -c 40 http://192.168.1.109/1.txt
1.现在服务端查看负载情况:
root@node2:/var/www/html# w
21:52:52 up 14 min, 2 users, load average: 0.01, 0.07, 0.08
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
2.在node1上执行:ab -n 1000000 -c 40 http://192.168.1.109/1.txt
3.在node2上查看进程
apt install net-tools
netstat -an|grep 80|grep 192.168.1.118 |grep EST -c
查看进程:
root@node2:/var/www/html# w
22:01:25 up 23 min, 2 users, load average: 2.33, 0.80, 0.32
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
jesse tty2 :1 21:39 147days 14.16s 0.36s /usr/lib/evolution/e
root pts/2 192.168.1.107 21:41 1.00s 0.20s 0.01s w
查看进程数:
root@node2:/var/www/html# netstat -an|grep 80|grep 192.168.1.118 |grep EST -c
40
4.在node2上面做一个限制:
iptables -I INPUT -p tcp --dport 80 -s 192.168.1.118 -m connlimit --connlimit-above 10 -j REJECT
对192.168.1.118来的请求做一个限制,限制tcp协议请求80端口最大是10,超出后就开始拒绝:
5.这时候我们在运行命令:
ab -n 1000000 -c 40 http://192.168.1.109/1.txt
root@node1:~# ab -n 1000000 -c 40 http://192.168.1.109/1.txt
This is ApacheBench, Version 2.3 <$Revision: 1757674 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.1.109 (be patient)
apr_socket_recv: Connection refused (111)
说明直接被拒绝
ab -n 1000000 -c 9 http://192.168.1.109/1.txt
如果我改成9就可以直接运行
Netfilter:
Netfilter是linux操作系统核心层内部的一个数据包处理模块
什么是Hook point?
(PRE_ROUTING,INPUT,OUTPUT,FORWARD,POST_ROUTING)
iptable 是由四张表和五条链组成的
iptable 是由四张表和五条链(Hook point) + 规则
四张表:filter表,nat表,mangle表,raw表
五条链:INPUT OUTPUT FORWARD PREROUTING POSTROUTING
Mangle表:修改数据包,改变包头中的内容(TTL,TOS,MARK)
Filter表:访问控制,规则的匹配
nat表:地址的转发
iptables规则的组成
数据包访问控制:ACCEPT(允许),DROP(直接丢弃),REJECT(拒绝,有消息的返回)
数据包改写:SNAT(对源地址的改写),DNAT(对目标地址的改写)
信息记录:LOG
命令组合方式:
-t filter -A INPUT -p tcp -j ACCEPT
nat -D FORWARD -s DROP
-L OUTPUT -d REJECT
-F PREROUTING --sport DNAT
iptables -P POSTROUTING --dport SNAT
-I -m tcp
-R state
-n multiport
场景一:
规则1:对所有的地址开发本机的tcp(80,22,10-21)端口的访问
规则2:允许对所有的地址开放本机的基于ICMP协议的数据包访问
规则3:其他未被允许的端口则禁止访问
查看node2的端口开放情况
netstat -luntp
iptables -L 列出规则
iptables -nL不让主机名列出来
规则一:iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 10:21 -j ACCEPT
-I 是添加一条规则 p是协议,dprort是目的端口 -j ACCEPT 允许访问
规则二:iptables -I INPUT -p icmp -j ACCEPT
ptables -A 是代表所有的意思 一般是加到最后的,如果加到最前面,直接配置会失效
规则三:iptables -A INPUT -j REJECT 所有的流入都拒绝
这时候再次查看
root@node2:/var/www/html# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpts:10:netstat
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:http
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
开始端口扫描:
nmap -sS -p 0-60000 192.168.1.109
删除80端口的访问
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
禁止对80端口的访问
iptables -I INPUT -p tcp --dport 80 -j REJECT
有的时候是本机访问不了本机,例如,telnet 127.0.0.1 22 不通
说明本地的环路是关闭的,要开启lo环路,lo也是网卡的设备
iptables -I INPUT -i lo -j ACCEPT #本地回环,重要
可以在telnet 本机就可以了
本地无法上网的问题,解决发数据可以,但是回传的话被拒绝
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
curl -I baidu.com 可以返回状态码
场景四:修改只允许10.103.188.233访问本机的http服务
清除掉允许80端口任意访问的规则
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
开始添加固定的ip限制
iptables -I INPUT -p tcp -s 10.10.188.233 --dport 80 -j ACCEPT
iptables -nL
保存:
vim /etc/sysconfig/iptables
iptables 防火墙nat表规则设置
SNAT 原地址转换 出口:POSTROUTING
DNAT 目标地址转换 进口:PREROUTING
查看本机的路由:netstat -rn
更改的方式可以编辑/etc/sysconfig/network 更改geteway网关
或者ip route add 0.0.0.0 gw 10.10.177.232命令
nat 可以实现基于流量的转发,例如:
node1:192.168.0.1
node2:192.168.0.2 192.168.1.2
node3:192.168.2.2
node1需要直接请求node3
可以在node2上面加上地址的转发,调节是node2必须是双网卡
1.可以基于不同端口的转发
2.也可以基于不同端口的转发
参考:https://www.imooc.com/video/7615
iptables防止CC攻击
iptables -I INPUT -p TCP --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECTxi
限制100个
-connlimit-above n 限制并发数
Limit模块
作用:限速,控制流量
例:iptables -A INPUT -m limit --limit 3/hour
--limit-burst 默认值为5
每小时允许三个并发过来
#!/bin/bash
iptables -F
iptables -I INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
iptables -I INPUT -p tcp --dport 1443 -j ACCEPT
iptables -A INPUT -j REJECT
iptables-save
开放的端口:
1.两台主机的5432端口相互通信,限制别的机器访问
2.两台主机开放22端口,node只允许本地连接:192.268.1.100访问
3.node1开放80端口,企业的禁止访问
iptables -L
iptables -F
限制22
iptables -I INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
限制5432 postgre
node1:iptables -I INPUT -p tcp -s 192.168.1.109 --dport 5432 -j ACCEPT
node2:iptables -I INPUT -p tcp -s 192.168.1.118 --dport 5432 -j ACCEPT
开放80,443端口:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
限制10050端口:
iptables -I INPUT -p tcp -s 192.168.1.109 --dport 10050 -j ACCEPT
所有默认的都禁止访问
iptables -A INPUT -j REJECT
最后
以上就是爱听歌中心为你收集整理的iptables 知识点整理的全部内容,希望文章能够帮你解决iptables 知识点整理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复