iptables 原理及应用

来源:互联网 发布:手机加水印软件 编辑:程序博客网 时间:2024/05/19 13:08
一原理:

1.什么是iptables?
常见于linux系统下的应用层防火墙工具

2.什么是netfilter
netfillter是linux操作系统核心层内部的一个数据包处理模块

什么是Hook point
数据包在netfilter中的挂载点
(pre_routing,input,output,forward,post_routing)

数据包,通过网络层,流经内核的时候 ,系统内核会在处理网络层上数据包的存在5个挂载点,对数据包进行相应处理

3.iptable 与netfilter关系


其实iptables只是Linux防火墙的管理工具而已,真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构

4.iptable规则组成
四张表+五条链(hook point)+规则

 表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。

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

filter表——三个链:INPUT、FORWARD、OUTPUT
作用:过滤数据包  内核模块:iptables_filter.
Nat表——三个链:PREROUTING、POSTROUTING、OUTPUT
作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat

5.数据包在表与链的流程
① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。 
② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。 
③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。


6.规则组成
数据包访问控制:ACCEPT,DROP,REJECT
数据包改写:SNAT,DNAT
信息纪录:LOG

table
-t<表>:指定要操纵的表;
command
-A:向规则链中添加规则;
-D:从规则链中删除规则;
-L:显示规则链中已有的规则;
-F:清楚规则链中已有的规则;
-P:定义规则链中的默认规则
-I:向规则链中插入条目;
-R:替换规则链中的规则;

chain(5条链)
INPUT
FORWARD
OUTPUT
PREROUTING
POSTROUTING

Paramenter & Xmatch
-p tcp 表示用tc协议,-p表协议
-s 源
-d 目标
-i 设备名 lo
--sport 源端口
--dport 目标端口
--dprots 目标端口段
-m tcp -m是补充
status
multiport



target 动作
-j ACCEPT 允许通过
DROP 丢弃
REJECT 丢弃,有消息返回
DNAT
SNAT

7.场景练习
(1)对所有的地址开放本机的的tcp(80,22,10-21)端口访问
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 10:21 -j ACCEPT

iptables -D INPUT -p tcp --dport 80 -j ACCEPT(删除)

(2)允许所有的地址开放本机的基于ICMP协议的数据包访问(ping的通)
iptables -A INPUT -p icmp -j ACCEPT

(3)其他未被允许的端口则禁止访问
iptables -A INPUT -j EJECT

场景一、存在的问题
1、本机无法访问本机
iptables -I INPUT -i lo -j ACCEPT(允许数据包通过lo地址访问)
2、本机无法访问其他主机
允许本地主机访问其他主机(如curl curl http://www.baidu.com)
iptable -I input -m state --state ESTABLISHED,REPLATED -j ACCEPT




补充:在场景一的基础上,修改只允许192.168.1.1的主机访问httpd服务
iptables -I INPUT -p tcp -s 192.168.1.1 --dport 80 -j ACCEPT

8.场景二
(1)ftp主动模式下iptables的规则配置
vsftpd服务支持主动模式需要注意配置选项
port_enabled=yes
connect_from_port_20=YES

iptables需要开启21端口的访问权限
iptables -I INPUT -p tcp -dport 21 -j ACCEPT


(2)ftp被动模式下iptables的规则配置 



iptables需要开启21端口的访问权限
iptables -I INPUT -p tcp --dport 21 -j ACCEPT

vim /etc/vsftpd/vsftpd.conf
pasv_max_port=60000
pasv_min_port=50000

通过相应数据传送端口
iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT


10场景三(防止cc攻击)
connlimit模块
作用:用于限制每一个客户端ip的并发连接数
-connlimit-above nubmber #限制并发的个数
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT

limit 模块
限速,控制流量
iptables -A INPUT -m limit --limit 3/hour


netstat -luntp 查看哪些端口正在服务
nmap -sS -p 0-1000 IP地址扫描哪些端口是开放的
vim /etc/sysconfig/iptables