版权归原作者所有,原始出处:
http://ciscor.blog.51cto.com/117461/116327

   安全,在网络中一直是一个亘古不变的话题。只有网络存在就会存在安全问题,你就会面临被***的风险。在Linux2.4内核之后使用iptables/netfilter网络架构实现报过滤的防火墙。在一定程度上取代硬件防火墙的常用功能,打造一个安全的网络环境

 

    所谓“包过滤”技术,也就是通过匹配数据的“五元组”—源ip、目的ip、源port、目的port和协议(ip,tcp,udp,icmp等)。一般的网络防火墙也就是通过对这些数据进行匹配,来保证内网安全的。

   iptables与netfilter

一、首先要明确这两个概念:

1.linux的防火墙是linux的内核实现的,而不是系统中的服务程序实现的,linux的内核是使用netfilter架构实现这个功能的。

2.iptables只是netfilter的管理工具而已。通过对iptables的管理来实现防火墙的策略。

二、iptables中的“三项纪律”和“五大注意”

 

1.三项纪律:nat filter以及mangle

2.五大注意:PREROUTING、FORWARD、POSTROUTING、INPUT、OUTPUT

  其框架图如下:

——–PREROUTING—→[ROUTING]—->FORWARD—–→POSTROUTING

         
mangle    |              
mangle           ↑
mangle

           
nat     |              
filter            |  
nat 

                    |                                 |

                    ↓                                |

                  INPUT                           OUTPUT

                    |  
mangle                       | 
mangle

                    ↓ 
filter                       | 
nat
filter

                    |————→Local———–→|

 其中filter、nat、mangel为规则表,其他五个为规则链。其中规则包含在链中,而规则链包含在规则表中。nat针对地址转换、filter针对包过滤(用得最多的也就是它了)、mangel针对策略路由和流量×××(有点QOS的味道),规则链的分配如下:

    * filter:INPUT、FORWARD、OUTPUT

    * nat   :PREROUTING、POSTROUTING、OUTPUT

    * mangel:PREROUTING、POSTROUTING、OUTPUT、INPUT、FORWARD


三、iptables的语法以及命令概述

1.iptables [-t 表] <操作命令>[规则号码][匹配条件][-j执行动作]

2.操作命令为A、D、I、R、P、F、Z

-A:追加一条规则   -D:删除规则     -I:插入规则号码  -N:修改表名

-R:替代一条规则   -P:设置默认规则 -F:清空规则  -Z:计数归零

 

3.查看-[vnx]L

 

v:详细信息   n:显示ip地址以及端口号  x:在v的基础上禁止单位换算(k)

  -L 以列表的形式显示出来

4.匹配条件

 

-i:流入接口   -o:流出接口   -s:源地址  -d:目的地址  -m 匹配

–sport:源端口     –dport:目的端口   -p:协议( 注意是小写哦)

5.处理动作

ACCEPT: 允许(相当于cisco-acl中的permit)


REJECT: 拒绝(相当于cisco-acl中的deny)


DNAT  : 目的地址转换与PREROUTING表、-i结合使用


SNAT  : 源地址转换与POSTROUTING表、-o结合使用


MASQUERADE:源地址伪装

5.附加模块(一定要跟-m结合使用)

state:按包状态匹配


limit:按包速率匹配(可以防止SYN FLOOD跟DOS***哦)


mac  :按mac地址匹配(这个用得不多)


multicport:按照多端口匹配


四、实例分析

1.单服务器的防护(以www服务器为例)

一定要保存,记得用-vnL look look查看啊!

    * iptables -A INPUT -i l0 -j ACCEPT

    * iptables -A INPUT -p tcp -m multiports –dports 22,80 -j ACCEPT

    * iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT

    * iptables -P DROP

    * iptables-save

2.做网关服务器

a.记得弄清楚网络拓扑(内网以192.168.1.0/24为例)

b.本机上网

c.设置nat(启用nat,实现MASQUERADE ip伪装)

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

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE

 

3.限制内网访问

iptables -A FORWARD -s 192.168.1.100 -j DROP

iptables -A FORWARD -m mac mac-source 11-22-33-44-55 -j DROP

iptables -A FORWARD -d
[url]www.sex.com [/url] -j REJECT

4.内网做对外服务器

 

iptables -t nat -A PREROUTING -i ppp0 -p tcp –dport 80 -j DNAT –to 192.168.1.1

iptables -t nat -A PREROUTING -i ppp0 -p tcp –dport 81 -j DNAT –to 192.168.1.2:80

其中80为真正的服务端口,192.168.1.0/24为内网地址 ppp0为外网接口。

5.预防SYN flood以及DDOS

iptables -A INPUT -i ppp0 -p tcp –tcp-flags ! FIN SYN,ACK SYN -m limit ! –limit  100/s -j ACCEPT

iptables -A INPUT -i ppp0 -p tcp -j DROP

  以每秒超过了100个SYN位为1的包,而ACK为0,就进行drop,记得limit后面一定要加条drop命令 !为取反的意思

五.注意的相关问题

1.注意语句的执行顺序

2.常用iptables -nvxL 查看

3.一定要区分匹配什么?怎样去执行?

4.还有就是默认的执行动作是什么?

5.注意链与表的选取

6.表名必须小写、动作跟链名称要大写、匹配一律小写