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包过滤过程

Iptables 规则的执行顺序默认为从上往下依次执行,遇到匹配的规则就不在继续向下检查,如果遇到不匹配的规则则会继续向下执行
重点:匹配上了拒绝( DROP )规则也是匹配,因此不在继续向下进行。

 

1.4 iptablestables和链chains

1.4.1思维导图关系图

1.4.2  iptables包处理简化流程图

    

1.4.3 iptablesfilter表介绍

 

 filter表:和主机自身有关,负责防火墙(过滤本机流入,流出的数据包)。是iptables默认使用的表。这个表定义了三个链(chains),说明如下:

man  iptables 可以查看官方解释

对于filter表的控制使我们实现本机防火墙的重要手段

1.4.4 iptablesnat表的介绍

nat表:英文全拼(Network Address Translation),是网络地址转换的意思,即负责来源于目的ipport的转换。一般用于局域网多人共享上网或者内网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

我的主机ip192.168.21.254 虚拟的ip192.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功能

首先开启内部服务器Cnginx 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  文件名   rising@192.168.21.198:/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

 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值