试验建议:关闭CentOS 7 或 CentOS 6的防火墙 (systemctl stop firewalld ; systemctl disable firewalld 或 service iptables stop ; chkconfig iptables off)

iptables   -vnL --line-numbers

iptables   -A    INPUT  -p   tcp    --dport      80   -j    ACCEPT

# 在表的对应链上添加规则
iptables [-t table] {-A|-C|-D} chain rule-specification
# ipv6
ip6tables [-t table] {-A|-C|-D} chain rule-specification
# 在链中插入规则
iptables [-t table] -I chain [rulenum] rule-specification
# 修改对应链的规则
iptables [-t table] -R chain rulenum rule-specification
# 删除对应链上的规则
iptables [-t table] -D chain rulenum
# 显示链上的规则
iptables [-t table] -S [chain [rulenum]]
# 将链上的规则全部清除
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
# 增加一条自定义链
iptables [-t table] -N chain
# 删除一条自定义链
iptables [-t table] -X [chain]
# 修改链上的默认策略
iptables [-t table] -P chain target
# 重命名自定义链
iptables [-t table] -E old-chain-name new-chain-name
# 规则的格式
rule-specification = [matches...] [target]
# 匹配的格式
match = -m matchname [per-match-options]
# 处理的格式
target = -j targetname [per-target-options]
  • iptables命令格式(记牢,如果你在这里有点蒙的话,请不要急。稍后带你玩一玩你就懂了)
# -t 指定功能表,SUBCOMMAND其实就是各种选项,作用在哪一条链上 matches表示匹配规则,target表示处理的动作
iptables [-t table] SUBCOMMAND chain [matches...] [ -j target]
  • 将iptables命令逐一拆解分析
1:-t table 指定功能表
功能表有:raw , mangle , nat , filter,如果不指定,默认就是filter
2:SUBCOMMAND:指定在对应链上的增、删、改、查
(1)查看规则
-L:表示列出功能表对应链上的所有的规则
-n:以数字格式显示地址和端口,如果不加n选项,会反解主机名和端口对应的服务名
-v:显示详细格式
-x:显示计数器的精确值,每一条规则都有两类计数器,一类用于显示被匹配到的报文的个数,一类用于显示size
--line-numbers:显示链上的规则编号
(2)规则管理
-A :表示append 追加,默认为最后一个
-I: 表示insert插入,默认为第一个
-D:delete,删除
1:rule specification
2: rule number
-R: replace, 替换
-F:flush, 清刷链上的规则
-Z:zero,置0
-S:显示指定链的所有的规则,以iptables-save命令的格式显示
 -A: LNPUT OUTPUT...规则链
-s: IP(源地址)
-d : IP(目标地址)
-j: DROP  丢弃  ACCEPT 接收  REJECT  拒绝   SNAT 基于源地址的转换  source 制定源地址
-F:清除所有的规则链

增删规则管理命令

-A:追加,在当前链的最后新增一个规则
-I num : 插入,把当前规则插入为第几条。-I 3 :插入为第三条
-R num:Replays替换/修改第几条规则格式:iptables -R 3 …………
-D num:删除,明确指定删除第几条规则

iptables的每一条规则有两类计数器
(1)由本规则匹配到的所有的packets
(2)由本规则匹配到的所有的bytes
(3)链管理
-N :新增一条自定义链
-X:删除自定义的空链
-E:rename,重命名自定义链的未被引用的链(引用计数器为0)
例如:iptables -N uplooking
例如:iptables -E uplooking mychain
例如:iptables -P FORWARD DROP
(4)默认策略管理
-P:设置默认策略
ACCEPT:接受   允许数据包通过
DROP:丢弃   丢弃数据包,不对该数据包做进一步的处理,对接收栈而言,就好像该数据包从来没有被接收一样
REJECT:拒绝  丢弃数据包,同时发送适当的响应报文(针对TCP连接的TCP重要数据包或针对UDP数据包的ICMP端口不可达消息)
SNAT : 基于原地址的转换
source: 指定原地址

