七周四次课(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
[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
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.这时,再来删除这条命令
[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通
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
需求:如今我有两台机器,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通:
能ping的通就表明没问题,这时候就能够ping一下一些网站了:
能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