firewalld:防火墙,其实就是一个隔离工具:工作于主机或者网络的边缘,对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配检测,对于能够被规则所匹配的报文做出相应处理的组件(组件可以是硬件,也可以是软件)
主机防火墙 网络防火墙
表:
filter:数据包过滤表 nat:网路地址转换表 mangle:数据包设置标记 raw:关闭nat表上启用的连接追踪功能链:
PREROUTING:在进行路由选择后数据包处理 INPUT:入站数据包处理 FORWARD:转发数据包处理 OUTPUT:出站数据包处理 POSTROUTING:在进行路由选择前数据包处理要实现什么功能:判断添加在哪张表上 报文流经的路劲:判断添加在哪个链上
策略应用优先级:raw,mangle,nat,filter 策略常用优先级:filter,nat,mangle,raw
iptables语法: iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
-t:指定表名 ,不指定默认filter -P:指定链名
选项:大写字母
-A:append,将新规则追加于指定链的尾部 -I:insert,将新规则插入至指定链的指定位置 -D:delete,删除指定链上的指定规则:条件:
-s, source:检查报文中源ip地址是否符合此处指定的地址范围 -d, destination:检查报文中ip地址是否符合此处指定的地址范围 -p, protocol(udp|tcp|icmp):检查报文中的协议 -i, input-interface:数据报文的流入接口:仅能用于PREROUTING,INPUT,FORWARD链上 -o, out-interface:数据报文的流出接口:仅能用于POSTROUTING,OUTPUT,FORWARD链上控制类型:
ACCEPT:允许通过 DROP:直接丢弃,不给出任何回应 REJECT:拒绝通过,必要时会给出提出 LOG:记录日志信息,然后传给下一条规则继续匹配 RETURN:返回调用链 MARK:做防火墙标记 DNAT:目标地址转换 SNAT:源地址转换命令案例:
查看filter表上面的所有规则(-t是指定表,默认是filter表) iptables -t filter -L -n 清空所有规则(fileter) iptables -F 删除所有自定义链 iptables -X 凡是ping 192.168.254.74主机都拒绝 iptables -t filter -A INPUT -d 192.168.254.74 -p icmp -j REJECT|DROP|ACCEPT 以行数字来显示 iptables -L -n --line-number 删除filter表上INPUT链上的第一条规则 iptables -D INPUT 1 设置INPUT链为黑名单 iptables -P INPUT DROP 设置客户端允许ssh连接主机 iptable -A INPUT -s source_ip -d destination_ip -p tcp --dport 22 -j ACCEPT iptable -A OUPUT -s destination_ip -d source_ip -p tcp --sport 22 -j ACCEPT以Windows和linux虚拟机为环境配置ssh登录和访问httpd网页 192.168.30.1(windows) 192.168.30.155(linux)
思路分析:
远程管理工具用的就是ssh服务协议为tcp,在Windows上用ssh服务访问linux主机,数据包要在fileter表进行规则过滤;首先进入INPUT链进行过滤,符合规则可以通过数据到达用户空间,linux主机需要发送响应报文并要通过OUTPUT过滤规则返回响应完成了响应后ssh才能正常访问我们选择清空这些规则和自定义的链
#清空所有规则(fileter) iptables -F iptables -X [root@c2 ~]# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination将INPUT和OUTPUT链修改为DROP(抛弃任何数据包)之后在添加一条条的白名单 设置了上述第一条后SSH连接马上就断开了
根据思路的分析我们首先要配置INPUT链上的规则 再配置OUTPUT链上规则,实现数据一来一回完整传输 配置完成后测试22号端口,telnet或用远程管理工具登录成功
httpd服务同理将端口号该为80就可以,配置规则如下
之前我们配置的防火墙规则只是临时性的,重启之后手动配置的规则消失会变成系统定义的规则,这是如果想保存已配置的规则就需要保存
思路分析:
1.SNAT 首先内网ip192.168.20.2想要访问外网web服务ip172.16.100.2,不做SNAT前在假定可以直接访问外网web服务,只不过外网web服务日志会记录下所有访问它的地址,这对内网ip相对不安全,所以我们一是为了安全考虑;二是因为真实内网ip是C类网是不能访问外网,公网ip数量较紧张,把内网ip进行SNAT(源地址转换)转换成公网ip进行访问 然后内网client访问的目标webserver经过防火墙要在POSTROUTING链进行SNAT,将地址由20.2转换成100.1访问100.22.DNAT (1).首先web端只知道数据是从100.1发给它的,所以数据包返回的目的ip就只能到100.1 (2).实际数据包是要返回给20.2的,这时我们需要给它进行DNAT(目标地址转换) (3).数据包进过防火墙要在PREROUTING链进行DNAT,将地址由100.1转换成20.2 为了方便我们用图上web端访问client端的web服务模拟数据包返回源地址为192.168.20.2经过防火墙都转换成172.16.100.1这个ip地址(SNAT:源地址转换)
iptables -t nat -A POSTROUTING -s 192.168.20.2 -d 172.168.100.2 -j SNAT --to-source 172.16.100.1我们用curl抓取100.2web服务网页的内容,为了方便区分我们实现在网站根目录写了内容 访问目标地址为172.116.100.1这个ip的都转发给192.168.20.2(DNAT目标地址转换)
iptables -t nat -A PREROUTING -d 172.16.100.1 -j DNAT --to-destination 192.168.20.2