14
2019
03
12:54:49

iptables用法初解

一、四表五链之间的关系


4个表:filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter。


filter:一般的过滤功能


nat:用于nat功能(端口映射,地址映射,中转IP等)


mangle:用于对特定数据包的修改


raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能




5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。


PREROUTING:数据包进入路由表之前


INPUT:通过路由表后目的地为本机


FORWARDING:通过路由表后,目的地不为本机


OUTPUT:由本机产生,向外转发


POSTROUTIONG:发送到网卡接口之前。


关系如下两个图:




iptables中表和链的对应关系如下:






二、修改




1) 配置文件修改方式


iptables 装好后,可以用service iptables start来启动,默认是不写配置文件的,可以修改/etc/sysconfig/iptables-


config文件的IPTABLES_SAVE_ON_RESTART参数为"YES",那么再次service iptables restart后,会生成/etc/sysconfig/iptables文件,这个是iptables的规则配置文件。然后每次修改这个文件,重启iptables服务就可以生效。




2)使用iptables-save和iptables-restore实时修改


另一种方法可以实时的修改iptables,先调用iptables-save > 1.txt(任一文件), 1.txt保存的就是当前iptables所有的规则。然后修改1.txt文件,再调用iptables-restore 1.txt,这样可以实时的修改iptables。下面我们以一个IP中转的例子的说明操作


例1:中转机10.193.33.199, 客户机:10.194.40.99,内网(192.168.205.199) 服务器:192.168.207.31。前提:客户机与中转机是相通的,中转机和服务器是相通的,但是客户机和服务机不通,如何通过修改中转机的iptables使客户机能直接用ssh登录到服务器?


步骤1,打开中转机的IP转发功能,#echo "1" >/proc/sys/net/ipv4/ip_forward


步骤2,使用iptables-save > 1.txt,打开1.txt查看当前的所有配置,如下:



# Generated by iptables-save v1.3.5 on Wed Jan 23 13:42:41 2013

*nat

:PREROUTING ACCEPT [987255:120400313]

:POSTROUTING ACCEPT [69206:4531327]

:OUTPUT ACCEPT [69171:4525042]

COMMIT

# Completed on Wed Jan 23 13:42:41 2013

# Generated by iptables-save v1.3.5 on Wed Jan 23 13:42:41 2013

*filter

:INPUT ACCEPT [8263685:2471630642]

:FORWARD ACCEPT [744189:1336659724]

:OUTPUT ACCEPT [6320185:4534993027]

COMMIT

# Completed on Wed Jan 23 13:42:41 2013

修改如下:

# Generated by iptables-save v1.3.5 on Wed Jan 23 13:42:41 2013

*nat

:PREROUTING ACCEPT [987255:120400313]

:POSTROUTING ACCEPT [69206:4531327]

:OUTPUT ACCEPT [69171:4525042]

-A PREROUTING -s 10.194.41.99 -i eth0 -p tcp -m tcp --dport 22 -j DNAT --to-destination 192.168.207.31:22 

-A POSTROUTING -s 10.194.41.99 -p tcp -m tcp -j SNAT --to-source 192.168.205.199 

COMMIT

# Completed on Wed Jan 23 13:42:41 2013

# Generated by iptables-save v1.3.5 on Wed Jan 23 13:42:41 2013

*filter

:INPUT ACCEPT [8263685:2471630642]

:FORWARD ACCEPT [744189:1336659724]

:OUTPUT ACCEPT [6320185:4534993027]

COMMIT

# Completed on Wed Jan 23 13:42:41 2013


步骤3,iptables-restore 1.txt

此时,在客户机上ssh到中转机的IP上,实际上就已经ssh到服务机上了。


-A PREROUTING这一行是在路由前就会执行的,主要是把从客户机来的经过eth0口的tcp且目的端口是22(ssh端口)的请求的目的地址改为192.168.207.31:22。此时tcp封包就变成了由99机器到31机器的包,但是这个包如果到达了31机器,31机器是没办法回复此包的,因为31机器与99机器不通。


