七周第四次课(5月9号)笔记

10.15 iptables filter表案例
10.16/10.17/10.18 iptables nat表应用

iptables filter表案例
需求:把80,22,21端口放行(22端口需要指定特定IP段允许访问)

vim /usr/local/sbin/iptables.sh 加入以下内容

#!/bin/bash

ipt="/usr/sbin/iptables"       #定义变量,写全局(绝对路径),简洁明了

$ipt -F                                  #清空之前的规则

$ipt -P INPUT DROP            #DROP默认INPUT

$ipt -P OUTPUT ACCEPT     #ACCEPT OUTPUT

$ipt -P FORWARD ACCEPT #FORWARD ACCEPT

$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #对RELATED,ESTABLISHED状态的数据包放行,RELATED是编译源的状态,在服务器端和客户端建立连接后会有额外的连接,只有ESTABLISHED可能会导致通信失败,因为默认INPUT链是DROP规则

$ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT  #对192.168.133.0~192.168.133.255 网段,访问22端口的数据包放行

$ipt -A INPUT -p tcp --dport 80 -j ACCPET   #把访问80端口的数据包放行

$ipt -A INPUT -p tcp --dport 21 -j ACCEPT   #把访问21端口的数据包放行

扫描二维码关注公众号,回复: 1436059 查看本文章

写脚本的目的是一次性批量处理这些命令,不存在DROP后不能执行后续命令的情况

:wq后执行 sh /usr/local/sbin/iptables.sh

iptables -nvL 查看更改后的规则

icmp示例:

先把iptables文件恢复到默认的规则 service iptables restart 

再执行 iptables -I INPUT -p icmp --icmp-type 8 -j DROP

(执行以上操作会禁ping,使得外网无法ping通本机IP,但是本机可以ping通外网)

执行 iptables -D INPUT -p icmp --icmp-type 8 -j DROP 恢复icmp

iptables nat表应用

Linux防火墙-netfilter

nat表应用

A机器两块网卡ens16777736(192.168.242.128)、ens33554984(192.168.100.1),ens16777736可以上外网,ens33554984仅仅是内部网络,B机器只有ens33554984(192.168.100.100), 和A机器ens16777736可以通信互联

1)需求1:可以让B机器连接外网 (做一个小路由器)

    ①A机器上打开路由转发 echo "1" >/proc/sys/net/ipv/ip_forward

    ②A上执行iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE

    ③B上设置网关为192.168.100.1

实际操作:

①首先给DTlinux-01虚拟机添加一张内网网卡,设置LAN区段(相当于把网卡连到内网的交换机上,真机无法连接,和另外一台机器连上同一个LAN区段,即内网交换机可以相互通信即可)



由于第二台虚拟机也是分配过IP的,启动连接禁掉后可以重新添加一块网卡,设置同一LAN区段, 并同时开机

DTlinux-01由于第一块网卡没有被禁掉,依然可以通过Xshell远程连接,ifconfig查看多了一块网卡

执行ifconfig 网卡名  192.168.100.1/24 临时设置内网网段,如果想要永久生效,则和设置虚拟网卡一样,复制再网卡配置文件夹/etc/sysconfig/network-scripts/下复制相应的网卡配置文件,并进入编辑模式,修改name,device, ip地址最后保存。


第二台机器DTlinux-02由于把第一块已经设置IP的网卡禁掉,即使网卡在也不能通过远程登录(为确保万无一失可ifdown 网卡命令),只能再原虚拟机终端上进行操作,同理设置内网IP网段 ifconfig 网卡名 192.168.100.100/24


ping测试:

在Xshell上测试机器一是否能ping通机器二的IP,成功


同理在机器二上的主机ping机器一的IP,成功


检测网络情况

cmd看是否能ping通私网地址,2终端查看是否能ping通外网



要实现nat表的应用,必须打开端口转发,默认为0,改成1即激活

echo "1" > /proc/sys/net/ipv4/ip_forward


执行iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens16777736 -j  MASQUERADE 达到伪装效果,使得192.168.100.0/24这一网段可以上网,由于B机器IP在此网段内,故可以上网


同时注意,为了让数据包从B机器回到A机器建立通信(A→B→A),要设置B机器的默认网关和A相同放行数据包 192.168.100.1

route -n 查看网关  route add default gw xxxx 增加网关


设置DNS看是否能联网

编辑DNS文件 vi /etc/resolv.conf, 格式nameserver  DNS

如果能ping通公用DNS 119.29.29.29就可以ping通外网


只能内网连外网, 外网依旧不能连内网,A机器相当于一个路由器,B机器就是连路由器的设备,如手机电脑等。

2)需求2:C机器不能和A通信,C机器可以直接连通B机器的22端口(要达到C可以连A的效果)

分析:实例中为了让C机器(DTlinux-02)也可以远程连接,方便控制,可以做一个端口映射:即把C机器的22端口映射到可以上公网的B机器的其他端口(如1122端口,22端口已经在使用中,用于C机器通信),然后再通过公网连A机器的1122端口。本例中A为Windows主机(连公网),B为DTlinux-01(连公网和私网),C为DT-linux-02(只能连私网),也就是说把C机器22端口映射到B机器的192.168.242.128的1122端口,即通过B机器的1122端口连C机器22端口。

    ①A上打开路由转发 echo "1" >/proc/sys/net/ipv4/ip_forward

    ②A上执行iptables -t nat -A PREROUTING  -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22

    外网的数据包想要流入C机器,必须通过B机器(目的IP)的1122端口通过DNAT操作转换成C机器内网IP的22端口(PREROUTING)

 PREROUTING是目的地址转换,要把你的公网地址转换成内网地址才能上网。

    ③A上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130

  C机器内网的数据包流出,通过22端口到达B机器以后 (C机器为源IP)再进行SNAT操作转换成B机器的1122端口(POSTROUTING)

POSTROUTING是源地址转换,要把你的内网地址转换成公网地址才能让你上网。
            ④B上设置网关 192.168.100.1


补充:

PREROUTING 和 POSTROUTING, SNAT 和 DNAT图文解析(非常清淅)

https://blog.csdn.net/xzknet/article/details/51957269

测试:


下图显示远程连接成功

ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

猜你喜欢

转载自blog.csdn.net/fuel91/article/details/80259962