标签:
---恢复内容开始---
配置文件:
/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
#/etc/init.d/iptables [start/stop] //(开启/关闭)防火墙
#chkconfig iptables off //不随机开启防火墙
#chkconfig iptables on //随机开启防火墙
#vim /etc/sysconfig/selinux //永久关闭selinux(重启生效)
SELINUX=disabled
#setenforce 0
//临时关闭selinux(立即生效)
# iptables -N 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 ...
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
因为mangle很少使用,简化后如下:
-t raw
-t mangle
-t nat
-t filter 这个表示默认的,如果是设置数据包的过滤,这个可以省略不写
-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的帮助信息协议匹配:【常用的协议包括tcp、udp、icmp】
-p tcp|udp|icmp
地址匹配:【地址可以是单个IP地址、网络地址(带掩码)】
-s IP
-d IP
接口匹配:【分别指定接收、发送数据包的网络接口】
-i lo|eth0
-o lo|eth0
端口匹配: 【采用“端口1:端口2 ”的形式可以指定一个范围的端口,最多指定15个端口】
TCP标记匹配: 【】
–sport port //源端口
--tcp-flags SYN,RST,ACK SYN //表示检查SYN、RST、ACK这三个标记,只有SYN为1时满足
等价于 --syn
总共的类型包括:
SYN| ACK| FIN| RST| URG| PSH| ALL |NONE
UDP标记匹配: 【】
ICMP类型匹配:【echo-request(8)(请求回显),echo-reply(0)(响应的数据包)】
--icmp-type
[Echo-Request|Echo-Reply] // icmp请求和icmp回复;数据包限制:【limit 功能可以指定单位时间内匹配的平均数据包个数】
-m limit --limit 3/second | 3/minute | 3/hour | 3/day 指定时间间隔,或者使用缩写,所以3/second等于3/s.
例子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:
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 //匹配群组
数据包状态匹配:【总共有四种状态 NEW | ESTABLISHED | RELATED | INVALID】
-m state --state NEW | ESTABLISHED | RELATED
例子:
#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 这三种,通常将其视为恶意的数据包而丢弃。
数据包处理方式:
针对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 的日志级别要对应.
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动作的一个模块。
模拟随机丢包率
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 之间.
---恢复内容结束---
标签:
原文地址:http://www.cnblogs.com/Roach57/p/5026289.html