标签:iptables
一、iptables
linux的防火墙是由iptables和netfilter组成的,iptables是工作在用户空间的工具,netfilter是工作在内核空间的框架,它由五个被称为钩子的函数组成,分别为 PREROUTING INPUT OUTPUT FORWARD POSTROUTING 。具体的来说共有四张表五个链,也可以自定义链的。四张表为 RAW MANGLE NAT FILTER
能够工作在filter(过滤作用)表上的链有,INPUT OUTPUT FORWARD ,工作在nat(地址转换作用)表上的链有,PREROUTING OUTPUT POSTROUTING ,能够工作在mangle(拆开、修改、封装作用)表上的链有,PREROUTING INPUT FORWARD OUTPUT POSTROUTING,能够工作在raw(保持原样)表上的链有,PREROUTING OUTPUT。iptables不是服务,但有服务脚本;服务脚本的主要作用在于管理保存的规则,
以及装载及移除iptables/netfilter相关的内核模块;共有如下模块iptables_nat, iptables_filter, iptables_mangle, iptables_raw, ip_nat, ip_conntrack。可以通过/proc/net/ip_conntrack查看到当前连接跟踪的情况,可以通过/proc/sys/net/ipv4/ip_conntrack_max更改最大跟踪数,如果超过这个数量就会丢包,而且当访问量很大是容易导致内存被占用过多,且容易发生丢包。在该目录下面/proc/sys/net/ipv4/netfilter/可以更改一下配置,如果想要永久生效,必须写到/etc/sysctl下面,且通过sysctl -p加载。可以通过Iptstate查看当前的跟踪会话。
为什么使用自定义链
可以通过自定义链把具有大访问量的规则放在里面,这样当不是请求自定义链里面的规则就不需要经过自定义链,这样可以提高非自定义链的执行速度。
每个规则都有两个内置的计数器,它们分别记录被匹配的报文个数和被匹配的报文大小之和。
二、规则格式
iptables [-t TABLE] COMMAND CHAIN [num] 匹配标准 -j 处理办法
匹配标准:
通用匹配
-s, --src: 指定源地址
-d, --dst:指定目标地址
-p {tcp|udp|icmp}:指定协议
-i INTERFACE: 指定数据报文流入的接口
可用于定义标准的链:PREROUTING,INPUT,FORWARD
-o INTERFACE: 指定数据报文流出的接口
可用于标准定义的链:OUTPUT,POSTROUTING,FORWARD
扩展匹配(通过扩展模块提供匹配功能)
隐含扩展:不用特别指明由哪个模块进行的扩展,因为此时使用-p {tcp|udp|icmp}
-p tcp
--sport PORT[-PORT]: 源端口
--dport PORT[-PORT]: 目标端口
--tcp-flags mask comp: 只检查mask指定的标志位,是逗号分隔的标志位列表;comp:此列表中出现的标记位必须为1,comp中没出现,而mask中出现的,必须为0;
--tcp-flags SYN,FIN,ACK,RST SYN = --syn
--syn
-p icmp
--icmp-type
0: echo-reply 回复
8: echo-request 请求
-p udp
--sport
--dport
显式扩展:必须指明由哪个模块进行的扩展,在iptables中使用-m选项可完成此功能
-m EXTESTION --spe-opt
state: 状态扩展
结合ip_conntrack追踪会话的状态
NEW: 新连接请求
ESTABLISHED:已建立的连接
INVALID:非法连接
RELATED:相关联的
-m state --state NEW,ESTABLISHED -j ACCEPT
首先要装载ip_conntrack_ftp和ip_nat_ftp模块
iptables -A INPUT -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
multiport: 离散的多端口匹配扩展
--source-ports
--destination-ports
--ports
-m multiport --destination-ports 21,22,80 -j ACCEPT
-m iprange ip地址范围匹配
--src-range
--dst-range
-m connlimit 连接数限制
! --connlimit-above n 通过accept达到最大连接数限制
-m limit
--limit rate
--limit-burst
命令:
管理规则
-A:附加一条规则,添加在链的尾部
-I CHAIN [num]: 插入一条规则,插入为对应CHAIN上的第num条;
-D CHAIN [num]: 删除指定链中的第num条规则;
-R CHAIN [num]: 替换指定的规则;
管理链:
-F [CHAIN]:flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
-P CHAIN: 设定指定链的默认策略;
-N:自定义一个新的空链
-X: 删除一个自定义的空链
-Z:置零指定链中所有规则的计数器;
-E: 重命名自定义的链;
查看类:
-L: 显示指定表中的规则;
-n: 以数字格式显示主机地址和端口号;
-v: 显示链及规则的详细信息
-vv:
-x: 显示计数器的精确值
--line-numbers: 显示规则号码
动作(target):
ACCEPT:放行
DROP:丢弃
REJECT:拒绝
DNAT:目标地址转换
SNAT:源地址转换
REDIRECT:端口重定向
MASQUERADE:地址伪装
LOG:日志
MARK:打标记
保存规则的方法:
service iptables save 执行后把规则保存在/etc/sysconfig/iptables
iptables-save > /etc/sysconfig/iptables.2013041801
iptables-restore < /etc/sysconfig/iptables.2013041801
必须把规则保存在/etc/sysconfig/iptables中才能在开机重启后及时生效
三、关于单个链上多个表的优先级
prerouting链上:raw>mangle>nat
input链上:mangle>filter
output链上:raw>mangle>nat>filter
forward链上:mangle>filter>
postrouting链上:mangle>nat
四、应用
1、开放FTP服务
ip_nat_ftp ip_conntrack_ftp
vim /etc/sysconfig/iptables-config 添加IPTABLES_MODULES="ip_nat_ftp ipconntrack_ftp"
iptables -t filter -A INPUT -d 192.168.10.22 -p tcp -m state --state ESTABLISHED,RELATED -j accept
iptables -A OUTPUT -s 192.168.10.22 -p tcp -m state --state ESTABLISHED,RELATED -j accept
RELATED这个状态是专门给FTP用的
2、开放WEB服务
iptables -A INPUT -d 192.168.10.22 -p tcp --dport 80 -mstate --state NEW,ESTABLISHED
-j accept
iptables -A OUTPUT -s 192.168.10.22 -p tcp --sport 80 -mstate --state NEW,ESTABLISHED
-j accept
3、合并ESTABLESHED
iptables -I INPUT -d 192.168.10.22 -p tcp -m state --state ESTABLISHED,RELATED
4、多端口的合并
iptables -A INPUT -d 192.168.10.22 -p tcp -m multiport --destination-ports 21,22,80 -m state --state NEW -j accept
5、通过扩展模块,完成地址段的放行,支持!取反
iptables -A INPUT -p tcp -m iprange --src-range 192.168.10.1-192.168.10.22 --dport 22 -m state --state NEW,ESTABLISHED
6、最大连接数限制
iptables -A INPUT -d 192.168.10.22 -p tcp --dport 80 -m connlimit ! --connlimit-above 2
-j accept
7、
iptables -A INPUT -d 192.168.10.22 -p tcp --dport 22 -m limit --limit 3/minute --limit-burst 3 -j accept
每分钟3个,每次共处理3个
8、新建链表
iptables -N hailang
iptables -A hailang -d 255.255.255.255 -p icmp -j DROP
iptables -A hailang -d 192.168.16.22 -j RETURN 处理完后返回调用处
iptables -I INPUT -j hailang 调用hailang自定义表
标签:iptables
原文地址:http://learnlinux.blog.51cto.com/9320044/1613413