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

  1. #禁用自带的firwalld
  2. systemctl stop firewalld
  3. systemctl mask firewalld
  4. #安装iptables
  5. yum install iptables-services -y
  6. #重启iptables初始化(/etc/syscofig/iptables)
  7. systemctl restart iptables
  8. #清空所有规则
  9. iptables -F
  10. #清空所有自定义规则
  11. iptables -X
  12. #所有计数器归0
  13. iptables -Z
  14. #保存配置
  15. 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的原理主要是对数据包的控制

clipboard_WPS图片.png

规则链之间的顺序

 ●入站: 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命令格式
clipboard_WPS图片.png
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