您的位置:首页 > 其它

防火墙iptables简析(规则才是本体)例题展示!复习初学必备良药!

2015-07-25 10:28 267 查看
一、简介 iptables是可以实现netfilter框架的一个命令,通过调用syscall使内核空间的防火墙规则和用户空间交互。 配置文件 /etc/sysconfig/iptables-config
/etc/sysconfig/iptables二、四表五链模型

【结合不同的扩展】iptables可以针对OSI二、三、四、七层进行报文进行规则匹配
iptables四表:filter(default)、nat、mangle、raw
五链:INPUT OUTPUT FORWARD PREROUTING POSTROUTING.(亦可以自定义链)
四表处理优先级:raw > mangle > nat > filter

【各个表在链上的功能实现如图】



三、iptables命令简介
iptables [-t tables] COMMAND CHAIN [NUM] 匹配标准 -j 处理办法

-t 指定表类型

COMMAND:

1>.管理规则

-A 附加一条规则(默认添加在链的尾部)

-I CHAIN [NUM] 插入一条规则,插入到对应的第num条

-D CHAIN [NUM] 删除指定链中的第num条规则

-R CHAIN [NUM] 替换第num条规则

2>.管理链

-F [CHAIN] 清空指定规则链,若省略则清空表中所有链

-P CHAIN 设定指定连的默认策略(例1)
-N <CHAIN_NAME> 自定义一个新链
-X <CHAIN_NAME> 删除一个自定义空链
-Z 置零指定连中所有规则的计数器(计数器记录被匹配的报文个数个大小之和)
-E old_chain_name new_chain_name 重命名自定义链
3>.查看类
-L 显示指定表中的规则
-n 以数字格式显示主机地址和端口号
-v 显示详细的规则

匹配标准:

1>.通用匹配

-s --src 指定源IP

-d --dst 指定目的IP

-p {tcp|udp|icmp}

-i INTERFACE 指定数据报文流入的接口(例2)
可用于定义的链:PREROUTING,INPUT,FORWARD

-o INTERFACE 指定输入报文流入的接口
可用于定义的链:OUTPUT,POSTROUTING,FORWARD
2>.扩展匹配
-p tcp
--sport PORT[-PORT] 源端口(例3)
--dport PORT[-PORT] 目的端口

--tcp-flags mark comp 检查mark指定的标志位(例4)
-p icmp

--icmp-type(例5)
0: echo-reply

8: echo-request

-p udp
--sport

--dport

