iptables之centos6版本详解

1 Linux防火墙概述

Linux防火墙实际指的是Linux下的Netfilter/Iptables。Netfilter/Iptables是2.4.x/2.6.x版本Linux内核集成的IP信息包过滤系统。linux

查看Linux内核版本web

wps_clip_image-31511

 

 

Netfilter/Iptables 信息包过滤系统能够当成一个总体,netfilter是内核的模块实现,iptables是对上层操做工具。浏览器

Netfilter是Linux核心中的一个通用架构,工做于内核空间。安全

Netfilter支持一下方式对数据包进行分类:服务器

  • 源IP地址
  • 目标IP地址
  • 使用接口
  • 使用协议
  • 端口号
  • 链接状态

其提供了一系列的表(tables),每一个表由若干个链(chains)组成,每条链能够由一条或若干条规则(rules)组成,其规则由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。网络

chain的本质是Netfilter定义的不一样过滤点。总共定义了5个过滤点。INPUT,FORWARDING,OUTPUT,PREROUTING,POSTROUTIONG。架构

Table的本质是Netfilter定义的不一样功能的划分。app

filter用于执行基本过滤。ssh

nat是对数据IP进行修改。socket

mangle是对数据包进行高级修改。

不一样的Table只能用于特定的Chain。

 

Iptables 是一个管理内核包过滤的工具,能够用来配置核心包过滤表格中的规则。运行于用户空间。

 

 

1.1 Linux防火墙的应用

Linux防火墙在企业应用中很是有用,举例以下:

  • 中小企业与网吧里有iptables做为企业的NAT路由器,能够用来代替传统路由器,而节约成本。
  • IDC机房通常没有硬件防火墙,IDC机房的服务器能够用Linux防火墙代替硬件防火墙。
  • iptables能够结合squid做为企业内部上网的透明代理。传统代理须要在浏览器里配置代理服务器信息,而iptables+squid的透明代理则能够把客户端的请求重定向到代理服务器的端口。客户端不要做任何设置,而感受不到代理的存在。
  • 将iptables做为企业NAT路由器时,可使用iptables的扩展模块屏蔽P2P流量,还能够禁止非法网页。
  • iptables能够用于外网IP向内网IP映射。
  • iptables能够轻松防止轻量级DOS攻击,好比ping攻击及SYN洪水攻击。

综述,Iptables有两种应用模式:主机防火墙,NAT路由器。

 

 

1.2 iptables的基本组件

1.2.1 规则

规则(rules)是管理员预约义的条件,规则通常的定义为“若是数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工做就是添加、修改和删除这些规则。

 

1.2.2 链

链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中能够有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否知足规则所定义的条件。若是知足,系统就会根据该条规则所定义的方法处理该数据包;不然iptables将继续检查下一条规则,若是该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。

每一个链上都有默认的规则。

  • PREROUTING:数据包进入本机,进入路由器以前。能够用于目标地址转换(DNAT)。
  • INPUT:经过路由表后目的地为本机。
  • FORWARDING:经过路由表后,目的地不为本机。能够用于转发数据。
  • OUTPUT:由本机产生,向外转发。
  • POSTROUTIONG:经过路由表后,发送到网卡接口以前。能够用于转发数据(SNAT,MASQUERADE)

 

1.2.3 表

表(tables)提供特定的功能,iptables有4个表,即raw表、filter表、nat表和mangle表,分别用于实现包过滤,网络地址转换和包重构的功能。表中的规则写在链上。

filter表

主要用于数据报文过滤。该表根据系统管理员预约义的一组规则过滤符合条件的数据包。对于防火墙而言,主要利用在filter表中指定的规则来实现对数据包的过滤。filter表是默认的表,若是没有指定哪一个表,iptables 就默认使用filter表来执行全部命令,filter表包含了INPUT链,RORWARD链,OUTPUT链。在filter表中只能容许对数据包进行接受,丢弃的操做,而没法对数据包进行更改。

 

