iptables的用法

基本用法:

iptables [-t table] [subcommand] chain [rulenum] [options...] [match] [target]
iptables [-t 表名] <-A|-I|-D|-R> 链名 [规则编号][-i|o 网卡名称][-p 协议类型][-s 源ip地址][源子网][--sport 源端口号][-d 目标ip地址|目标子网][--dport 目标端口号][-j 处理动作]

详细用法说明:

1)table

filter:一般的过滤功能,包含input,forward,output。默认选项
nat:用于地址转换、映射、端口映射等,包含prerouting,postrouting
mangle:用于对特定数据包的修改,包含prerouting,output,forward,input,postrouting
raw:一般是为了不再让iptables做数据包的连接跟踪处理,从而提供性能,包含prerouting,output

2)subcommand选项

1》链管理

-N :new,  自定义一条新的规则链
-X :delete ,删除自定义的空的规则链
-P :Policy ,设置默认策略;对filter 表中的链而言,其默认策略有:ACCEPT :接受,DROP :丢弃
-E :重命名自定义链;引用计数不为0 的自定义链不能够被重命名,也不能被删除

2》查看:

-L :list,  列出指定鏈上的所有规则,本选项须置后
-n :numberic ,以数字格式显示地址和端口号
-v :verbose ,详细信息
-vv:更详细
-x :exactly ,显示计数器结果的精确值, 而非单位转换后的易读值
--line-numbers :显示规则的序号
-S :selected, 以iptables-save命令格式显示链上规则
常用组合:
--vnL
--vvnxL --line-numbers

3》规则管理:

-A :append,追加
-I :insert,插入,要指明插入的规则编号,默认为第一条。
-D :delete,删除。(1)指明规则序号,(2)指明规则本身
-R :replace ,替换指定链上的指定规则编号
-F :flush ,清空指定的规则链
-Z :zero ,置零
iptables 的每条规则都有两个计数器
(1)匹配到的报文的个数
(2)匹配到的所有报文的大小之和

3)链chain:

INPUT:通过路由表判断后目的地是本机,然后进入本机内部资源
OUTPUT:有本机产生的数据向外部转发
FORWARD:通过路由表判断后目的地不是本机,然后通过路由转发到其他地方
PREROUTING:流入的数据包进入路由表之前
POSTROUTING:传出的数据包到达网卡出口之前

4)match,匹配条件

基本:通用的,parameters
扩展:需加载模块,match extentions

1》基本匹配条件:

无需加载模块,由iptables/netfilter 自行提供
[!] -s, --source address[/mask][,...] :源IP 地址或范围
[!] -d, --destination address[/mask][,...] :目标IP 地址或范围
[!] -p, --protocol protocol :指定协议,可使用数字如0(all),protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp,mh or “all“ 参看:/etc/protocols
[!] -i, --in-interface name :报文流入的接口;只能应用于数据报文流入环节,只应用于 INPUT 、FORWARD 、PREROUTING 链
[!] -o, --out-interface name :报文流出的接口;只能应用于数据报文流出的环节,只应用于 FORWARD 、OUTPUT 、 POSTROUTING 链

2》扩展匹配条件:

需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效,是对某一种功能的扩展,经由扩展模块引入的匹配机制。
查看帮助:man iptables-extensions
1>隐式扩展 :对某一种协议的扩展
在使用-p 选项指明了特定的协议时,无需再用-m 选项指明扩展模块的扩展机制,不需要手动加载扩展模块。
-p做协议匹配,协议有:tcp,udp,icmp,icmpv6,ah,esp,sctp,mh,all
1.tcp 协议,-m tcp,扩展选项
[!] --source-port, --sport port[:port] :匹配报文tcp首部源端口,可为端口范围
[!] --destination-port,--dport port[:port] :匹配报文目标端口,可为范围
[!] --tcp-flags mask comp:mask需检查的标志位列表,用逗号分隔,如 SYN,ACK,FIN,RST,PSH,URG,ALL,NONE.comp在mask列表中必须为1的标志位列表,无指定则必须为0,用逗号分割
[!] --syn :用于匹配第一次握手。相当于:--tcp-flags SYN,ACK,FIN,RST,SYN
2.udp 协议,-m udp,扩展选项
[!] --source-port, --sport port[:port] :匹配报文udp首部的源端口;可以是端口范围
[!] --destination-port,--dport port[:port] :匹配报文udp首部的目标端口;可以是端口范围
3.icmp
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。)
-m icmp:专有选项
[!] --icmp-type {type[/code]|typename}:type/code为 0/0 echo-reply表示icmp 应答,type/code为8/0 echo-request表示icmp 请求
2>显式扩展 :
额外附加的更多的匹配规则,功能性扩展
必须使用-m 选项指明要调用的扩展模块的扩展机制,要手动加载扩展模块,即[-m matchname [per-match-options]
-m 模块名称
每个模块会引入新的匹配机制
可以通过rpm -ql iptables 来获得那些模块可用,模块是以.so结尾的。
使用帮助:
man iptables (centos6)
man iptables-extensions(centos7)
1. multiport扩展
以离散方式定义多端口匹配, 最多指定15 个端口
[!] --source-ports,--sports port[,port|,port:port]...:指定多个源端口
[!] --destination-ports,--dports port[,port|,port:port]...:指定多个目标端口
[!] --ports port[,port|,port:port]...:多个非连续的源或目标端口
示例:
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dports 20:22,80 -j ACCEPT
2. iprange扩展
指明连续的(但一般不是整个网络)ip 地址范围
[!] --src-range from[-to]:源IP 地址范围
[!] --dst-range from[-to]:目标IP 地址范围
示例:
iptables -A INPUT -d 172.16.100.10 -p tcp --dport 80 -m iprange --src-range 172.16.100.5-172.16.100.10 -j DROP
3. mac 扩展
指明源MAC 地址
适用于:PREROUTING, FORWARD,INPUT chains
[!] --mac-source XX:XX:XX:XX:XX:XX
示例:
iptables -A INPUT -s 172.16.0.100 -m mac --mac-source 00:50:56:12:34:56 -j ACCEPT
iptables -A INPUT -s 172.16.0.100 -j REJECT
4. string 扩展
对报文中的应用层数据做字符串模式匹配检测
--algo {bm|kmp} :字符串匹配检测算法,bm :Boyer-Moore,kmp :Knuth-Pratt-Morris
--from offset :开始偏移
--to offset :结束偏移
[!] --string pattern :要检测的字符串模式
[!] --hex-string pattern :要检测字符串模式,16 进制格式
示例:
iptables -A OUTPUT -s 172.16.100.10 -d 0/0 -p tcp --sport 80 -m string --algo bm --string “google" -j REJECT
5. time扩展
根据将报文到达的时间与指定的时间范围进行匹配
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:开始日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]:停止日期
--timestart hh:mm[:ss]:开始时间
--timestop hh:mm[:ss]:停止时间
[!] --monthdays day[,day...]:每个月的几号
[!] --weekdays day[,day...]:星期几
--kerneltz :内核时区,不建议使用,CentOS7 系统默认为UTC
注意:centos6 不支持kerneltz,--localtz 指定本地时区( 默认)
示例:
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP
6. connlimit 扩展
根据每客户端IP 做并发连接数数量限制,即每个客户端最多可同时发起的连接数量,通常分别与默认的拒绝或允许策略配合使用,可防止CC(Challenge Collapsar 挑战黑洞) 攻击
--connlimit-upto n :匹配,限定并发连接数的上限
--connlimit-above n :匹配,限定并发连接数的下限
示例:
iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
7. limit扩展
基于收发报文的速率做匹配,使用令牌桶过滤器
--limit rate[/second|/minute|/hour|/day]:数率限定
--limit-burst number:突发数率限定
示例:
iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
iptables -I INPUT 2 -p icmp -j REJECT
8. state 扩展
状态检测扩展,根据“连接追踪机制”去检查连接的状态,较耗资源。
追踪本机上的请求和响应之间的关系,状态有如下几种:
NEW :新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
ESTABLISHED :NEW 状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
RELATED :新发起的但与已有连接相关联的连接,如:ftp 协议中的数据连接与命令连接之间的关系
INVALID :无效的连接,如flag 标记不正确
UNTRACKED :未进行追踪的连接,如raw
[!] --state:state就是NEW等状态
示例:
iptables -A INPUT -d 172.16.100.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.16.100.10 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT

#######1>

以上连接追踪功能内核会在内存中开辟一段专用的空间用于存储连接的状态等,由于此段内存空间是有限的,因此就必须对连接追踪功能进行一些调整限制。
有关的内核参数由以下提供:
已经追踪到的并记录下来的连接信息库
/proc/net/nf_conntrack
调整连接追踪功能所能够容纳的最大连接数量
/proc/sys/net/nf_conntrack_max
不同的协议的连接追踪时长
/proc/sys/net/netfilter/
注意:CentOS7 需要加载模块: modprobe nf_conntrack

#######2>

