我的编程空间,编程开发者的网络收藏夹
学习永远不晚

iptables(3)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

iptables(3)

iptables/netfilter网络防火墙:

打开本机的核心转发功能:echo 1 > /proc/sys/net/ipv4/ip_forward

网关上有两个网卡,一个内网网卡,一个内网网卡,

内网网卡ip:192.168.254.135;外网网卡ip:10.1.68.15

内网主机ip:192.168.254.136;网关:192.168.254.135 。外网主机ip:10.1.68.16

此时内网主机是可以ping通192.168.254.135,10.1.68.15

内网主机添加gateway:route add default gw 192.168.254.135

同时外网主机添加gateway:route add default gw 10.1.68.15

此时外网和内网的通信就可以了

        

wKiom1gMcbywRktvAACJ6XgSdTg616.png-wh_50

wKioL1gMcY-zQ74-AAB5ZGyre84789.png-wh_50

iptables -I FORWARD -s 192.168.254.0/24 -p tcp --dport 80 -j ACCEPT
iptables -I FORWARD 2 -d 192.168.254.0/24 -p tcp --sport 80 -j ACCEPT
iptables -A FORWARD -j DROP


添加以上规则,内网就能实现内网访问外网的由80端口提供的服务,而外网无法访问内网

iptables -I FORWARD 1 -m state --state ESTABLISHED -j ACCEPT//可以省去写所有响应报文的规则
iptables -I FORWARD 3 -s 192.168.254.0/24 -p icmp -j ACCEPT//允许内网主机ping外网主机
iptables -R FORWARD 2 -s 192.168.254.0/24 -p tcp  -m multiport --dport 22,23,80,21,139,445 -m state --state NEW -j ACCEPT//同时放行多端口,并指定放行端口的状态


开启ftp的被动转发功能:先开启网关的nf_conntract_nfs 

之后把第一条规则改为iptables -I FORWARD 1 -m state --state RELATED,ESTABLISHED -j 

定义规则,调试之前最好设置一个20分钟自动清空规则的计划任务,防止规则出错,导致服务连接不上

添加规则于FORWARD链,注意几个问题:

1) 请求和响应报文均会经由FORWARD链,要注意规则的方向性;

第一条:iptables -I FORWARD  -m state --state ESTABLISHED,RELATED -j ACCEPT

2) 如果可以启用conntrack机制,注意网关主机所能够追踪的连接数的最大数量要符合需要

wKioL1gMcgugCipfAACp_tRGOSs291.png

NAT:网络地址转换

内网主机不希望互联网上的用户访问到内网主机的存在。就需要把内网主机发的报文到达网关时,把内网主机的地址转化为网关的外网地址。网关主机中有一个nat表记录哪个内网发来的请求转发给了外网。

源地址转换:SNAT,POSTROUTING

静态转换:外网地址是固定的  (另外一种是地址池机制,外网地址有多个,转换的时候随机选择一个)

动态转换:外网地址是不固定的

目标地址转换:DNAT,PREROUTING

公司中有三台主机提供对外的三种服务,但是只有一个外网地址我们在网关上设置目标地址转换。网关主机对外宣称自己提供三种服务,当外网用户访问网关外网ip时,将不同服务转换给内网的不同主机以提供服务

PAT:Port Address Translation :端口转换

SNAT:源地址转换

This  target  is only valid in the nat table, in the POSTROUTING and INPUT chains, and user-defined chains which are only called from those chains.

--to-source [ipaddr[-ipaddr]]

iptables -t nat -I POSTROUTING -s 192.168.254.0/24 -j SNAT --to-source  10.1.68.15

//经由内网192.168.254.0/24网络的访问,都把源地址改为10.1.68.15

iptables -t nat -I POSTROUTING -s 10.1.68.16 -j SNAT --to-source 192.168.254.135

//经由外网进来的访问内网主机,都转换为由网关内网网卡的访问

此时在网关主机上不同的网卡上抓的包是不一样的。

MASQUERADE:动态地址转换

This target is only valid in the nat table, in the POSTROUTING chain.  It  should  only  be  used  with  dynamically assigned  IP (dialup) connections: if you have a static IP address, you should use the SNAT target. 

iptables -t nat -I  POSTROUTING -s 192.168.254.0/24 -p tcp --dport 80 -j MASQUERADE

由内网访问出去的,没指定转换为网关的哪个地址时,会自动扫描可用的地址。通常用在拨号上网的方式上。使用静态地址时不建议使用这种方式,会影响性能

DNAT:目标地址转换

This target is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-defined chains  which  are only  called from those chains. 

--to-destination [ipaddr[-ipaddr]][:port[-port]]

iptables -t nat -R  PREROUTING 1 -d 10.1.68.15 -j DNAT --to-destination 192.168.254.136//访问网关外网ip的请求都转发至内网192.168.254.136,提供服务

iptables -t nat -I PREROUTING  -d 10.1.68.15 -p tcp --dport 80 -j DNAT --to-destination 192.168.254.136:8080//转至内网httpd服务的8080端口

iptables -t nat -R PREROUTING 1 -d 10.1.68.15 -p tcp --dport 22 -j DNAT --to-destination 192.168.254.137:22



REDIRECT:端口映射, 在本机上把端口转换为指定的端口

This  target  is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-defined chains which are only called from those chains. 

--to-ports port[-port]

iptables -t nat -I PREROUTING -d 192.168.254.136,192.168.254.137 -p tcp --dport 80 -j REDIRECT --to-port 8080//仅在当前主机上完成端口映射,提供服务的是8080端口,当用户访问本机的80端口时把端口转换为提供服务的8080端口

这样可以不用在网关上设置端口转换


RETURN:返回调用的链上,不加默认也是返回。但是最好加上。

nat上完成转换,filter上完成过滤

自定义链:自定义链需要在主链上调用才能生效。可以把针对不同服务的规则定义在不同的自定义链上,然后在主链上调用。  自定义链只要被调用了,就不能删掉。没被引用但是上面有规则也不能删除

iptables -N chain_new

                        *nat
			:PREROUTING ACCEPT [88:12626]
			:INPUT ACCEPT [82:12266]
			:OUTPUT ACCEPT [0:0]
			:POSTROUTING ACCEPT [2:120]
			COMMIT
			# Completed on Sat Oct 22 09:56:27 2016
			# Generated by iptables-save v1.4.21 on Sat Oct 22 09:56:27 2016
			*filter
			:INPUT ACCEPT [81:6825]
			:FORWARD ACCEPT [0:0]
			:OUTPUT ACCEPT [20:1868]
			:web_in - [0:0]
			-A FORWARD -m state --state ESTABLISHED -j ACCEPT
			-A FORWARD -d 192.168.254.136/32 -p tcp -m tcp --dport 80 -j web_in
			-A FORWARD -j REJECT --reject-with icmp-port-unreachable
			-A web_in -d 192.168.254.0/24 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
			iptables -A web_in -j RETURN 
			COMMIT
			# Completed on Sat Oct 22 09:56:27 2016


练习:INPUT和OUTPUT默认策略为DROP;


1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;

2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中的主机访问;数据下载请求的次数每分钟不得超过5个;

3、开放本机的ssh服务给172.16.x.1-172.18.x.100中的主机,x为你的学号,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;

4、拒绝TCP标志位全部为1及全部为0的报文访问本机;

5、允许本机ping别的主机;但不开放别的主机ping本机;



练习:判断下述规则的意义:

# iptables -N clean_in //添加一个链名为clean_in的自定义链

# iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP

# iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP


# iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP

# iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP

# iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP

# iptables -A clean_in -d 172.16.100.7 -j RETURN 



# iptables -A INPUT -d 172.16.100.7 -j clean_in


# iptables -A INPUT  -i lo -j ACCEPT

