表链的结构示意图
操作默认表, 即filter时 ,可以不适用-t filter指定表名.
- 查看设置情况
# 查看默认表中的配置规则即filter
iptables -L
# 查看filter表中INPUT链的规则
iptables -t filter -L INPUT
# 带行号的查询
iptables -nvL --line-number
-L 查看当前表的所有规则,默认查看的是filter表,如果要查看NAT表,可以加上-t NAT参数
-n 不对ip地址进行查,加上这个参数显示速度会快很多
-v 输出详细信息,包含通过该规则的数据包数量,总字节数及相应的网络接口
–line-number 显示规则的序列号,这个参数在删除或修改规则时会用到
- 常用命令
[]中括号,代表可选项.写不写都可以.
iptables命令格式
iptables [-t 表,默认filter] -命令 匹配 操作
命令
-A 添加到最后
-I 添加(插入)到第几条
-D 删除
-R 修改
操作
ACCEPT 接收数据包
DROP 丢弃数据包
LOG 日志功能
REDIRECT 将数据包重新转向到本机或另一台主机的某一个端口,通常功能实现透明代理或对外开放内网的某些服务
SNAT 源地址转换
DNAT 目的地址转换
MASQUERADE IP伪装
# 清除预设表filter中的所有规则链的规则
iptables -F
# 清除预设表filter中使用者自定链中的规则
iptables -X
# 保存刚才的操作
iptables save
# 关闭6379端口, 进入链
iptables [-t filter] -A INPUT -p tcp --dport 6379 -j DROP
# 开启80端口, 进入链
iptables [-t filter] -A INPUT -p tcp --dport -80 -j ACCEPT
# 同时决绝一段连续端口,进入链
iptables -A INPUT -p tcp -m multiport --dport 5901:5903 -j DROP
# 将第4条修改为,全部允许进入链(包括所有协议)
iptables -R INPUT 4 -j ACCEPT
# 将允许80端口进入,插入到进入链第2条
iptables -I INPUT 3 -p tcp --dport 80 -j ACCEPT
# 指定删除进入链第几条规则(查看第几条可以通过iptables -L --line-number查看, 列表中自上而下排第几就是第几条)
iptales -D INPUT 2
注释:
同一个端口, 两条规则先DROP再ACCEPT, 后面ACCEPT不生效.
一般, 作为我自己配置的时候,是:拒绝所有逐个允许.
如:
# 添加拒绝所有规则在进入链前,当然先要添加一个, 允许一下.22端口..不然XXX.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
iptalbes -A INPUT DROP
iptables -A OUTPUT ACCEPT
iptables -A FORWARD DROP
- 保存配置
虽然IPTables的命令执行后会立即生效,但这个生效过程其实是临时的,系统在重启之后便会丢失。因此,我们还需要将这些配置添加到配置文件当中,以保证系统在下次重启后会自动载入我们的IPTables防火墙规则。
sudo apt-get update
sudo apt-get install iptables-persistent
该命令脚本下载执行后会询问我们是否对IPTables配置进行保存,如果确定的话选择“是”即可。保存后下次重启系统也不会造成配置丢失了。
- 详解&案例
iptables基础
①规则(rules):网络管理员预定义的条件
②链(chains): 是数据包传播的路径
③表(tables):内置3个表filter表,nat表,mangle表分别用于实现包过滤网络地址转换和包重构的功能
④filter表是系统默认的,INPUT表(进入的包),FORWORD(转发的包),OUTPUT(处理本地生成的包),filter表只能对包进行授受和丢弃的操作。
⑤nat表(网络地址转换),PREROUTING(修改即将到来的数据包),OUTPUT(修改在路由之前本地生成的数据包),POSTROUTING(修改即将出去的数据包)
⑥mangle表,PREROUTING,OUTPUT,FORWORD,POSTROUTING,INPUT
语法:
iptables [-t 表名] <-A|I|D|R> 链名 [规则编号] [-i|o 网卡名称] [-p 协议类型] [-s 源ip|源子网] [--sport 源端口号] [-d 目的IP|目标子网] [--dport 目标端口号] [-j动作]
参数:
-A 增加
-I 插入
-D 删除
-R 替换
(1) 链
INPUT -> 对进入服务器的数据包进行检测
OUTPUT -> 对出去的数据包进行检测
(2) filter(过滤) 表:
这个表中存储了INPUT和OUTPUT连上的规则
(3) 防火墙的配置原则
<1> 允许所有,逐个拒绝
<2> 拒绝所有,逐个允许
(4) 防火墙软件 iptables
# yum -y install iptables 默认安装了
# chkconfig --list | grep 'iptables'
(5) 过滤数据的分类
<1> IP 源IP 目标IP
<2> port 源端口 目标端口
<3> 协议
tcp web
udp dns
icmp ping
<4> mac地址 网卡地址
(6) 规则
写规则
<1> 修改默认策略
iptables -t 表名 -P 链 默认操作
t 指定操作的表
P 修改默认策略
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
<2> IP
iptables -t filter -A INPUT -s 源IP -d 目标IP -j DROP
iptables -t filter -A OUTPUT -s 源IP -d 目标IP -j DROP
-t 指定操作的表
-A 表示添加一条自定义的规则
-s 指定源IP地址
-d 指定目标IP地址
-j 表示匹配到之后的操作
DROP
ACCEPT
<3> 端口 和 协议
iptables -t filter -A INPUT -s 源IP -d 目标IP -p 协议类型 --dport 目标端口 -j DROP
-t 表示操作的表
-A 表示添加一条自定义的规则
-s 表示源IP地址
-d 表示目标IP地址
-p 指定协议类型 web tcp
--dport 目标端口
--sport 源端口
-j 表示匹配之后的操作
DROP
ACCEPT
iptables -t filter -A INPUT -s 192.168.140.250 -d 192.168.140.249 -p tcp --dport 22 -j DROP
向服务器提交数据是用DPORT
iptables -t filter -A INPUT -s 源IP -d 目标IP -p icmp -j DROP
<3> mac
iptables -t filter -A INPUT -m mac --mac-source 00-21-CC-5D-CF-6B -j DROP
-m 指定使用什么模块 此处为指定mac模块
--mac-source 源MAC地址
iptables -t filter -A OUTPUT -m mac --mac-destion 00-21-CC-5D-CF-6B -j DROP
删除规则
iptables -F 表示删除所有的规则
iptables -t filter -D INPUT 4
查询规则
iptables -L -v -n
-L 查询
-v 详细
-n 数字化显示 网络协议
# service iptables save -> /etc/sysconfig/iptables
所有步骤完成之后记得保存
- 其他使用方法
# 保存配置文件到指定位置
iptables-save > /etc/tables
# 读取配置文件
iptables-restore < /etc/tables