nat表

主要用于网络地址转换NAT,该表能够实现一对一,一对多,多对多等NAT工做(SNAT,DNAT,PNAT),iptables就是使用该表实现共享上网的,NAT表包含了PREROUTING链,POSTROUTING链,OUTPUT链。

nat规则表拥有 prerouting 和 postrouting 两个规则链,主要功能为进行一对1、一对多、多对多等网址转换工做(SNAT,DNAT),因为转换的特性,需进行目的地网址转换的数据包,就不须要进行来源网址转换,反之亦然,所以为了提高改写封包的效率,在防火墙运做时,每一个封包只会通过这个规则表一次。若是咱们把数据包过滤的规则定义在这个数据表里,将会形成没法对同一包进行屡次比对,所以这个规则表除了做网址转换外,请不要作其它用途。

 

mangle表

主要用做功能修改数据报文的属性。好比TCP报文的6个标志位。在内核版本2.4.18 后的linux版本中该表包含的链为:INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)POSTROUTING链(修改即将出去的数据包),PREROUTING链(修改即将到来的数据包)

mangle表主要用于对指定数据包进行更改,在内核版本2.4.18 后的linux版本中该表包含的链为:INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)POSTROUTING链(修改即将出去的数据包),PREROUTING链(修改即将到来的数据包)。

 

raw表

只使用在PREROUTING链和OUTPUT链上,优先级最高,能够对收到的数据包在链接跟踪前进行处理。一但用户使用了RAW表,在某个链上RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即再也不作地址转换和数据包的连接跟踪处理了。

 

规则表之间的优先顺序:

raw > mangle > nat > filter

wps_clip_image-29165

 

 

 

 

1.3 Linux防火墙基本原理

Linux防火墙的原理主要是对数据包的控制,看下图(如下图片均来自互联网):netfilter五条链相互关系,即iptables数据包转发流程图。

 wps_clip_image-23998

wps_clip_image-21119

(1)数据包进入网卡时,先进入PREROUTING(路由前)链,以后作路由判断数据包应发往何处,本机或其余机器。

(2)若数据包原目标地址是本机的,数据包会前往INPUT链。到达INPUT链后,任何进程都会收到它。

(3)本机程序发送出数据包,数据包会通过OUTPUT链,而后到达POSTROUTING链输出。

(4)若数据包原目标地址非本机,则须要转发出去的,且内核容许转发,数据包前往 FORWARD链,而后到达POSTROUTING(路由后)链输出。

 

Netfilter在五个链上,使用HOOK技术作规则检查。

 

 

1.4 iptables规则执行

iptables执行规则时,是从规则表中从上至下顺序执行的。

若没遇到匹配的规则,就一条一条往下匹配;

若彻底没有匹配的规则,则执行该链上的默认规则;

若遇到匹配的规则,则执行规则,执行后根据本规则的动做(accept,reject,log,drop等),决定下一步执行的状况,后续执行通常有三种状况:

  • 继续执行当前规则队列内的下一条规则。好比执行过Filter队列内的LOG后,还会执行Filter队列内的下一条规则。
  • 停止当前规则队列的执行,转到下一条规则队列。好比从执行过accept后就中断Filter队列内其它规则,跳到nat队列规则去执行。
  • 停止全部规则队列的执行。

image

透过这种机制所带来的好处是,能够进行复杂、多重的封包过滤,简单的说,iptables能够进行纵横交错式的过滤(tables)而非链状过滤(chains)。

 

 

1.5 数据包的状态

包的状态依据IP所包含的协议不一样而不一样,但在内核外部,也就是用户空间里,只有4种 状态:NEW,ESTABLISHED,RELATED 和INVALID。它们主要是和状态匹配一块儿使用。

数据包在用户空间的状态:

  • NEW:表示信息包已经或将启动新的链接,或者它与还没有用于发送和接收信息包的链接相关联。若主机向远程机器发送一个链接请求,这个数据包的状态是NEW。
  • ESTABLISHED:状态指出该信息包属于已创建的链接,该链接一直用于发送和接收信息包而且彻底有效。在链接创建以后(完成TCP的三次握手以后),远程主机和主机通讯数据状态为ESTABLISHED。
  • RELATED:和现有联机相关的新联机封包。像FTP这样的服务,用21端口传送命令,而用20端口(port模式)或其余端口(PASV模式)传送数据。在已有的21端口上创建好链接后发送命令,用20或其余端口传送的数据(FTP-DATA),其状态是RELATED。
  • INVALID:状态指出该信息包与任何已知的流或链接都不相关联,它可能包含错误的数据或头。即无效的数据包,不能被识别属于哪一个链接或没有任何状态,一般这种状态的数据包会被丢弃。

这些状态能够一块儿使用,以便匹配数据包。这可使防火墙很是强壮和有效。

 

 

 

2 iptables实战概述

iptables的实验请尽可能在虚拟机或非远程的系统中操做,避免不当心的误操做可能致使ssh没法使用。

通常来说,iptables防火墙已经内置于CentOS 6及其余Linux版本中,并且iptables服务默认都是启动的。  iptables应用于IPv4, 若是要用IPv6,须要使用ip6tables。

iptables和ip6_tables、arp_tables一同都是建构在Xtables的架构下,这个方案让系统管理员定义“表(tables)”、“链(chain)”、“规则(rules)”三个数据来处理数据包的运送。每个“表”都和不一样的数据包处理有关、决定数据包是否能够穿越的是“链”、而一条“规则”在键里面则能够决定是否送往下一条链(或其它的动做),这个处理能够在嵌套的结构里面重复使用。每个网络数据包从抵达到离开该计算机至少会通过一个链(亦即转送或本机路由)。

查看有没有安装iptables:rpm -qa | grep iptables

wps_clip_image-23702

若机器上安装了man命令。则使用man iptables查看iptables的帮助文档。

 

 

2.1 iptables服务相关

2.1.1 开启iptables服务

service iptables start
#或
/etc/init.d/iptables start

 

2.1.2 关闭iptables服务

service iptables stop
#或
/etc/init.d/iptables stop

 

2.1.3 设置iptables开机时默认启动

#启动时开启
chkconfig iptables on

#启动时关闭
chkconfig iptables off

 

2.1.4 使用setup设置防火墙

在终端运行 setup,选择 firewall 回车。

wps_clip_image-29038

按Tab键切换到Enablede项,而后按空格键选择。而后再按Tab键切换到OK,按空格键或回车键选择。按Tab键切换到quit,退出setup。

wps_clip_image-29243

 

 

 

3 iptables命令

3.1 iptables命令基本语法

iptables [-t table] command [match] [target/jump]

 

-t table

用来指明使用的表,有三种选项: filter,nat,mangle。若未指定,则默认使用filter表。

 

command

指定iptables 对咱们提交的规则要作什么样的操做。命令都都须要以chain做为参数。

  • -P (--policy) 定义默认策略。
  • -L (--list) 查看规则列表。
  • -A (--append) 在规则列表的最后增长规则。
  • -I (--insert) 在指定的位置插入规则。
  • -D (--delete) 从规则列表中删除规则。
  • -R (--replace) 替换规则列表中的某条规则。
  • -F (--flush) 清楚指定的规则。
  • -Z (--zero) 将指定链(如未指定,则认为是全部链)的全部计数器归零。
  • -X (--delete-chain) 删除指定用户自定义链。

 

command 选项

-v, --verbose(详细的)

可用此选项的命令:--list, --append, --insert, --delete, --replace