而第二行-A POSTROUTING 是在数据包出去时将客户机的IP改写成199的内网IP,即192.168.205.199,这个IP是中转机与服务机通信的IP,此时tcp封包就变成了由199机器到31机器的包,当31机器收到包后,就会直接回复199机器,而199机器就会回复客户机。




3)使用iptables命令直接修改当前配置,实时生效


直接用iptables命令查看和修改:


1、查看

iptables -nvL –line-number


-L 查看当前表的所有规则,默认查看的是filter表,如果要查看NAT表,可以加上-t NAT参数

-n 不对ip地址进行反查,加上这个参数显示速度会快很多

-v 输出详细信息,包含通过该规则的数据包数量,总字节数及相应的网络接口

–line-number 显示规则的序列号,这个参数在删除或修改规则时会用到


2、添加

添加规则有两个参数:-A和-I。其中-A是添加到规则的末尾;-I可以插入到指定位置,没有指定位置的话默认插入到规则的首部。


当前规则:



[root@test ~]# iptables -nL --line-number

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

1    DROP       all  --  192.168.1.1          0.0.0.0/0

2    DROP       all  --  192.168.1.2          0.0.0.0/0

3    DROP       all  --  192.168.1.4          0.0.0.0/0

添加一条规则到尾部:



[root@test ~]# iptables -A INPUT -s 192.168.1.5 -j DROP


再插入一条规则到第三行,将行数直接写到规则链的后面:



[root@test ~]# iptables -I INPUT 3 -s 192.168.1.3 -j DROP

查看:



[root@test ~]# iptables -nL --line-number

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

1    DROP       all  --  192.168.1.1          0.0.0.0/0

2    DROP       all  --  192.168.1.2          0.0.0.0/0

3    DROP       all  --  192.168.1.3          0.0.0.0/0

4    DROP       all  --  192.168.1.4          0.0.0.0/0

5    DROP       all  --  192.168.1.5          0.0.0.0/0

可以看到192.168.1.3插入到第三行,而原来的第三行192.168.1.4变成了第四行。


3、删除

删除用-D参数


删除之前添加的规则(iptables -A INPUT -s 192.168.1.5 -j DROP):



[root@test ~]# iptables -D INPUT -s 192.168.1.5 -j DROP

有时候要删除的规则太长,删除时要写一大串,既浪费时间又容易写错,这时我们可以先使用–line-number找出该条规则的行号,再通过行号删除规则。



[root@test ~]# iptables -nv --line-number

iptables v1.4.7: no command specified

Try `iptables -h' or 'iptables --help' for more information.

[root@test ~]# iptables -nL --line-number

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

1    DROP       all  --  192.168.1.1          0.0.0.0/0

2    DROP       all  --  192.168.1.2          0.0.0.0/0

3    DROP       all  --  192.168.1.3          0.0.0.0/0

删除第二行规则



[root@test ~]# iptables -D INPUT 2

4、修改

修改使用-R参数


先看下当前规则:



[root@test ~]# iptables -nL --line-number

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

1    DROP       all  --  192.168.1.1          0.0.0.0/0

2    DROP       all  --  192.168.1.2          0.0.0.0/0

3    DROP       all  --  192.168.1.5          0.0.0.0/0

将第三条规则改为ACCEPT:



[root@test ~]# iptables -R INPUT 3 -j ACCEPT

再查看下:



[root@test ~]# iptables -nL --line-number

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

1    DROP       all  --  192.168.1.1          0.0.0.0/0

2    DROP       all  --  192.168.1.2          0.0.0.0/0

3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

第三条规则的target已改为ACCEPT




--------------------- 

作者:hepeng597 

来源:CSDN 

原文:https://blog.csdn.net/hepeng597/article/details/8270138 

版权声明:本文为博主原创文章,转载请附上博文链接!




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/332.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: