一、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
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
关于SNAT和DNAT的区别:
http://www.cnblogs.com/iceocean/articles/1616305.html