iptables防火墙实用教程 - Linux - 服务器之家

服务器之家

专注于服务器技术!
当前位置:首页 > 服务器系统 > Linux

iptables防火墙实用教程

发布时间:2013-11-10 来源:服务器之家

内建三个表:natmangle和filter

filter预设规则表,有INPUT、FORWARD和OUTPUT三个规则链

INPUT 进入

FORWARD转发

OUTPUT出去

ACCEPT将封包放行

REJECT拦阻该封包

DROP丢弃封包不予处理

-A 在所选择的链(INPUT等)末添加一条或更多规则

-D 删除一条

-E 修改

-p tcp、udp、icmp 0相当于所有all!取反

-P 设置缺省策略(与所有链都不匹配强制使用此策略)

-s IP/掩码 (IP/24) 主机名、网络名和清楚的IP地址!取反

-j 目标跳转,立即决定包的命运的专用内建目标

-i 进入的(网络)接口[名称]eth0

-o 输出接口[名称]

-m 模块

--sport 源端口

--dport 目标端口

#配置文件

vi/etc/sysconfig/iptables

#将防火墙中的规则条目清除掉

iptables-F

#注意:iptables-PINPUTACCEPT

#导入防火墙规则

iptables-restore<规则文件

#保存防火墙设置

/etc/init.d/iptablessave

#重启防火墙服务

/etc/init.d/iptablesrestart

#查看规则

iptables-L-n

iptables-L-n--line-numbers

#从某个规则链中删除一条规则

iptables-DINPUT--dport80-jDROP

iptables-DINPUT8

#取代现行规则

iptables-RINPUT8-s192.168.0.1-jDROP

#插入一条规则

iptables-IINPUT8--dport80-jACCEPT

#查看转发

iptables-tnat-nL

#在内核里打开ip转发功能

echo1>/proc/sys/net/ipv4/ip_forward

##################################

#允许本地回环

iptables-AINPUT-s127.0.0.1-ptcp-jACCEPT

#允许已建立的或相关连的通行

iptables-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT

#开放对外访问

iptables-POUTPUTACCEPT

#指定某端口针对IP开放

iptables-AINPUT-s192.168.10.37-ptcp--dport22-jACCEPT

#允许的IP或IP段访问

iptables-AINPUT-s192.168.10.37-ptcp-jACCEPT

#开放对外开放端口

iptables-AINPUT-ptcp--dport80-jACCEPT

#关闭入口

iptables-PINPUTDROP

#关闭转发

iptables-PFORWARDDROP

##################################

iptables规则文件

#Generatedbyiptables-savev1.2.11onFriFeb 912:10:372007

*filter

:INPUTDROP[637:58967]

:FORWARDDROP[0:0]

:OUTPUTACCEPT[5091:1301533]

#允许的IP或IP段访问

-AINPUT-s127.0.0.1-ptcp-jACCEPT

-AINPUT-s192.168.0.0/255.255.0.0-ptcp-jACCEPT

#开放对外开放端口

-AINPUT-ptcp--dport80-jACCEPT

#指定某端口针对IP开放

-AINPUT-s192.168.10.37-ptcp--dport22-jACCEPT

#拒绝所有协议(INPUT允许的情况)

#-AINPUT-ptcp-mtcp--tcp-flagsFIN,SYN,RST,PSH,URGRST-jDROP

#允许已建立的或相关连的通行

iptables-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT

#拒绝ping

-AINPUT-ptcp-mtcp-jREJECT--reject-withicmp-port-unreachable

COMMIT

#CompletedonFriFeb 912:10:372007

##################################

常用实例

#允许在IP访问指定端口

iptables-AINPUT-s192.168.62.1-ptcp--dport22-jACCEPT

#禁止使用某端口

iptables-AINPUT-ptcp--dport22-jDROP

iptables-AINPUT-ptcp--dport31-jREJECT

#禁止QQ端口

iptables-DFORWARD-pudp--dport8000-jREJECT

#禁止icmp端口

#除192.168.62.1外,禁止其它人ping我的主机

iptables-AINPUT-ieth0-s192.168.62.1/32-picmp-micmp--icmp-type8-jACCEPT

iptables-AINPUT-ieth0-picmp-micmp--icmp-type8-jDROP

#其它情况不允许

iptables-AINPUT-ieth0-jDROP

#禁止指定IP访问

iptables-AINPUT-ptcp-sIP-jDROP

#禁止指定IP访问端口

iptables-AINPUT-ptcp-sIP--dportport-jDROP

#阻止所有没有经过你系统授权的TCP连接

iptables-tfilter-AINPUT-ieth0-ptcp--syn-jDROP

#添加网段转发

iptables-tnat-APOSTROUTING-s10.8.0.0/24-jMASQUERADE

#IP包流量限制

iptables-AINPUT-f-mlimit--limit100/s--limit-burst100-jACCEPT

iptables-AINPUT-ieth0-picmp-jDROP

#端口映射

iptables -tnat-APREROUTING-ieth0-ptcp -s192.168.62.0/24--dport80-jREDIRECT--to-ports

3128

#列出某规则链中的所有规则

iptables-LINPUT

#删除某个规则链,不加规则链,清除所有非内建的

iptables-Xallowed

#将封包计数器归零

iptables-ZINPUT

#定义新的规则链

iptables-Nallowed

#定义过滤政策

iptables-PINPUTDROP

#修改某自订规则链的名称

iptables-Ealloweddisallowed

#比对通讯协议类型是否相符

#-p!tcp 排除tcp以外的udp、icmp。-pall所有类型

iptables-AINPUT-ptcp

#比对封包的来源IP

#192.168.0.0/24 ! 反向对比

iptables-AINPUT-s192.168.1.1

#比对封包的目的地IP

iptables-AINPUT-d192.168.1.1

#比对封包是从哪片网卡进入

#eth+表示所有的网卡

iptables-AINPUT-ieth0

#比对封包要从哪片网卡送出

iptables-AFORWARD-oeth0

#比对某段时间内封包的平均流量

#例子是用来比对:每小时平均流量是否超过一次3个封包。除了每小时平均次外,也可以每

秒钟、每分钟或每天平均一次,默认值为每小时平均一次,参数如后:/second、/minute、/day。

除了进行封数量的比对外,设定这个参数也会在条件达成时,暂停封包的比对动作,以避免因

骇客使用洪水攻击法,导致服务被阻断。

iptables-AINPUT-mlimit--limit3/hour

#比对瞬间大量封包的数量

#例子是用来比对一次同时涌入的封包是否超过5个(这是默认值),超过此上限的封包将被直

接丢弃。使用效果同上。

iptables-AINPUT-mlimit--limit-burst5

#比对来自本机的封包

#是否为某特定使用者所产生的,这样可以避免服务器使用root或其它身分将敏感数据传送出,

可以降低系统被骇的损失。可惜这个功能无法比对出来自其它主机的封包。

iptables-AOUTPUT-mowner--uid-owner500

#比对来自本机的封包

iptables-AOUTPUT-mowner--gid-owner0

iptables-AOUTPUT-mowner--pid-owner78

iptables-AOUTPUT-mowner--sid-owner100

#用来比对联机状态

iptables-AINPUT-mstate--stateRELATED,ESTABLISHED

联机状态共有四种:INVALID、ESTABLISHED、NEW和RELATED。

#-j参数指定进行的处理动作,处理动作包括:ACCEPT、REJECT、DROP、REDIRECT、

MASQUERADE、LOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、MARK,说明:

iptables-AFORWARD-pTCP--dport22-jREJECT--reject-withtcp-reset

#可以传送的封包有几个选择:ICMPport-unreachable、ICMPecho-reply 或是tcp-reset

REDIRECT将封包重新导向到另一个端口(PNAT)

iptables-tnat-APREROUTING-ptcp--dport80-jREDIRECT--to-ports8080

MASQUERADE改写封包来源IP 为防火墙NICIP

iptables-tnat-APOSTROUTING-pTCP-jMASQUERADE--to-ports1024-31000

LOG将封包相关讯息纪录在/var/log 中

iptables-AINPUT-ptcp-jLOG--log-prefix"INPUTpackets"

SNAT改写封包来源IP 为某特定IP 或IP 范围

iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source

194.236.50.155-194.236.50.160:1024-32000

DNAT改写封包目的地IP 为某特定IP 或IP 范围

iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT--to-destination

192.168.1.1-192.168.1.10:80-100

MIRROR镜射封包

QUEUE中断过滤程序

RETURN结束在目前规则炼中的过滤程序

MARK将封包标上某个代号

##################################

iptables配置实例

允许某段IP访问任何端口

iptables-AINPUT-s192.168.0.3/24-ptcp-jACCEPT

设定预设规则(拒绝所有的数据包,再允许需要的,如只做WEB服务器.还是推荐三个链都是

DROP)

iptables-PINPUTDROP

iptables-PFORWARDDROP

iptables-POUTPUTACCEPT

(注:意直接设置这三条完已经掉线了)

开启22端口

iptables-AINPUT-ptcp--dport22-jACCEPT

如果OUTPUT设置成DROP的,要写上下面一条

iptables-AOUTPUT-ptcp--sport22-jACCEPT

(注:,不写导致无法SSH.其他的端口一样,OUTPUT设置成DROP的话,也要添加一条链)

如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链

iptables-AOUTPUT-ptcp--sport80-jACCEPT

做WEB服务器,开启80端口,其他同理

iptables-AINPUT-ptcp--dport80-jACCEPT

做邮件服务器,开启25,110端口

iptables-AINPUT-ptcp--dport110-jACCEPT

iptables-AINPUT-ptcp--dport25-jACCEPT

允许icmp包通过,允许ping

iptables-AOUTPUT-picmp-jACCEPT(OUTPUT设置成DROP的话)

iptables-AINPUT-picmp-jACCEPT (INPUT设置成DROP的话)

允许loopback!(不然会导致DNS无法正常关闭等问题)

IPTABLES-AINPUT-ilo-pall-jACCEPT(如果是INPUTDROP)

IPTABLES-AOUTPUT-olo-pall-jACCEPT(如果是OUTPUTDROP)

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