说明:该选项使输出更详细,常与--list 连用。与--list连用时,输出中包括网络接口的地址、规则的选项、TOS掩码、 字节和包计数器,其中计数器是以K、M、G(这里用的是10的幂而不是2的幂)为单位的。若-v 和--append、--insert、--delete 或--replace连用,iptables会输出详细的信息告诉你规则是如何被解释的、是否正确地插入等等。

-x, --exact(精确的)

可用此选项的命令:--list

说明:使--list输出中的计数器显示准确的数值,而不用K、M、G等估值。

-n, --numeric(数值)

可用此选项的命令:--list

说明:使输出中的IP地址和端口以数值的形式显示,而不是默认的名字,好比主机名、网络名、程序名等。

--line-numbers

可用此选项的命令:--list

说明:该选项的做用是显示出每条规则在相应链中的序号。对插入新规则颇有用。

-c, --set-counters

可用此选项的命令:--insert, --append, --replace

说明:在建立或更改规则时设置计数器,语法以下:--set-counters 20 4000,意思是让内核把包计数器设为20,把字节计数器设为4000。

--modprobe

可用此选项的命令:All

说明:此选项告诉iptables探测并装载要使用的模块。这是很是有用的一个选项,若modprobe命令不在搜索路径中,就要用到了。有了这个选项, 在装载模块时,即便有一个须要用到的模块没装载上,iptables也知道要去搜索。

 

matches 匹配

匹配选项指定数据包与规则匹配所具备的特征,包括源地址,目的地址,传输协议和端口号,以下所示:

[-i|o 网卡名称]

说明:

-i --in-interface    网络接口名     指定数据包从哪一个网络接口进入。

-o --out-interface   网络接口名     指定数据包从哪一个网络接口输出。

[-p 协议类型]

-p ---proto          协议类型        指定数据包匹配的协议,如TCP、UDP和ICMP等

[-s 源IP地址|源子网]

-s --source          源地址或子网   指定数据包匹配的源地址

[--sport 源端口号]

--sport           源端口号       指定数据包匹配的源端口号

[-d 目标IP地址|目标子网]

-s --source          目标地址或子网   指定数据包匹配的目标地址

[--dport 目标端口号]

--dport           目的端口号    指定数据包匹配的目的端口号

[-m 模块]

-m --match           匹配的模块      指定数据包规则所使用的过滤模块

 

Targets/Jumps

target/jump决定符合条件的包到何处去,语法是--jump target或-j target。

target能够被细分为两类,Target和Jump。

  • jump的目标是一个在同一个表内的链。
  • target的目标是具体的操做。

target指定要对包作的操做,好比DROP和ACCEPT。不一样的target有不一样的结果。一些target会使包中止前进,也就是再也不继续比较当前链中的其余规则或父链中的其余规则。而另一些target在对包作完操做以后,包还会继续和其余的规则比较,如LOG,ULOG和TOS。它们会对包进行记录,而后让包经过,以便匹配这条链中的其余规则。有了这样的target,就能够对同一个包既改变它的TTL又改变它的TOS。有些target必需要有准确的参数(如TOS须要肯定的数值),有些就不是必须的,但若是咱们想指定也能够(如日志的前缀,假装使用的端口,等等)。

 

经常使用Target简述

ACCEPT

当包知足了指定的匹配条件,就会被ACCEPT,容许包前往下一个目的地。不会再去匹配当前链中的其余规则或同一个表内的其余规则,但包还要经过其余表中的链,可能会被DROP。

DROP

当信息包与具备DROP目标的规则彻底匹配时,会阻塞该信息包,而且不对它作进一步处理。该目标被指定为-j DROP。

若包符合条件,该target就会将target丢掉,也就是说包的生命到此结束,效果就是包被阻塞了。