# iptables -A OUTPUT -o lo -j ACCEPT



# iptables -A INPUT  -i eth0 -m multiport -p tcp --dports 53,113,135,137,139,445 -j DROP

# iptables -A INPUT  -i eth0 -m multiport -p udp --dports 53,113,135,137,139,445 -j DROP

# iptables -A INPUT  -i eth0 -p udp --dport 1026 -j DROP

# iptables -A INPUT  -i eth0 -m multiport -p tcp --dports 1433,4899 -j DROP


# iptables -A INPUT  -p icmp -m limit --limit 10/second -j ACCEPT

补充:利用iptables的recent模块来抵御DOS***: 22,建立一个列表,保存有所有访问过指定的服务的客户端IP



ssh: 远程连接,


iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP



iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH

iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j LOG --log-prefix "SSH Attach: "

iptables -I INPUT  -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP


1.利用connlimit模块将单IP的并发设置为3;会误杀使用NAT上网的用户,可以根据实际情况增大该值;


2.利用recent和state模块限制单IP在300s内只能与本机建立2个新连接。被限制五分钟后即可恢复访问。


下面对最后两句做一个说明:


1.第二句是记录访问tcp 22端口的新连接,记录名称为SSH

--set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目


2.第三句是指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。

--update 是指每次建立连接都更新列表;

--seconds必须与--rcheck或者--update同时使用

--hitcount必须与--rcheck或者--update同时使用


3.iptables的记录:/proc/net/xt_recent/SSH



也可以使用下面的这句记录日志:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --second 300 --hitcount 3 -j LOG --log-prefix "SSH Attack"



CentOS 6:


http://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/

layer7:第三方扩展;


iptables实现七层访问过滤:


模块:layer7

识别应用层协议


iptables/netfilter

iptables -m state, 

netfilter state


对内核中的netfilter,打补丁layer7,重新编译内核

对iptables打补丁,补上layer7模块,重新iptables



diff/patch:文本操作工具



diff是Unix系统的一个很重要的工具程序。它用来比较两个文本文件的差异,是代码版本管理的核心工具之一。其用法非常简单:

# diff <变动前的文件> <变动后的文件>


由于历史原因,diff有三种格式:

* 正常格式(normal diff)

* 上下文格式(context diff)

* 合并格式(unified diff)


1、正常格式的diff

例如,对file1(变动前的文件)和file2(变动后的文件)进行比较可使用如下命令:

# diff file1 file2

显示结果中,第一行是一个提示,用来说明变动位置。它分成三个部分:前面的数字,表示file1的第n行有变化;中间的"c"表示变动的模式是内容改变(change),其他模式还有"增加"(a,代表addition)和"删除"(d,代表deletion);


2、上下文格式的diff

上个世纪80年代初,加州大学伯克利分校推出BSD版本的Unix时,觉得diff的显示结果太简单,最好加入上下文,便于了解发生的变动。因此,推出了上下文格式的diff。它的使用方法是加入-c选项(即context)。

# diff -c f1 f2

结果分成四个部分。第一部分的两行,显示两个文件的基本情况:文件名和时间信息,"***"表示变动前的文件,"---"表示变动后的文件。第二部分是15个星号,将文件的基本情况与变动内容分割开。第三部分显示变动前的文件,即file1。

另外,文件内容的每一行最前面,还有一个标记位。如果为空,表示该行无变化;如果是感叹号(!),表示该行有改动;如果是减号(-),表示该行被删除;如果是加号(+),表示该行为新增。

第四部分显示变动后的文件,即file2。


3、合并格式的diff

如果两个文件相似度很高,那么上下文格式的diff,将显示大量重复的内容,很浪费空间。1990年,GNU diff率先推出了"合并格式"的diff,将f1和f2的上下文合并在一起显示。

它的使用方法是加入u参数(代表unified)。

# diff -u f1 f2