-m state --state 状态扩展(NEW,ESTABLIESHED,INVALID,RELATED)(例子6
RELATED专门为ftp设计()并且要生效必须装载ip_conntrack_ftp ip_nat_ftp模块(例11)
-m multiport 离散多端口匹配
--source-ports

--destination-ports

--portse(例子7)
-m iprange 范围

--src-range

--dst-range(例子8)

-m connlimit 连接数限定
--connlimit-ablove n (例子9)
-m limite

--limit RATE 控制单位时间内可连接的速度(没分钟提供3个连接)

--limit-burst num 每批连接只能进num个

-m string (例10)任何服务包含该字符串就屏蔽

--algo {kmp|bm}

--string "STRING"

处理办法:

-j TARGET

ACCEPT

DROP

REJECT

SNAT 源地址转换(例13
DNAT 目标地址转换(例14
REDIRECT 重定向

MASQUERADE 地址伪装([b]例13)[/b](相当于原地址转换,多用于地址是自动获取的地址)

LOG 记录日志(例12

MARK 为报文打标记
用到的命令
iptstate -t 显示连接个数

四、filter表上常用规则
例1:设置iptables默认策略为DROP

#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP


例2:放行自己对环回口的ping报文
#iptables -I INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT
#iptables -I OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT


例3:放行192.168.0.0网段对192.168.1.11的ssh服务的访问

#iptables -t filter -A INPUT -s 192.168.0.0/16 -d 192.168.1.11 -p tcp --dport 22 -j ACCEPT
#iptables -t filter -A OUTPUT -s 192.168.1.11 -d 192.168.0.0/16  -p tcp --sport 22 -j ACCEPT


例4:放行所有的syn=1,ack=0,fin=0,rst=0的报文

#iptables -t filter -A INPUT -p tcp --sport --tcp-flags SYN,ACK,FIN,RST SYN -j ACCEPT


例5:允许自己ping其他主机,不允许别人ping自己
#iptables -t filter -A OUTPUT -s 192.168.1.11 -p icmp --icmp-type 8 -j ACCEPT
#iptables -t filter -A INPUT -d 192.168.1.11 -p icmp --icmp-type 0 -j ACCEPT


例6:防止反弹木马攻击web,禁止非响应式连接
依赖模块 iptables_conntrack(强烈建议关闭)
/proc/net/ip_conntrack 当前连接的保存位置使用iptstate -t可以查看
/proc/net/ipv4/ip_conntrack_max 最大的连接个数,如果连接个数超过限制条目,其他的请求一律被丢弃
#iptables -t filter -A INPUT -d 192.168.1.11 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -t filter -A OUTPUT -s 192.168.1.11 -p tcp --dport 80 -m state --state ESTABLISHED -j ACCEPT
上一条也可以这样写
#iptables -t filter -I OUTPUT -s 192.168.1.11 -m state --state ESTABLISHED -j ACCEPT


例7:离散多端口匹配
#iptables -I INPUT 2 -d 192.168.1.11 -p tcp -m multiport --destination-ports 21,22,80 -m state --state NEW -j ACCEPT


例8:IP地址范围匹配
#iptables -t filter -A INPUT -p tcp -m iprange --src-range 192.168.1.5-192.168.1.15 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT


例9:连接数限定(用于限定同一个客户端地址最多允许同时发起多少个请求的),表示不高于8个就允许,多于8个就禁止
#iptables -t filter -A INPUT -d 192.168.1.11 -p --dport 80 -m connlimit ! --connlimit-above 8 -j ACCEPT


例10:任何服务只要包含指定字符串就屏蔽该网页(此处应该注意数据包的流向,在客户端拒绝,拒绝的应该是来自服务器出去的报文)一定做到OUTPUT上
#iptables -t filter -I OUTPUT -s 192.168.1.11 -m string --algo kmp --string "Alex" -j REJECT
例11:允许FTP协议的链接。 对于ftp等双层协议来说,链接状态有控制链接和数据链接之分,ftp能够通过放行NEW,ESTABLISHED来和对端连接,但是不能够传输数据,必须使用RELATED状态标记该链接,表示允许(或禁止)相关联的数据链接,对此必须先加载ip_conntrack_ftp,和ip_nat_ftp模块。模块加载见:http://blog.csdn.net/zy799894671/article/details/7897872
#iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
允许已经行的请求,已建立和相关的数据包进入
允许已经建立和相关的数据包出去

五、nat表上常用规则[b](以下地址是192.168.10.X就简写为10.X)[/b]
打开主机的转发功能
echo 1 > /etc/sys/net/ipv4/ip_forward
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

sysctl -p 直接生效上面
例12:-j LOG 记录日志
#iptables -t filter -I INPUT 4 -d 192.168.1.11 -p icmp --icmp-type 8 -j LOG --log-prefix "--firewall on icmp-- "
(与DROP,ACCEPT,REJECT同用时,应放置与该操作的上面这里我置于第四条)只要每一个客户端ping我主机就记录该客户端的信息,并且打上"--Firewall on icmp--"标签

例13:-j SNAT --to-source 源地址转换
适用场景:(在POSTROUTING上做规则)



场景结构:边10.8和10.9通过firewall共享互联网,且使用的是私有地址;间防火墙两块网卡,一个(10.10)为内网IP,一个(100.7)为对外公网IP;边是互联网。
假设10.9主机请求100.6,发往100.6,但是回来的时候100.6并不知道10.9在哪里,收不到回复请求。
目的:10.9能请求到100.6并且它能够回复给10.9
实现
#echo 1 > /etc/sys/net/ipv4/ip_forward
#iptbles -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.7
打开地址转发功能(也可以编辑/etc/sysctl.conf文件对转发选项置1),编写防火墙源地址转换规则,对所有来自192.168.10.0网段的地址实施源地址转换,转换为172.16.100.7。
注:源地址转换的返回时的目的地址转换是由firewall自动完成的,如果公网是固定IP就用SNAT,如果公网接口采用ppp0或者ppp1的ADSL拨号连接,则将SNAT转换为MASQUERADE即可

例14:-j DNAT --to-destination 目标地址转换
适用场景:(在PREROUTING上做规则)



场景结构:左边我的webserver想发布至公网,但是我只有一个私有地址。中间防火墙两块网卡,一个(10.10)为内网网关,一个(100.7)为对外公网IP,开启ip_forward功能;右边是互联网。

目的:所有对100.7的web访问都转发至内网的10.9的为webserver上。实现:
#echo 1 > /etc/sys/nat/ipv4/ip_forward
#iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.9
注:做目的地址转换的firewall对于某请求的响应报文,其源地址转换是自动完成的。例15:iptables 命令的保存

#service iptables save
#iptables-save > /etc/iptables/iptables_20150725
#iptables-restore < /etc/iptables/iptables_20150725
<如有错误恳请指正:KaiXuanyin@live.com>

本文出自 “没有进步就是退步” 博客,请务必保留此出处http://gumpping.blog.51cto.com/9811308/1678264
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: