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

本文涉及的产品
公网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,如需转载请自行联系原作者

目录
相关文章
|
5月前
|
存储 缓存 安全
高并发内存池实战:用C++构建高性能服务器(下)
高并发内存池实战:用C++构建高性能服务器
高并发内存池实战:用C++构建高性能服务器(下)
|
6月前
|
安全 Linux 网络安全
Linux一些防火墙实战知识
本文介绍了如何在Linux中设置防火墙和开放端口,以提高服务器的安全性。首先,使用firewalld作为防火墙软件包,并确保firewalld服务正在运行。然后,通过添加服务来定义允许的服务端口,可以使用firewall-cmd命令查看当前已定义的服务,并使用firewall-cmd命令添加服务。添加规则后,需要重新加载firewalld配置以使更改生效。在某些情况下,需要打开特定的端口,例如HTTP端口80和HTTPS端口443。可以使用firewall-cmd命令打开端口,并将规则添加到相应的区域。。。确实都是工作中日常中会用到的一些命令
|
6月前
|
安全 Linux 网络安全
百度搜索:蓝易云【linux iptables安全技术与防火墙】
请注意,iptables的具体使用方法和配置选项可能会有所不同,取决于Linux发行版和版本。管理员应该参考相关文档和资源,以了解适用于其特定环境的最佳实践和配置方法。
467 0
百度搜索:蓝易云【linux iptables安全技术与防火墙】
|
6月前
|
Linux
生产环境Linux服务器磁盘分区、无损扩容根分区以及挂载磁盘到目录实战
生产环境Linux服务器磁盘分区、无损扩容根分区以及挂载磁盘到目录实战
207 0
|
6月前
|
网络协议 Linux 网络安全
小白也能看懂的 iptables 防火墙
iptables是Linux中功能最为强大的防火墙软件之一 是一个在 Linux 系统上常用的防火墙工具,用于配置和管理网络数据包过滤规则。它可以通过定义规则集来控制进出系统的网络流量,实现网络安全策略
250 5
|
2月前
|
存储 缓存 网络协议
Go语言并发编程实战:构建高性能Web服务器
【2月更文挑战第6天】本文将通过构建一个高性能的Web服务器实战案例,深入探讨如何在Go语言中运用并发编程技术。我们将利用goroutine和channel实现高效的请求处理、资源管理和并发控制,以提升Web服务器的性能和稳定性。通过这一实战,你将更好地理解和掌握Go语言在并发编程方面的优势和应用。
|
4月前
|
网络协议 Linux 网络安全
linux服务器防火墙的开启及关闭
linux服务器防火墙的开启及关闭
207 1
|
4月前
|
网络协议 Linux 网络安全
Centos7中如何打开和关闭防火墙??CentOS 7以上默认使用firewall作为防火墙改为iptables
Centos7中如何打开和关闭防火墙??CentOS 7以上默认使用firewall作为防火墙改为iptables
|
4月前
|
存储 网络协议 Linux
Linux加强篇008-使用Iptables与Firewalld防火墙
山重水复疑无路,柳暗花明又一村
305 0
Linux加强篇008-使用Iptables与Firewalld防火墙
|
4月前
|
Linux 网络安全
CentOS7下操作iptables防火墙和firewalld防火墙
CentOS7下操作iptables防火墙和firewalld防火墙
88 3