其结果的第一部分,也是文件的基本信息。"---"表示变动前的文件,"+++"表示变动后的文件。第二部分,变动的位置用两个@作为起首和结束。第三部分是变动的具体内容。

除了有变动的那些行以外,也是上下文各显示3行。它将两个文件的上下文,合并显示在一起,所以叫做"合并格式"。每一行最前面的标志位,空表示无变动,减号表示第一个文件删除的行,加号表示第二个文件新增的行。


diff 

-u


patch


尽管并没有指定patch和diff的关系,但通常patch都使用diff的结果来完成打补丁的工作,这和patch本身支持多种diff输出文件格式有很大关系。patch通过读入patch命令文件(可以从标准输入),对目标文件进行修改。通常先用diff命令比较新老版本,patch命令文件则采用diff的输出文件,从而保持原版本与新版本一致。


patch的标准格式为

patch [options] [originalfile] [patchfile]


如果patchfile为空则从标准输入读取patchfile内容;如果originalfile也为空,则从patchfile(肯定来自标准输入)中读取需要打补丁的文件名。因此,如果需要修改的是目录,一般都必须在patchfile中记录目录下的各个文件名。绝大多数情况下,patch都用以下这种简单的方式使用:


patch命令可以忽略文件中的冗余信息,从中取出diff的格式以及所需要patch的文件名,文件名按照diff参数中的"源文件"、"目标文件"以及冗余信息中的"Index:"行中所指定的文件的顺序来决定。


-p参数决定了是否使用读出的源文件名的前缀目录信息,不提供-p参数,则忽略所有目录信息,-p0(或者-p 0)表示使用全部的路径信息,-p1将忽略第一个"/"以前的目录,依此类推。如/usr/class="lazy" data-src/linux-2.4.15/Makefile这样的文件名,在提供-p3参数时将使用linux-2.4.15/Makefile作为所要patch的文件。


patch

-p

-R


mockbuild


总结:操作步骤


1、获取并编译内核


# useradd mockbuild

# rpm -ivh kernel-2.6.32-431.5.1.x86_64.el6.class="lazy" data-src.rpm

# cd rpmbuild/SOURCES

# tar linux-2.6.32-*.tar.gz -C /usr/class="lazy" data-src

# cd /usr/class="lazy" data-src

# ln -sv 


2、给内核打补丁

# tar xf netfilter-layer7-v2.23.tar.bz2

# cd /usr/class="lazy" data-src/linux

# patch -p1 < /root/netfilter-layer7-v2.23/kernel-2.6.32-layer7-2.23.patch

# cp /boot/config-*  .config

# make menuconfig


按如下步骤启用layer7模块

Networking support → Networking Options →Network packet filtering framework → Core Netfilter Configuration

<M>  “layer7” match support


3、编译并安装内核

# make

# make modules_install

# make install


4、重启系统,启用新内核


5、编译iptables


# tar xf iptables-1.4.20.tar.gz

# cp /root/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* /root/iptables-1.4.20/extensions/

# cp /etc/rc.d/init.d/iptales /root

# cp /etc/sysconfig/iptables-config /root

# rpm -e iptables iptables-ipv6 --nodeps

# ./configure  --prefix=/usr  --with-ksource=/usr/class="lazy" data-src/linux

# make && make install


# cp /root/iptables /etc/rc.d/init.d

# cp /root/iptables-config /etc/sysconfig


6、为layer7模块提供其所识别的协议的特征码


# tar zxvf l7-protocols-2009-05-28.tar.gz

# cd l7-protocols-2009-05-28

# make install


7、如何使用layer7模块


ACCT的功能已经可以在内核参数中按需启用或禁用。此参数需要装载nf_conntrack模块后方能生效。

net.netfilter.nf_conntrack_acct = 1




l7-filter uses the standard iptables extension syntax 

# iptables [specify table & chain] -m layer7 --l7proto [protocol name] -j [action] 



# iptables -A FORWARD -m layer7 --l7proto qq -j REJECT




编译内核:

