Iptables防火墙详细介绍与实战增强服务器安全

本文涉及的产品
云防火墙,500元 1000GB
公网NAT网关,每月750个小时 15CU
简介:

Iptables防火墙详细介绍与实战增强服务器安全


一:Iptables的概述及应用

iptables概述:

netfilter/iptables  IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables 组成。

netfilter/iptables 关系:

netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。

netfilter/iptables 后期简称为:iptables iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表。   所有规则配置后,立即生效,不需要重启服务。

三张表

表名

作用

Filter

#负责过滤数据包,包括的规则链有,input,output和forward;

Nat

#网络地址转换,包括的规则链有,prerouting,postrouting和output;

Mangle

#表则主要应用在修改数据包内容上,用来做流量整形的,给数据包打个标识,默认的规则链有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING;

五个链:

链名

作用

Input

匹配目IP是本机的数据包,

output

出口数据包,一般不在此链上做配置

forward

匹配流经本机的数据包,

prerouting

用来修改目的地址用来做DNAT。如:把内网中的80端口映射到路由器外网端口上

postrouting

用来修改源地址用来做SNAT。如:内网通过路由器NAT转换功能实现内网PC机通过一个公网IP地址上网。

规则链:
1.INPUT——进来的数据包应用此规则链中的策略
2.OUTPUT——外出的数据包应用此规则链中的策略 一般不在此链上做配置
3.FORWARD——转发数据包时应用此规则链中的策略
4.PREROUTING——对数据包作路由选择前应用此链中的规则
(记住!所有的数据包进来的时侯都先由这个链处理)
5.POSTROUTING——对数据包作路由选择后应用此链中的规则
(所有的数据包出来的时侯都先由这个链处理)

 

总结:iptables三个表,5个链接,结构如图:

wKiom1gFmkHS6OYXAABmcl7q7gs971.png-wh_50 

Raw表用于处理异常,包括的规则链有,prerouting,output; 一般使用不到。

 

->链->规则

Iptables过滤封包流程

wKioL1gFmk3Ai6UMAAAqh0UgG8E530.png-wh_50 

总结:

 整体数据包分两类: 1、发给防火墙本身的数据包 ;2、需要经过防火墙到达防火墙之外数据

wKiom1gFmlfy7mxNAAEf2GnUYio402.png-wh_50 

POSTROUTIONG:发送到网卡接口之前。如下图:

wKioL1gFmmbgWbx0AADapW0TWws020.png-wh_50 

数据包流向的基本步骤如下: 
1. 数据包到达网络接口,比如 eth0 
2. 进入 raw 表的 PREROUTING 链,这个链的作用是赶在连接跟踪之前处理数据包。 
3. 如果进行了连接跟踪,在此处理。 
4. 进入 mangle 表的 PREROUTING 链,在此可以修改数据包,比如 TOS 等。 
5. 进入 nat 表的 PREROUTING 链,可以在此做DNAT,但不要做过滤。 
6. 决定路由,看是交给本地主机还是转发给其它主机。 

   到了这里我们就得分两种不同的情况进行讨论了,

一种情况就是数据包要转发给其它主机,这时候它会依次经过: 
7. 进入 mangle 表的 FORWARD 链,这里也比较特殊,这是在第一次路由决定之后,在进行最后的路由决定之前,我们仍然可以对数据包进行某些修改。 
8. 进入 filter 表的 FORWARD 链,在这里我们可以对所有转发的数据包进行过滤。需要注意的是:经过这里的数据包是转发的,方向是双向的。 
9. 进入 mangle 表的 POSTROUTING 链,到这里已经做完了所有的路由决定,但数据包仍然在本地主机,我们还可以进行某些修改。 
10. 进入 nat 表的 POSTROUTING 链,在这里一般都是用来做 SNAT ,不要在这里进行过滤。 
11. 进入出去的网络接口。完毕。 

