Iptables用法概述

---恢复内容开始---

iptables

防火墙的规则设置最好的设置流程是,将防火墙规则写入到配置文件中,然后通过#iptables-restore读取,

这样可以避免防火墙设置错误和防火墙规则混乱;

一、iptables—语法:

——————————————————————————-

iptables [-t 要操作的表] <操作命令> [要操作的链] [规则号码] [匹配条件] [-j 匹配后的动作]

小写      大写        大写                   小写           大写

导出规则:

导入规则:

配置文件:

/etc/sysconfig/iptables

 

保存规则:

#iptables-save //默认保存的位置是/etc/sysconfig/iptables

读取规则:

#iptables-restore /etc/sysconfig/iptables

 

保存:iptables-save

iptables-save [-c] [-t 表名]

-c:保存包和字节计数器的值。可以使在重启防火墙后不丢失对包和字节的统计

-t:用来保存哪张表的规则,如果不跟-t参数则保存所有的表

可以使用重定向命令来保存这些规则集

iptables-save > /etc/iptables-save

恢复:iptables-restore

iptables-restore [-c] [-n]

-c:如果加上-c参数则表示要求装入包和字节计数器

-n:表示不覆盖己有的表或表内的规则,默认情况下是清除所有己存在的规则

            iptables-restore < /etc/iptables-save

二、iptables—常用命令:

——————————————————————————-

【临时/永久】开启防火墙和selinux

#/etc/init.d/iptables [start/stop] //(开启/关闭)防火墙

#chkconfig iptables off //不随机开启防火墙

#chkconfig iptables on //随机开启防火墙

 

#vim /etc/sysconfig/selinux //永久关闭selinux(重启生效)

SELINUX=disabled

#setenforce 0

//临时关闭selinux(立即生效)

#只要防火墙打开,进入计算机的信息都必须经过防火墙的过滤,除非防火墙关闭;
    #内网的ip地址在外网是不生效的

内核态:netfilter 防火墙

用户态:iptables 管理防火墙的工具

#iptables –help//常看帮助

#iptables -L//查看防火墙规则

#iptables -L -n                                //这看查看会比较快 加-n:以数字形式显示

#iptables -F //默认是清空filter表的规则;

#iptables -t nat -F         //清空nat表的规则链

#iptables -t nat -vnL //查看nat表的规则链

#iptables -t mangle -vnL //查看mangle表的规则链

#iptables -t filter -vnL         //查看filter表的规则链

#iptables -t raw -vnL //查看raw表的规则链

#iptables -t nat -vnL –line         //并且显示行号

#iptables -t filter -D INPUT 3 //删除filter表INPUT第三条规则

#iptables -t filter -F INPUT         //清空filter表中的INPUT链

#iptables -t nat -F POSTROUTING //清空nat表中的POSTROUTING链

#iptables -P INPUT DROP //将filter表的INPUT的默认规则设置成为DROP

#iptables -R INPUT 3 -j DROP//将fitler表的INPUT的第三个规则设置成为DROP

#ntsysv                                            //开机后自启动防火墙的设定

凡是写到自定义链里的规则默认不会生效,【只有自定链可以改名】

# iptables -N mydefine                 //定义自定义链

# iptables -A INPUT -j mydefine  //使用自定义链

# iptables -E mydefine HELLO     //给自定义链改名

# iptables -X mydefine                 //删除自定义链

如何使用自定义链:

使用自定义链

#iptables -t filter -N Mylan1

#iptables -A FORWARD -s 192.168.1.0/24 -j Mylan1

#iptables -A FORWARD -d 192.168.1.0/24 -j Mylan1

#iptables -A Mylan1 -p icmp -j DROP

#iptables -A Mylan1 ...

三、四表五链:

——————————————————————————-

四表:raw—mangle—nat—filter【由左到右,优先级别越来越低】

raw: 主要做连接追踪

mangle:对数据包进行修改,例如给数据包打标记MARK

nat:  主要修改数据包的地址,例如源地址或目标地址

filter:  实现对数据包的过滤

五链:POSTROUTING—INPUT—FORWARD—OUTPUT—PREROUTING