比如我们现在将所有的192.168.10.0网段的IP在经过的时候全部转换192.168.100.1:
iptables -t nat -A  POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1(外网有效ip)
这样,只要是来自本地网络的试图通过网卡访问网络的,都会被统统转换成172.16.100.1这个IP.
例如:iptables -P FORWARD DROP
例如:iptables -P INPUT DROP
  • 示例
例如:iptables -vnL --line-numbers 查看filter表作用的链
例如:iptables -t nat -nL查看nat表对应的链
例如:iptables -N uplooking 增加一个自定义链
例如:iptables -E uplooking mychain 将自定义链 uplooking 改名为 mychain
例如:iptables -X mychain 删除自定义链,注意只有是空的链才能删除
例如:iptables -P FORWARD DROP 将FARWARD链的默认策略改为DROP
例如:iptables -P INPUT DROP 将INPUT的默认链改为DROP,这样的话,报文无法进入内核,不能被用户空间的服务接受,如ssh协议无法实现,远程无法连接
  • match匹配条件(实操第一部分:基本匹配)(非常重要,请务必认真听讲)
1:基本匹配:netfilter的hooks函数自带的匹配机制
[!] -s, --source address[/mask][,...]: 原地址匹配, ! 表示取反,表示不被匹配之意
[!] -d, --destination address[/mask][,...] :目标地址匹配,! 表示取反,表示不被匹配之意
[!] -i, --in-interface name:限制报文流入的接口匹配(入栈报文),只能由于:PREROUTING,INPUT,FORWARD
[!] -o, --out-interface name:限制报文流出的接口匹配(出栈报文),只能由于:OUTPUT,POSTROUTING, FORWARD
例如:iptables -A INPUT -s 192.168.10.223 -d 192.168.10.222 -j DROP 在INPUT链中添加一个规则,使得192.168.10.223的报文丢弃
例如:iptables -A INPUT -s 192.168.10.223 -d 192.168.10.222 -j ACCEPT 将192.168.10.223的报文接受,但是如果对于一个IP的规则只能做出一个动作,如果想重新设置需要将规则清空,使用iptables -F
  • match匹配条件(实操第二部分:隐式扩展匹配)(非常重要,请务必认真听讲)
2:扩展匹配:扩展模块匹配引入的匹配机制,-m matchname
隐式扩展:可以不使用-m选项专门的加载相应的模块,但是要加-p选项,指明使用哪种协议
[!] -p {tcp|udp|icmp|icmpv6|esp|ah|sctp|mh|all}:限制协议,就不需要用-m指定加载的扩展模块
例如:iptables -A INPUT -s 192.168.10.223 -d 192.168.10.222 -p tcp -j ACCEPT 表明如果是tcp协议的放行
① tcp:隐含了-m tcp。 有专用选项
[!] --source-port,--sport port[:port]:匹配报文中的TCP首部的源端口,可以是端口范围
[!] --destination-port,--dport port[:port]:匹配报文中的TCP首部的目标端口,可以是端口范围
[!] --tcp-flags mask comp: 检查报文中的指明mask的TCP标志位,要这些标志位中comp必须为1,了解即可
[!] --syn:相当于--tcp-flags syn,fin,ack,rst syn,匹配三次握手的第一次,了解即可
例如: --tcp-flags syn,fin,ack,rst syn:指明这四个标志位中的syn必须为1,而其他的为0,也就是TCP的第一次握手
例如:--tcp-flags syn,fin,ack,rst syn,fin:就是四次断开中的第一次
示例1:指明开放tcp协议的80端口,也就是web服务
iptables -A INPUT -s 0/0 -d 192.168.10.222 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -s 192.168.10.222 -d 0/0 -p tcp --sport 80 -j ACCEPT
示例2:指明开放TCP的22端口,也就是ssh服务
iptables -A INPUT -s 0/0 -d 192.168.10.222 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -s 192.168.10.222 -d 0/0 -p tcp --sport 22 -j ACCEPT
② udp:隐含了-m udp。有专用选项
[!] --source-port,--sport port[:port] :匹配报文中的udp首部的源端口,可以是端口范围
[!] --destination-port,--dport port[:port]:匹配报文中的udp首部的目标端口,可以是端口范围
③ icmp:隐含指明了”-m icmp”。有专用选项
[!] --icmp-type {type[/code]|typename}
type/code有两种类型:
0/0 :echo reply 指明应答的类型
8/0:echo request 指明请求的类型
示例1:开放别人可以ping自己
iptables -A INPUT -d 192.168.10.222 -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -s 192.168.10.222 -p icmp --icmp-type 0 -j ACCEPT
示例2:开放自己可以ping别人
iptables -A INPUT -d 192.168.10.222 -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -s 192.168.10.222 -p icmp --icmp-type 8 -j ACCEPT
  • match匹配条件(实操第三部分:显示扩展匹配)(非常重要,请务必认真听讲)
