iptables
iptables:netfilter包过滤防火墙,内核态,不以程序或文件形式存在
:iptables命令程序,用户态,位于/sbin/iptables
iptables主要工作在OSI七层中的二、三、四层
iptables < 表 < 链 < 规则
/etc/sysconfig/iptables //防火墙主配置文件
iptables-save > iptables.txt(/etc/sysconfig/iptables)
/etc/init.d/iptables save //永久保存防火墙配置信息
iptables -A INPUT -i lo -j ACCEPT //禁ping后,可以让防火墙自己ping自己
1.1 工作流程
在链中从上至下匹配规则,匹配时,按顺序,遵循“匹配即停止”,如果没有规则与其匹配,则按默认规则处理
1.2 四表
filter:对数据包进行过滤,默认表
包含:INPUT FORWARD OUTPUT
nat:网络地址转换,源与目的IP和端口的转换(-t nat)
包含:PREROUTING OUTPUT POSTROUTING
mangle:修改数据包
包含:INPUT FORWARD OUTPUT PREROUTING POSTROUTING
raw:决定是否对数据包新型状态跟踪
包含:OUTPUT PREROUTING
1.3 五链
INPUT:入站
FORWARD:转发
OUTPUT:出站
PREROUTING:进来时(对数据包进行改变)(外网---内网)路由之前,进行地址映射转换,把目标地址进行转换(目标公网地址==>目标变为私网地址)
POSTROUTING:即将出去时(对数据包进行改变)(内网---外网)路由之后,进行地址映射转换,把源地址进行转换(源私网地址==>源公网地址)
1.4 选项规格
iptables [-t 表名] 选项 链名 [匹配条件] -j 控制类型
-A //链的末尾添加一条新规则
-I //链的首行添加一条新规则
-D //删除某一条规则
-F //清空表中所有规则链
-n //以数字形式显示输出结果
-L //列出所有规则
-v //显示详细信息
--line-numbers //查看规则表时显示规则在链中的序号
iptables -D INPUT 1//删除INPUT链中序号为1的规则
-R //修改,替换指定链中的某一条规则
-X //清空自定义链配置
-Z //清除防火墙计数器
-P //设置默认策略
1.5 匹配条件
通用匹配:
-p 协议名 //协议匹配
-s 源地址 / -d 目标地址 //地址匹配
-i 接口名(入) / -o 接口名(出) //接口匹配
隐含匹配:
--sport 源端口 / --dport 目标端口 //端口匹配
--icmp-type ICMP类型 //ICMP匹配
8 //请求
0 //回显
3 //不可达
显示匹配:
-m multiport --dports 20,21,22,80,443,3306(使用逗号分隔)
-m multiport --sports 多端口匹配(20:80 20到80端口)
-m iprange --dst-rang 10.0.0.0-10.0.10.0
-m iprange --src-rang IP地址范围匹配
-m mac --mac-source MAC地址 MAC地址匹配
-m state --state 连接状态 状态匹配
ESTABLISHED//响应请求或已建立的连接
RELATED//与已有链接有相关性的
NEW//新的,第一个包
1.6 控制类型
ACCEPT //允许
DROP //丢弃
REJECT //拒绝(会有拒绝访问的回馈信息)
LOG //在 /var/log/messages 文件中记录日子信息,然后传给下一条规则
1.7 SNAT
源地址转换:
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.233
##172.16.1.0 网段主机访问外网时包映射出去的源地址是10.0.0.233
1.8 DNAT
iptables -t nat -A PREROUTING -d 41.0.6.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100
##访问 41.0.6.7 的80端口时,映射(转接)到192.168.1.100上的80端口
1.9 注
实例拓展:回复刚刚断掉的ssh连接
1. 去机房重启系统或者登陆服务器删除刚刚禁止的规则
2. 让机房人员重启服务器或让机房人员拿用户密码登陆进去
3. 通过服务器的远程管理卡(推荐)
4. 写一个定时任务,每五分钟就停止防火墙
5. 测试环境测试好,写成脚本,批量执行
路由选路基本原则:
1. 静态路由优先于动态路由
2. 直连路由优先于静态路由
开启路由转发
[root@localhost ~]# grep 'net.ipv4.ip_forward =' /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p