iptables语法

filter表:

INPUT链:作用于进入本机的包

OUTPUT链:作用于送出本机的包

FORWARD链:作用于和本机无关的包


nat表:

PREROUTING链:作用是包在刚刚到达防火墙时改变包的目标地址

OUTPUT链:改变本地产生的包的目标地址

POSTROUTING链:作用是在包将离开防火墙时改变包源地址


blob.png

1.查看iptables规则

iptables -nvL  (此时默认查看filter表,加选项 -t 可以指定表 iptables -t nat -nvL 

blob.png

(规则的保持路径: /etc/sysconfig/iptables

blob.png)

   把所有规则清空 iptables -F:(/etc/sysconfig/iptables仍然是保存着的

 blob.png

 保存默认规则到配置文件(/etc/sysconfig/iptables

  重启一下服务:service iptables restart (因为刚刚删除了规则:iptables -F ,需要重启加载。否则无东西可保持!)

   执行:service iptables save     保存


 当我们添加规则的时,如果需要保存到配置文件需要保存操作(service iptables save),否则只是保持在当前的内存中。


2. iptables -Z  把计数器清零 (因为每时每刻都是在通信,数据清零一会又会有数据)

blob.png

  iptables -Z; iptables -nvL

blob.png


3.增加/删除一条规则:

-A/-D  表示增加或删除一条规则

-I :     表示插入一条规则

-p   :  指定协议(tcp、udp、icmp)

--dport   和-p一起使用,指定目标端口  (使用dport必须使用-p指定协议)

--sport    和-p一起使用,指定源端口   (使用dport必须使用-p指定协议)

-s            表示指定源IP

-d           表示指定目标ip

-j     后面加动作: (1)ACCEPT  允许包  (2)DROP 丢掉包 (3)REJECT 拒绝包

-i   指定网卡

DROP 丢掉包 和 REJECT 拒绝包 :效果一样,DROP 丢掉包,直接把包丢弃;REJECT 拒绝包 :分析过再拒绝

(3.1)增加规则


如:


(操作默认表filter

iptables -A INPUT -s 192.168.136.1 -p tcp --sport 1234 -d 192.168.136.123 --dport 80 -j DROP

blob.png

iptables -I INPUT -p tcp --dport 80 -j DROP  

blob.png

(-I 和-A 的区别 ,-I把规则插入到最前面,-A把规则添加到最后,在过滤时,先执行最前面的)


   (3.2)删除规则 -D 

1.(记得规则前提下删除规则,直接把选项加-D)

iptables -D INPUT -s 192.168.136.1 -p tcp --sport 1234 -d 192.168.136.123 --dport 80 -j DROP

iptables -D INPUT -p tcp --dport 80 -j DROP

blob.png

(2)不记得规则命令时删除规则方法:

        a.把规则的序列号打印出来 iptables -nvL --line-number

 blob.png

     b.针对规则编号进行删除

     iptables -D INPUT 规则编号

     iptables -D INPUT  1


iptables -nvL 可以看到链的默认策略

blob.png

通过-P 可以改链的策略(千万不要执行)

iptables -P OUTPUT DROP

(如果执行了这个命令,则我们远程连接就会链接不上,因为我们的包不能正常的返回给我们)




                                       iptables filter表小案例

blob.png

需求:对filter表开放22端口、80端口、 21端口,INPUT链:DROP ,OUTPUT链和FORWARD链:ACCEPT,22端口只针对192.168.136.0/24开通,所有网段开发80端口、 21端口。

blob.png(这条规则必须要写,不然后面的80端口和21端口无法取得包)

blob.png

看结果:

blob.png



     

 icmp示例

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

执行命令后,只能ping通外网,别人不能ping通我们的本机(禁ping作用)

命令的 8 是指能在本机ping 同其他机器,而其他机器不能ping通本机。



                                   ptables nat表应用

blob.png

(一).首先准备两台机器(让A\B能相连)

  先在两台机器都添加多一个网络适配器

 步骤 :

第一台机器  编辑虚拟机设置 -->添加-->网络适配器-->选中右边LAN(图中操作)-->选中我们定义的LAN区段--->确认

(LAN相当于网卡选到一个内网交换机上,但此时我们的window机连不上这个交换机)


blob.png

blob.png

第二台机器:(也是添加一个网络适配器,因为原机器上已经配置了一个ip)

  (首先把原来网络适配器设备状态 启动时连接 选项取消,(此时ip不存在,不能再远程连接)。再开始添加网络适配器)


blob.png

启动两台机器


第一台机器:(查看一下ip,ifconfig)

blob.png


 1.  设置ip

    方法一:(步骤和设置虚拟网卡一样)

    (1)先复制一份配置文件 cp  /etc/sysconfig/network-scripts/ifcfg-ens33  /etc/sysconfig/network-scripts/ifcfg-ens37

     (2) 修改配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens37


blob.png

(3)保存退出


方法二:(临时生效)

命令:ifconfig ens37 192.168.100.1/24 (临时设置,重启消失)

blob.png


第二台机器(B )

blob.png


(我们在设置网络适配器时已经取消它开机启动,使用命令

   ifdown ens33 是为更保险的down掉ens33网卡对实现的影响)


1.设置ip

  方法如上第一台机器

 设置ip为 ifconfig ens37 192.168.100.100/24

blob.png


配置完了ip 测试两台机器相ping是否通:

A机器:

ping 192.168.100.100




查看配置的网卡是否有问题方法:

 (1)ping 自己的ip 

   (2)mii-tool 网卡名(mii)

blob.png

(以上准备工作已经实现A,B两台机器可以通信,能相互ping通


(二)

1.A机器修改一下配置文件,开启内核转发

  内核参数配置文件: /proc/sys/net/ipv4/ip_forward

 默认内容为:“0” 表示没有开启内核转发

blob.png

把配置文件中的"0"改为1 开启内核转发

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

blob.png


2.A实现设置的网段能上网

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


 blob.png


3. B上设置网关为192.168.100.1

(数据包要想从B-->A ,必须设置一个网关)

  查看网关命令: route -n

blob.png还没网关

设置网关:route add default gw 192.168.100.1 (A机器的网卡ens37的ip)

     route add default gw 192.168.100.1


blob.png

接着测试 是否能ping同A机器的ens33,同则证明能外网/公网通信


设置DNS 链接到网络上

  vi /etc/resolv.conf

添加内容保存: nameserver 119.29.29.29

blob.png

保存后测试是否能ping通外网:ping www.baidu.com

(实验不能ping通外网,可能是和我的网络环境(实验时我用的网络是手机热点),但是此时我能ping通A机器的ens33和ping通网关就行了)



应用需求二:


需求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.136.133

 B上设置网关为192.168.100.1

(其实就是端口映射)

1.A上打开端口转发

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



2.删除需求一的nat表的设置,让它恢复为空:

执行命令:iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE

(因之前操作过:iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE

blob.png

3.向nat表添加操作:

(3.1)A上执行

iptables -t nat -A PREROUTING -d 192.168.136.133 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22   (实现把进来的包通过端口映射转发到22端口)

 (3.2)A上执行

iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.136.133 (返回的包,进行SNAT操作)



4.给B机器加上网关(必须要设置网关)



 route add default gw 192.168.100.1 

blob.png


5.测试,使用192.168.136.133 /1234端口远程连接B机器

blob.png

(实验不成功)


 

                                  iptables规则备份和恢复

blob.png

1. service iptables save //命令会把规则保存到 /etc/sysconfig/iptables 


  根据自己的需求把iptables规则保存到指定的文件中:

   步骤:iptables-save > /自定义文件

       iptables-save >/tmp/ipt.txt

blob.png

恢复保存的规则:

iptables-restore < /保存的文件

   iptables-restore </tmp/ipt.txt

blob.png