1、centos7中firewalld介绍
1)在RHEL7里有几种防火墙共存:FirewallD、iptables、ebtables,默认是使用FirewallD来管理netfilter子系统,不过底层调用的命令仍然是iptables等。
2)FirewallD跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制。
3)FirewallD自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说FirewallD和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过FirewallD和iptables的结构以及使用方法不一样罢了。
2、centos7初始化iptables
#禁用自带的firwalld
systemctl stop firewalld
systemctl mask firewalld
#安装iptables
yum install iptables-services -y
#重启iptables初始化(/etc/syscofig/iptables)
systemctl restart iptables
#清空所有规则
iptables -F
#清空所有自定义规则
iptables -X
#所有计数器归0
iptables -Z
#保存配置
service iptables save
3、iptables介绍
3.1 简介
Iptabels是与Linux内核集成的包过滤防火墙系统,用来保护服务器对流量包进行过滤,以及对包进行转发改变等。iptables可用于添加、编辑和除去规则
防火墙分类
(1)软件防火墙:软件防火墙需要运行在特定的计算机上,而且需要计算机的操作系统的支持。
(2)硬件防火墙:硬件防火墙其实就是一个普通pc机的架构,然后上面跑有专门的操作系统。
3.2 防火墙主要功能
1)数据包过滤的防火墙功能<br /> 2)网络地址转换<br /> 3)数据包内容修改
3.3 iptables的三表五链
三表
managle:数据包修改(QOS),用于实现服务质量
nat:地址转换
filter:包过滤,用于防火墙规则
规则表之间的优先顺序:
mangle>nat>filter
五链
INPUT链:处理输入数据包。
OUTPUT链:处理输出数据包。
FORWARD链:处理转发数据包。
PREROUTING链:用于目标地址转换(DNAT)。
POSTOUTING链:用于源地址转换(SNAT)。
动作
ACCEPT:接收数据包。
DROP:丢弃数据包。
REDIRECT:重定向、映射、透明代理。
SNAT:源地址转换。
DNAT:目标地址转换。
REJECT:拒绝
4、iptables原理
iptables的原理主要是对数据包的控制
规则链之间的顺序
●入站: PREROUTING——INPUT<br /> ●出站: OUTPUT——POSTROUTING<br /> ●转发:PREROUTING——FORWARD——POSTROUTING
4.1 Filter表:过滤数据包,默认表
(1)INPUT 链:过滤所有目标地址是本机的数据包(对进入本机数据包的过滤)
(2)OUTPUT 链:过滤所有本机产生的数据包(对源地址得数据包的过滤)
(3)FORWARD链:过滤所有路过本机的数据包(源地址和目标地址都不是本机的数据包。
4.2 NAT表:网络地址转换(Network Address Translation)
(1)DNAT:改变数据包的目的地址使包能重路由到某台机器
(2)SNAT: 改变数据包的源地址
Nat表包含3条链:
(1)PREROUTING链 :数据包到达防火墙时改变包的目的地址。
(2)OUTPUT链:改变本地产生数据包的目标地址。
(3)POSTROUTING:在数据包离开防火墙时改变数据包的源地址。
Mangle表:修改数据包,改变包头中内容(TTL, TOS, MARK )作为了解!
(1)TOS :设置改变数据包的服务类型,不要使用TOS设置发往Internet的包除非打算依赖TOS来路由,不能在表中配置任何过滤。SNAT、DNAT
(2)TTL:改变数据包的生存时间,可以让数据包只有一个特殊的TTL,欺骗ISP,有些ISP并不希望多台计算机共享一个连接访问Internet,ISP通过检查一台计算机所发出的数据包是否含有不同的TTL来判断。
(3)Mask:给数据包设置特殊的标记,通过标记配置带宽限制和基于请求分类。
Mangle表的5条链:
(1)PREROUTING 链:数据包进入防火墙后,路由判断之前改变数据包。
(2)POSTROUTING链:数据包确定了目标地址后,即路由判断前改变数据包。
(3)OUTPUT链:在数据包被确定目的地址前改变数据包
(4)INPUT链:在数据包进入本机后,应用程序接受之前改变数据包。
(5)FORWARD链:第一次路由判断之后,最后一次路由判断前改变数据包。
5、防火墙filter 命令
filter iptables操作的默认表也是filter表,默认链:INPUT
iptables命令格式
iptables的命令格式较为复杂,一般的格式如下
iptables 表链匹配操作
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网>
--sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
(1) -t 表
表选项用于指定命令应用于哪个iptables内置表。
(2)链命令**
命令选项用于指定iptables的执行方式,包括插入规则,删除规则和添加规则
命令 说明
-L --list <链名> 查看iptables规则列表
-A --append <链名> 在规则列表的最后增加1条规则
-I --insert <链名> 在指定的位置插入1条规则
-D --delete <链名> 从规则列表中删除1条规则
-F --flush <链名> 删除表中所有规则
-v --verbose <链名> 与-L他命令一起使用显示更多更详细的
信息
-P 设置表的默认策略 iptables -P INPUT DROP
(3) 匹配规则**
匹配选项指定数据包与规则匹配所具有的特征,包括源地址,目的地址,传输协议和端口号,如下表所示
匹配 说明
-i --in-interface 网络接口名 指定数据包从哪个网络接口进入,
-o --out-interface 网络接口名 指定数据包从哪个网络接口输出
-p ---proto 协议类型 指定数据包匹配的协议,如TCP、UDP和ICMP等
-s --source 源地址或子网 指定数据包匹配的源地址
--sport 源端口号 指定数据包匹配的源端口号
-d --destination 指定目的地址
--dport 目的端口号 指定数据包匹配的目的端口号
-m:extend matches,这个选项用于提供更多的匹配参数,如:
-m state --state NEW ,ESTABLISHED,RELATED,INVALID
-m tcp --dport 22
-m multiport --dports 80,8080
-m icmp --icmp-type 8
了解四种状态:
NEW : 该包想要开始一个连接(重新连接或将连接重定向)
RELATED:该包是属于某个已经建立的连接所建立的新连接。
ESTABLISHED :只要发送并接到应答,一个数据连接从NEW变为ESTABLISHED,而且该状态会继续匹配这个连接的后续数据包。
INVALID:数据包不能被识别属于哪个连接或没有任何状态比如内存溢出,收到不知属于哪个连接的ICMP错误信息,一般应该DROP这个状态的任何数据。
(4)动作 ACCEPT、REJECT、DROP、REDIRECT
我们只说明其中最常用的动作:
ACCEPT 接受数据包
REJECT 拦阻该数据包
iptables -t filter -A INPUT -p TCP —dport 22 -j REJECT
DROP 丢弃数据包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
REDIRECT 将封包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续比对其它规则。这个功能可以用来实作透明代理 或用来保护web 服务器。例如:
iptables -t nat -A PREROUTING -p tcp —dport 80 -j REDIRECT—to-ports 8081
举例:
开放指定端口
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT
#允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#允许访问22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#允许访问80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
#允许服务的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#允许FTP服务的20端口
iptables -A INPUT -j REJECT
#禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT
#禁止其他未允许的规则访问
#其他入站一律绿灯
iptables -P INPUT ACCEPT
#所有出站一律绿灯
iptables -P OUTPUT ACCEPT
#所有转发一律绿灯
iptables -P FORWARD ACCEPT
屏蔽IP
iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令是
其他参数举例
命令 -I, --insert
范例:iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
说明: 在第一条规则前插入一条规则,原本该位置上的规则将会往后移动一个顺位。
命令 -F, --flush
范例: iptables -F INPUT
说明: 删除INPUT规则链中的所有规则。
参数 -m multiport --port
范例:iptables -A INPUT -p tcp -m multiport --port 22,53,80,110 -j ACCEPT
#列出序号
iptables -L -n --line-number
#删除第8序列
iptables -D INPUT 8
或者
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
删除序号
iptables -F 清空
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
接受22端口tcp的状态为NEW、ESTABLISHED
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
出口接受状态ESTABLISHED
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
用iptables做本机端口转发
做不同主机端口转发例子:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -d 192.168.123.69 -p tcp --dport 22000 -j DNAT --to-destination 192.168.100.65:22
iptables -t nat -A POSTROUTING -d 192.168.100.65 -p tcp --dport 22 -j SNAT --to-source 192.168.123.69
(本机)
防火墙保存重启
centos6:/etc/init.d/iptables save 保存更改
firewall-cmd --reload (7)
/etc/init.d/iptables restart
iptables -F #清空所有的防火墙规则
iptables -X #删除用户自定义的空链
iptables -Z #清空计数
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT #22为你的ssh端口, -s 192.168.1.0/24表示允许这个网段的机器来连接,其它网段的ip地址是登陆不了你的机器的。 -j ACCEPT表示接受这样的请求
iptables -A INPUT -i lo -j ACCEPT #本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许 iptables -A OUTPUT -o lo -j ACCEPT
iptables -P INPUT DROP #配置默认的不让进 iptables -P FORWARD DROP #默认的不允许转发 iptables -P OUTPUT ACCEPT #默认的可以出去
iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT #允许机房内网机器可以访问 iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT #允许机房内网机器可以访问 iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT #允许183.121.3.7访问本机的3380端口
生产环境
[root@zejin238 ~]# cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak #任何改动之前先备份,请保持这一优秀的习惯 [root@zejin238 ~]# iptables-save > /etc/sysconfig/iptables [root@zejin238 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Wed Sep 28 18:06:07 2016
*filter
:INPUT DROP [8:632]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [4:416]
-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.1.0/24 -j ACCEPT
-A INPUT -s 192.168.140.0/24 -j ACCEPT
-A INPUT -s 183.121.3.7/32 -p tcp -m tcp --dport 3380 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on Wed Sep 28 18:06:07 2016