配置iptables的实战案例-SNAT-DNAT

一、iptables实战举例
1、配置vsftp服务器主动模式iptables规则
iptables配置FTP的主动和被动模式
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
Port模式:ftp server:tcp 21 <------client:dynamic ftp server:tcp 20 ------>client:dynamic
Pasv模式:ftp server:tcp 21 <----client:dynamic ftp server:tcp dynamic <----client:dynamic

PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条 数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来 传送数据。
1)安装vsftp,并重启服务,设置为开机自启动
[root@xuegod130 ~]# yum -y install vsftpd-sysvinit
[root@xuegod130 ~]# systemctl start vsftpd
[root@xuegod130 ~]# systemctl enable vsftpd

2)开启iptables防火墙,并设置开机启动
[root@xuegod130 ~]# systemctl start iptables.service
[root@xuegod130 ~]# systemctl enable iptables.service

3)清空防火墙规则,重新配置vsftp的规则
[root@xuegod130 ~]# iptables -L

4)开放vsftp需要使用的20,21号端口
[root@xuegod130 ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
[root@xuegod130 ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT

5)开通本机lo回环口的通信,默认一般放通
[root@xuegod130 ~]# iptables -A INPUT -i lo -j ACCEPT

6)多端口放行,使用iptables的匹配来修改“-m multiport”
[root@xuegod130 ~]# iptables -A INPUT -p tcp -m multiport --dport 21,22,80 -j ACCEPT

7)开通ICMP协议,允许其它机器ping本机
[root@xuegod130 ~]# iptables -A INPUT -p icmp -j ACCEPT

8)使用iptables的默认匹配,使用数据包匹配,放行连接态和衍生太
[root@xuegod130 ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

9)修改默认规则为DROP,只允许通过,防火墙内放行的数据
[root@xuegod130 ~]# iptables -P INPUT DROP

10)查看设置的规则
[root@xuegod130 ~]# iptables -nvL
Chain INPUT (policy DROP 6 packets, 536 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp – * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:20
0 0 ACCEPT tcp – * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
0 0 ACCEPT all – lo * 0.0.0.0/0 0.0.0.0/0
415 27500 ACCEPT tcp – * * 0.0.0.0/0 0.0.0.0/0 multiport dports 21,22,80
0 0 ACCEPT icmp – * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all – * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

11)修改vsftp的模式为主动模式
43 connect_from_port_20=NO #将YES修改为NO
注意:这里如果使用windows平台访问:
如果使用的是命令行模式访问,模式是主动模式,可以直接连接;
如果是用的资源管理器访问,模式默认是被动模式,需要在IE浏览器关闭被动FTP选项,如下:
在这里插入图片描述

12)重启vsftp服务
[root@xuegod130 ~]# systemctl restart vsftpd

13)测试
在这里插入图片描述
扩展资料:
FTP的主动端口与被动端口配置
大多数的TCP服务是使用单个的连接,一般是客户端向服务器的一个已知端口发起连接,然后使用这个连接进行通讯。但FTP协议却是例外,它使用双向的多个连接 ,而且使用的端口很难预计。
FTP协议连接和端口
一个控制连接(control connection):用于传递客户端和服务器端之间的命令响应。使用TCP 21端口,生存期是整个FTP会话时间。
N个数据连接(data connection):用于传输数据,这种连接是在数据传输时建立的,一旦数据传输完毕就关闭,每次使用的端口也不一定相同。而且,这种数据 连接既可能是客户端发起的,也可能是服务器端发起的。
FTP协议使用一个标准的端口20作为ftp-data端口,但是这个端口只用于连接的源地址是服务器端的情况,在这个端口上根本就没有监听进程。
ftp的端口号20、21有何区别?
  一个是数据端口,一个是控制端口,控制端口一般为21,而数据端口不一定是20,这和FTP的应用模式有关,如果是主动模式,应该为20,如果为被动模式,由服务器端和客户端协商而定
主动与被动模式
  FTP的数据连接和控制连接一般是相反方向,即服务器向客户端发起一个用于数据传输的连接。连接的端口是由服务器端和客户端协商确定的,这就是vsftpd的主动模式(port mod)。FTP协议的这个特征对iptables防火墙和NAT的配置增加了很多困难。在FTP被动模式(passive mod)下,数据连接是由客户程序发起的,和主动模式相反。
选择模式的原则
客户端没有防火墙时,用主动模式连接即可。
服务器端没有防火墙时,用被动模式即可。
双方都有防火墙时,vsftpd设置被动端口范围,服务器端防火墙打开被动端口范围,客户端用被动模式连接即可。
是否采取被动模式取决于客户程序:
在ftp命令行中使用passive命令就可以关闭/打开被动模式。
在Windows命令行模式下使用ftp命令连接服务器,用的是主动模式。
在浏览器方式下连接ftp服务器,可以修改访问使用模式:
在这里插入图片描述

