七周四次课(1月25日)

七周四次课(1月25日)
10.15 iptables filter表案例
10.16/10.17/10.18 iptables nat表应用
shell

10.15 iptables filter表案例vim

iptables小案例bash

vi /usr/local/sbin/iptables.sh //加入以下内容网络

#! /bin/bashless

ipt="/usr/sbin/iptables"tcp

$ipt -Foop

$ipt -P INPUT DROPpost

$ipt -P OUTPUT ACCEPT网站

$ipt -P FORWARD ACCEPTspa

$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

$ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT

$ipt -A INPUT -p tcp --dport 80 -j ACCEPT

$ipt -A INPUT -p tcp --dport 21 -j ACCEPT 

icmp示例

iptables -I INPUT -p icmp --icmp-type 8 -j DROP

iptables经常使用知识回顾点

  • iptables -I/-A/-D 后紧跟 链 ,能够是INPUT,OUTPUT,FORWARD
  • iptables -P 用来指定链的默认策略 ——>最好不要直接操做,不然会形成远程的终端断开

iptables小案例

  • 需求:
    • 把80,22,21端口放行,但22端口指定一个IP段,只容许这个IP段的IP访问的时候,才可访问到,其余段的一律拒绝
  • 实现:(用一个脚原本实现)
    • RELATED状态,这是一个边缘的一个状态
      • 好比:客户端和服务端相互创建了通讯,创建完链接以后,还会有一些额外的连接出来,这时候状态就变成了RELATED(若仅仅只有ESTABLISHED,而没有RELATED,颇有可能致使其余的通讯被禁掉,由于默认策略是INPUT DROP)
    • ESTABLISHED状态, 保持链接
    • 有时,在没有增长-m --state这条规则,致使增长了80或21端口,可是不能正常通讯,加这条规则的目的是为了让通讯更加顺畅

[root@tianqi-01 ~]# vim /usr/local/sbin/iptables.sh

#!/bin/bash

ipt="/usr/sbin/iptables"

$ipt -F

$ipt -P INPUT DROP

$ipt -P OUTPUT ACCEPT

$ipt -P FORWARD ACCEPT

$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

$ipt -A INPUT -s 192.168.77.1/24 -p tcp --dport 22 -j ACCEPT

$ipt -A INPUT -p tcp --dport 80 -j ACCEPT

$ipt -A INPUT -p tcp --dport 21 -j ACCEPT

ipt="/usr/sbin/iptables"

//这里ipt是定义个一个变量(写脚本的时候,写全局的路径,就是绝对路径,就是后面再加载它,用变量去代替,看着更加简单)

$ipt -F

//清空以前的规则——>在没有 -t 指定表的时候,默认的就是filter表

$ipt -P INPUT DROP

//把IPPUT的策略给扔掉

$ipt -P OUTPUT ACCEPT

//把OUTPUT放行

$ipt -P FORWARD ACCEPT

//把FORWARD放行

$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

//增长规则,-m --state 指定了状态,并针对这些状态放行(-m --state这种用法并很少见,可是这条规则必须写进来,目的是让相关的数据包放行)

$ipt -A INPUT -s 192.168.77.1/24 -p tcp --dport 22 -j ACCEPT

//把该网段的22端口数据包放行——>这里的IP段根据本身的IP段来作实验

$ipt -A INPUT -p tcp --dport 80 -j ACCEPT

//把80端口数据包放行

$ipt -A INPUT -p tcp --dport 21 -j ACCEPT

//把21端口数据包放行

使用sh命令执行写好的shell脚本

[root@tianqi-01 sbin]# sh /usr/local/sbin/iptables.sh 

执行完脚本后使用iptables -nvL命令就能够查看到添加上去的规则:

[root@tianqi-01 sbin]# iptables -nvL

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 
  5   340 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       192.168.77.0/24      0.0.0.0/0            tcp dpt:22
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:21

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 5 packets, 388 bytes)
 pkts bytes target     prot opt in     out     source               destination   
      

  • 为何要写脚本?
  • 由于这里有INPUT DROP,确定要把你的远程链接给断开,因此须要执行脚本把你的命令批量执行

icmp示例

1.iptables -I INPUT -p icmp --icmp-type 8 -j DROP 这个规则会产生一个效果,让你ping外面的机器还能够ping通,可是ping本机的时候,就不会通了

[root@tianqi-01 sbin]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP

//会发现可ping通外面的网络,但本身的虚拟机和物理机则没法链接

[root@tianqi-01 sbin]# ping www.qq.com
PING www.qq.com (112.90.83.112) 56(84) bytes of data.
64 bytes from 112.90.83.112: icmp_seq=1 ttl=128 time=12.1 ms
64 bytes from 112.90.83.112: icmp_seq=2 ttl=128 time=192 ms
64 bytes from 112.90.83.112: icmp_seq=3 ttl=128 time=221 ms
^C
--- www.qq.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2013ms
rtt min/avg/max/mdev = 12.123/142.229/221.660/92.744 ms
[root@tianqi-01 sbin]# 

2.这时用本身的物理机去ping虚拟机,会发现没法链接

3.这时,再来删除这条命令

  • iptables -D INPUT -p icmp --icmp-type 8 -j DROP

[root@tianqi-01 sbin]# iptables -D INPUT -p icmp --icmp-type 8 -j DROP

4.service iptables restart 重启iptables服务

[root@tianqi-02 ~]# service iptables restart    //重启iptables服务
Redirecting to /bin/systemctl restart  iptables.service
[root@tianqi-02 ~]# 

[root@tianqi-01 ~]# iptables -nvL    //这里会看到还没禁掉以前的规则

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   29  1924 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 17 packets, 1492 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@tianqi-02 ~]# 

这里--icmp-type选项要跟-p icmp一块儿使用,后面指定类型编号。这个8指的是能在本机ping通其余机器,而其它机器不能ping通本机,请牢记。

5.这里物理机去ping虚拟机IP,会发现再次ping通

  • 这里的物理机和虚拟机不通,并不指不能链接,这里仅仅是作了一个禁ping而已(是能够ping通外网的,但别人没法ping通你)

10.16/10.17/10.18 iptables nat表应用

•nat表应用

• A机器两块网卡ens33(192.168.133.130)、ens37(192.168.100.1),ens33能够上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37能够通讯互联。

• 需求1:可让B机器链接外网

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

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

• B上设置网关为192.168.100.1

• 需求2:C机器只能和A通讯,让C机器能够直接连通B机器的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

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

 B上设置网关为192.168.100.1

nat表应用

  • A机器两块网卡ens33(192.168.202.130)、ens37(192.168.100.1),ens33能够上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37能够通讯互联。

需求1:可让B机器链接外网

  • A机器上打开路由转发 echo "1">/proc/sys/net/ipv4/ip_forward
  • A上执行 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
  • B上设置网关为192.168.100.1

需求:如今我有两台机器,A机器共有两块网卡,一块是能够链接外网的,一块是能够链接内网的。B机器则只有一个内网网卡,不能链接外网,只能链接内网。如今的需求就是想要B机器可以链接外网,说白了就是想作一个路由器的功能。

 1.首先作这个实验须要两个虚拟机,记得先拍摄一个快照,以避免在实验过程当中出现问题没法恢复:

2.给第一台虚拟机添加一个网卡:

编辑虚拟机设置->选择添加->选择网络适配器,下一步->完成。

此时出现网络适配器2,选择LAN区段,点击LAN区段(s)->添加,自定义名字,肯定->在LAN区段(L)下选择“自定义名字”,肯定。此时网络适配器2已经选择了“LAN区段”。

3.把另外一台虚拟机的网卡禁止掉,而后添加一个新网卡,一样指定刚刚添加的那个LAN区段:

点击“添加”,选择“网络适配器”,下一步,完成。网络适配器2右侧点击“LAN区段(L)”,选择“自定义名字”,肯定。

4.将两台虚拟机启动起来,而后给新网卡配置IP,先配置CentOS 7.4-1,使用ifconfig命令能够看到新网卡的信息:

[root@tianqi-01 ~]# ifconfig -a
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.231.132  netmask 255.255.255.0  broadcast 192.168.231.255
        inet6 fe80::cdb4:62da:20:9c95  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:b3:30:b6  txqueuelen 1000  (Ethernet)
        RX packets 278  bytes 21177 (20.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 80  bytes 12260 (11.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.231.139  netmask 255.255.255.0  broadcast 192.168.231.255
        ether 00:0c:29:b3:30:b6  txqueuelen 1000  (Ethernet)

ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::e248:f90:634b:5b98  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:b3:30:c0  txqueuelen 1000  (Ethernet)
        RX packets 35  bytes 11970 (11.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 102  bytes 17988 (17.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 8  bytes 552 (552.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 552 (552.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@tianqi-01 ~]# 

接着使用ifconfig命令给新网卡配置一个IP,设置24网段:

[root@tianqi-01 ~]# ifconfig ens37 192.168.100.1/24

可是这种方式配置的IP重启系统就没有了,想要有永久有效就须要把网卡配置文件复制一份出来,将文件名称改成该网卡的名称,而后将里面的配置信息改成这个网卡IP:

[root@tianqi-01 ~]# cd /etc/sysconfig/network-scripts/

[root@tianqi-01 network-scripts]# ls
ifcfg-ens33    ifdown-bnep  ifdown-isdn    ifdown-sit       ifup          ifup-ippp  ifup-plusb   ifup-sit       ifup-wireless
ifcfg-ens33:0  ifdown-eth   ifdown-post    ifdown-Team      ifup-aliases  ifup-ipv6  ifup-post    ifup-Team      init.ipv6-global
ifcfg-lo       ifdown-ippp  ifdown-ppp     ifdown-TeamPort  ifup-bnep     ifup-isdn  ifup-ppp     ifup-TeamPort  network-functions
ifdown         ifdown-ipv6  ifdown-routes  ifdown-tunnel    ifup-eth      ifup-plip  ifup-routes  ifup-tunnel    network-functions-ipv6

[root@tianqi-01 network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@tianqi-01 network-scripts]# ls

ifcfg-ens33    ifdown-bnep  ifdown-post    ifdown-TeamPort  ifup-eth   ifup-plusb   ifup-Team         network-functions
ifcfg-ens33:0  ifdown-eth   ifdown-ppp     ifdown-tunnel    ifup-ippp  ifup-post    ifup-TeamPort     network-functions-ipv6

ifcfg-ens37    ifdown-ippp  ifdown-routes  ifup             ifup-ipv6  ifup-ppp     ifup-tunnel
ifcfg-lo       ifdown-ipv6  ifdown-sit     ifup-aliases     ifup-isdn  ifup-routes  ifup-wireless
ifdown         ifdown-isdn  ifdown-Team    ifup-bnep        ifup-plip  ifup-sit     init.ipv6-global

[root@tianqi-01 network-scripts]# vim ifcfg-ens37

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"

NAME="ens37"
UUID="a0a278f6-09ab-4b83-981b-6a5bf82223b4"
DEVICE="ens37"
ONBOOT="yes"
IPADDR=192.168.100.1
NETMASK=255.255.255.0

重启网卡服务

[root@tianqi-01 network-scripts]# service network restart
Restarting network (via systemctl):                        [  OK  ]

5.配置另外一台虚拟机的网卡IP:

因为没法远程,在本机操做。

一样的使用ifconfig命令配置IP

接着复制网卡文件,并修改成新网卡的信息:

修改完后重启一下网卡服务,可是可能会重启失败,若是重启失败就重启操做系统便可。

以上操做成功后就ping一下CentOS 7.4的IP看看是否能ping通:

若是没法ping通证实有问题,须要去检查一下,CentOS 7.4的IP是否存在,若是CentOS 7.4的IP存在的话,就检查一下CentOS 7.2的IP是否存在,发现IP不存在的话就从新使用ifconfig命令配置一下便可。

若是出现屡次使用ifconfig命令配置IP以后,IP却消失的状况,就得查看这个网卡的网卡配置文件是否有问题。

6.准备工做都就绪以后,确保两个网卡均可以互相ping以后,就开始完成需求1:让CentOS 7.4clone能够链接外网:

首先打开CentOS 7.4的nat路由中转发,这一步须要修改一下内核参数,须要修改/proc/sys/net/ipv4/ip_forward文件,这个文件默认的值为0,0表明没有开启转发,因此咱们要将这个值改成1:

[root@tianqi-01 network-scripts]# cat /proc/sys/net/ipv4/ip_forward
0
[root@tianqi-01 network-scripts]# echo "1" > !$
echo "1" > /proc/sys/net/ipv4/ip_forward
[root@tianqi-01 network-scripts]# cat /proc/sys/net/ipv4/ip_forward
1
第二步,增长一条规则(有了这条规则就能够上网):

[root@tianqi-01 network-scripts]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33-j MASQUERADE
[root@tianqi-01 network-scripts]# iptables -t nat -nvL

Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      ens33   192.168.100.0/24     0.0.0.0/0 

上面是可以链接外网网卡的名字。

这一步要注意的是,网卡的名称看清楚得是能连接外网网卡的那个网卡名称,搞错了后续步骤就会失败。

第三步,给CentOS 7.2设置默认网关:

设置了默认网关后可使用route -n查看一下,是否设置成功:

设置了默认网关后ping一下CentOS 7.4的外网网卡IP和虚拟机的网关地址看看能不能ping通:

 

能ping通以后,就表明能够链接外网了,可是这时候还不可以ping网址,因此接下来咱们给CentOS 7.2设置一下DNS,看看可否链接网站:

而后ping一下DNS的地址看看是否能ping通:

wKiom1nlwzLARdyfAANFPhp60sE937.png

能ping的通就表明没问题,这时候就能够ping一下一些网站了:

wKioL1nlwH2SMLC3AANLzqslMnk667.png

能ping通网址的话,就表明这个台内网的机器已经能够经过CentOS 7.4的nat转发来链接外网了,如今CentOS 7.4就至关于充当了一个路由器的角色,经过这台机器就可让内网的机器得以链接外网了。

需求2:如今使用Windows是不能链接CentOS 7.2的,因此如今的需求就是可以远程链接CentOS 7.2。要实现这个需求须要经过CentOS 7.4进行一个跳转,也就是所谓的端口映射,把CentOS 7.2的22端口映射到CentOS 7.4上。

• 需求2:C机器只能和A通讯,让C机器能够直接连通B机器的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

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

• B上设置网关为192.168.100.1

第一步,打开路由转发:

[root@tianqi-01 network-scripts]# cat /proc/sys/net/ipv4/ip_forward
0
[root@tianqi-01 network-scripts]# echo "1" > !$
echo "1" > /proc/sys/net/ipv4/ip_forward
[root@tianqi-01 network-scripts]# cat /proc/sys/net/ipv4/ip_forward
1

 第二步,添加规则,由于以前添加了一条规则,如今先把那条规则删掉以避免影响操做:

[root@tianqi-01 ~]# iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE 

如今nat表是一个空表,没有任何规则

[root@tianqi-01 ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@tianqi-01 ~]# 

第一条,是发送过来的包:

[root@tianqi-01 ~]# iptables -t nat -A PREROUTING -d 192.168.11.136 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22

这条规则是把192.168.11.136的1122端口的数据包,转发到192.168.100.100的22端口上去。

第二条,是反馈回去的包:

[root@tianqi-01 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.11.136

这条规则是把192.168.100.100返回的数据包,转发到192.168.11.136上去,而后回到Windows上。

添加完规则检查一下是否存在nat表里:

[root@tianqi-01 ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 1 packets, 229 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.11.136       tcp dpt:1122 to:192.168.100.100:22

Chain INPUT (policy ACCEPT 1 packets, 229 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 SNAT       all  --  *      *       192.168.100.100      0.0.0.0/0            to:192.168.11.136
[root@tianqi-01 ~]# 

第三步,以上操做没问题后,给CentOS 7.2设置默认网关:

完成以上操做以后,在XShell里新建一个会话,链接192.168.11.136的1122端口:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

友情连接:阿铭Linux

相关文章
相关标签/搜索