您的位置:首页 > 其它

iptables详解

2016-02-01 08:55 204 查看
一:iptables工作机制
iptables实际上是用户空间上配置与修改过滤规则的命令,生成的规则保存在linux内核空间netfilter中,netfilter是Linux核心中的一个通用架构,其提供了一系列的表(tables),每个表由若干个链(chains)组成,而每条链可以由一条或若干条规则(rules)组成。实际上netfilter是表的容器,表是链的容器,而链又是规则的容器,netfilter有四张表:filter、nat、mangle、raw。filter表有INPUT、OUTPUT、FILTER三条链,nat表PREROUTING、OUTPUT、POSTROUTING三条链,mangle表有PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING五条链,raw表有PREROUTING、OUTPUT两条链。
数据包经过网卡进入内核空间内TCP/IP协议栈(netfilter hook)时,由netfilter hook内部的五条规则链(PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING)进行匹配,然后路由决策

二:基本命令解释(一定要注意大小写)
1.命令格式:
iptables [-t 表] 命令 链名 [序号] 匹配标准 -j 处理方法

命令(大写):
-A 新增 (不需要序号)
-D 删除(如果未添加序号,则同-A用法,若添加了序号,则使用iptables -D 链名 序号)

-R 替代(此时需要添加序号)
-I 插入(如果添加序号则插入指定序号的规则,否则会插入为第1条规则)
链名(大写):PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING
匹配标准(小写):-s(源ip)、-d(目的ip)、-p(定义tcp/udp)、-i(进网卡名)、-o(出网卡名)等

处理方法(大写):ACCEPT(接受)、DROP(丢弃)、REJECT(拒绝)、DNAT(目标地址转换)、 SNAT(源地址转换)、LOG(日志)

2.链的管理:(如果没有添加‘-t 表’,那么iptables默认配置的是filter表)
-F[CHAIN]:flush 清空指定规则链,如果省略chain则清除对应表中的所有链

-X[CHAIN]:清除自定义链,默认链无法删除,如果省略chain则清除对应表中的所有自定义链
-Z[CHAIN]:清除链匹配计数器

-P CHAIN ACCEPT/DROP:设定指定链的默认策略

-L [-n -vv -x --line-numbers] :显示iptables规则链,具体解释如下
-n: 以数字格式显示主机地址和端口号;
-v: 显示链及规则的详细信息
-vv: 显示链及规则的更详细信息
-x: 显示计数器的精确值
--line-numbers: 显示规则号码

三:常用配置实例
iptables -F

#清除nat表的规则链

iptables -X
#清除nat表的自定义链

iptables -Z
#清除nat表的计数器

iptables -P INPUT DROP

#配置nat表INPUT链默认处理方式为丢弃
iptables -P OUTPUT ACCEPT

#配置nat表OUTPUT链默认处理方式为放行

iptables -A INPUT -m limit --limit 30/minute --limit-burst 40-j DROP

#初始连接池有40个,使用完后限制每分钟只能新增连接30个,
iptables -A INPUT -m connlimit --connlimit-above 10 -j DROP

#配置单个ip并发访问数为10,这样会误伤使用NAT上网的用户

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

#配置单个端口访问情况,需要添加-p参数
iptables -A INPUT -p tcp --dport 8080:8090 -j ACCEPT
#配置连续端口访问情况,需要添加-p参数 iptables -A INPUT -p tcp -m multiport --destination-ports 21,22,80 -j ACCEPT
#配置多端口访问情况,需要添加-p参数
iptables -A INPUT -m state --state established -j ACCEPT

#配置访问状态规则

四:配置路由转换
当服务器只有一张网卡时,利用别名设置一外网ip与一内网ip共两ip,可以不设置ip_forward ,直接为两网进行路由转换,内网段的主机需要将默认网关设置为此服务器对应的内网IP。

当服务器有两种网卡时,分别设置两IP(一网卡配置为内网ip,一网卡配置为外网ip),则需要设置ip_forward,内网主机将默认网关设置为此服务器内网ip。

实例:
1.iptables -t nat -A POSTROUTING -s 172.16.100.0/24 -j SNAT --to-source 192.168.1.114
注:此条规则配置在表nat上的POSTROUTING链上,使用源地址转换,将内网源地址为172网段主机,映射到ip 192.168.1.114

2.iptables -t nat -A PREROUTING -d 192.168.1.114 -p tcp --dport 80 -j DNAT --to-destination 172.16.100.7[:8080]
注:此条规则配置在表nat上的PREROUTING链上,使用目标地址转换,将目标地址为192.168.1.114,端口为80的包转发到内网172.16.100.7,端口为8080的主机上

五:高并发网站下防火墙优化
ip_conntrack(centos5)与nf_conntrack(centos6)开启时,即使用nat表或者使用state状态规则,系统会在内存维持状态跟踪表来记录每一个访问ip的状态,这对高并发网站很危险,可能会出现"table full, dropping packet",解决方式修改内核参数:
net.netfilter.nf_conntrack_max = 1048576
#状态跟踪表的最大行数的设定,理论最大值 CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (ARCH / 32)
net.netfilter.nf_conntrack_tcp_timeout_established = 3600
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
参考网址:
/article/3522184.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: