七周四次课(3月22日)

10.15 iptables filter表案例

10.16/10.17/10.18 iptables nat表应用

扩展
1. iptables应用在一个网段  http://www.aminglinux.com/bbs/thread-177-1-1.html 
2. sant,dnat,masquerade   http://www.aminglinux.com/bbs/thread-7255-1-1.html 
3. iptables限制syn速率  http://www.aminglinux.com/bbs/thread-985-1-1.html     http://jamyy.us.to/blog/2006/03/206.html 



10.15 iptables filter表小案例


总结

  •  查看iptables规则:iptables -nvL

  •  iptables -F 清空规则

  •  service iptables save 保存规则 

  • 保存在/etc/sysconfig/iptables,重启后,会调用此文件的规则。

  •  iptables -t nat //-t指定表

  • 默认不加-t会指定filter表

  •  iptables -Z  可以把计数器清零

  •  iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP

把规则放到最后面

INPUT是进来的包,

  • -s 指定源ip 

  • -p 指定它的协议可以是tcp,udp 

  • --sport源端口

  • --dport 目标端口

  • -d目标地址

  • -j行为,DROP,REJECT,ACCEPT

  • iptables -I/-A/-D INPUT -s 1.1.1.1 -j DROP

把规则放到最前面,最前面的会被优先加载,匹配。

  • -I -A -D 紧跟着链的名字,可以是INPUT,OUTPUT或者是FORWARD

  • iptables -I INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT

  • iptables -nvL --line-numbers

列出规则的编号,

  • iptables -D INPUT 1

根据编号删除规则

  • iptables -P INPUT DROP

指定链的默认策略,慎重操作,否则会影响远程连接状态。



小案例 

需求:把80端口 22端口 21端口 放行,22端口指定IP段,只有这IP段的IP访问才可以访问到,其他段访问 拒绝。

iptables小案例
vi /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.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

这个8指的是能在本机ping通其他机器,而其他机器不能ping到本机。

其实这里相当于一个禁ping操作。



10.16 iptables nat表应用(上)




准备工作,

2台虚拟机,1号2号

1号机操作

添加一块网卡

虚拟机设置-添加-选中网络适配器-下一步-保持默认-下一步


切记选择LAN区段


2号机操作

首先开机禁用网卡

添加网卡(操作和1号机添加网卡一样,LAN区段也是选择刚刚设定的LAN区段)


上面的操作最好在关机之后操作。


1号机的网络状态。

[root@centos7-01 ~]#    ifconfig 
ens33: flags=4163  mtu 1500
        inet 192.168.189.128  netmask 255.255.255.0  broadcast 192.168.189.255
        inet6 fe80::243c:86d7:d85e:224d  prefixlen 64  scopeid 0x20
        ether 00:0c:29:15:53:53  txqueuelen 1000  (Ethernet)
        RX packets 815  bytes 78496 (76.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 587  bytes 83961 (81.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
ens33:0: flags=4163  mtu 1500
        inet 192.168.189.150  netmask 255.255.255.0  broadcast 192.168.189.255
        ether 00:0c:29:15:53:53  txqueuelen 1000  (Ethernet)
ens37: flags=4163  mtu 1500
        ether 00:0c:29:15:53:5d  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 55  bytes 10362 (10.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1  (Local Loopback)
        RX packets 72  bytes 5744 (5.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 72  bytes 5744 (5.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

设置ens37的ip 有好几种方法,

1,把ens33的网络配置文件复制多一份,改名ens37,慎记更改device name ip mac地址(可以删掉),等等

2,临时配置,命令配置:[root@centos7-01 ~]# ifconfig ens37 192.168.100.1/24 

#ifconfig

ens37: flags=4163  mtu 1500

        inet 192.168.100.1  netmask 255.255.255.0  broadcast 192.168.100.255

        inet6 fe80::20c:29ff:fe15:535d  prefixlen 64  scopeid 0x20

        ether 00:0c:29:15:53:5d  txqueuelen 1000  (Ethernet)


2号机操作

因为ens33刚刚已在VMware做设置禁掉了,所以需要再在系统上命令禁掉ens33的网卡

#ifdown ens33


设定ens37 IP

# ifconfig ens37 192.168.100.100/24 

检查一次配置

尝试ping 1号主机的37的IP 192.168.100.1

ping通状态。ok



10.17 iptables nat表应用(中)


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

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


不能上外网的原因是,没有开启路由转发。

先查看内核参数,默认是0,0表示没有开启内核路由转发

[root@centos7-01 ~]# cat /proc/sys/net/ipv4/ip_forward

0

打开端口转发,1值表示开启,利用echo赋值

[root@centos7-01 ~]# echo "1" > !$
echo "1" > /proc/sys/net/ipv4/ip_forward
[root@centos7-01 ~]# !cat
cat /proc/sys/net/ipv4/ip_forward
1

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

[root@centos7-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 2 packets, 216 bytes)
 pkts bytes target     prot opt in     out     source               destination         
Chain POSTROUTING (policy ACCEPT 2 packets, 216 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

此规则就是为了让A可以上外网,MASQUERADE表示伪装。


B上操作

B上设置网关为192.168.100.1

#route add default gw 192.168.100.1

ping A电脑的网关192.168.189.1 ping通。


设置DNS可以ping通外网。

[root@centos7-01 ~]# vi /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114


在PC上ping B主机192.168.100.100 ping不通

其实这过程就相当于一台路由器的运作原理,A机器是路由器,B与C是连接路由器的用户。


10.18 iptables nat表应用(下)


需求2:C机器(物理机PC)只能和A通信,让C机器可以直接连通B机器的22端口


C远程登录B

C不能直接连接B,但是C可以连接A(因为C可以用Xshell远程登录A的22端口)。

如果C要连接B,需要在B上做一个端口映射,但是不能使用22端口(因为A已经使用了),必须使用其他端口。比如映射1122端口。


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

此项如果之前做过了,无需再开启,或者先#cat一下文档,如果是1就无需再做此步骤。


A上执行第一条规则

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

-d的目标ip是A上的IP

--dport 定义目标端口1122

此规则的大意是:把进去的包做一个端口转发。

执行这一步之前,首先删掉之前所建立的规则。

[root@centos7-01 ~]# iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE 
[root@centos7-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

第二条规则

iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.189.128

这个是回来的包,192.168.189.128.

iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.189.128

做完设置后,在Xshell上进行远程登录,添加主机是192.168.189.128 端口1122 

完成跳转B上。

但是B的机器的IP不会更改,此时还是192.168.100.100

测试外网也成功。