iptales 在工作中没少用.但一直没有总结一下.都是用时man一下.没有系统性.
现在有时间得总结一下了.
redhat下的iptables,就是防火墙了.
启动脚本:/etc/rc.d/init.d/iptables --------> 看过之后就大概了解iptables启动/关闭过程了
规则文件:/etc/sysconfig/iptables
配置文件:/etc/sysconfig/iptables-config
iptables规则表从上到下匹配,头一个规则如果匹配了,下一个相关规则无效
iptables命令使用原则:
链名 必须 大写
表名 必须 小写
动作 必须 大写
匹配 必须 小写
体系:
它有2个表:filter ---------- 过滤作用
nat-------------- 做网络地址转换的.network address translator
4个链:
INPUT ----------- 位于filter表,匹配目的ip是本机的数据包
OUPUT ---------- 位于filter表,匹配从本机出去的数据包
FORWARD --------- 位于filter表,匹配通过本机的数据包,从外部来,通过本机,又转发到外部
PREROUTING ------ 位于nat表,用于修改目的地址 destination nat
POSTROUTING ----- 位于nat表,用于修改源地址 source nat
语法:
如果用iptables命令写好规则后,运行 service iptables save 来保存.否则重启无效
iptables 的表和链中都规则是从上到下都顺序来匹配的,优先级 上 > 下
如果规则表里没有匹配的规则,最后采用默认的accept规则,如果你没改的话
默认的规则用: ??????????????????????
( "+" 号无实际作用)
iptables + [-t 要操作的表]
+ [ 操作命令 ]
+ [ 要操作的链 ]
+ [ 规则号码 ]
+ [ 匹配条件 ]
+ [ -j 匹配后的动作 ]
参数详解:
要操作的表:-------> 就是上述提到的表了,filter 和 nat
操作命令:--------->
-A : append 追加一条规则.放到规则表的最后.
如;iptablse -t filter -A INPUT -j DROP
# -j意为匹配后的动作 原意为jump, DROP 即丢弃
意为:在filter表里的input链里追加一条规则,(作为本表本链的最后规则)
匹配所有进入本机的数据包,匹配到的数据包都丢弃.
-I : insert 插入一条规则
如: iptables -I INPUT -j DROP
意为: 在filter表里的input链中插入一条规则,插入成第一条
iptables -I INPUT 3 -j DROP
意为: 在filter表里的input链里插入一条规则,插入成第三条
## -t filter 不写则自动默认成filter表
-I INPUT 3 如果不写号码,则自动插入成第一条
确保插入的号码数 <= 已经存在的规则数,否则报错
-D : delete 删除一条规则
安装规则号码删除:
如: iptables -D INPUT 2 --------- 删除input链里的第2条规则
安装规则内容删除:
iptables -D INPUT -s 192.168.1.2 -j DROP
删除input链里的 -s 192.168.1.2 -j DROP的规则
-R : replace 替换一条规则
iptables -R INPUT 3 -j ACCEPT --> 替换input链里的3号规则为accept
-P : policy 设置某个链的默认规则
iptables -P INPUT DROP ----> 设置filter表的INPUT链默认规则是drop
# 这个命令 不加 -j 也是唯一不加-j的情况
-F : flush 清空规则表
iptables -F INPUT ---------> 清空input链的规则
iptables -t nat -F PREROUTING -----> 清空net表的prerouting链规则
# 如果不写链名,则为全部表.
只是清空规则表.重启后已经保存的规则还在
-L : list 列出规则
iptables -nL ----------> 列出规则 n表示ip地址和端口号
匹配条件:
流入/流出 -----> -i / -o # -i ---> in
# -o ---> out
来源/目的 -----> -s / -d # -s ---> source
# -d ---> destination
协议类型 -----> -p # -p ---> protocol
来源端口/目的端口 ---> -sport / -dport
按网络接口匹配:
-i eth0 -------> 匹配从eth0网络接口进来的数据包
-o ppp0 -------> 匹配从ppp0出去的数据包
按来源目的地址匹配:
-s 192.168.1.1 -----> 匹配来自192.168.1.1的数据包
-s 192.168.1.0/24 --> 匹配来自192.168.1.0/24网络的数据包
-s 192.168.1.0/16 --> 匹配来自192.168.1.0/16网络的数据包
按目的地址匹配:
-d < 可以是 ip , net , domain >
-d 202.22.33.44 -----> 匹配去往 202.22.33.44的数据包
-d www.hao123.com ---> 匹配去往www.hao123.com的数据包
按协议匹配:
-p tcp
-p udp
-p icmp
按来源目的端口匹配:
--sport < 可以是某个端口,也可以是端口范围 >
--sport 1000
--sport 1000:3000 ----> 从1000端口到3000端口
--sport :4000 -----> 4000端口以下的所有端口
--sport 4000: -----> 4000端口以上的所有端口
--dport 用法和 --sport 用法一样的
# --s/dport 必须和 -p 一起使用
匹配后的动作: 即-j 后的动作
ACCEPT ----> 通过,允许数据包通过本链.类似cisco的 permit
DROP ----> 拒绝, 不允许通过本链 . deny
SNAT ----> -j SNAT --to ip<-ip><:端口-端口> 这是nat表的postrouting链,
源地址转换,snat支持转换为单ip和ip池(一组连续的ip地址)
例如:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to 1.1.1.1
,将内网10.0.0.0/24的源地址改为1.1.1.1,用于nat
DNAT -----> -j DNAT --to ip<-ip><:端口-端口> 这是nat表的prerouting链
目的地址转换,dnat支持转换为单一ip和ip池
例如:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 1.1.1.1
将从eth0接口进来的要访问80端口的tcp数据包的目的地址改成1.1.1.1
MASQUERADE --> -j masquerade
动态源地址转换
例如: iptables -t nat -A POSTROUTING -s 1.1.1.1 -j MASQUERADE
将源地址是 1.1.1.1 的数据包进行地址伪装
#没有用过
附加模块:
按包的状态匹配 ---------> state
-m state --state 状态
状态分为: new ----------> 有别于tcp的syn
related ---------->
established -------> 连接态
invlid ----------> 不能识别或者没有任何状态/
例如:
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT --> 接收处于连接态的包
按mac地址匹配 ----------> mac
-m mac --mac-source mac地址
例如:
iptables -A INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP --> 拒绝某mac地址
按包的速率匹配: --------> limit
-m limit --limit <匹配速率> <--burst 缓冲数量>
例如:
iptables -A FORWARD -d 1.1.1.1 -m limit --limit 30/s -j DROP --> 拒绝速率30/s的包
按多端口匹配 -----------> multiport # 必须和 -p 一起用
-m multiport <--sports|--dports|--ports> 端口1<,端口2,端口3> ----> 一次性匹配多个端口
可以区分来源端口,目的端口,或者不指定端口.
例如:
iptables -A INPUT -p tcp -m multiport --dports 22,23,80,110 -j ACCEPT
接收 22,23,80,110端口进来多tcp数据包
按来源mac地址匹配 ------> mac
按包速率匹配 -----------> limit
按多端口匹配 -----------> multiport
现在有时间得总结一下了.
redhat下的iptables,就是防火墙了.
启动脚本:/etc/rc.d/init.d/iptables --------> 看过之后就大概了解iptables启动/关闭过程了
规则文件:/etc/sysconfig/iptables
配置文件:/etc/sysconfig/iptables-config
iptables规则表从上到下匹配,头一个规则如果匹配了,下一个相关规则无效
iptables命令使用原则:
链名 必须 大写
表名 必须 小写
动作 必须 大写
匹配 必须 小写
体系:
它有2个表:filter ---------- 过滤作用
nat-------------- 做网络地址转换的.network address translator
4个链:
INPUT ----------- 位于filter表,匹配目的ip是本机的数据包
OUPUT ---------- 位于filter表,匹配从本机出去的数据包
FORWARD --------- 位于filter表,匹配通过本机的数据包,从外部来,通过本机,又转发到外部
PREROUTING ------ 位于nat表,用于修改目的地址 destination nat
POSTROUTING ----- 位于nat表,用于修改源地址 source nat
语法:
如果用iptables命令写好规则后,运行 service iptables save 来保存.否则重启无效
iptables 的表和链中都规则是从上到下都顺序来匹配的,优先级 上 > 下
如果规则表里没有匹配的规则,最后采用默认的accept规则,如果你没改的话
默认的规则用: ??????????????????????
( "+" 号无实际作用)
iptables + [-t 要操作的表]
+ [ 操作命令 ]
+ [ 要操作的链 ]
+ [ 规则号码 ]
+ [ 匹配条件 ]
+ [ -j 匹配后的动作 ]
参数详解:
要操作的表:-------> 就是上述提到的表了,filter 和 nat
操作命令:--------->
-A : append 追加一条规则.放到规则表的最后.
如;iptablse -t filter -A INPUT -j DROP
# -j意为匹配后的动作 原意为jump, DROP 即丢弃
意为:在filter表里的input链里追加一条规则,(作为本表本链的最后规则)
匹配所有进入本机的数据包,匹配到的数据包都丢弃.
-I : insert 插入一条规则
如: iptables -I INPUT -j DROP
意为: 在filter表里的input链中插入一条规则,插入成第一条
iptables -I INPUT 3 -j DROP
意为: 在filter表里的input链里插入一条规则,插入成第三条
## -t filter 不写则自动默认成filter表
-I INPUT 3 如果不写号码,则自动插入成第一条
确保插入的号码数 <= 已经存在的规则数,否则报错
-D : delete 删除一条规则
安装规则号码删除:
如: iptables -D INPUT 2 --------- 删除input链里的第2条规则
安装规则内容删除:
iptables -D INPUT -s 192.168.1.2 -j DROP
删除input链里的 -s 192.168.1.2 -j DROP的规则
-R : replace 替换一条规则
iptables -R INPUT 3 -j ACCEPT --> 替换input链里的3号规则为accept
-P : policy 设置某个链的默认规则
iptables -P INPUT DROP ----> 设置filter表的INPUT链默认规则是drop
# 这个命令 不加 -j 也是唯一不加-j的情况
-F : flush 清空规则表
iptables -F INPUT ---------> 清空input链的规则
iptables -t nat -F PREROUTING -----> 清空net表的prerouting链规则
# 如果不写链名,则为全部表.
只是清空规则表.重启后已经保存的规则还在
-L : list 列出规则
iptables -nL ----------> 列出规则 n表示ip地址和端口号
匹配条件:
流入/流出 -----> -i / -o # -i ---> in
# -o ---> out
来源/目的 -----> -s / -d # -s ---> source
# -d ---> destination
协议类型 -----> -p # -p ---> protocol
来源端口/目的端口 ---> -sport / -dport
按网络接口匹配:
-i eth0 -------> 匹配从eth0网络接口进来的数据包
-o ppp0 -------> 匹配从ppp0出去的数据包
按来源目的地址匹配:
-s 192.168.1.1 -----> 匹配来自192.168.1.1的数据包
-s 192.168.1.0/24 --> 匹配来自192.168.1.0/24网络的数据包
-s 192.168.1.0/16 --> 匹配来自192.168.1.0/16网络的数据包
按目的地址匹配:
-d < 可以是 ip , net , domain >
-d 202.22.33.44 -----> 匹配去往 202.22.33.44的数据包
-d www.hao123.com ---> 匹配去往www.hao123.com的数据包
按协议匹配:
-p tcp
-p udp
-p icmp
按来源目的端口匹配:
--sport < 可以是某个端口,也可以是端口范围 >
--sport 1000
--sport 1000:3000 ----> 从1000端口到3000端口
--sport :4000 -----> 4000端口以下的所有端口
--sport 4000: -----> 4000端口以上的所有端口
--dport 用法和 --sport 用法一样的
# --s/dport 必须和 -p 一起使用
匹配后的动作: 即-j 后的动作
ACCEPT ----> 通过,允许数据包通过本链.类似cisco的 permit
DROP ----> 拒绝, 不允许通过本链 . deny
SNAT ----> -j SNAT --to ip<-ip><:端口-端口> 这是nat表的postrouting链,
源地址转换,snat支持转换为单ip和ip池(一组连续的ip地址)
例如:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to 1.1.1.1
,将内网10.0.0.0/24的源地址改为1.1.1.1,用于nat
DNAT -----> -j DNAT --to ip<-ip><:端口-端口> 这是nat表的prerouting链
目的地址转换,dnat支持转换为单一ip和ip池
例如:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 1.1.1.1
将从eth0接口进来的要访问80端口的tcp数据包的目的地址改成1.1.1.1
MASQUERADE --> -j masquerade
动态源地址转换
例如: iptables -t nat -A POSTROUTING -s 1.1.1.1 -j MASQUERADE
将源地址是 1.1.1.1 的数据包进行地址伪装
#没有用过
附加模块:
按包的状态匹配 ---------> state
-m state --state 状态
状态分为: new ----------> 有别于tcp的syn
related ---------->
established -------> 连接态
invlid ----------> 不能识别或者没有任何状态/
例如:
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT --> 接收处于连接态的包
按mac地址匹配 ----------> mac
-m mac --mac-source mac地址
例如:
iptables -A INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP --> 拒绝某mac地址
按包的速率匹配: --------> limit
-m limit --limit <匹配速率> <--burst 缓冲数量>
例如:
iptables -A FORWARD -d 1.1.1.1 -m limit --limit 30/s -j DROP --> 拒绝速率30/s的包
按多端口匹配 -----------> multiport # 必须和 -p 一起用
-m multiport <--sports|--dports|--ports> 端口1<,端口2,端口3> ----> 一次性匹配多个端口
可以区分来源端口,目的端口,或者不指定端口.
例如:
iptables -A INPUT -p tcp -m multiport --dports 22,23,80,110 -j ACCEPT
接收 22,23,80,110端口进来多tcp数据包
按来源mac地址匹配 ------> mac
按包速率匹配 -----------> limit
按多端口匹配 -----------> multiport