make menuconfig

make -j #

make modules_install

make install


清理内核源码树:


提示:xt_layer7.ko依赖于nf_conntrack.ko模块


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

iptables(3)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

iptables(3)

iptables/netfilter网络防火墙: 打开本机的核心转发功能:echo 1 > /proc/sys/net/ipv4/ip_forward 网关上有两个网卡,一个内网网卡,一个内网网卡, 内网网卡ip:192.168.254.1
2023-01-31

iptables学习(3)

Target/jumptarget/jump决定包的处理,语法是--jump target 或 -j target ,target分两类,一是具体的操作,如ACCEPT和DROP,另一个是发送到同一个表内的链如:iptables -N ne
2023-01-31

使用 iptables 3

<< Back to man.ChinaUnix.net 红帽企业 Linux 4: 安全指南后退第 7章 . 防火墙前进使用 iptables 的第一步是启动 iptables 服务。这可以使用以下命令进行:service iptable
2023-01-31

【3】iptables理解 - filt

filter表是默认表,功能是对数据包做过滤。此表有三条链(iptables -t filter -L -n,用此命令查看),分别是:INPUT、FORWARD、OUTPUT。INPUT链:数据流向iptables主机本身的数据包经过inp
2023-01-31

iptables命令语法(3)

参数 --limit-burst范例 iptables -A INPUT -m limit --limit-burst 5说明 用来比对瞬间大量封包的数量,上面的例子是用来比对一次同时涌入的封包是否超过 5 个(这是默认值),超过此上限的封
2023-01-31

主机安全(3)iptables的nat应

NAT --- Network Address Translation 网络地址转换   网络地址转换即改变数据包的源/目的地址,做过NAT操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行的。属于一个流的包只会经过这个表一次。
2023-01-31

CentOS下iptables详解

一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达
2022-05-30

如何理解Iptables

如何理解Iptables,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。查询iptables -L 默认 filter表iptables -L -t filteriptables
2023-06-05

详解Linux iptables 命令

iptables 是 linux 管理员用来设置 IPv4 数据包过滤条件和 NAT 的命令行工具。iptables 工具运行在用户态,主要是设置各种规则。而 netfilter 则运行在内核态,执行那些设置好的规则。 查看 iptable
2022-06-04

Docker中iptables规则在iptables重启后丢失的完整过程

前因后果 1、在跳板机上使用ansible命令测试机器B时,报错如下,于是就怀疑是网络防火墙的问题10.10.0.86 | FAILED >> {"failed": true, "msg": "/bin/sh: /usr/bin/pytho
2022-06-03

ubuntu中怎么安装iptables

这篇文章主要介绍了ubuntu中怎么安装iptables的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ubuntu中怎么安装iptables文章都会有所收获,下面我们一起来看看吧。1.打开终端命令行模式。2.输
2023-07-04

iptables的用法有哪些

本篇文章为大家展示了iptables的用法有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。总览 用iptables -ADC 来指定链的规则,-A添加 -D删除 -C 修改 iptables &
2023-06-13

如何理解iptables和firewalld

这期内容当中小编将会给大家带来有关如何理解iptables和firewalld,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于
2023-06-05

IPTables防火墙怎么用

这篇文章主要介绍IPTables防火墙怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的
2023-06-27

Shell监控iptables运行状态

最近在调试服务器的iptables,自己做了个定时关iptables,但晚上回家很少开电脑,所以就没法去启动iptables,当然你可能会说,为什么不取消定时关闭iptables,我只能说个人的环境不一样,需求也就不一样. 脚本内容:vi
2022-06-04

CentOS中iptables的示例分析

这篇文章将为大家详细讲解有关CentOS中iptables的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一:前言防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软
2023-06-10

如何理解Linux的iptables

如何理解Linux的iptables,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。所谓防火墙,实质上是指由软硬件组合成的一个在内外网之间构造的一种保护屏障,它是一种隔离技术。因
2023-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录