TCP/IP详解 第七章 防火墙和网络地址转换(2) iptables防火墙
1、iptables
1.1 iptables简介
Netfilter/Iptables(以下简称Iptables)是unix/linux系统自带的一款免费的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入,流出及流经服务器(路由器)的数据包进行精细的控制。
一般认为Iptables工作在OSI七层的二、三、四层。
大家可以man iptables 查看相关官网介绍
1.2 iptables名词解释
iptables是表(tables)的容器
表(tables)是链(chains)的容器
链(chains)是规则(Policy)的容器
基本关系可以这样描述
1.3 iptables包过滤过程
1.4 iptables表tables和链chains
1.4.1思维导图关系图
1.4.2 iptables包处理简化流程图
1.4.3 iptables的filter表介绍
filter表:和主机自身有关,负责防火墙(过滤本机流入,流出的数据包)。是iptables默认使用的表。这个表定义了三个链(chains),说明如下:
man iptables 可以查看官方解释
对于filter表的控制使我们实现本机防火墙的重要手段
1.4.4 iptables的nat表的介绍
nat表:英文全拼(Network Address Translation),是网络地址转换的意思,即负责来源于目的ip和port的转换。一般用于局域网多人共享上网或者内网IP映射外网IP及不同端口转换服务等功能,nat表的功能很重要。这个表定义了三个链(chains)
man iptables
实验一 怎么禁止ssh无法连接上虚拟机
第一种指定规则方式
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
iptables -D INPUT -p tcp --dport 22 -j DROP
第二种指定行号
iptables -D INPUT 1
iptables -D INPUT2
第三种 直接清空方式
想要禁止ssh连接上主机
-I 在第一行插入命令
-A 在后面追加命令
第一种方式 先清空然添加命令
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j DROP //此实验证明了iptables规则从上向下执行
第二种方式 先清空然后直接添加一条命令
iptables -A INPUT -p tcp --dport 22 -j DROP
实验二 禁止某一IP访问你的主机
iptables -A INPUT -s 192.168.21.254 -j DROP
此时我的xshell就无法连接我的虚拟机了
删除iptables规则
iptables -n -L --line-numbers
iptables -D INPUT 1
实验三 禁止除了本机以外的任何主机连接我的虚拟机
iptables -A INPUT ! -s 192.168.21.254 -j DROP
我的主机ip是192.168.21.254 虚拟的ip是192.168.21.253 输入这条命令以后只有我的主机才能连接我的虚拟机,别人的电脑都无法连接我的虚拟机
删除iptables规则
iptables -F
iptables -X
实验四 filter表示进入主机的处理
iptables 图 网址
http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO-6.html
运行tcp_test/tcp_sever tcp_test/tcp_client 127.0.0.1 发现根本没有建立连接
运行udp_test/udp_sever udp_test/udp_server 127.0.0.1 发现server只能收到数据,但是客户端无法收到server发回来的数据,防火墙起作用了
实验五 nat表实际使用
第一步
配置linux网关B vi /etc/sysctl.conf net.ipv4.ip_forwarding = 1 //开启linux FORWARD功能
首先开启内部服务器C的nginx http服务
/usr/local/nginx/sbin/nginx //这个服务器,我尝试了好多次才配置成
netstat -ln | grep 80
启动以后,用B服务器 wget 172.16.1.17 发现可以下载页面,但是用笔记本(192.168.21.254)没办法登录
第二步
怎么用内部服务器C ping通 笔记本
现在内部服务器C ping 笔记本无法ping通 ping 192.168.21.254 无法ping通
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth1 -j SNAT --to-source 192.168.21.253
配置完以后内部服务器C ping 笔记本 ping 192.168.21.254 ping通
1.4.5 iptables 详细使用过程,请参考朱双印防火墙
pdf下载地址如下:
朱双印博客:http://www.zsythink.net/archives/category/%e8%bf%90%e7%bb%b4%e7%9b%b8%e5%85%b3/iptables/
2、介绍一个小工具TC
实验七
有一个机器做服务器 利用scp命令传输文件,看网速
scp 文件名 [email protected]:/home/rising/cfttest 有TC限制和无TC限制网速差别很大
TC命令控制发送不控制收数据,下面的命令是在主机是192.168.21.196上配置的,需要对比没有TC和有TC下的scp速度
使用 tc 对整段 IP 进行速度控制
tc qdisc del dev eth0 root 2> /dev/null > /dev/null //清楚tc规则
1.)定义最顶层(根)队列规则,并指定 r2q 类别编号
tc qdisc add dev eth0 root handle 1: htb r2q 1
2.) 定义第一层的 1:1 类别 (速度)
tc class add dev eth0 parent 1: classid 1:1 htb rate 500kbit ceil 1000mbit
.
rate: 是一个类保证得到的带宽值.如果有不只一个类,请保证所有子类总和是小于或等于父类.
prio:用来指示借用带宽时的竞争力,prio越小,优先级越高,竞争力越强.
ceil: ceil是一个类最大能得到的带宽值.
3.)设定过滤器,其实就是将ip对应上规则
tc filter add dev eth0 parent 1: protocol ip prio 16 u32 match ip dst 192.168.21.0/24 flowid 1:1
就可以限制192.168.21.0 到255 的带宽为500k了,实际下载速度为110k左右.
这种情况下,这个网段所有机器共享这110k的网速.
3、参考材料
百度讲的比较细的网址http://wenku.baidu.com/view/f02078db50e2524de5187e45.html
linux 下使用 tc 模拟网络延迟和丢包 http://my.oschina.net/shou1156226/blog/514929
下面这个实例基本都能运行
linux下使用 TC 对服务器进行流量控制 2012-09-19 16:48:55
http://blog.chinaunix.net/uid-25885064-id-3353088.html