用FileZilla Client软件连接服务器,在“编辑”-“设置”-“连接”选项内设置使用模式:
在这里插入图片描述
参考资料:https://www.cnblogs.com/Star-Haitian/articles/8036735.html
2、使用iptables防火墙保护公司的web服务器
web服务器地址:192.168.1.130
客户端地址:192.168.1.140

配置iptables规则前,先清空以前的规则,避免规则影响;
清空规则先,必须把默认规则改为ACCEPT,否则清空完之后,就无法xshell链接服务端

1)清空规则,并设置常用规则
[root@xuegod130 ~]# iptables -P INPUT ACCEPT
[root@xuegod130 ~]# iptables -F
[root@xuegod130 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@xuegod130 ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
[root@xuegod130 ~]# iptables -A INPUT -i lo -j ACCEPT
[root@xuegod130 ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
或者使用-m匹配,批量放通端口
iptables -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT

2)规则设置完毕后,设置默认规则为DROP
[root@xuegod130 ~]# iptables -P INPUT DROP

3)安装web服务,启动服务,并设置开机自启动
[root@xuegod130 ~]# yum -y install httpd
[root@xuegod130 ~]# systemctl start httpd
[root@xuegod130 ~]# systemctl enable httpd

4)客户端安装elinks,测试访问web服务器
[root@xuegod140 ~]# yum -y install elinks
[root@xuegod140 ~]# elinks 192.168.1.130
在这里插入图片描述

5)客户端登录服务端的ftp测试
[root@xuegod140 ~]# yum -y install lftp
[root@xuegod140 ~]# lftp 192.168.1.130
lftp 192.168.1.130:~> ls
`ls’ at 0 [Connecting…] #可以看到连接断开,因为没有服务器没有开放ftp的端口
3、使用SNAT功能,是内网PC机,可以上网
实验环境:
在这里插入图片描述
1)实验环境搭建
140客户端和130服务端的一块网卡进行lan互联,并配置IP地址
在这里插入图片描述
配置IP地址(这里是实验环境,所以我们给第二块网卡配置一个临时IP地址)
[root@xuegod130 ~]# ifconfig ens38 192.168.2.1/24
设置140客户端的网卡为LAN1
在这里插入图片描述
修改IP地址,并设置网关为192.168.1.130
在这里插入图片描述
重启network服务
在这里插入图片描述

2)启动服务端的内核路由转发功能
临时生效:
[root@xuegod130 ~]# echo “1” > /proc/sys/net/ipv4/ip_forward
永久生效:
[root@xuegod130 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
执行如何命令,使设置生效
[root@xuegod130 ~]# sysctl -p
net.ipv4.ip_forward = 1

3)配置防火墙规则之前,清楚之前的规则
[root@xuegod130 ~]# iptables -P INPUT ACCEPT
[root@xuegod130 ~]# iptables -F

4)配置SNAT规则
[root@xuegod130 ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to 192.168.1.130
或者:
[root@xuegod130 ~]#iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ens33 -j MASQUERADE

5)客户端测能否ping通百度
在这里插入图片描述

4、使用DNAT功能,把内网web服务器端口映射到外网
实验环境:
xuegod140:ens33,IP:192.168.2.2 网卡:LAN1
xuegod130:ens38,IP:192.168.2.1 网卡:LAN1
ens33,IP:19.168.1.130 网卡:桥接到物理机
在这里插入图片描述
1)在客户端中安装web服务
在这里插入图片描述

2)启动httpd服务,修改默认主页内容
在这里插入图片描述
3)xuegod130,使用elinks访问,访问192.168.2.2
[root@xuegod130 ~]# elinks 192.168.2.2
在这里插入图片描述
4)做DNAT(端口映射)将2.2这个内网地址,映射到1.130这个外网地址
[root@xuegod130 ~]# iptables -t nat -A PREROUTING -d 192.168.1.130 -p tcp --dport 80 -j DNAT --to 192.168.2.2:80
这里的目的端口写成80,并不是固定的,可以修改为其它,在实际的生产环境中,目的端口和源端口设置的都不一样。

5)使用物理机来访问,进行测试
在这里插入图片描述
总结:
iptables命令使用总则总结:
所有链名必须大写
INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING
所有表名必须小写
filter/nat/mangle
所有动作必须大写
ACCEPT/DROP/SNAT/DNAT/MASQUERADE
所有匹配必须小写
-s/-d/-m <module_name>/-p

关于SNAT和DNAT的区别:
http://www.cnblogs.com/iceocean/articles/1616305.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值