显示扩展:必须使用-m加载扩展模块
1:multiport :多端口匹配,离散的方式定义的多端口匹配,最多可以指定15个端口
[!] --source-ports,--sports port[,port|,port:port]...:指定源端口
[!] --destination-ports,--dports port[,port|,port:port]...:指定目标端口
[!] --ports port[,port|,port:port]...:可以指定源端口和目标端口
例如:同时开放22和80端口
iptables -I INPUT -s 0/0 -d 192.168.10.222 -p tcp -m multiport --dports 22,80 -j ACCEPT
iptables -I OUTPUT -s 192.168.10.222 -d 0/0 -p tcp -m multiport --sports 22,80 -j ACCEPT
2:iprange :指明一段连续的IP地址范围,作为源地址或目标地址的匹配
[!] --src-range from[-to]:指定源地址范围
[!] --dst-range from[-to]:指定目标地址范围
例如:指定客户端ip在192.168.10.1-192.168.10.254范围内的才能访问telnet服务
iptables -A INPUT -d 192.168.10.222 -p tcp --dport 23 -m iprange --src-range 192.168.10.1-192.168.10.254 -j ACCEPT
iptables -A OUTPUT -s 192.168.10.222 -p tcp --sport 23 -m iprange --dst-range 192.168.10.1-192.168.10.254 -j ACCEPT
3:string:对报文中的应用层数据做字符串匹配检测
--algo {bm|kmp}
[!] --string pattern :给定要检查的字符串模式
[!] --hex-string pattern:给定要检查的字符串模式,十六进制编码
例如:只要页面中包含admin的页面都不能访问
iptables -I OUTPUT -s 192.168.10.222 -d 0/0 -p tcp --sport 80 -m string --algo bm --string "admin" -j REJECT
4:time:收到报文的时间/日期与指定到的时间/日期做匹配
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:起始日期时间
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:结束日期时间
--timestart hh:mm[:ss]:以天为单位的起始时间
--timestop hh:mm[:ss]:以天为单位的起始时间
[!] --monthdays day[,day...]:匹配一个月中的哪天
[!] --weekdays day[,day...]:匹配一个周中的哪天
例如:指定客户端IP范围和访问时间才能访问
iptables -I INPUT -d 192.168.10.222 -p tcp --dport 23 -m iprange --src-range 192.168.10.1-192.168.10.254 -m time --timestart 08:00:00 --timestop 018:00:00 -j ACCEPT
5:connlimit:根据每个客户端主机做并发并发连接数量限制,就是每个客户端最多发起的连接数量
--connlimit-upto n:连接数量小于等于n,则匹配
--connlimit-above n:连接数量大于n,则匹配
例如:
iptables -A INPUT -s 0/0 -d 192.168.10.222 -p tcp --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT
iptables -A OUTPUT -s 192.168.10.222 -d 0/0 -p tcp --sport 23 -m connlimit --connlimit-upto 2 -j ACCEPT
6:limit:基于令牌桶算法对报文的速率做匹配。
--limit rate[/second|/minute|/hour|/day] :限制等待的速率, 也就是接受或响应数据包的速率
--limit-burst number:第一次可以有多少个不需要等待的
例如:这里是限制每分钟只能入栈20个icmp的报文,并且第一次入栈允许5个不需要等待,后续的报文每次需要等待2秒
iptables -A INPUT -d 192.168.10.222 -p icmp --icmp-type 8 -m limit --limit 30/minute --limit-burst 5 -j ACCEPT
iptables -A OUTPUT -s 192.168.10.222 -p icmp --icmp-type 0 -j ACCEPT
7:state:用于对报文状态判断
[!] --state state:匹配报文的状态
INVALID :无法识别的连接
ESTABLISHED:连接追踪模块中存在记录的连接
NEW:连接追踪模板当中不存在的连接请求
RELATED:相关联的连接
UNTRACKED:未追踪的连接
例如1:允许自己ping别人
iptables -A OUTPUT -s 192.168.10.222 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -d 192.168.10.222 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT
 
例如2:允许别人ping自己
iptables -A INPUT -d 192.168.10.222 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.10.222 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT
8:对于连接追踪还需了解的知识
已经追踪到的并记录下来的连接保存在 /proc/net/nf_conntrack里面
如果追踪的记录满载了,就会显示连接超时
连接追踪功能所能够记录的最大连接数量保存在 (可调整)/proc/sys/net/nf_conntrack_max
这里可以通过命令调节内核中的参数
sysctl -w net.nf_conntrack_max=300000 将最大的追踪记录调节到300000个
conntrack所能追踪的连接数量的最大值取决于/proc/sys/net/nf_conntrack_max的设定,已经追踪的连接位于/proc/net/nf_conntrack文件中,超时的连接会被删除,当模板满载,后续的新连接有可能会超时。解决办法:
(1)加大nf_conntrack_max的值
(2)降低nf_conntrack条目的超时时长
不同协议的连接追踪时长定义在/proc/sys/net/netfilter下
  • target处理动作(实操第四部分:处理动作)(非常重要,请务必认真听讲)
-j ACTION [per-target-options]
ACCETP , DROP , REJECT
RETURN :返回调用的链
REDIRECT:端口重定向
LOG:日志
MARK:防火墙标记
DNAT:目标地址转换
SNAT:原地址转换
MASQUERADE:地址伪装
1:开放ssh、web、telnet服务
# 由于 ESTABLISHED会经常被访问,因此写在第一个
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
# 特定的服务开放
iptables -A INPUT -d 192.168.10.222 -p tcp -m multiport --dports 22,80,23 -m state --state NEW -j ACCEPT
iptables -A INPUT -d 192.168.10.222 -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT
# 所有的入栈报文,出栈全部被允许
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
2:开放ftp、ssh、web、telnet服务
思考:对于ftp服务来说,有两个端口,20、21,如果想使用RELATED关联追踪,应该让内核加载nf_conntrack_ftp模块
# 内核加载nf_conntrack_ftp模块
modprobe nf_conntrack_ftp
# 放行了ftp协议的数据连接的端口,由于端口是随机的,所以不要给定端口号,并且指明连接追踪是related和established
iptables -A INPUT -d 192.168.10.222 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 特定的服务开放
iptalbes -A INPUT -d 192.168.10.222 -p tcp -m miltiport --dports 22,23,80,21 -m state --state NEW -j ACCEPT
iptables -A INPUT -d 192.168.10.222 -p icmp --icmp-type 8 -m state --state NEW -j ACCEPT
# 所有的入栈报文,出栈全部被允许
iptables -A OUTPUT -s 192.168.10.222 -m state --state ESTABLISHED -j ACCEPT
INPUT行为总结:  dport值本地  sport值外地
OUTPUT行为总结: dport值外地   sport 值本地

  • 让内核加载写好的规则
CentOS 6和CentOS 7:
iptables-restore < 指定保存规则的文件路径
CentOS 6:会自动从/etc/sysconfig/iptables重载规则
service iptables restart
  • 如果自动生效规则文件中的规则
(1)把iptables命令放在脚本文件中,让脚本文件开机自动运行
/etc/rc.d/rc.local 中写入执行iptables的命令的脚本
(2)将保存的规则通过脚本命令自动开机重载
/etc/rc.d/rc.local 中 写入 iptables-restore < 指定保存规则的文件路径
iptables 命令执行后的规则策略仅当前生效,若想重启后依然保存股则则需要 " service  iptables  save"
脚本
iptables.sh
IPTABLES=/sbin/iptables
MODPROBE=/sbin/modprobe
INT_NET=192.168.10.0/24
####flush existing rules and set chain policy setting to drop(重置现有规则和链策略设置)
echo "[+] Flushing existing iptables rules..."
$IPTABLES -F-----------------------------(清空规则链)
$IPTABLES -F -t nat----------------------(清空nat表)
$IPTABLES -X-----------------------------(删除用户的空链)
$IPTABLES -p INPUT DROP------------------(关闭input端口)
$IPTABLES -p OUTPUT DROP-----------------(关闭output端口)
$IPTABLES -p FORWARD DROP----------------(关闭forward端口)
###load connection-tracking modules------(负载连接模块)
$MODPROBE ip_conntrack-------------------(加载ip_conntrack模块)
$MODPROBE iptables_nat-------------------(加载iptables_nat模块)
$MODPROBE ip_conntrack_ftp---------------(加载ip_conntrack_ftp模块)
$MODPROBE ip_nat_ftp---------------------(加载ip_nat_ftp模块)
###ACCEPT rules
$IPTABLES -A FORWARD -p tcp -i eth1 -s $INT_NET --dport 21 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp -i eth1 -s $INT_NET --dport 22 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp -i eth1 -s $INT_NET --dport 25 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp -i eth1 -s $INT_NET --dport 43 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport 443 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp -i eth1 -s $INT_NET --DPORT 4321 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp -p udp --dport 53 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp icmp --icmp-type echo-request -j ACCEPT
允许通过防火墙发起ftp、ssh、smtp和whois连接,但这类必须是从子网接口(eth1)上的内部子网发起的,允许来自任何源地址的http、https和dns通信通过防火墙

$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 192.168.10.3:80
$IPTABLES -t nat -A PREROUTING -p tcp --dport 443 -i eth0 -j DNAT --to 192.168.10.3:443
$IPTABLES -t nat -A PREROUTING -p tcp --dport 53 -i eth0 -j DNAT --to 192.168.10.4:53
$IPTABLES -t nat -A POSTROUTING -是¥INT_NET -o eth0 -j MASQUERAD
内网的web服务器和DNS服务器的ip地址分别为192.168.10.3、4,用于提供NAT功能的iptables命令,3个PREROUTING规则允许外网的web服务和DNS请求被发送给合适的内网服务器,在POSTROUTING规则允许来自内部不可路由网络并指向外部因特网的连接看起来就像他们来自IP地址71.157.X.X

转载于:https://www.cnblogs.com/liu1026/p/7522719.html

iptables 工具的使用相关推荐

  1. iptables工具__过滤包—命令

    iptables工具__过滤包-命令(-A.-I.-D.-R.-L等).参数(-p.-s.-d.--sport.--dport.-i.-o等).动作-j (ACCEPT.DROP.REJECT.RED ...

  2. 海思3536板子在使用wifi时,开启支持工具 wireless_tools 和 iptables 的内核支持选项时,板子会崩溃的解决方法

    wifi的wlan模式需要用到Wireless_tools和wpa_supplicant工具.Wireless_tools用来设置支持LinuxWireless Extension的无线设备,它是一个 ...

  3. linux 内核 netfilter 网络过滤模块 (5)-iptables

    iptables是用户态的配置工具,用于实现网络层的防火墙,用户可以通过iptables命令设置一系列的过滤规则,来截获特定的数据包并进行过滤或其他处理. iptables命令通过与内核中的netfi ...

  4. Linux iptables

    iptables:     Firewall:防火墙,是一种隔离工具,工作于主机或网络的边缘,对于进出本主机或网络的数据包,根据事先定义好的检测规则做匹配检测,如果匹配则做出相应的动作(接收.转发或丢 ...

  5. linux——Firewalld与iptables的基本配置

    Firewalld Firewalld概述 动态防火墙后台程序 firewalld 提供了一个动态管理的防火墙,用以支持网络 " zones" ,以分配对一个网络及其相关链接和界面 ...

  6. Linux网络/firewalld和netfilter/netfilter/iptables语法

    为什么80%的码农都做不了架构师?>>>    linux网络相关 查看网卡网络信息 ifconfig 命令查看网卡网络信息,比如ip.网关.子网掩码等,但是安装centos7的版本 ...

  7. iptables 小提升

    相信作为运维的我们对iptables都不陌生了,但是简单的基础语法好掌握,稍微复杂一点的语法相信座位菜鸟的我们还不是很了解,今天我就总结些给菜鸟提升的一些知识. 首先介绍下Netfilter与ipta ...

  8. iptables原理知识

    一.iptables的原理 iptables实际上是定义防火墙规则的工具,真正对数据报文处理的是内核中的netfilter模块.netfilter对报文的处理方式一般有:过滤,地址转换,连接追踪. 1 ...

  9. 万字讲解OpenWrt防火墙iptables,并使用UCI配置防火墙

    一.防火墙简介 "防火墙"(Firewall)术语来自建筑设计领域,是指用来起分割作用的墙,当某一部分 着火时可以减缓或保护其他部分免受火灾影响.在计算机网络中,防火墙是在两个或多 ...

最新文章

  1. LeetCode 1021:Remove Outermost Parentheses
  2. ubuntu中解决无法调节屏幕亮度的问题
  3. eclipselink_EclipseLink MOXy和用于JSON处理的Java API –对象模型API
  4. bpsk调制及解调实验_无线通信中的IQ调制,BPSK调制,QPSK调制,16QAM调制的理解...
  5. structs2 result type介绍
  6. 【转载】煤层气大事记
  7. HTML和CSS精要基础知识整理
  8. Could not find a declaration file for module 'vue-xxx'.
  9. PDF与Base64的相互转换以及操作
  10. 计算机导入文件格式,电脑如何打开zip格式文件|电脑打开zip格式文件的方法
  11. WebView 加载网页 加载资源 总结 MD
  12. Google Office 战略 途经:收购JotSpot
  13. 计算机就业前景调查报告问题,计算机专业就业前景调查报告.docx
  14. 大数据和云计算是如何结合
  15. 网络信息安全从业者,持NISP二级或CISP证书,最高可补贴30000元
  16. ADGuard 开源广告拦截器 —— 筑梦之路
  17. 广汉计算机哪个学校学最好,计算机专业四川省的广汉市哪个专业学院比较不错...
  18. java 反编译软件
  19. 微信小程序编译时警告:Component “pages/test2/test2“ does not have a method “ getData“ to handle event “t
  20. Pytorch中维度dim的理解使用

热门文章

  1. mybatis like的用法
  2. C语言(九)C语言概述
  3. native-maven-plugin与maven-nar-plugin配置
  4. jQuery EasyUI API 中文文档 - 数字框(NumberBox)
  5. 企消互动广告:网络时代广告活动的创新形式——兼谈杜丽反败为胜对企业的启示...
  6. 微信小程序实现图片是上传、预览功能
  7. BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)
  8. linux机群下NFS+NIS服务的搭建以及MPICH的简单安装
  9. Linux route
  10. 在WinForm应用程序中嵌入WPF控件(转)