[这个可以通过#iptables -t [raw|mangle|nat|filter] -vnL    //查看都可以应到到哪几个表上]

1.PREROUTING     (路由前)

2.INPUT                (数据包流入口)

3.FORWARD         (转发管卡)

4.OUTPUT             (数据包出口)

5.POSTROUTING (路由后)

对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT

对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING

而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

四、语法详解:

——————————————————————————-

图形1



因为mangle很少使用,简化后如下:

图形2

1、操作表:

-t raw

-t mangle

-t nat

-t filter 这个表示默认的,如果是设置数据包的过滤,这个可以省略不写

2、操作命令:【 后面跟链 或 自定义链 】

列表查看规则:

-L     //查看防火墙规则,v详细,n不反解 --line-numbers,-vnL,-nL,-vL

-v     //查看接收的包的个数,需要和-L连用,且需要放在L前面

-vvv //越多越详细

-x //显示包和字节计数器的精确值,不做单位换算,这个命令需要和-L联合起来才

                         能使用;

--line-numbers //显示规则的行号

-n     //显示对应的端口

设置规则内容:

-A     //追加,放置最后一条

-I     //插入,默认是插入成第一条

-P     //设置指定链的默认规则

-R     //修改或替换指定位置或内容的规则

清除规则:

-D     //删除指定位置的内容和规则

-F     //清空规则链内的所有规则

自定义规则链:

-N     //设定用户自定义链

-E     //给自定义链改名

-X     //删除指定的用户自定义链,这个链必须没有被引用,如果被引用,

                          在删除之前你必须删 除或者替换与之有关的规则

其他:

-Z     //计数器归零

-C     //修改规则

     -h              //查看iptables的帮助信息

3、操作的链:

POSTROUTING

INPUT

FORWARD

OUTPUT

PREROUTING

4、规则号码:

5、匹配条件:

指定协议不一定需要指定端口,但是指定端口就必须指定协议:

通用匹配:

协议匹配:【常用的协议包括tcp、udp、icmp】

-p tcp|udp|icmp

 

地址匹配:【地址可以是单个IP地址、网络地址(带掩码)】

-s IP

-d IP

 

接口匹配:【分别指定接收、发送数据包的网络接口】

-i lo|eth0

-o lo|eth0

隐含匹配:【需要指定协议】

端口匹配: 【采用“端口1:端口2 ”的形式可以指定一个范围的端口,最多指定15个端口】

–sport port //源端口 

–dport prot //目标端口

 

TCP标记匹配: 【】

–sport port //源端口 

–dport prot //目标端口

–sports port1,port2 //源端口

–dports port1,port2 //目标端口

--tcp-flags SYN,RST,ACK SYN //表示检查SYN、RST、ACK这三个标记,只有SYN为1时满足

等价于 --syn

总共的类型包括: SYN| ACK| FIN| RST| URG| PSH| ALL |NONE

 

UDP标记匹配: 【】

–sport port //源端口 

–dport port //目标端口

–sports port1,port2 //源端口

–dports port1,port2 //目标端口

 

ICMP类型匹配:【echo-request(8)(请求回显),echo-reply(0)(响应的数据包)】

--icmp-type [Echo-Request|Echo-Reply]    // icmp请求和icmp回复;

例子:

禁止别人 ping 服务器,但允许服务器往外 ping #iptables -A OUTPUT -p icmp –icmp-type echo-request -j DROP     //拒绝ping的请求回显 #iptables -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT      //允许响应的数据包

#iptables -A OUTPUT -p icmp –icmp-type 8 -j ACCEPT             //允许ping的请求回显             #iptables -A INPUT -p icmp –icmp-type 0 -j ACCEPT             //允许响应的数据包

显示匹配:

数据包限制:【limit 功能可以指定单位时间内匹配的平均数据包个数】

-m limit --limit 3/second | 3/minute | 3/hour | 3/day 指定时间间隔,或者使用缩写,所以3/second等于3/s.

-m connlimit –connlimit-above //限制链接数 

例子1:

#iptables -A INPUT -p tcp --syn -m limit --limit 5/s -i eth0 -j ACCEPT

你可以扩展这个 iptables 的 limit 功能,来降低遭受拒绝服务攻击的可能。

这里是一个靠限制 1 秒钟最多5个 TCP 的 syn 连接来防范 SYN 洪水攻击。

例子2:

--limit-burst //指定最开始的峰值 #iptables -A INPUT -p tcp -m limit --limit-burst 8 --limit 3/minute -j ACCEPT 

最开始最多8个包,然后每分钟内最多允许通过3个包

          例子3:

–connlimit-above n //限制为n个

#iptables -I FORWARD -p tcp -m connlimit –connlimit-above 9 -j DROP

#表示限制链接数最大为9个

MARK数据包标记:【匹配是否有被标记的数据包,且标记的编码与该规则设置的编码对应则被该规则处理,编码不超过4294967296】

-m mark –mark number

例子:

#iptables -t mangle -A INPUT -m mark –mark 1 -j DROP

#查看是否有被标记为1的数据包,如果有则丢弃;

 

MAC地址匹配:【仅仅对 PREROUTING 和 INPUT 链起作用】

-m mac --mac-source MAC地址

例子:

#iptables -A INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP

将源MAC地址为xx:xx:xx:xx:xx:xx的包丢弃

 

多端口匹配:【多个端口之间使用逗号","分隔,连续的端口也可以使用冒号":"分隔】

-m multiport --sports | --dports

 

例子:

#iptables -A INPUT -p tcp -m multiport --dports 20,21,25,110,1250:1280 -j ACCEPT

接收目标端口为20,21,25,110 和1250~1280的数据包;

 

IP地址范围匹配:【以"-"符号链接起始IP地址、结束IP地址】

-m iprange --src-range | --dst-range

 

例子:

#iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP

将源IP在 20-99之间的数据包丢弃

 

根据UID和GID进行匹配:【仅仅对OUTPUT链起作用】

-m owner --uid-owner | --gid-owner |--pid-owner

用户 群组 进程

 

例子:

#iptables -A OUTPUT -p tcp --dport 23 -m owner --uid-owner 500 -j REJECT //匹配用户

#iptables -A OUTPUT -p tcp --dport 23 -m owner --gid-owner 500 -j REJECT //匹配群组

#iptables -A OUTPUT -p tcp –dport 23 -m owner –pid-owner 78 -j REJECT //匹配进程  

根据关键字进行匹配:

-m string –algo bm –string “关键字” -j REJECT

#iptables -I FORWARD -m string –algo [bm|kmp] –string “/etc/passwd” -j REJECT

#iptables -I FORWARD -m string –algo [bm|kmp] –string “qq” -j REJECT

数据包状态匹配:【总共有四种状态 NEW | ESTABLISHED | RELATED | INVALID】

-m state --state NEW | ESTABLISHED | RELATED

 

例子:

#iptables -A FORWARD -m state –state NEW -p tcp !–syn -j DROP

#iptables -A INPUT -p tcp -m state --state NEW -j DROP #iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j DROP

说明:

什么是状态检测?对于整个TCP协议来讲,它是一个有连接的协议, 三次握手中, 第一次握手,我们就叫NEW连接, 而从第二次握手以后的,ack都为1,这是正常的数据传输,和tcp的第二次第三次握手,叫做已建立的连接(ESTABLISHED), 还有一种状态,比较诡异的,比如:SYN=1 ACK=1 RST=1,对于这种我们无法识别的,我们都称之为INVALID无法识别的。 还有第四种,FTP这种古老的拥有的特征,每个端口都是独立的,21号和20号端口都是一去一回,他们之间是有关系的,

这种关系我们称之为RELATED。

NEW:

所指的是每一条连接中的第一个数据包

ESTABLISHED:

一旦连接看到两个方向上都有通信流,与此附加相关的其它包都被看作处于

ESTABLISHED 状态。

RELATED:

实际上 RELATED 状态的数据包与“协议”无关, “只要回应回来的是因为本机先送出的一个数据包导致另一个连接的产生, 而这一条新连接上的所有数据包都是属于 RELATED 状态

的数据包” 。

INVALID:

状态包指不属于 ESTABLISHED、NEW、RELATED 这三种,通常将其视为恶意的数据包而丢弃。

6、处理动作:

数据包处理方式:

 

针对filter表:

-j ACCEPT //允许-[有返回值]

-j DROP //丢弃-[无返回值]

-j REJECT //拒绝-[有返回值]

 

针对mangle表:

-j MARK     //将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。

例子:

#iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2

#将目标端口为22的TCP协议包标记为2

 

针对nat表:

-j SNAT     //源地址转换 SNAT 源地址转换-----出口POSTROUTING

作用:内网用户访问外网服务器

例子:

#iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1

#将所有192.168.10.0网段的IP在经过的时候全都转换成172.16.100.1这个假设出来的外网地址;源地址转换

 

-j DNAT     //目标地址转换 DNAT 目标地址转换-----进口PREROUTING

作用:外网用户访问内网服务器

例子:

#iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport 80 -j DNAT --to-destination 172.16.100.2

#对192.168.10.18的TCP请求端口为80则转换成对目标地址172.16.100.2的请求;目标地址转换

 

-j MASQUERADE //源地址伪装(功能和SNAT类似,只是伪装的地址能够动态获得)

作用:内网用户访问外网服务器

例子:

#iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE

#添加nat表,将源地址是 192.168.10.0/24 的数据包进行地址伪装成为eth0的IP出去。实现很好的动态SNAT地址转换;

我们都知道当我们使用联通或者电信上网的时候,一般它都会在每次你开机的时候随机生成一个外网的IP,

意思就是外网地址是动态变换的。这时我们就要将外网地址换成 MASQUERADE(动态伪装):

它可以实现自动寻找到外网地址,而自动将其改为正确的外网地址;

 

-j REDIRECT

说明:重定向,主要用于端口重定向,将封包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续比对其它规则。

这个功能可以用来实作通透式porxy 或用来保护 web 服务器。

例子:

#iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

#访问80端口的TCP协议重定向到8080端口;

 

用户自定义链:【自定义链可以随意取名】

-j Mylan1

例子:

使用自定义链

#iptables -t filter -N Mylan1

#iptables -A FORWARD -s 192.168.1.0/24 -j Mylan1

#iptables -A FORWARD -d 192.168.1.0/24 -j Mylan1

#iptables -A Mylan1 -p icmp -j DROP

#iptables -A Mylan1 ...

 

-j RETURN

RETURN:【匹配到RETURN的自定义链就返回到系统链中,接着匹配接下去的规则】

在自定义链执行完毕后使用返回,来返回系统链。

#iptables -A Mylan1 -j RETURN

 

 

其他:

LOG记录日志:

-j LOG

说明:Log会显示到messages里面,可以在syslog里面添加独立的kern对象日志

例子:

#iptables –A INPUT –p tcp --dport 22 –j LOG --log-level 5 --log-prefix "IPTABLES:"

--log-level :日志级别为5, --log-prefix的前缀信息为“IPTABLES:”

对于为什么日志级别为5,可能参看#man syslog的8种级别,这里面的日志级别要与iptables的--log-level 的日志级别要对应.

 

方法:记录 Log: 1、修改 /etc/syslog.conf 在尾部加入: … # Iptable log kern.warning /var/log/iptables.log 2、重启服务: … #/etc/init.d/iptables restart #/etc/init.d/syslog restart 3、加入规则 LOG: … #iptables -A INPUT -s 192.168.1.1 -m limit –limit 5/s –limit-burst 7 -j LOG –log-prefix “** ATTACK ** ” –log-level 4


# iptables -A INPUT -p tcp -d 192.168.0.253 –dport 22 -j LOG –log-level 5 –log-prefix “IPTABLES:”

#vi /etc/syslog.conf #cat /etc/syslog.conf |grep notice kern.=notice /var/log/firewall.log #man syslog |grep ‘<*>’ #include #include #include DEFAULT_MESSAGE_LOGLEVEL – 1 (6) unless the line starts with where ventional meaning of the loglevel is defined in as #define KERN_EMERG “<0>” /* system is unusable */ #define KERN_ALERT “<1>” /* action must be taken immediately */ #define KERN_CRIT “<2>” /* critical conditions */ #define KERN_ERR “<3>” /* error conditions */ #define KERN_WARNING “<4>” /* warning conditions */ #define KERN_NOTICE “<5>” /* normal but significant condition */ #define KERN_INFO “<6>” /* informational */ #define KERN_DEBUG “<7>” /* debug-level messages */ # service syslog restart # tail /var/log/firewall.log 注: 1)、首先确认你所要增加到LOG里面的数据包在之前没有丢弃过; 2)、然后确认在LOG前面没有ACCEPT的规则,有的话,把ACCEPT先删掉, 在加入到ACCEPT到LOG的后面(也就是先经过LOG,再经过ACCEPT,不然系统日志无法记录日志信息)。

MIRROR:

-j MIRROR

说明:镜射封包,也就是将来源 IP 与目的地 IP 对调后,将封包送回,进行完此处理动作后,将会中断过滤程序。

例子:

#iptables –A INPUT –p tcp --dport 22 -j MIRROR

 

 

QUEUE:

-j QUEUE

说明:中断过滤程序,将封包放入队列,交给其它程序处理。透过自行开发的处理程序,可以进行其它应用.

例子:计算联机费......等。

#iptables -A INPUT -p tcp --dport 80 -j QUEUE 这个规则的意思是linux将http服务的报文上送到用户层,而做这个工作的就是ip_queue。 ip_queue是一个处理QUEUE动作的一个模块。

五、打开路由转发功能:

——————————————————————————-

# sysctl -a |grep ip_forward

net.ipv4.ip_forward = 0

# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

# sysctl -p   立即生效

=========================================

临时开启路由转发机制:

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

六、丢包/延时模拟:

——————————————————————————-

丢包模拟:

模拟随机丢包率

iptables -A FORWARD -p icmp -m statistic --mode random --probability 0.31 -j REJECT //表示31%的丢包率

或者

-m random --average 5 -j DROP 表示模拟丢掉5%比例的包

延时模拟:

设置延时 3s :

tc qdisc add dev eth0 root netem delay 3000ms

可以在 3000ms 后面在加上一个延时,比如 ’3000ms 200ms‘表示 3000ms ± 200ms ,延时范围 2800 – 3200 之间.

---恢复内容结束---

时间: 2024-10-22 18:18:24

Iptables用法概述的相关文章

Iptables用法

[[email protected] ~]# iptables -F #清除默认表filter中所有链的规则 [[email protected] ~]# iptables -X #清除自定义链的规则 [[email protected] ~]# iptables -L -nv --line-numbers #编号显示链规则 [[email protected] ~]# iptables -N #新建一条自定义的链 [[email protected] ~]# iptables -A INPUT

Linux之Iptables防火墙概述~

Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实现过滤和机制,属于典型的包过滤防火墙(或称之为网络层防火墙). Netfilter和Iptables区别: Netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于"内核态"(kernel space,又称为内核空间)的防火墙功能体系. Iptables:指的是Linux防护墙的命令工具,程序通常位于/sbin/iptables,属于"用户态"(User sp

iptables的概述及应用(一)

Iptables Iptables是属于网络层的防火墙,但是并不正真意义上是防火墙,因为iptables/netfilter是一个组件,iptables只是负责编写规则并提交给netfilter做执行的规则生成器.Netfiter是在linux内核中TCP/IP协议栈中工作的一个框架,从软件的角度来将是在TCP/IP协议栈中做了五个钩子函数,这五个钩子函数可非常准确的执行iptables所编写的规则并实现规则中相关的拦截和放行.规则的功能分别为raw,mangle,nat,filter四种,这些

iptables 用法

又有人攻击服务器了,没有办法又的去防,这里简单介绍一种限制指定IP访问的办法.  单个IP的命令是 iptables -I INPUT -s 59.151.119.180 -j DROP 封IP段的命令是 iptables -I INPUT -s 211.1.0.0/16 -j DROP  iptables -I INPUT -s 211.2.0.0/16 -j DROP  iptables -I INPUT -s 211.3.0.0/16 -j DROP 封整个段的命令是 iptables -

iptables 用法及常用模块总结

iptables传输数据包的过程: 1. 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去. 2. 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链.数据包到了INPUT链后,任何进程都会收到它.本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出. 3. 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输

response.setHeader用法概述

一秒刷新页面一次 response.setHeader("refresh","1"); 二秒跳到其他页面 response.setHeader("refresh","2;URL=otherPagename"); 没有缓存:response.setHeader("Pragma", "No-cache");  response.setHeader("Cache-Control&qu

Java中的底层魔法类Unsafe基本用法概述

1 引子 Java中没有指针,不能直接对内存地址的变量进行控制,但Java提供了一个特殊的类Unsafe工具类来间接实现.Unsafe主要提供一些用于执行低级别.不安全操作的方法,如直接访问系统内存资源.自主管理内存资源等,这些方法在提升Java运行效率.增强Java语言底层资源操作能力方面起到了很大的作用 .正如其名字unsafe,直接去使用这个工具类是不安全的,它能直接在硬件层(内存上)修改访问变量,而无视各种访问修饰符的限制.它几乎所有的公共方法API都是本地方法,这些方法是使用C/C++

iptables必知必会用法

防火墙 iptables 包过滤型防火墙 防火墙的类别: 代理服务器(proxy):代理client访问internet,分割内部与外部网络 IP Filter:进入本机的tcp/ip封装协议进行过滤 软件防火墙(逻辑上实现)        硬件防火墙(硬件配合软件实现) iptables功能:拒绝internet数据包进入linux主机的端口port 拒绝IP的数据包进入                       拒绝带有特殊旗标flag的封装协议                      

25个iptables非常经典的用法

本文介绍25个常用的iptables用法.如果你对iptables还不甚了解,可以参考上一篇iptables详细教程:基础.架构.清空规则.追加规则.应用实例,看完这篇文章,你就能明白iptables的用法和本文提到的基本术语. 一.iptables:从这里开始 删除现有规则 iptables -F    (OR)  iptables --flush 设置默认链策略 iptables的filter表中有三种链:INPUT, FORWARD和OUTPUT.默认的链策略是ACCEPT,你可以将它们设