linux 防火墙-iptables-netfilter

iptables : 对ip层报文进行改写

ebtables: 对二层报文进行改写

详解(1):入门简介

1、iptables(包括netfilter)组成Linux平台下的包过滤防火墙,且是免费的,可以代替昂贵的商业防火墙解决方案,完成包过

滤、封包重定向、NAT等功能

2、iptables主要对 5链(PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING)、

                             4表(filter、nat、mangle、raw)进行处理

详解(2):查询

1、iptables -nvL --line-numer INPUT -t filter 

     注:查询INPUT链上的filter表的配置规则(如果不指定表,则默认是查询filter表)

详解(3):简单规则配置

1、iptables -t filter -I INPUT -s 192.168.1.146 -j DROP

     注:对进入INPUT链,源地址为192.168.1.146的报文进行丢弃处理

2、service iptables save

     注:表示将规则保存至/etc/sysconfig/iptables文件中

详解(4):扩展规则配置

1、iptables -t filter -I INPUT -s 192.168.1.146,192.168.1.146 -j DROP

     注:应用逗号匹配更多源地址

2、-p   指定协议号

     -i    指定入接口

     -o   指定出接口

3、基于端口号匹配

     --sport  --dport,设置基于端口号匹配,当然先需要使用-p指定是tcp、还是udp协议,并同时设置-m模块

     muiltport 选项可以同时指定多个端口

详解(5):扩展规则配置:常用扩展模块

1、iprange         指定ip地址范围

2、string            指定报文中的内容

3、time              指定时间段

4、connlimit      指定链接数量,可以限制每个IP地址同时链接到server端的链接数量

5、limit              类似于connlimit扩展模块,指定单位时间内的某条流的个数

详解(6):扩展规则配置:--tcp-flags

1、--tcp-flags: 指定tcp报文中的flags中的六个字段(SYN ACK FIN RST UGR PSH)进行匹配处理

     iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT

     拒绝tcp第一次握手报文,即新建链接的报文(匹配所有标志位,其中SYN为1,其他标志位为0)

2、SYN,ACK,FIN,RST,URG,PSH 也可以用ALL代替

3、第一个握手报文匹配使用较多,iptables提供了简化版:SYN,ACK,FIN,RST,URG,PSH SYN可以用--syn代替

详解(7):扩展规则配置:udp、icmp

1、udp扩展 : 即是对udp端口号进行处理

2、icmp扩展:--icmp-type指定具体的icmp报文,如ping请求包(echo-request)、ping响应包(echo-reply)等

     iptables -t filter -I INPUT -p icmp --icmp-type "echo-request" -j REJECT 

     注:拒绝ping请求包

详解(8):扩展规则配置:state

1、针对报文的状态(包括udp、icmp,udp居然也有链接状态的说法),主要应用于黑客的恶意攻击

     对于state模块而言,“链接”其中的报文可以分为5种状态:NEW、ESTABLISHED、RELATED、INVALID、UNTRACKED

     iptables -t filter -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

     注:只同意响应包通过,即主动发起的请求报文将被丢弃

详解(9):黑白名单

1、黑名单:处理动作为DROP、REJECT,此时链的默认策略为ACCEPT(不然全不过)

2、白名单:处理动作为ACCEPT,此时链的默认策略为DROP(不然全过)

     比较理想的设置如下:

     iptables -P INPUT ACCEPT     ## 设置默认策略

     .........                                        ## 增加黑名单

     iptables -A INPUT -j REJECT   ## 没有匹配上的报文全拒绝

     这样配置即实现了对报文的严格控制,又实现了因为执行iptables -F导致所有报文不通(管理员自己都登陆不上)

详解(10):自定义链

1、实际应用中,规则太多,一个链中可能存在上百条规则,如果我们想修改某条规则,需要在上百条规则中查询,很繁琐

     所以iptables提供了自定义链的方式,即可以把某类规则存储到自定义链中进行归类处理

     iptables -t filter -N IN_WEB                                             ##  在filter表中创建IN_WEB自定义链

     iptables -I IN_WEB -s 192.168.1.188 -j REJECT                ##  在自定义链中添加规则(同默认链)

     iptables -t filter -I INPUT -p tcp --dport 80 -j IN_WEB   ##  在INPUT链中通过-j选项引用刚才创建的自定义链(即自定

义链需要通过默认链挂接)

详解(11):网络防火墙

1、开启iptables转发功能

2、使用白名单机制,先添加一条默认拒绝的规则,然后再为需要放行的报文设置规则

3、配置规则时,需要考虑方向问题,即请求方向、响应方向

4、可以使用state模块进行优化

详解(12):处理动作总结一

1、常用动作有ACCEPT、DROP、REJECT,还可以通过--reject-with选项设置拒绝原因

2、-j LOG 可以记录匹配到报文到/var/log/message中

详解(13):处理动作总结二

1、 处理动作还有:SNAT、DNAT、MASQUERADE、REDIRECT

2、 SNAT:内网访问外网时,防火墙将所有内网IP替换为防火墙自身设备的公网IP(根据源IP+端口号方式)

      DNAT:外网访问内网多个服务器时,防火墙将所有外网IP替换为防火墙自身设备的公网IP

      其实,不管是SNAT还是DNAT,都起到了隐藏了内部主机IP的作用

3、iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 192.168.1.146

     注:将进入POSTROUTING链的报文源地址为 10.1.0.0/16 修改为 192.168.1.146

     SNAT规则只存在于POSTROUTING链、INPUT链中,因为POSTROUTING链是报文转发的最后一个关卡,我们应该在报文发

     去之前修改源地址,否则就再也没有机会修改源地址了,那在PREROUTING等其他链中修改是否可以呢?

4、iptables -t nat  -I PREROUTING -d 192.168.1.146 -p tcp --dport 3389 -j DNAT --to-destination 10.1.0.6:3389

     注:将进入PREROUTING链的报文源地址为 10.1.0.0/16 端口号为3389的tcp报文修改为目的地址为  10.1.0.6:3389

     DNAT规则只存在于PREROUTING、OUTPUT链中,如果不在PREROUTING中修改目的地址,报文就会进入路由层面,进行

     了路由转发

5、-j MASOUERADE 可以动态的将源地址转换为可用的IP地址

     iptables -t nat -I POSTROUTING -s 10.1.0.0/16 -o eth1 -j MASOUERADE

     注: 将进入POSTROUTING链中报文源地址为 10.1.0.0/16 修改为eth1接口的地址(所以无论eth1地址如何变化,不用再重

     新修改规则)

6、-j REDIRECT可以在本机上进行端口映射

     iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

     注:其他机器访问本机的80端口时,会被重定向到8080端口    

参考文档:

iptables 详解系列(1~14):   http://www.zsythink.net/archives/1199

Netfilter学习笔记:                  http://blog.csdn.net/langeldep/article/details/8788360


猜你喜欢

转载自blog.csdn.net/u014279330/article/details/79893265