设为首页 收藏本站
查看: 679|回复: 0

[经验分享] iptables用法初解

[复制链接]

尚未签到

发表于 2015-10-20 07:19:02 | 显示全部楼层 |阅读模式
  一、四表五链之间的关系
  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:发送到网卡接口之前。

关系如下两个图:

DSC0000.jpg



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



DSC0001.jpg


  


  二、修改
  


  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可以插入到指定位置,没有指定位置的话默认插入到规则的首部。


当前规则:



[iyunv@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
  

添加一条规则到尾部:



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

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



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

查看:



[iyunv@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):



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

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



[iyunv@test ~]# iptables -nv --line-number
iptables v1.4.7: no command specified
Try `iptables -h' or 'iptables --help' for more information.
[iyunv@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
  

删除第二行规则



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

4、修改

修改使用-R参数


先看下当前规则:



[iyunv@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:



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

再查看下:



[iyunv@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


  



版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-128843-1-1.html 上篇帖子: iptables 规则链表以及状态检测 下篇帖子: netfilter_queue/iptables实例--打印HTTP请求时所涉及TCP package header信息
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表