在某些状况下,这个target会引发意外的结果,由于它不会向发送者返回任何信 息,也不会向路由器返回信息,这就可能会使链接的另外一方的sockets因苦等回音而亡:) 解决这个问题的较 好的办法是使用REJECT target,(译者注:由于它在丢弃包的同时还会向发送者返 回一个错误信息,这样另外一方就能正常结束),尤为是在阻止端口扫描工具得到更多的信息时,能够隐蔽被 过滤掉的端口等等(译者注:由于扫描工具扫描一个端口时,若是没有返回信息,通常会认为端口未打开或 被防火墙等设备过滤掉了)。还要注意若是包在子链中被DROP了,那么它在主链里也不会再继续前进,无论 是在当前的表仍是在其余表里。总之,包死翘翘了。

REJECT

REJECT和DROP基本同样,区别在于它除了阻塞包以外, 还向发送者返回错误信息。target还只能用在INPUT、FORWARD、OUTPUT和它们的子链里,并且包含 REJECT的链也只能被它们调用,不然不能发挥做用。它只有一个选项,是用来控制 返回的错误信息的种类的。虽然有不少种类,但若是你有TCP/IP方面的基础知识,就很容易理解它们。

拦阻该数据包,并返回数据包通知对方,能够返回的数据包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(这个数据包包会要求对方关闭联机),进行完此处理动做后,将再也不比对其它规则,直接中断过滤程序。 范例以下:

iptables -A  INPUT -p TCP --dport 22 -j REJECT --reject-with ICMP echo-reply

RETURN

在规则中设置的RETURN目标让与该规则匹配的信息包中止遍历包含该规则的链。若是链是如INPUT之类的主链,则使用该链的默认策略处理信息包。它被指定为-jump RETURN。

结束在目前规则链中的过滤程序,返回主规则链继续过滤,若是把自订规则炼当作是一个子程序,那么这个动做,就至关于提前结束子程序并返回到主程序中。

REDIRECT

将封包从新导向到另外一个端口(PNAT),进行完此处理动做后,将会继续比对其它规则。这个功能能够用来实做透明代理或用来保护web服务器。

例如:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT--to-ports 8081

LOG

将数据包相关信息纪录在 /var/log 中,详细位置请查阅 /etc/syslog.conf 配置文件,进行完此处理动做后,将会继续比对其它规则。

例如:

iptables -A INPUT -p tcp -j LOG --log-prefix "input packet"

MASQUERADE

改写封包来源IP为防火墙的IP,能够指定port 对应的范围,进行完此处理动做后,直接跳往下一个规则链(mangle:postrouting)。这个功能与 SNAT 略有不一样,当进行IP 假装时,不需指定要假装成哪一个 IP,IP 会从网卡直接读取,当使用拨接连线时,IP 一般是由 ISP 公司的 DHCP服务器指派的,这个时候 MASQUERADE 特别有用。

例如:iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 21000-31000

 

SNAT

改写封包来源 IP 为某特定 IP 或 IP 范围,能够指定 port 对应的范围,进行完此处理动做后,将直接跳往下一个规则炼(mangle:postrouting)。

例如:iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 192.168.10.15-192.168.10.160:2100-3200

DNAT

改写数据包包目的地 IP 为某特定 IP 或 IP 范围,能够指定 port 对应的范围,进行完此处理动做后,将会直接跳往下一个规则链(filter:input 或 filter:forward)。

例如:iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.10.1-192.168.10.10:80-100

MIRROR

镜像数据包,也就是未来源 IP与目的地IP对调后,将数据包返回,进行完此处理动做后,将会中断过滤程序。

QUEUE

中断过滤程序,将封包放入队列,交给其它程序处理。透过自行开发的处理程序,能够进行其它应用,例如:计算联机费用.......等。

MARK

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

例如:iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 22

 

 

3.2 iptables服务与保存的永久生效

iptables做为Linux的基础服务,默认启动。

查看iptables服务的状态

命令:service iptables status

 

重启iptables状态

命令:service iptables restart

 

使用iptables命令只能使规则临时生效。

若是须要永久生效,则要保存.写入到/etc/sysconfig/iptables文件里.

