系列文章目录
`
文章目录
一、防火墙( FireWall ):隔离功能,工作在网络或主机边缘,
对进出网络或主机的数据包基于一定的规则检查,
并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,
基本上的实现都是默认情况下关闭所有的通过型访问,
只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中。
按保护范围划分:
主机防火墙:服务范围为当前一台主机
网络防火墙:服务范围为防火墙一侧的局域网
1.iptables的组成概述
Linux的防火墙体系主要工作在网络层,
针对数据包实施过滤和限制,
属于典型的包过滤防火墙(或称为网络层防火墙)。
Linux系统的防火墙体系基于内核编码实现,具有非常稳定的性能和高效率,也因此获得广泛的应用。
netfilter/iptables:IP信息包过滤系统,它实际上由两个组件 netfilter 和 iptables组成。
主要工作在网络层,针对IP数据包,体现在对包内的IP地址、端口等信息的处理。
通信五元素: 源/目的 端口 源/目的 IP 协议:(tcp/udp)
SCTP:在网络连接两端之间同时传输多个数据流的协议。SCTP提供的服务与UDP和TCP类似
通信四元素:源/目的 端口 源/目的 IP
2.四表五链
raw、mangle、nat、filter
优先级由高到低的顺序为:raw–>mangle–>nat–>filter
3.iptables五条链是:
PREROUTING链:处理数据包进入本机之前的规则。
INPUT链:处理数据包进入本机的规则。
FORWARD链:处理数据包转发到其他主机的规则。
OUTPUT链:处理本机发出的数据包的规则,一般不做处理。
POSTROUTING链:处理数据包离开本机之后的规则。
二、iptables
iptables 安装
CentOS7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables。
1.关闭firewalld防火墙
systemctl stop firewalld.service systemctl disable firewalld.service
2.安装iptables 防火墙
yum -y install iptables iptables-services
3.设置iptables开机启动
systemctl start iptables.service systemctl enable iptables.service
4.iptables防火墙的配置方法:
1、使用iptables命令行。
2、使用system-config-firewall; centso7不能使用 centos 6可以使用
1.iptables的命令格式:
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
-t:如果不指定 默认是filter
表名、链名用来指定 iptables 命令所操作的表和链,未指定表名时将默认使用 filter 表;
管理选项:表示iptables规则的操作方式,如插入、增加、删除、查看等;
匹配条件:用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理;
控制类型指的是数据包的处理方式,如允许、拒绝、丢弃等。
注意事项:
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链,一般不这么操作
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写
数据包的常见控制类型
对于防火墙,数据包的控制类型非常关键,直接关系到数据包的放行、封堵及做相应的日志记录等。
在 iptables 防火墙体系中,最常用的几种控制类型如下
ACCEPT:允许数据包通过。
DROP: 直接丢弃数据包,不给出任何回 应信息。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息。
SNAT: 修改数据包的源地址
DNAT: 修改数据包的本地地址
LOG: 在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。
2. iptables 命令的常用管理选项
管理选项 用法示例
-A 在指定链末尾追加一条 iptables -A INPUT (操作)
-I 在指定链中插入一条新的,未指定序号默认作为第一条 iptables -I INPUT (操作)
-P 指定默认规则 iptables -P OUTPUT ACCEPT (操作)
-D 删除 iptables -t nat -D INPUT 2 (操作)
-R 修改、替换某一条规则 iptables -t nat -R INPUT (操作)
-L 查看 iptables -t nat -L (查看)
-n 所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere,比如显示协议 端口号而不是服务名) iptables -L -n,iptables -nL,iptables -vnL (查看) |
-v 查看时显示更详细信息,常跟-L一起使用 (查看)
–line-numbers 规则带编号 iptables -t nat -L -n --line-number iptables -t nat -L --line-number
-F 清除链中所有规则 iptables -F (操作)
-X 清空自定义链的规则,不影响其他链 iptables -X
-Z 清空链的计数器(匹配到的数据包的大小和总和)iptables -Z
-S 看链的所有规则或者某个链的规则/某个具体规则后面跟编号
匹配的条件 作用
-p 指定要匹配的数据包的协议类型
-s 指定要匹配的数据包的源IP地址
-d 指定要匹配的数据包的目的IP地址
-i 指定数据包进入本机的网络接口
-o 指定数据包离开本机做使用的网络接口
–sport 指定源端口号
–dport 指定目的端口号
添加规则
添加规则的两个常用选项:
-A,在末尾追加规则。
-I,在指定位置前插入规则。如果不指定,则在首行插入
添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来插入规则。
[root@localhost ~]# iptables -F #清空规则
如果不写表名和链名,默认清空filter表中所有链里的所有规则
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j REJECT #禁止所有主机ping本机
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j ACCEPT #允许ping通,-A在前一条规则后添加
#匹配到了就不在匹配后面的规则
[root@localhost ~]# iptables -t filter -I INPUT 1 -p icmp -j ACCEPT #指定序号插入,插入到第一条
#即时生效
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j REJECT #允许任何主机tcp
[root@localhost ~]# iptables -I INPUT 1 -p udp -j ACCEPT #允许任何主机udp
[root@localhost ~]# iptables -nL --line-number #查看行规则的位置
#拒绝某一台主机,其他的可以:
[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.233.22 -p icmp -j REJECT
#拒绝多台主机:
[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.169.20,192.168.169。10 -p icmp -j REJECT
#不允许21的数据包出去,其他的就都ping不通了
[root@localhost ~]# iptables -t filter -A OUTPUT -s 192.168.233.21 -p icmp -j REJECT
#指定端口:
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT
tcpdump抓包工具的运用
wireshark 抓包工具只在windows中使用。
tcpdump 可以在Linux系统中使用。
tcpdump是Linux系统中自带抓包工具
-t:不显示时间戳
-s0 :抓取数据包时默认抓取长度为68字节。加上"-s0"后可以抓到完整的数据包。
-c 100 :只抓取100个数据包。
dst port ! 22 :不抓取目标端口是22的数据包。
src net 192.168.233.0/24 :数据包的源网络地址为192.168.233.0/24。Net:网段,host:主机。
-w ./target.cap ∶ 保存成cap文件,方便用ethereal (即wireshark)分析。
进行动态抓包处理(一旦遇到有指定数据包的出现,开始运转)
[root@localhost opt]# tcpdump -i ens33 -s0 -w ./ens33.cap
总结
外网进内网先换目的ip
内网进外网先换源ip
linux自带抓包工具tcpdump