iptables 的链接跟踪表最大容量为/proc/sys/net/nf_conntrack_max ,各种状态的超时链接会从表中删除;当模板满载时,后续连接可能会超时
解决方法两个:
(1) 加大nf_conntrack_max 值
vi /etc/sysctl.conf
net.nf_conntrack_max = 393216
net.netfilter.nf_conntrack_max = 393216
(2) 降低 nf_conntrack timeout 时间
vi /etc/sysctl.conf
net.netfilter.nf_conntrack_tcp_timeout_established = 300
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
iptables -t nat -L -n

#######3>

开放被动模式的ftp服务
(1)装载ftp 连接追踪的专用模块:
跟踪模块路径:/lib/modules/kernelversion/kernel/net/netfilter
vim /etc/sysconfig/iptables-config 配置文件
IPTABLES_MODULES=" nf_conntrack_ftp "
modproble nf_conntrack_ftp
(2)放行请求报文:
命令连接:NEW, ESTABLISHED
数据连接:RELATED, ESTABLISHED
iptables –I INPUT -d LocalIP -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW -j ACCEPT
(3)放行响应报文:
iptables -I OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT

5)terget,处理动作

-j targetname [per-target-options]:跳转目标
简单:
ACCEPT :接受
DROP :丢弃
扩展:
REJECT :明确拒绝,默认
RETURN :返回调用链
REDIRECT :端口重定向
LOG :记录日志,dmesg
MARK :做防火墙标记
DNAT :目标地址转换
SNAT :源地址转换
MASQUERADE :地址伪装
...
自定义链: LOG:非中断target, 本身不拒绝和允许, 放在拒绝和允许规则前并将日志记录在/var/log/messages 系统日志中
--log-level level:级别有emerg, alert, crit, error,warning, notice, info or debug
--log-prefix prefix:日志前缀,用于区别不同的日志,最多29个字符。
示例:
iptables -I INPUT -s 10.0.1.0/24 -p tcp -m multimport --dports 80,21,22,23 -m state --state NEW -j LOG --log-prefix "new connections:

iptabes的用法的更多相关文章

  1. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  2. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  3. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  4. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  5. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  6. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  7. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

  8. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...

  9. 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)

    vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...

随机推荐

  1. VC6.0 突然打不开dsw 工程文件的解决方案

    在vc编程中,经常遇到dsw工程文件无法打开,或者打开后看不到类和变量的问题.特别是把代码从一台电脑上copy到另一台电脑上以后,常常会碰到这种奇怪的问题.有时在编辑状态下也会发生成员变量或函数提示不 ...

  2. beanstalk 安装

    1.安装 # wget https://github.com/kr/beanstalkd/archive/v1.10.tar.gz # tar xzvf v1.10 # cd beanstalkd-1 ...

  3. Head First设计模式之状态模式

    一.定义 定义:允许对象在内部状态改变时改变它的行为, 对象看起来好像修改了它的类. 主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为. 何时使用:代码中包含大量 ...

  4. Jenkins 学习笔记

    Jenkins 的内容网站蛮多的,但是一开始我看起来确实很费劲.似乎好多东西都是悬空的,没有把底层的信息交代清楚. 我把自己对于 Jenkins 的探索过程记录下来,如下. 目录 Jenkins 学习 ...

  5. Dotnet Core Windows Service

    在dotnet 中有topshelf 可以很方便的写windows 服务并且安装也是很方便的,命令行 运行.exe install 就直接把exe 程序安装成windows 服务.当然 代码也要做相应 ...

  6. 12.python进程\协程\异步IO

    进程 创建进程 from multiprocessing import Process import time def func(name): time.sleep(2) print('hello', ...

  7. [Micropython]发光二极管制作炫彩跑马灯

       先甩锅 做完后才发现最后一个灯坏了,就坏了一个灯也不好意思去找淘宝店家,大家视频凑合着看把.不过并不影响实验效果.因为这个发光二极管白天不是很明显 晚上炫彩效果就能出来了.本次实验用的是8个灯珠 ...

  8. Linux中创建新用户并赋给指定文件权限

    工作中用到了,写篇日志总结一下. 创建新的用户: 第一种方式: 创建用户: adduser name 创建密码: passwd name(回车后出现修改密码的提示) 该方式创建的用户目录默认在home ...

  9. CSS属性:背景属性(图文详解)

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. background系列属性 常见背景属性 CSS样式中,常见的背景属性 ...

  10. Redis进阶实践之二如何在Linux系统上安装安装Redis

    一.引言      上一篇文章写了"如何安装VMware Pro虚拟机"和在虚拟机上安装Linux操作系统.那是第一步,有了Linux操作系统,我们才可以在该系统上安装Redis. ...