另一种情况是,数据包就是发给本地主机的,那么它会依次穿过: 
7. 进入 mangle 表的 INPUT 链,这里是在路由之后,交由本地主机之前,我们也可以进行一些相应的修改。 
8. 进入 filter 表的 INPUT 链,在这里我们可以对流入的所有数据包进行过滤,无论它来自哪个网络接口。 
9. 交给本地主机的应用程序进行处理。 
10. 处理完毕后进行路由决定,看该往那里发出。 
11. 进入 raw 表的 OUTPUT 链,这里是在连接跟踪处理本地的数据包之前。 
12. 连接跟踪对本地的数据包进行处理。 
13. 进入 mangle 表的 OUTPUT 链,在这里我们可以修改数据包,但不要做过滤。 
14. 进入 nat 表的 OUTPUT 链,可以对防火墙自己发出的数据做 NAT  
15. 再次进行路由决定。 
16. 进入 filter 表的 OUTPUT 链,可以对本地出去的数据包进行过滤。 
17. 进入 mangle 表的 POSTROUTING 链,同上一种情况的第9步。注意,这里不光对经过防火墙的数据包进行处理,还对防火墙自己产生的数据包进行处理。 
18. 进入 nat 表的 POSTROUTING 链,同上一种情况的第10步。 
19. 进入出去的网络接口。完毕


二:实验安装与配置简述

Iptables的安装

安装

[root@xuegod63 ~]# rpm -qf `which iptables`

iptables-1.4.7-4.el6.x86_64

[root@xuegod63 ~]# rpm -ivh /mnt/Packages/iptables-1.4.7-4.el6.x86_64.rpm

 

配置文件位置:

[root@xuegod63 ~]# ls /etc/sysconfig/iptables

/etc/sysconfig/iptables

 

启动服务

[root@xuegod63 ~]# /etc/init.d/iptables start

[root@xuegod63 ~]# chkconfig --list iptables

iptables       0:off1:off2:on3:on4:on5:on   6:off

 

 

iptables语法总结:

wKioL1gFmveAxwseAACtFWR5yiQ495.png-wh_50

wKiom1gFmpWzpK5cAAKR32DslQs010.png-wh_50 

 

iptables主要参数

-A 向规则链中添加一条规则,默认被添加到末尾

-T指定要操作的表,默认是filter

-D从规则链中删除规则,可以指定序号或者匹配的规则来删除

-R进行规则替换

-I插入一条规则,默认被插入到首部

-F清空所选的链,重启后恢复

-N新建用户自定义的规则链

-X删除用户自定义的规则链

-p用来指定协议可以是tcpudpicmp等也可以是数字的协议号,

-s指定源地址

-d指定目的地址

-i进入接口

-o流出接口

-j采取的动作,acceptdropsnatdnatmasquerade

--sport源端口

--dport目的端口,端口必须和协议一起来配合使用

注意:所有链名必须大写,表明必须小写,动作必须大写,匹配必须小写

基本配置简述

1:iptables命令使用方法

1:   -A <链名>    APPEND,追加一条规则(放到最后)

[root@xuegod63 ~]# iptables -t filter -A INPUT -j DROP    #拒绝所有人访问服务器

2:   -D <链名> <规则号码 具体规则内容>    DELETE,删除一条规则

wKiom1gFmwWDERoHAACYzcVGJD0985.png-wh_50 

 

 iptables -D INPUT 1(按号码匹配) 删除 filter  INPUT 链中的第1条规则(不管它的内容是什么)

注意:

    1、若规则列表中有多条相同的规则时,按内容匹配只删除序号最小的一条

    2、按号码匹配删除时,确保规则号码 ≤ 已有规则数,否则报错

    3、按内容匹配删除时,确保规则存在,否则报错

 

 iptables -D INPUT -s 192.168.0.1 -j DROP(按内容匹配)

 删除 filter  INPUT 链中内容为-s 192.168.0.1 -j DROP”的规则

 

3:   -P <链名> <动作>    POLICY,设置某个链的默认规则

 

wKiom1gFmxahB4OKAAAb5cJ8f2A498.png-wh_50

wKiom1gFmxbyYPhiAAAiT_AlXaw353.png-wh_50

       

4:   -F [链名]       FLUSH,清空规则

例如:

添加规则:

[root@xuegod63 ~]# iptables -t filter -A INPUT -j DROP #添加一条规则

[root@xuegod63 ~]# iptables -F INPUT   #清除INPUT链上的规则

[root@xuegod63 ~]# iptables -F   #清除filter表中所有链上的规则

[root@xuegod63 ~]# iptables -t nat -F  #清空NAT表中所有链上的规则

[root@xuegod63 ~]# iptables -t nat -F PREROUTING  #清空NAT表中PREROUTING链上的规则

注意:

 1-F 仅仅是清空链中规则,并不影响 -P 设置的默认规则。 需要手动改:

[root@xuegod63 ~]# iptables -P INPUT ACCEPT

2-P 设置了 DROP 后,使用 -F 一定要小心!!!

配置crontab :

*/15 * * * *  iptables -P INPUT ACCEPT

*/15 * * * *  iptables –F

3、如果不写链名,默认清空某表里所有链里的所有规则

 

5:     -L [链名]       LIST,列出规则

    v:显示详细信息,包括每条规则的匹配包数量和匹配字节数

    x:在 的基础上,禁止自动单位换算(KM

    n:只显示 IP 地址和端口号码,不显示域名和服务名称

例如:

[root@xuegod63 ~]# iptables #粗略列出 filter 表所有链及所有规则

[root@xuegod63 ~]# iptables -t nat vnL #用详细方式列出 nat 表所有链的所有规则,只显示 IP 地址和端口号

[root@xuegod63 ~]#  iptables -t nat -vxnL PREROUTING #用详细方式列出 nat  PREROUTING 链的所有规则以及详细数字,不反解

 

6:     按网络接口匹配

-i <匹配数据进入的网络接口>   #此参数主要应用于nat表,例如目标地址转换

例如:

  -i eth0   匹配是否从网络接口 eth0 进来

    -i ppp0  匹配是否从网络接口 ppp0 进来

 

-o 匹配数据流出的网络接口

例如:

    -o eth0    匹配数据是否从eth0网络接口流出

    -o ppp0   匹配数据是否从ppp0网络接口流出

 

iptables  -t nat  -o eth0 条件  动作

 

7:按来源目的地址匹配

 

-s <匹配来源地址>

    可以是 IPNETDOMAIN,也可空(任何地址)

例如:

    -s 192.168.0.1     匹配来自 192.168.0.1 的数据包

    -s 192.168.1.0/24  匹配来自 192.168.1.0/24 网络的数据包

    -s 192.168.0.0/16  匹配来自 192.168.0.0/16 网络的数据包

 

-d <匹配目的地址>

    可以是 IPNETDOMAIN,也可以空

例如:

    -d 202.106.0.20    匹配目标去往 202.106.0.20 的数据包

    -d 202.106.0.0/16  匹配目标去往 202.106.0.0/16 网络的数据包

    -d www.abc.com   匹配目标去往域名 www.abc.com 的数据包

 

8:按协议类型匹配

-p <匹配协议类型>

    可以是 TCPUDPICMP 等,也可为空

例如:

    -p tcp

    -p udp

    -p icmp --icmp-type 类型

    ping: type 8      pong: type 0

 

9:按来源目的端口匹配

--sport <匹配源端口>

    可以是个别端口,可以是端口范围

例如:

    --sport 1000      匹配源端口是 1000 的数据包

    --sport 1000:3000 匹配源端口是 1000-3000 的数据包(含10003000

    --sport :3000     匹配源端口是 3000 以下的数据包(含 3000

    --sport 1000:     匹配源端口是 1000 以上的数据包(含 1000

--dport <匹配目的端口>

    可以是个别端口,可以是端口范围

例如:

    --dport 80        匹配目的端口是 80 的数据包

    --dport 6000:8000 匹配目的端口是 6000-8000 的数据包(含60008000

    --dport :3000     匹配目的端口是 3000 以下的数据包(含 3000

    --dport 1000:     匹配目的端口是 1000 以上的数据包(含 1000

注意:--sport  --dport 必须配合 -p 参数使用

 

10:匹配应用举例

1、端口匹配

-p udp --dport 53

匹配网络中目的端口是 53  UDP 协议数据包

2、地址匹配

-s 10.1.0.0/24 -d 172.17.0.0/16

匹配来自 10.1.0.0/24 去往 172.17.0.0/16 的所有数据包

 

3、端口和地址联合匹配

-s 192.168.0.1 -d www.abc.com -p tcp --dport 80

匹配来自 192.168.0.1,去往 www.abc.com  80 端口的 TCP 协议数据包

wKioL1gFmyqhTTKKAAA_VH5cOeA753.png-wh_50 


iptable配置实例

iptable基本操作

iptables -L  列出iptables规则
iptables -F  清除iptables内置规则
iptables -X  清除iptables自定义规则

设定默认规则

iptables规则中没有匹配到规则则使用默认规则进行处理

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

配置SSH规则

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT  如果你把OUTPUT 设置成DROP,就需要加上这个规则,否则SSH还是不能登录,因为SSH服务职能进不能出。

只允许192.168.0.3的机器进行SSH连接

iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT

如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.

允许loopback回环通信

IPTABLES -A INPUT -i lo -p all -j ACCEPT 
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT

目的地址转换,映射内部地址

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dprot 81 -j DNAT --to 192.168.0.2:80
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dprot 81 -j DNAT --to 192.168.0.1-192.168.0.10

源地址转换,隐藏内部地址

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10

地址伪装,动态ipNAT

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

masqueradesnat的主要区别在于,snat是把源地址转换为固定的IP地址或者是地址池,而masqueradeadsl等方式拨号上网时候非常有用,因为是拨号上网所以网卡的外网IP经常变化,这样在进行地址转换的时候就要在每次都要修改转换策略里面的ip,使用masquerade就很好的解决了这个问题,他会自己去探测外网卡获得的ip地址然后自动进行地址转换,这样就算外网获得的ip经常变化也不用人工干预了。

开启转发功能

iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT 只允许已建连接及相关链接对内转发
ptables -A FORWARD -i eth1 -o eh0 -j ACCEPT 允许对外转发

过滤某个MAC

iptables -A FORWARD -m mac --mac -source MAC地址 -j DROP

报文经过路由后,数据包中原有的MAC信息会被替换,所以在路由后的iptables中使用mac匹配没有意义。

数据包整流

iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT
iptables -A FORWARD -d 192.168.0.1 -j DROP

多端口匹配

用以一次匹配多个端口

iptables -A INPUT -p tcp -m muliport --dport s 21,22,25,80,110 -j ACCEPT

丢弃非法连接

iptables -A INPUT   -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
iptables-A FORWARD -m state --state INVALID -j DROP

存储于恢复iptables规则

iptables-save > somefile
iptables-restore < somefile

如果你的IPTABLES基础知识还不了解,建议先去看看.


Linux下配置iptables防火墙增强服务器


一:实验环境

iptables服务端:xuegod-63   IP:192.168.1.63

iptables客户端:xuegod-64   IP:192.168.1.64

二:实验目标

1:使用iptables防火墙保护公司web服务器

2:使用iptables搭建路由器,通过SNAT功能,使内网PC机,可以上网。

3:拒绝访问服务器本身和拒绝通过服务器访问别的机器

4:使用DNAT 功能,把内网web服务器端口映射到路由器外网

 

三:实验代码

1:使用iptables防火墙保护公司web服务器

具体配置如下:

web服务器端:xuegod63

      客户端: xuegod64

配置xuegod63防火墙:

 

wKiom1gFmzeQQv0LAAAqMWRSDNk594.png-wh_50 

 

服务端运行防火墙并清空防火墙

[root@xuegod-63 ~]# /etc/init.d/iptables start

[root@xuegod-63 ~]# iptables –F

#清空防火墙是怕在防火墙中会有一些规则

启动远程连接服务器--22

[root@xuegod-63 ~]# /etc/init.d/sshd restart

安装vsftpd并启动--21

[root@xuegod-63 ~]# rpm -ivh /mnt/Packages/vsftpd-2.2.2-6.el6_0.1.x86_64.rpm

[root@xuegod-63 ~]# /etc/init.d/vsftpd restart

客户端安装lftpd并测试

[root@xuegod-64 ~]# rpm -ivh /mnt/Packages/lftp-4.0.9-1.el6.x86_64.rpm

[root@xuegod-64 ~]# lftp 192.168.1.63

lftp 192.168.1.63:~> ls                

drwxrwxrwx    2 0        0            4096 Aug 18 05:12 pub

lftp 192.168.1.63:/> exit

服务端启动阿帕奇服务器--80

[root@xuegod-63 ~]# /etc/init.d/httpd restart

[root@xuegod-63 ~]# echo 192.168.1.63 > /var/www/html/index.html

[root@xuegod-63 ~]# vim /etc/httpd/conf.d/welcome.conf #注释掉阿帕奇服务器的默认首页

#<LocationMatch "^/+$">

#   Options -Indexes

#  ErrorDocument 403 /error/noindex.html

#</LocationMatch>

#将以上四个命令进行注释

[root@xuegod-63 ~]# /etc/init.d/httpd restart

 

客户端1.64上测试

wKioL1gFm0SykOinAABUyf20stw693.png-wh_50 

#现在是服务端与客户端是可以ping通的

 

服务器防火墙配置

[root@xuegod-63 ~]# iptables -A INPUT -i lo -j ACCEPT

[root@xuegod-63 ~]# iptables -A INPUT -p tcp  --dport 22 -j ACCEPT

[root@xuegod-63 ~]# iptables -A INPUT -p tcp  --dport 80 -j ACCEPT

#服务器之间要用ssh来说远程连接,其端口号是22号,web服务器的端口号是80端口,因此前面要把22,80两个端口开放,在数据包进入(INPUT)链处,给予通过。 

[root@xuegod-63 ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#这个想要进入封包是否为刚刚我发出去的回应如果是刚刚我发出去的回应,那么就可以予以接受放行. ESTABLISHED:已建立的链接状态。 RELATED:该封包为本机发出的封包有关。

[root@xuegod-63 ~]#  iptables -P INPUT DROP

注:-

P:设置一个链的默认策略

DROP:默认策略的动作

iptables的默认表是:filter 

所以这条规则的意思就是:设置filter表的INPUT链的默认策略为丢包。就是本机默认不接受任何连接,除非在INPUT链上再设置接收的规则。

注:一般iptablesl-,OUTPUT出口一般都放行,不需要在出口上做限制。这样允许服务器主动访问外网所有数据。

 

[root@xuegod-63 ~]#  iptables -L -n

Chain INPUT (policy DROP)

target     prot opt source               destination         

ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22

ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80

ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED

 

测试

 

wKiom1gFm1SAc68oAAAX3JQ5vao882.png-wh_50

wKioL1gFm1WDTbrAAAAhLURIHWQ274.png-wh_50


 

 

[root@xuegod-64 ~]# ssh 192.168.1.63

root@192.168.1.63's password: 123456

Last login: Wed Aug 26 19:32:13 2015 from 192.168.1.64

[root@xuegod-63 ~]# exit

 

2:使用iptables搭建路由器,通过SNAT功能,使内网PC机,可以上网。

 

wKiom1gFm2XwnZ-ZAAA6Wpw7RKU349.png-wh_50 

实验环境:

配置:xuegod-63

Xuegod-63做路由器 添加两1个网卡,配置eth0为桥接,eth1vmnet4模式。

配置eth0IP地址为:192.168.1.63 /24

配置eth1IP地址为:192.168.2.1 /24

注释:这里eth1设置重启之后,eth0会被no掉,必须要登录到配置文件中修改为yes

[root@xuegod-63 network-scripts]# /etc/init.d/network restart

配置客户端xuegod64:

xuegod-64做客户端eth0网卡模式为vmnet4

配置eth0  IP192.168.2.2

 

启用内核路由转发功能:

[root@xuegod63 ~]#echo "1" > /proc/sys/net/ipv4/ip_forward

或者

[root@xuegod63 ~]# vim /etc/sysctl.conf

改:#net.ipv4.ip_forward = 0

为: net.ipv4.ip_forward = 1

[root@xuegod63 ~]#sysctl -p #改完使配置生效:

 

防火墙配置并查看规则

[root@xuegod63 ~]#iptables -t nat -A POSTROUTING -s 192.168.2.0/24   -j  SNAT  --to 192.168.1.63

[root@xuegod-63 ~]# iptables -t nat -L       

Chain POSTROUTING (policy ACCEPT)

target     prot opt source               destination         

SNAT       all  --  192.168.2.0/24       anywhere            to:192.168.1.63

 

测试:

[root@xuegod-63 ~]# ping 192.168.1.1   #ping路由器

PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.

64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.19 ms

64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=3.06 ms

 

[root@xuegod-63 ~]# ping www.baidu.com  #ping外网

PING www.a.shifen.com (119.75.217.109) 56(84) bytes of data.

64 bytes from 119.75.217.109: icmp_seq=1 ttl=52 time=37.7 ms

64 bytes from 119.75.217.109: icmp_seq=2 ttl=52 time=38.1 ms

 

 

实例3:拒绝访问服务器本身和拒绝通过服务器访问别的机器:

 

实验环境:

配置好网络和对应的IP地址:

Xuegod-64: eth0 : IP:192.168.2.2          网卡属于:Vmnet4

xuegod-63: eth1 : IP:192.168.2.1            网卡属于:Vmnet4  

xuegod-63: eth0 : IP:192.168.1.63           网卡属于:桥接

 

网络拓扑图如下:

wKioL1gFm3HAF2YlAAA6Wpw7RKU772.png-wh_50 

 

3.1:拒绝访问服务器本身

xuegod63启用内核路由转发功能:

[root@xuegod63 ~]#iptables F  :清除之前实验的所有规则,不包括做SNAT所添加的规则,即这个时候xuegod64是能ping通192.168.1.1,能上网。

[root@xuegod63 ~]#iptables -A INPUT -s 192.168.2.2 -j DROP

测试:ping不通192.168.2.1

 

是否可以通过FORWARD链上做规则限制呢?测试:

[root@xuegod63 ~]#iptables F  清除之前实验的所有规则,不包括做SNAT所添加的规则,即这个时候xuegod64是能ping通192.168.1.1,能上网。

[root@xuegod63 ~]#iptables -A FORWARD -s 192.168.2.2 -j DROP

可以ping通192.168.2.1

注:为什么在INPUT链上做DROP可以限制192.168.2.2访问192.168.2.1,而在FORWARD链上却是不能够限制192.168.2.2访问192.168.2.1呢?

     答:首先,现在要做的是限制192.168.2.2访问服务器192.168.2.1本身。第二INPUT链是本地的,是可以限制其他服务器访问本地服务器的链。而FORWARD链他不是本地的,它是不能够限制其他服务器访问服务器本身的,而只能限制另一个服务器的数据流量要经过本地服务器来访问其他服务器的,只要不是访问本地的,是流经的数据流 都是可以做限制的 。同理,INPUT链是不能做限制另一个服务器的数据流量要经过本地服务器来访问其他服务器的。

 

查看数据包,匹配流程图:

wKioL1gFm3yirWDbAABM17hYx4w009.png-wh_50 

注:直接ping服务器本身,数据流是不经过RORWARD链的。所以规则要添加在INPUT链上。

 

 [root@ xuegod63 ~]# iptables -A INPUT -s 192.168.2.2 -j DROP 

wKioL1gFm4eyby-iAAAbqY7eK8g279.png-wh_50 

#不能访问本地服务器了,但是可以正常上网

#这里也不能在OUTPUT链上做规则,不允许数据流流出,如果其在这个链上做规则的话,数据流是任然可以访问本地服务器的,只不过不能出去罢了。

 

3.2:拒绝通过服务器上网

注:上一个规则中,只禁止了其访问本地服务器,但是它任然是可以上网的

 

[root@ xuegod63 ~]# iptables -A OUTPUT -d 192.168.2.2 -j DROP 

#这里它还是可以上网的,为什么还是能够上网呢?    错误的依旧在链的作用上,OUTPUT链也是本地的,他只能限制访问本地服务器的数据流是否能够通过。而想要上网,需要经过本地服务器,即数据流是流经本地服务器的,所以在OUTPUT链上是无法限制到的。因此,这里只能在FORWARD链上做限制。,

 

[root@xuegod63 ~]#iptables -A FORWARD -s 192.168.2.2 -j DROP

测试

wKiom1gFm82zHM-lAAAbqY7eK8g291.png-wh_50 

#不能上网

 

 

 

 

4:使用DNAT 功能,把内网web服务器端口映射到路由器外网

wKioL1gFm8PByibEAABBYBvAvGg274.png-wh_50 

注释:80端口映射

 

实验环境:

xuegod64 IP  192.168.2.2       网卡属于:Vmnet4

xuegod63: eth1 : IP:192.168.2.1    网卡属于:Vmnet4

xuegod63: eth0 : IP:192.168.1.63   网卡属于:桥接

Xuegod63 为路由器

Xuegod64 为WEB服务器

物理机     为客户机

[root@xuegod63 ~]# iptables -F  

 

xuegod64,开启动httpd服务,首页内容为: 192.168.2.2

[root@xuegod64~]# yum install httpd -y

[root@xuegod64~]# /etc/init.d/httpd start

[root@xuegod64 ~]# echo 192.168.2.2 > /var/www/html/index.html

wKiom1gFm7WBf5epAAArclOiNoI094.png-wh_50 

 

xuegod63DNAT端口映射:

[root@xuegod63 ~]#  iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.2.2:80

或:

[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.1.63 -p tcp --dport 80 -j DNAT --to 192.168.2.2:80

 

测试

物理机访问

wKioL1gFm6vQz_7aAABSBNHWsWo691.png-wh_50 










本文转自 于学康 51CTO博客,原文链接:http://blog.51cto.com/blxueyuan/1862936,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
运维 监控 安全
安全运维:入侵检测与防御实战指南
安全运维:入侵检测与防御实战指南 【10月更文挑战第9天】
143 3
|
4月前
|
安全 Ubuntu 应用服务中间件
Web服务器安全最佳实践
【8月更文第28天】随着互联网的发展,Web服务器成为了企业和组织的重要组成部分。然而,这也使得它们成为黑客和恶意软件的目标。为了确保数据的安全性和系统的稳定性,采取适当的安全措施至关重要。本文将探讨一系列保护Web服务器的最佳策略和技术,并提供一些实用的代码示例。
386 1
|
24天前
|
存储 监控 调度
云服务器成本优化深度解析与实战案例
本文深入探讨了云服务器成本优化的策略与实践,涵盖基本原则、具体策略及案例分析。基本原则包括以实际需求为导向、动态调整资源、成本控制为核心。具体策略涉及选择合适计费模式、优化资源配置、存储与网络配置、实施资源监控与审计、应用性能优化、利用优惠政策及考虑多云策略。文章还通过电商、制造企业和初创团队的实际案例,展示了云服务器成本优化的有效性,最后展望了未来的发展趋势,包括智能化优化、多云管理和绿色节能。
|
1月前
|
安全 开发工具 Swift
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发。基础语法涵盖变量、常量、数据类型、运算符、控制流等,高级特性包括函数、闭包、类、结构体、协议和泛型。
30 2
|
2月前
|
机器学习/深度学习 弹性计算 运维
云计算系列之阿里云ECS服务器管理实战
本文档介绍了阿里云ECS(Elastic Compute Service)的基本概念、实例管理、磁盘操作、快照与镜像功能及其应用场景,最后通过具体案例解析ECS的实际应用。ECS是阿里云提供的高效、可靠的云计算服务,支持多种业务需求,如Web应用、高并发网站、数据库等,帮助企业快速构建稳定安全的应用,提升运维效率,降低IT成本。文档还详细说明了ECS实例的创建方式、连接方法及日常管理操作,帮助用户更好地利用ECS服务。
93 2
云计算系列之阿里云ECS服务器管理实战
|
3月前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
244 73
|
1月前
|
SQL 负载均衡 安全
安全至上:Web应用防火墙技术深度剖析与实战
【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
74 1
|
1月前
|
安全 Linux API
Linux服务器安全
人们常误认为服务器因存于数据中心且数据持续使用而无需加密。然而,当驱动器需维修或处理时,加密显得尤为重要,以防止数据泄露。Linux虽有dm-crypt和LUKS等内置加密技术,但在集中管理、根卷加密及合规性等方面仍存不足。企业应选择具备强大验证、简单加密擦除及集中管理等功能的解决方案,以弥补这些缺口。
27 0
|
2月前
|
Kubernetes 安全 应用服务中间件
动态威胁场景下赋能企业安全,F5推出BIG-IP Next Web应用防火墙
动态威胁场景下赋能企业安全,F5推出BIG-IP Next Web应用防火墙
59 3
|
2月前
|
SQL 安全 网络安全
守护数字资产:服务器迁移期间的安全挑战与对策
【10月更文挑战第4天】在数字化转型的浪潮中,服务器迁移成为企业不可避免的任务。然而,迁移过程中的安全挑战不容忽视。本文从安全考量的角度,探讨了服务器迁移期间可能遇到的安全问题,并提供了相应的对策和代码示例。
101 3