/etc/rc.d/init.d/iptables save

iptables规则文件保存在/etc/sysconfig/iptables中。

写入后记得把防火墙重起一下,才能起做用。

 

 

 

 

 

 

 

4 Linux下iptables配置

4.1 清除原有规则

无论你在安装linux时是否启动了防火墙,若是你想配置属于本身的防火墙,那就清除如今filter的全部规则.

iptables -F       #清除预设表filter中的全部规则链的规则。 
iptables -X       #清除预设表filter中使用者自定链中的规则。
iptables –Z       #数据包计数器归零。

 

例:查看本机关于IPTABLES的设置状况:iptables -L -n

wps_clip_image-26566

默认显示filter表的状况,因此显示了INPUT,FORWARD,OUTPUT链上的规则情形。

 

例:查看nat表上的规则:iptables -t nat -L

image

 

 

4.2 配置默认策略

设置默认策略:关闭filter表的INPUT链、FORWARD链,开启OUTPUT链。

iptables -P INPUT DROP
iptables –P OUTPUT ACCEPT
iptables –P FORWARD DROP

 

 

4.3 针对IP,网络接口,协议的过滤规则

远程SSH登录。容许tcp协议,开启22端口。

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

若把OUTPUT设置成DROP,则须要使用以下规则:

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

 

WEB服务器,开启80端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

 

若OUTPUT设置成DROP的话,则须要使用以下规则,其余同理。

iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

 

邮件服务器端口配置

复制代码
smtp:  
iptables -A FORWARD -p tcp --dport 25 -j ACCEPT


#pop3: 
iptables -A FORWARD -p tcp --dport 110 -j ACCEPT  
iptables -A FORWARD -p udp --dport 110 -j ACCEPT


#imap: 
iptables -A FORWARD -p tcp --dport 143 -j ACCEPT
iptables -A FORWARD -p udp --dport 143 -j ACCEPT


imaps:  
iptables -A FORWARD -p tcp --dport 993 -j ACCEPT  
iptables -A FORWARD -p udp --dport 993 -j ACCEPT


pop3s:
iptables -A FORWARD -p tcp --dport 995 -j ACCEPT
iptables -A FORWARD -p udp --dport 995 -j ACCEPT
复制代码

 

FTP服务器,开启21端口

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT

 

DNS服务器,开启53端口

iptables -A INPUT -p tcp --dport 53 -j ACCEPT

 

容许ping,即容许icmp包经过

iptables -A INPUT -p icmp -j ACCEPT     #若INPUT设置成DROP
iptables -A OUTPUT -p icmp -j ACCEPT  #若OUTPUT设置成DROP

 

容许loopback,通常系统都须要容许回环。不然可能致使一些问题。如DNS没法正常关闭。

IPTABLES -A INPUT -i lo -p all -j ACCEPT

 

若把OUTPUT设置成DROP,则须要使用以下规则:

IPTABLES -A OUTPUT -o lo -p all -j ACCEPT

 

减小不安全的端口链接

iptables -A OUTPUT -p tcp --sport 31337 -j DROP
iptables -A OUTPUT -p tcp --dport 31337 -j DROP 

有些木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通讯,阻塞这些端口可以有效地减小网络上可能被感染的机器和它们的远程主服务器进行独立通讯的机会。

 

sshd的端口为22,若系统直接开放22端口,那么Internet上全部主机均可以链接Linux,这样不安全。更好的方法是,仅容许某个范围的IP或某个指定ip,且某范围的端口的主机能够链接主机,其余IP所有拒绝:

iptables –A INPUT –i ppp0 –p tcp –s 222.91.99.0/28 –-sport 1024:65536 –dport 22 –j ACCEPT
iptables –A INPUT –i ppp0 –p tcp –dport 22 –j DROP

 

 说明:1024:65535 表示端口范围是1024至65535,包括两端的端口在内。

 

以上作法保证了必定的安全性。但因为非法的数据包会被阻塞,所以某些端口扫描工具会提示“该计算机处于防火墙保护状态“,这也是不安全的。要欺骗这些工具,可使用以下规则:

iptables –A INPUT –i ppp0 –p tcp –s 222.91.99.0/28 –-sport 1024:65536 –dport 22 –j ACCEPT
iptables –A INPUT –i ppp0 –p tcp –dport 22 –j REJECT –reject-with tcp-reset

 

这样的规则,当非法链接服务器时,会发出tcp-reset的请求,这个封包会要求对方关闭链接。这样,服务器会更加安全。

 

只容许192.168.0.3的机器进行SSH链接

iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT

 

若要容许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的全部IP。

要记得把 /etc/sysconfig/iptables 里的这一行删了.

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

这一行表示全部地址均可以登录。

或采用命令方式:

iptables -D INPUT -p tcp --dport 22 -j ACCEPT
复制代码
说明:
192.168.0.1/24
24的意思就是说子网掩码中表示网络的二进制位数是24位。
即: 11111111.11111111.11111111.00000000
也就是24个1。变成十进制就是:255.255.255.0

子网掩码的意义
把IP(192.168.0.1)转换为二进制数,即:11000000.10101000.00000000.00000001
将IP和子网掩码作与运算得:11000000.10101000.00000000.00000000
再变成十进制数得:192.168.0.0
这个就是192.168.0.1这个IP所属的网络地址,也能够说192.168.0.1在192.168.0.0这个网段内。
复制代码
技巧:!表示not。
例:!192.168.0.3 表示除了192.168.0.3的ip地址
其余的规则链接也同样这么设置.

 

 

例:某Linux系统,做为ADSL上网的代理服务器,同时运行WWW服务,有两个网络接口,eth0链接局域网,ppp0是ADSL上网的Internet网络接口,添加以下规则。

容许局域网内192.168.60.24/24的全部主机访问代理服务器,除了192.168.60.3这台主机:

iptables –A INPUT –i eth0 –s 192.168.60.3 –j DROP
iptables –A INPUT –i eth0 –s 192.168.0/24 –j ACCEPT

注意:两个规则的顺序不能反。

 

例:让Linux代理服务器接受全部的来源不是网络接口ppp0的数据,即仅容许了局域网的访问,局域网的全部主机不能访问Internet

iptables –A input –i !ppp0 –j ACCEPT

 

 

4.4 根据数据状态模块的修改

容许全部已经创建的和相关的链接 

iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 

DROP非法链接

iptables -A INPUT     -m state --state INVALID -j DROP  
iptables -A OUTPUT    -m state --state INVALID -j DROP  
iptables-A FORWARD -m state --state INVALID -j DROP

 

丢弃坏的TCP包

iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP

 

处理IP碎片数量,防止攻击,容许每秒100个

iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

 

设置ICMP包过滤,容许每秒1个包,限制触发条件是10个包.

iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

 

 

 

4.5 设置NAT表

如图显示外网映射原理:

wps_clip_image-32437

清除nat表中的规则

iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat

 

例:将代理服务器80端口重定向到8009端口,设置规则以下:

iptable –t nat –A PREROUTING –p tcp –dport 80 –j REDIRECT –to-ports 8009

 

例:内网机器对外发布WEB网站 

内网WEB服务器IP地址为192.168.0.3,当公网客户端访问服务器时,防火墙将请求映射到内网的192.168.0.3的80端口

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.3:80

 

例:禁止与211.101.46.253的全部链接

iptables -t nat -A PREROUTING   -d 211.101.46.253 -j DROP

 

例:禁用FTP端口

iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP

 

只禁用211.101.46.253地址的FTP链接,其余链接还能够.如web(80端口)链接。

iptables -t nat -A PREROUTING   -p tcp --dport 21 -d 211.101.46.253 -j DROP
相关文章
相关标签/搜索