您的位置:首页 > 其它

iptables用法初解

2013-01-23 14:03 260 查看
一、四表五链之间的关系

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: