防火墙, 是一种位于内部网络与外部网络之间的网络安全系统
可以将内部网络与外部网络隔离, 如果没有防火墙, 内网与外网之间则是盲目传递流量
防火墙 能监控 和 过滤 未经允许的流量, 是一种分离内网与外网的技术
iptables 是一款防火墙工具, 所有发行版都能使用
在redhat7/centos7中默认的防火墙工具是firewalld, 当然也可以使用iptables
iptables与firewalld都不是真正的防火墙, 因此都称他们为防火墙工具
netfilter才是真正的防火墙, iptables和firewalld是设置netfilter的工具
iptables的结构:
iptables由 表 -- 规则链 -- 策略规则 三部分组成
策略规则:
一般防火墙的策略规则有两种, 放行和阻止
规则链:
多条策略规则组合就是一个规则链
防火墙会从上至下读取规则链, 在找到匹配项后, 就结束匹配工作, 去执行目标行为(放行或阻止)
如果读完了所有的策略规则都没有找到匹配项, 则执行默认的策略
根据处理数据包的位置不同, 可分为不同的规则链
Prerouting -- 在路由选择前处理数据包
Input -- 处理流入的数据包
Output -- 处理流出的数据包
Forward -- 处理转发的数据包
Postrouting -- 在路由选择后处理数据包
使用最多的是Input规则链, 此规则链可以增加黑客从外网入侵内网的难度
比如现在给Input链增加两个策略规则: 某公司门口 -> 1.禁止一切车辆入内 2.禁止外来人员入内
那么规则1拦截开车的人, 规则2拦截无公司证件的人
其实最后还有一个默认规则 -- 就是前面的规则都没有匹配到时使用的规则
对于被规则1, 规则2挡住的人, 怎么处理呢 --> 目标行为
目标行为包括:
Accept -- 允许流量通过
Reject -- 拒绝流量通过, 做出拒绝响应, 发送流量方能看到端口不可达的响应
Log -- 记录日志信息
Drop -- 拒绝流量通过, 不作任何响应, 发送流量方并不知道对应主机是否在线
了解四表五链:
五链就是上面的5种规则链
四表包括Filter , NAT, Mangle, Raw 每种表包含几种链, 默认使用Filter表
Filter -- INPUT + OUTPUT + FORWARD
NAT -- PREROUTING + POSTROUTING + OUTPUT
Mangle -- PREROUTING + OUTPUT + FORWARD + INPUT + POSTROUTING
Raw -- PREROUTING + OUTPUT
iptables基本命令:
iptables命令根据 流量源地址 目的地址 传输协议 服务类型 信息进行匹配
一旦匹配成功, iptables就会根据策略规则预设定的动作来这些流量
默认情况下使用的是Filter表, 即包含INPUT, FORWARD, OUTPUT链
一般情况下, 我们使用最多的是INPUT规则链
1.查看已有的防火墙规则: iptables -L
需要root权限的用户, 蓝色是三个规则链, 绿色是该链的默认规则
2.清空已有的防火墙规则: iptables -F
清空防火墙时, 先使用iptables -F, 然后可以使用iptables -X 清空其它自定义规则
3.设置默认策略: iptables -P 规则链 目标行为
-P表示设置某规则链的默认策略(大写)
每一个规则链, 最后都有一个默认策略, 当前面所有规则都没有匹配到时, 作为默认行为
另外, 默认行为不能设置为REJECT
4.向规则链中添加一条规则: iptables -I 规则链 -p 协议 -j 行为
规则链使用最多的是INPUT链, 它也是默认的规则链
测试1:
测试2:
测试3: 使用另一台主机ping 此主机, 就不能再ping通
-I 表示向规则链头部插入, 即插入以后, 此规则作为该链的第一条规则(i 大写)
-p 表示协议, 即要控制哪种协议的流量(小写)
-j 表示动作, 一般接REJECT 或 DROP
5.删除规则链中的规则 : iptables -D 规则链 数字
现在有一条INPUT规则
可以看到已经没有INPUT规则了
-D表示删除规则链中的规则
数字 从1开始, 删除第3条规则, 则 iptables -D INPUT 3
6.只允许部分主机访问:
比如, 我现在只允许网段内的主机访问 某服务, 同时拒绝其它主机
1.在默认规则中设置全部拒绝, 然后只开放允许的主机(但这样的话限制的太死了, 其它的访问都受限制)
2.可以设置我要允许哪些主机, 要拒绝哪些主机(并不影响其它的访问)
如下使用第2种方式:
-A 与-I 对应, -I是从头部插入, -A是从尾部插入
当要拒绝的流量中包含有要允许的流量, 注意须将要允许的规则放在前面
如上所示, 拒绝的主机中包含了允许的主机, 所以允许的规则插入到头部, 拒绝的规则放在了尾部
7.指定主机, 指定端口, 指定协议
iptables -I INPUT -s 192.168.43.51 -j REJECT 拒绝主机 192.168.43.51 访问
iptables -I INPUT -p tcp --dport 22 -j REJECT 拒绝访问22端口
iptables -I INPUT -p tcp --dport 1000:2000 -j REJECT 拒绝访问1000~2000内的端口
iptables -I INPUT -p tcp -s 192.168.43.10/24 --dport 1000:2000 -j REJECT 拒绝网段主机访问1000~2000内的端口
-s 指定主机 , 可指定单一主机, 也可以是网段内主机
-p 指定协议, 一般是tcp, udp, icmp
--dport指定端口, 可以指定单一端口, 也可指定区间内的端口
8. iptables服务: service iptables save
使用iptables命令配置的防火墙规则, 默认会在重启后失效
使用service iptables save可以使规则永久生效
但是在使用service iptables save时会报错, 因为没有安装 iptables服务
这时需要yum安装或更新: yum install iptables-services
解释: yum install iptables-service 用于安装iptables服务程序
就比如网络服务(service network restart) , 只不过network是系统自带的, iptables服务需要安装而已 所以在安装iptables服务后, 才可以像 service network start / restart / ... 这样使用
如: service iptables save, service iptables status, service iptables stop, service iptables restart
安装以后, 开机自启: systemctl enable iptables
但是重启后使用iptables -L -n 发现还是回到原来的样子
因为在centos7,rhel7中, 默认使用的防火墙工具是firewalld, 会影响到iptables工具
因此停用firewalld -> systemctl disable firewalld (或者systemctl musk firewalld锁定)