为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处。LaplaceDemon/SJQ。

http://www.cnblogs.com/shijiaqi1066/p/3812510.html

1 Linux防火墙概述

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

查看Linux内核版本

Netfilter/Iptables 信息包过滤系统可以当成一个整体,netfilter是内核的模块实现,iptables是对上层操作工具。

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

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

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

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

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

Table的本质是Netfilter定义的不同功能的划分。

filter用于执行基本过滤。

nat是对数据IP进行修改。

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 两个规则链,主要功能为进行一对一、一对多、多对多等网址转换工作(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

1.3 Linux防火墙基本原理

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

(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队列规则去执行。
  • 中止所有规则队列的执行。

透过这种机制所带来的好处是,可以进行复杂、多重的封包过滤,简单的说,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

若机器上安装了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 回车。

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

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

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

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

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  -j ACCEPT

若把OUTPUT设置成DROP,则需要使用如下规则:

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

WEB服务器,开启80端口

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

若OUTPUT设置成DROP的话,则需要使用如下规则,其他同理。

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

邮件服务器端口配置

smtp:
iptables -A FORWARD -p tcp --dport -j ACCEPT #pop3:
iptables -A FORWARD -p tcp --dport -j ACCEPT
iptables -A FORWARD -p udp --dport -j ACCEPT #imap:
iptables -A FORWARD -p tcp --dport -j ACCEPT
iptables -A FORWARD -p udp --dport -j ACCEPT imaps:
iptables -A FORWARD -p tcp --dport -j ACCEPT
iptables -A FORWARD -p udp --dport -j ACCEPT pop3s:
iptables -A FORWARD -p tcp --dport -j ACCEPT
iptables -A FORWARD -p udp --dport -j ACCEPT

FTP服务器,开启21端口

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

DNS服务器,开启53端口

iptables -A INPUT -p tcp --dport  -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  -j DROP
iptables -A OUTPUT -p tcp --dport -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/ –-sport : –dport  –j ACCEPT
iptables –A INPUT –i ppp0 –p tcp –dport –j DROP

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

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

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

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

只允许192.168.0.3的机器进行SSH连接

iptables -A INPUT -s 192.168.0.3 -p tcp --dport  -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  -j ACCEPT
说明:
192.168.0.1/
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./ –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 /s --limit-burst  -j ACCEPT

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

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

4.5 设置NAT表

如图显示外网映射原理:

清除nat表中的规则

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

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

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

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

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

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

例:禁止与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  -j DROP

只禁用211.101.46.253地址的FTP连接,其他连接还可以.如web(80端口)连接。

iptables -t nat -A PREROUTING   -p tcp --dport  -d 211.101.46.253 -j DROP

参考资料:

http://linux.chinaitlab.com/man/network/iptables-tutorial-cn-1.1.19.html#prelude

http://blog.csdn.net/sealyao/article/details/5934268

http://3592063.blog.51cto.com/3582063/1419801

http://467754239.blog.51cto.com/4878013/1424720

http://467754239.blog.51cto.com/4878013/1424720

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处。LaplaceDemon/SJQ。

http://www.cnblogs.com/shijiaqi1066/p/3812510.html

iptables学习笔记的更多相关文章

  1. Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]

     Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...

  2. Linux下iptables学习笔记

    Linux下iptables学习笔记 在Centos7版本之后,防火墙应用已经由从前的iptables转变为firewall这款应用了.但是,当今绝大多数的Linux版本(特别是企业中)还是使用的6. ...

  3. 【转】IPtables学习笔记

    写在前面,大家测试玩iptables时要记得自己配置了那些东西,测试完成后记得删除啊,博主忘了删除一个input REJECT链的一条记录,后续测试搭建了apache服务器,始终无法访问,最后抓包发现 ...

  4. iptables学习笔记_____摘自朱双印个人日志 ____http://www.zsythink.net/

    iptables为我们预先定义了四张表 raw.mangle.nat.filter filter表负责过滤:允许那些ip访问.拒绝那些ip访问.允许那些端口...是最常用的表 #查看表里面所有的规则i ...

  5. iptables 学习笔记

    1. 安装iptables yum install iptables centos7: yum install -y iptables-services 2. service命令 查看iptables ...

  6. Linux学习笔记之iptables学习笔记

    iptables系列学习推荐: http://www.zsythink.net/archives/category/%e8%bf%90%e7%bb%b4%e7%9b%b8%e5%85%b3/iptab ...

  7. Linux防火墙iptables学习

    http://blog.chinaunix.net/uid-9950859-id-98277.html 要在网上传输的数据会被分成许多小的数据包,我们一旦接通了网络,会有很多数据包进入,离开,或者经过 ...

  8. Hadoop学习笔记—22.Hadoop2.x环境搭建与配置

    自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...

  9. Hadoop入门学习笔记---part1

    随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...

随机推荐

  1. 【HDU1538】A Puzzle for Pirates(经典的海盗问题)

    [题目] Description A bunch of pirates have gotten their hands on a hoard of gold pieces and wish to di ...

  2. 树莓派学习路程No.1 GPIO功能初识 wiringPi安装

    WiringPi是应用于树莓派平台的GPIO控制库函数,WiringPi遵守GUN Lv3.wiringPi使用C或者C++开发并且可以被其他语言包转,例如python.ruby或者PHP等.Wiri ...

  3. 计算字符串的最长回文子串 :Manacher算法介绍

    转自: http://www.open-open.com/lib/view/open1419150233417.html Manacher算法 在介绍算法之前,首先介绍一下什么是回文串,所谓回文串,简 ...

  4. mysql 海量数据的存储和访问解决方案

    第1章  引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互 联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的 ...

  5. 14.6.3.3 Making the Buffer Pool Scan Resistant

    14.6.3.3 Making the Buffer Pool Scan Resistant 相比使用一个严格的LRU算法,InnoDB 使用一个技术来最小化数据总量 带入到buffer pool 而 ...

  6. HDOJ/HDU 2552 三足鼎立(tan()和atan()方法)

    Problem Description MCA山中人才辈出,洞悉外界战火纷纷,山中各路豪杰决定出山拯救百姓于水火,曾以题数扫全场的威士忌,曾经高数九十九的天外来客,曾以一剑铸十年的亦纷菲,歃血为盟,盘 ...

  7. Java---网络蜘蛛-网页邮箱抓取器~源码

    刚刚学完Socket,迫不及待的做了这个网页邮箱抓取~~~ 现在有越来越多的人热衷于做网络爬虫(网络蜘蛛),也有越来越多的地方需要网络爬虫,比如搜索引擎.资讯采集.舆情监测等等,诸如此类.网络爬虫涉及 ...

  8. 排序Tip

    排序算法   所有排序算法汇总:http://en.wikipedia.org/wiki/Sort_algorithm counting sort 资料 :http://www.cs.miami.ed ...

  9. Ethernet & IEEE 802.3 802.X 802.1ag-MEP

    ISO/IEC 7498标准,它定义了网络互联的7层框架,也就是开放式系统互连参考模型(OSI模型). 交换机好比是邻近的街道,而路由器则是街道的交汇点. (交换机第二层,即数据链路层,也有四层,七层 ...

  10. Matlab编程-矩阵函数

    (1) are函数 功能:求解Riccati方程的解 Riccati方程的一般形式:A^TX+XA-XBX+C=0 (2)blkdiag函数 函数功能:a=blkdiag(a1,a2,a3,…)表示生 ...