亲,咱聊聊iptables
咱们直入正题吧,说到iptables,这里不得不提提防火墙,因为iptables就是防火墙的一种实现方式那么防火墙有哪些呢?
防火墙分为:
包过滤型防火墙
- 根据tcp首部或者ip首部数据进行判断
简单的包过滤
仅检查tcp或者ip的包头信息
带状态检测的包过滤型
几种状态:
NEW
ESTABLISHED(established)
INVALID(invalid)
RELATED(related)
应用层网关防火墙
- 根据数据包传输的实际数据内容就行过滤判断
当然防火墙还有硬件防火墙,软件防火墙,主机防火墙,网络防火墙等等
一、 首先需要知道的是 iptables工作在Tcp/Ip协议层,iptables的规则在内核中(因为tcp/Ip协议栈在内核中啊)
二、 说了这么多iptables是什么?iptables 是用户空间的命令,用来配置Linux内核过滤ipv4和ipv6包的规则集的一种应用程序,并且还能实现NAT的功能
iptables的主要作用:
列出包过滤集的内容
增加,移动(包含删除),修改包过滤集的规则
列出或者清楚每个包过滤规则集规则的计数器
注:包过滤集我们可以称谓它为CHAIN链(过滤包的规则集合)
IPtables的表
mangle
NAT(snat,dnat)
- 简单的来世NAT是为缓解目前Ip地址资源不足的情况下,应运而生的一种技术,将私有网站地址转换为公网地址,在互联网上就行通信的一种技术。
- snat:源地址转换:
- 应用防火墙时SNAT是实施在POSTrouting
- dnat:目标地址转换
应用防火墙时 DNAT是实施在PRErouting
Filter(默认)
raw
iptables命令详解: |
命令格式
iptables [-t table ] COMMAND CHAIN parameters -j ACTION
说明: CHAIN需要大写
ü tables有raw,mangle,nat,filter 四个表,-t 可以省略 默认为filter表
ü CHAIN有INPUT,OUTPUT,PRErouting,POSTrouting,FORWARD
ü COMMAND
-A:append 附加,在链的最后面附加一条规则
- -I n: insert 插入,在链中插入规则为第n条
- -D n: delete 删除,在链中删除第n条规则
- -R n:replace 替换 在链中替换第n条规则
- -L:列出链中的规则 常和其子选项 -n, –v 一起使用
- Iptables -L –n –v
- 也常和其子选项 --line-numbers 使规则带行号显示
- -F:flush,清空链中的规则
- -N:new 新建链
- -X:delete 删除自定义的空链且没有被引用的链
- -E:rename 给链重命名
- -P:policy设置链的默认策略
- -Z:zero 清楚链的计数器
关于iptables匹配条件的解释 |
- Parameters:
- 基本匹配
- -s: source ip|network 源IP或者网络
- -d:destination ip|network
- -p:协议 tcp|ip|icmp
- -i {interface}: in 数据包流入的接口
- -o{interface}:out 数据包的流出接口
- 扩展匹配-(调用iptables的模块,以便扩展其功能,-m选项省略)
- 隐含扩展
- -p tcp
- --sport port:
- --dport port:
- -p udp
- --sport port:
- --dport port:
- -p icmp
- --icmp-type :
- 显式扩展(调用iptables的模块,以便扩展其功能,-m选项不能省略)
- 包的几种常见的状态有:
- NEW
- ESTABLISHED(established)
- INVALID(invalid)
- RELATED(related)
- 显示扩展使用格式
- -m state --state 包状态
- 例如1
- Iptables –A INPUT -d 172.16.10.1 –p tcp –dport 80 -m state --state NEW ESTABLISHED –j DROP
- 例如2:在主机防火墙上做iptables仅允许172.16.10.1主机和192.168.0.205主机通信
- 实施iptables之前在172.16.10.2主机上测试其和172.16.10.1的通信均正常
- 实施iptables之后在172.16.10.2主机上测试其和172.16.10.1的通信均正常
- 实施iptables之后在172.16.10.2主机上测试其和172.16.10.1无法通信
- 结果绑架了172.16.10.1和192.168.0.205主机
- -m multiport 限制多个端口组合
- 子选项 –source-ports [!]
- --destination—ports [!]
- --ports [!]
- [!]:叹号可以对端口取反
- 例如: -m multiport –source-ports 21,22,80,8080
- -m iprange 限制某个ip段
- [!] --src-range ip-ip
- [!] --dst-range ip-ip
- [!]:叹号可以对ip段就行取反
- 例如:
- 对其取反
- Iptables -R INPUT 1 –s 192.168.0.205 –p tcp -m multiport –destination-port ! 21,80 –j DROP
- iptables -A INPUT -d 172.16.10.1 -p tcp --dport 21 -m state --state NEW -m iprange --src-range 192.168.0.200-192.168.0.205 --j DROP
- -m connlimit 显示连接次数
- [!]--connlimit-above n
- [!]: 对连接的次数取反
- iptables -p tcp --dport 22 –m state –state NEW -m connlimit --connlimit-above 2 -j DROP
- iptables -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT
- -m limit
- 子选项 –limit rate 平均最大速率(单位/second,minute,hour,day等)
- -limit-burst number 平均最大数率的峰值 默认为5
- 例如:
- -m string :string模块可以限制使用模式匹配出来的字符串,但是要求内核在2.6.14以上
- 子选项 -algo bm|kmp (字符串编码的算法)
- --string pattern
- 例如:
- iptables -A OUTPUT -p tcp --dport 80 -m string --algo bm --string "Redhat" -j DROP
- (无法匹配URL中的字符串,只能匹配网页内容)
-
- Action常用的有:
- ACCEPT
- DROP
- REJECT
- SNAT
- DNAT
- 关于NAT的例子
- 例如:
- iptables -t NAT -A POSTROUTING -s 172.16.0.0/16 -j SNAT --to-source 192.168.0.205
- 最后说了这么多关于iptables的规则,那么怎么保存这些规则呢?
- iptables 的配置文件(iptales不是一项服务但是可以按照服务的启动方式启动)
- /etc/rc.d/init.d/iptabls 其启动脚本
- service iptables start 的方式启动iptabls
- iptables 的规则保存的文件在/etc/sysconfig/iptabls (默认)
- 保存规则:(覆盖方式):
- 1:使用service iptables save 命令将规则保存到默认的保存路径中
- 2:使用数据流重定向的方式 iptables-save >保存位置
- 读取规则:
- iptables-restore < 规则位置
亲,如您发现错误,或者理解不到位的,欢迎留言,交流(别拍砖啊,呵呵)
持续更新中.............