Linux中的防火墙

RHEL中有几种防火墙共存:

  • iptables
  • firewalld
  • ip6tables
  • ebtables

这些软件本身其实并不具备防火墙功能,他们的作用都是在用户空间中管理和维护规则,只不过规则结构和使用方法不一样罢了,真正利用规则进行过滤是由内核的netfilter完成的

扩展:整个linux内部结构可以分为三部分,从最底层到最上层依次是:硬件-->内核空间-->用户空间。

CentOS7默认采用的是firewalld管理netfilter子系统,底层调用的仍然是iptables命令。不同的防火墙软件相互间存在冲突,使用某个时应禁用其他的。

  1. systemctl start/stop/enable/disable/status/is-active xxxx //systemctl服务管理命令

Netfilter

  netfilter是Linux 2.4内核引入的全新的包过滤引擎。由一些数据包过滤表组成,这些表包含内核用来控制信息包过滤的规则集。iptables等等都是在用户空间修改过滤表规则的便捷工具。

  netfilter在数据包必须经过且可以读取规则的位置,共设有5个控制关卡。这5个关卡处的检查规则分别放在5个规则链中(有的叫钩子函数(hook functions)。也就是说5条链对应着数据包传输路径中的5个控制关卡,链中的规则会在对应的关卡检查和处理。任何一个数据包,只要经过本机,必然经过5个链中的某个或某几个。

  • PREROUTING      数据包刚进入网络接口之后,路由之前,
  • INPUT                数据包从内核流入用户空间。
  • FORWARD         在内核空间中,从一个网络接口进入,到另一个网络接口去。转发过滤。
  • OUTPUT             数据包从用户空间流出到内核空间。
  • POSTROUTING   路由后,数据包离开网络接口前。

  链其实就是包含众多规则的检查清单,每一条链中包含很多规则。当一个数据包到达一个链时,系统就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则就继续检查下一条规则,如果该数据包不符合链中任一条规则,系统就会根据该链预先定义的默认策略来处理数据包。

数据包的传输过程

  1. 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
  2. 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
  3. 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

  可以看出,刚从网络接口进入的数据包尚未进行路由决策,还不知道数据要走向哪里,所以进出口处没办法实现数据过滤,需要在内核空间设置转发关卡、进入用户空间关卡和离开用户空间关卡。

iptables

参考文档:http://drops.wooyun.org/tips/1424

起源于freeBSD的ipfirewall(内核1.x时代),所有规则都在内核中;2.0x后更名为ipchains,可以定义多条规则并串用;现在叫iptables,使用表组织规则链。

iptablses按照用途和使用场合,将5条链各自切分到五张不同的表中。也就是说每张表中可以按需要单独为某些链配置规则。例如,mangle表和filter表中都能为INPUT链配置规则,当数据包流经INPUT位置(进入用户空间),这两个表中INPUT链的规则都会用来做过滤检查。

五张表,每张表侧重于不同的功能

  • filter        数据包过滤功能。只涉及INPUT, FORWARD, OUTPUT三条链。是iptables命令默认操纵的表。
  • nat          地址转换功能。NAT转换只涉及PREROUTING, OUTPUT, POSTOUTING三条链。可通过转发让局域网机器连接互联网
  • mangle     数据包修改功能。每条链上都可以做修改操作。修改报文元数据,做防火墙标记等。
  • raw          快速通道功能。为了提高效率,优先级最高,符合raw表规则的数据包会跳过一些检查。
  • security    需要和selinux结合使用,内置规则比较复杂,通常都会被关闭

  iptables还支持自定义规则链。自定义的链必须和某个特定的链关联起来。可在某个链中设定规则,满足一定条件的数据包跳转到某个目标链处理,目标链处理完成后返回当前链中继续处理后续规则。

  因为链中规则是从头到尾依次检查的,所以规则的次序是非常重要的。越严格的规则应该越靠前。

iptablse服务管理

service --status-all

  1. service iptables start|stop|restart|status
  2. service iptables save //定义的所有内容,在重启时都会失效。调用save命令可以把规则保存到文件/etc/sysconfig/iptables中。
  3. iptables-save //保存规则
  4. iptables-restore //加载规则。开机的时候,会自动加载/etc/sysconfig/iptables
  5. iptables-restore < /etc/sysconfig/iptables2 //加载自定义的规则文件
  6.  
  7. //iptables服务配置文件: /etc/sysconfig/iptables-config
  8. //iptables规则文件: /etc/sysconfig/iptables
  9.  
  10. echo "">/proc/sys/net/ipv4/ip_forward //打开iptables转发:

iptables命令参考

iptables [-t TABLE] COMMAND [CHAIN] [CRETIRIA]...  [-j  ACTION]

省缺表名为filter。命令中用到的序号(RULENUM)都基于1。

COMMAND 命令选项

  1. -A|--append CHAIN //链尾添加新规则
  2. -D|--delete CHAIN [RULENUM] //删除链中规则,按需序号或内容确定要删除的规则
  3. -I|--insert CHAIN [RULENUM] //在链中插入一条新的规则,默认插在开头
  4. -R|--replace CHAIN RULENUM //替换、修改一条规则,按序号或内容确定
  5. -L|--list [CHAIN [RULENUM]] //列出指定链或所有链中指定规则或所有规则
  6. -S|--list-urles [CHAIN [RULENUM]] //显示链中规则
  7. -F|--flush [CHAIN] //清空指定链或所有链中规则
  8. -Z|--zero [CHAIN [RULENUM]] //重置指定链或所有链的计数器(匹配的数据包数和流量字节数)
  9. -N|--new-chain CHAIN //新建自定义规则链
  10. -X|--delete-cahin [CHAIN] //删除指定表中用户自定义的规则链
  11. -E|--rename-chain OLDCHAIN NEWCHAIN //重命名链,移动任何引用
  12. -P|-policy CHAIN TARGET //设置链的默认策略,数据包未匹配任意一条规则就按此策略处理

CRETIRIA 条件匹配

分为基本匹配和扩展匹配,扩展匹配又分为隐式匹配和显示匹配

基本匹配

  1. -p|--proto PROTO //按协议匹配,如tcp、udp、icmp,all表示所有协议。 (/etc/protocols中的协议名)
  2. -s|--source ADDRESS[/mask]... //按数据包的源地址匹配,可使用IP地址、网络地址、主机名、域名
  3. -d|--destination ADDRESS[/mask]... //按目标地址匹配,可使用IP地址、网络地址、主机名、域名
  4. -i|--in-interface INPUTNAME[ +] //按入站接口(网卡)名匹配,+用于通配。如 eth0, eth+ 。一般用在INPUT和PREROUTING链
  5. -o|--out-interface OUTPUTNAME[+] //按出站接口(网卡)名匹配,+用于通配。如 eth0, eth+ 。一般用在OUTPUT和POSTROUTING链
  6.  
  7. 可使用 ! 可以否定一个子句,如-p !tcp

扩展匹配

-m|--match MATCHTYPE  EXTENSIONMATCH...    //扩展匹配,可能加载extension

如: -p tcp  -m tcp  --dport 80

隐式扩展匹配(对-p PROTO的扩展,或者说是-p PROTO的附加匹配条件)

-m PROTO 可以省略,所以叫隐式

  1. -m tcp //-p tcp的扩展
  2.     --sport [!]N[:M] //源端口, 服务名、端口、端口范围。
  3.     --dport [!]N[:M] //目标端口,服务名、端口、端口范围
  4.     --tcp-flags CHECKFLAGS FLAGSOFTRUE //TCP标志位:SYN(同步),ACK(应答),RST(重置),FIN(结束),URG(紧急),PSH(强迫推送)。多个标志位逗号分隔。
                             //CHECKFLAGS为要检查的标志位,FLAGSOFTRUE为必须为1的标志位(其余的应该为0)
  5.     --syn //第一次握手。 等效于 --tcpflags syn,ack,fin,rst syn 四个标志中只有syn为1
  6. -m udp //-p udp的扩展
  7.     --sport N[-M]
  8.     --dport N[-M]
  9. -m icmp //隐含条件为-p icmp
  10.     --icmp-type N //8:echo-request 0:echo-reply

显示扩展匹配

  1. -m state
  2.     --state //连接状态检测,NEW,ESTABLISHED,RELATED,INVALID
  3. -m multiport
  4.     --source-ports PORT[,PORT]...|N:M //多个源端口,多个端口用逗号分隔,
  5.     --destination-ports PORT[,PORT]...|N:M //多个目的端口
  6.     --ports                      //多个端口,每个包的源端口和目的端口相同才会匹配
  7. -m limit
  8.     --limit N/UNIT //速率,如3/minute, 1/s, n/second , n/day
  9.     --limit-burst N //峰值速率,如100,表示最大不能超过100个数据包
  10. -m connlimit
  11.     --connlimit-above N //多于n个,前面加!取反
  12. -m iprange
  13.     --src-range IP-IP
  14.     --dst-range IP-IP
  15. -m mac
  16.     --mac-source //mac地址限制,不能用在OUTPUT和POSTROUTING规则链上,因为封包要送到网卡后,才能由网卡驱动程序透过ARP 通讯协议查出目的地的MAC 地址
  17. -m string
  18.     --algo [bm|kmp] //匹配算法
  19.     --string "PATTERN" //匹配字符模式
  20. -m recent
  21.     --name //设定列表名称,默认为DEFAULT
  22.     --rsource //源地址
  23.     --rdest //目的地址
  24.     --set //添加源地址的包到列表中
  25.     --update //每次建立连接都更新列表
  26.     --rcheck //检查地址是否在列表
  27.     --seconds //指定时间。必须与--rcheck或--update配合使用
  28.     --hitcount //命中次数。必须和--rcheck或--update配合使用
  29.     --remove //在列表中删除地址
    -m time
        --timestart h:mm
        --timestop hh:mm
        --days DAYS //Mon,Tue,Wed,Thu,Fri,Sat,Sun; 逗号分隔
    -m mark
        --mark N //是否包含标记号N
    -m owner
        --uid-owner 500 //用来匹配来自本机的封包,是否为某特定使用者所产生的,可以避免服务器使用root或其它身分将敏感数据传送出
        --gid-owner O //用来匹配来自本机的封包,是否为某特定使用者群组所产生的
        --pid-owner 78 //用来匹配来自本机的封包,是否为某特定进程所产生的
        --sid-owner 100 //用来匹配来自本机的封包,是否为某特定连接(Session ID)的响应封包

ACTION 目标策略(TARGET)

  1. -j|--jump TARGET //跳转到目标规则,可能加载target extension
  2. -g|--goto CHAIN //跳转到指定链,不再返回
  • ACCEPT             规则验证通过,不再检查当前链的后续规则,直接跳到下一个规则链。
  • DROP                直接丢弃数据包,不给任何回应。中断过滤。
  • REJECT             拒绝数据包通过,会返回响应信息。中断过滤。
    • --reject-with  tcp-reset|port-unreachable|echo-reply
  • LOG                  在/var/log/messages文件中记录日志,然后将数据包传递给下一条规则。详细位置可查看/etc/syslog.conf配置文件
    • --log-prefix "INPUT packets"
  • ULOG                更广范围的日志记录信息
  • QUEUE              防火墙将数据包移交到用户空间,通过一个内核模块把包交给本地用户程序。中断过滤。
  • RETURN            防火墙停止执行当前链中的后续规则,并返回到调用链。主要用在自定义链中。
  • custom_chain    转向自定义规则链
  • DNAT                目标地址转换,改变数据包的目标地址。外网访问内网资源,主要用在PREROUTING。完成后跳到下一个规则链
    • --to-destination ADDRESS[-ADDRESS][:PORT[-PORT]]
  • SNAT                源地址转换,改变数据包的源地址。内网访问外网资源。主机的IP地址必须是静态的,主要用在POSTROUTING。完成后跳到下一个规则链。
    • --to-source ADDRESS[-ADDRESS][:PORT[-PORT]]
  • MASQUERADE   源地址伪装,用于主机IP是ISP动态分配的情况,会从网卡读取主机IP。直接跳到下一个规则链。
    • --to-ports 1024-31000
  • REDIRECT        数据包重定向,主要是端口重定向,把包分流。处理完成后继续匹配其他规则。能会用这个功能来迫使站点上的所有Web流量都通过一个Web高速缓存,比如Squid。
    • --to-ports 8080
  • MARK                 打防火墙标记。继续匹配规则。
    • --set-mark 2
  • MIRROR           发送包之前交换IP源和目的地址,将数据包返回。中断过滤。

辅助选项

  1. -t|--table TABLE //指定操作的表,默认的表为filter
  2. -n|--numeric //用数字形式显示地址和端口,显示主机IP地址而不是主机名
  3. -x|--exact //计数器显示精确值,不做单位换算
  4. -v|--verbose (x3) //查看规则列表时,显示更详细的信息
  5. -line-numbers //查看规则表时,显示在链中的序号
  6. -V|--version
  7. -h|--help
    [option] --help //查看特定选项的帮助,如iptables -p icmp --help
  8.  
  9. --fragment -f //match second or further fragments only
  10. --modprobe=<command> //try to insert modules using this command
  11. --set-counters PKTS BYTES //set the counter during insert/append

state  TCP链接状态

  • NEW                 第一次握手,要起始一个连接(重设连接或将连接重导向)
  • ESTABLISHED   数据包属于某个已经建立的连接。第二次和第三次握手   (ack=1)
  • INVALID           数据包的连接编号(Session ID)无法辨识或编号不正确。如SYN=1 ACK=1 RST=1
  • RELATED          表示该封包是属于某个已经建立的连接,所建立的新连接。如有些服务使用两个相关的端口,如FTP,21和20端口一去一回,FTP数据传输(上传/下载)还会使用特殊的端口

只允许NEW和ESTABLISHED进,只允许ESTABLISHED出可以阻止反弹式木马。

使用示例

  1. iptables -F //删除iptables现有规则
  2. iptables -L [-v[vv] -n] //查看iptables规则
  3. iptables -A INPUT -i eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT //在INPUT链尾添加一条规则
  4. iptables -I INPUT -i eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT //在INPUT链中插入为第2条规则
  5. iptables -D INPUT //删除INPUT链中第2条规则
  6. iptables -R INPUT -i eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT //替换修改第三条规则
  7. iptables -P INPUT DROP //设置INPUT链的默认策略为DROP
  8.  
  9. //允许远程主机进行SSH连接
  10. iptables -A INPUT -i eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT
  11. iptables -A OUTPUT -o eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT
  12.  
  13. //允许本地主机进行SSH连接
  14. iptables -A OUTPUT -o eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT
  15. iptables -A INTPUT -i eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT
  16.  
  17. //允许HTTP请求
  18. iptables -A INPUT -i eth0 -p tcp --dport -m state --state NEW,ESTABLISHED -j ACCEPT
  19. iptables -A OUTPUT -o eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT
  20.  
  21. //限制ping 192.168.146.3主机的数据包数,平均2/s个,最多不能超过3个
  22. iptables -A INPUT -i eth0 -d 192.168.146.3 -p icmp --icmp-type -m limit --limit /second --limit-burst -j ACCEPT
  23.  
  24. //限制SSH连接速率(默认策略是DROP)
  25. iptables -I INPUT -p tcp --dport -d 192.168.146.3 -m state --state ESTABLISHED -j ACCEPT
  26. iptables -I INPUT -p tcp --dport -d 192.168.146.3 -m limit --limit /minute --limit-burst -m state --state NEW -j ACCEPT
  27.  
  28. //防止syn攻击(限制syn的请求速度)
  29. iptables -N syn-flood
  30. iptables -A INPUT -p tcp --syn -j syn-flood
  31. iptables -A syn-flood -m limit --limit /s --limit-burst -j RETURN
  32. iptables -A syn-flood -j DROP
  33.  
  34. //防止syn攻击(限制单个ip的最大syn连接数)
  35. iptables A INPUT i eth0 p tcp --syn -m connlimit --connlimit-above -j DROP
  36.  
  37. iptables -I INPUT -p tcp -dport -m connlimit --connlimit-above -j DROP //利用recent模块抵御DOS攻击
  38. iptables -I INPUT -p tcp --dport -m state --state NEW -m recent --set --name SSH //单个IP最多连接3个会话
  39. Iptables -I INPUT -p tcp --dport -m state NEW -m recent --update --seconds --hitcount --name SSH -j DROP //只要是新的连接请求,就把它加入到SSH列表中。5分钟内你的尝试次数达到3次,就拒绝提供SSH列表中的这个IP服务。被限制5分钟后即可恢复访问。
  40.  
  41. iptables -I INPUT -p tcp --dport -m connlimit --connlimit-above -j DROP //防止单个IP访问量过大
  42. iptables A OUTPUT m state --state NEW j DROP //阻止反弹木马
  43. iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit /m -j ACCEPT //防止ping攻击
  44.  
  45. //只允许自己ping别人,不允许别人ping自己
  46. iptables -A OUTPUT -p icmp --icmp-type -j ACCEPT
  47. iptables -A INPUT -p icmp --icmp-type -j ACCEPT
  48.  
  49. //对于127.0.0.1比较特殊,我们需要明确定义它
  50. iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
  51. iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
  52.  
  53. //SNAT 基于原地址转换。许多内网用户通过一个外网 口上网的情况。将我们内网的地址转换为一个外网的IP,共用外网IP访问外网资源。
  54. iptables -t nat -A POSTROUTING -s 192.168.10.0/ -j SNAT --to-source 172.16.100.1
  55.  
  56. //当外网地址不是固定的时候。将外网地址换成 MASQUERADE(动态伪装):它可以实现自动读取外网网卡获取的IP地址。
  57. iptables -t nat -A POSTROUTING -s 192.168.10.0/ -j MASQUERADE
  58.  
  59. //DNAT 目标地址转换。目标地址转换要做在到达网卡之前进行转换,所以要做在PREROUTING这个位置上
  60. iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport -j DNAT --to-destination 172.16.100.2

firewalld

dynamic firewall daemon。支持ipv4和ipv6。Centos7中默认将防火墙从iptables升级为了firewalld。firewalld相对于iptables主要的优点有:

  • firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;
  • firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。  

1.firewalld的主要概念

1.1.过滤规则集合:zone

  • 一个zone就是一套过滤规则,数据包必须要经过某个zone才能入站或出站。不同zone中规则粒度粗细、安全强度都不尽相同。可以把zone看作是一个个出站或入站必须经过的安检门,有的严格、有的宽松、有的检查的细致、有的检查的粗略。
  • 每个zone单独对应一个xml配置文件,文件名为<zone名称>.xml。自定义zone只需要添加一个<zone名称>.xml文件,然后在其中添加过滤规则即可。
  • 每个zone都有一个默认的处理行为,包括:default(省缺),   ACCEPT,   %%REJECT%%,  DROP
  • firewalld提供了9个zone:
    • drop        任何流入的包都被丢弃,不做任何响应。只允许流出的数据包。
    • block    任何流入的包都被拒绝,返回icmp-host-prohibited报文(ipv4)或icmp6-adm-prohibited报文(ipv6)。只允许由该系统初始化的网络连接
    • public     默认的zone。部分公开,不信任网络中其他计算机,只放行特定服务。
    • external    只允许选中的服务通过,用在路由器等启用伪装的外部网络。认为网路中其他计算器不可信。
    • dmz         允许隔离区(dmz)中的电脑有限的被外界网络访问,只允许选中的服务通过。
    • work          用在工作网络。你信任网络中的大多数计算机不会影响你的计算机,只允许选中的服务通过。
    • home        用在家庭网络。信任网络中的大多数计算机,只允许选中的服务通过。
    • internal     用在内部网络。信任网络中的大多数计算机,只允许选中的服务通过。
    • trusted     允许所有网络连接,即使没有开放任何服务,那么使用此zone的流量照样通过(一路绿灯)。

  

zone配置文件示例:public.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <zone target="default">
  3. <short>Public</short>
  4. <description>For use in public areas...</description>
  5. <service name="ssh"/>
  6. <service name="dhcpv6-client"/>
  7. </zone>

1.2.service

  • 一个service中可以配置特定的端口(将端口和service的名字关联)。zone中加入service规则就等效于直接加入了port规则,但是使用service更容易管理和理解。
  • 定义service的方式:添加<service名称>.xml文件,在其中加入要关联的端口即可。

service示例:ssh.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <service>
  3. <short>SSH</short>
  4. <description>Secure Shell (SSH)...</description>
  5. <port protocol="tcp" port="22"/>
  6. </service>

1.3.过滤规则

  • source             根据数据包源地址过滤,相同的source只能在一个zone中配置。
  • interface          根据接收数据包的网卡过滤
  • service             根据服务名过滤(实际是查找服务关联的端口,根据端口过滤),一个service可以配置到多个zone中。
  • port                 根据端口过滤
  • icmp-block        icmp报文过滤,可按照icmp类型设置
  • masquerade      ip地址伪装,即将接收到的请求的源地址设置为转发请求网卡的地址(路由器的工作原理)。
  • forward-port      端口转发
  • rule                  自定义规则,与itables配置接近。rule结合--timeout可以实现一些有用的功能,比如可以写个自动化脚本,发现异常连接时添加一条rule将相应地址drop掉,并使用--timeout设置时间段,过了之后再自动开放。

 1.4.过滤规则优先级

  1. source               源地址
  2. interface            接收请求的网卡
  3. firewalld.conf中配置的默认zone

2.firewalld配置文件

2.1.firewalld配置方式

  • firewall-config       GUI工具
  • firewall-cmd         命令行工具
  • 直接编辑xml文件    编辑后还需要reload才生效

2.2.firewall-cmd命令

  1. firewall-cmd --version
  2. firewall-cmd --help
  3. firewall-cmd --state //查看firewalld服务状态
  4. firewall-cmd --reload //修改配置文件后,动态加载,不会断开连接。
  5. firewall-cmd --complete-reload //完全重新加载看,会断开连接。类似重启。
  6. firewall-cmd --panic-on/--panic-off/--query-panic //panic模式开启/关闭/查询。panic模式会丢弃所有出入站的数据包,一段时间后所有连接都会超时中断。
  7. firewall-cmd --get-active-zones //查看所有绑定了source, interface和默认的zone,以及各个zone的生效条件。
  8. firewall-cmd --set-default-zone=ZONE //设置默认的zone,也可以修改firewalld.conf中的DefaultZone选项。

  9. firewall-cmd --zone=xxxx --list-all
  10. //反向查询: 根据source或interface查询对应的zone
  11. firewall-cmd --get-zone-of-interface=interface
  12. firewall-cmd --get-zone-of-source=source[/mask]
  13.  
  14. //更多用法在后面列出......

部分命令共同的参数说明:

  • --zone=ZONE              指定命令作用的zone,省缺的话命令作用于默认zone
  • --permanent               有此参数表示命令只是修改配置文件,需要reload才能生效;无此参数则立即在当前运行的实例中生效,不过不会改动配置文件,重启firewalld服务就没效果了。
  • --timeout=seconds      表示命令效果持续时间,到期后自动移除,不能和--permanent同时使用。例如因调试的需要加了某项配置,到时间自动移除了,不需要再回来手动删除。也可在出现异常情况时加入特定规则,过一段时间自动解除。

 

2.3.配置文件存储位置

firewalld的配置文件以xml为主(主配置文件firewalld.conf除外),有两个存储位置:

  • /etc/firewalld/              存放修改过的配置(优先查找,找不到再找默认的配置)
  • /usr/lib/firewalld/         默认的配置

修改配置的话只需要将/usr/lib/firewalld中的配置文件复制到/etc/firewalld中修改。恢复配置的话直接删除/etc/firewalld中的配置文件即可。

2.4.配置文件结构

  • firewalld.conf                       主配置文件,键值对格式

    • DefaultZone         默认使用的zone,默认值为public
    • MinimalMark        标记的最小值,默认为100
    • CleanupOnExit     退出firewalld后是否清除防火墙规则,默认为yes
    • Lockdown            是否其他程序允许通过D-BUS接口操作,使用lockdown-whitelist.xml限制程序,默认为no
    • IPv6_rpfilter         类似rp_filter,判断接收的包是否是伪造的(通过路由表中的路由条目,查找uRPF),默认为yes
  • lockdown-whitelist.xml
  • direct.xml                           direct功能,直接使用防火墙的过滤规则,便于iptables的迁移
  • zones/                                zone配置文件
  • services/                             service配置文件
  • icmptypes/                          icmp类型相关的配置文件

2.5.zone文件中配置规则

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <zone target="default"> <!--target属性为zone的默认处理行为,可选值:default(省缺), ACCEPT, %%REJECT%%, DROP -->
  3. <short>Demo</short>
  4. <description>demo...</description>
  5. <source address="address[/mask]">
  6. <interface name="ifcfg-em1"/> <!--也可在网卡配置文件ifcfg-*中配置,只需要加入 ZONE=public -->
  7. <service name="ssh"/>
  8. <port port="portid[-portid]" protocol="tcp|udp"/>
  9. <icmp-block name="echo-request"/> <!--ping报文-->
  10. <masquerade/>
  11. <forward-port port="portid[-portid]" protocol="tcp|udp" [to-port="portid[-portid]"] [to-addr="ipv4address"]/>
  12.  
  13. <rule [family="ipv4|ipv6"]>
  14. [ <source address="address[/mask]" [invert="bool"]/> ]
  15. [ <destination address="address[/mask]" [invert="bool"]/> ]
  16. [
  17. <service name="string"/> |
  18. <port port="portid[-portid]" protocol="tcp|udp"/> |
  19. <protocol value="protocol"/> |
  20. <icmp-block name="icmptype"/> |
  21. <masquerade/> |
  22. <forward-port port="portid[-portid]" protocol="tcp|udp" [to-port="portid[-portid]"] [to-addr="address"]/>
  23. ]
  24. [ <log [prefix="prefixtext"] [level="emerg|alert|crit|err|warn|notice|info|debug"]/> [<limit value="rate/duration"/>] </log> ]
  25. [ <audit> [<limit value="rate/duration"/>] </audit> ]
  26. [ <accept/> | <reject [type="rejecttype"]/> | <drop/> ]
  27. </rule>
  28. </zone>

2.6.使用firewall-cmd配置规则

  1. //zone的默认的行为
  2. firewall-cmd --permanent [--zone=zone] --get-target
  3. firewall-cmd --permanent [--zone=zone] --set-target=target
  4.  
  5. //配置source,相同的source只能在一个zone中配置,否则会提示Error: ZONE_CONFLICT
  6. firewall-cmd [--permanent] [--zone=zone] --list-sources //显示绑定的source
  7. firewall-cmd [--permanent] [--zone=zone] --query-source=source[/mask] //查询是否绑定了source
  8. firewall-cmd [--permanent] [--zone=zone] --add-source=source[/mask] //绑定source,如果已有绑定则取消。
  9. firewall-cmd [--zone=zone] --change-source=source[/mask] //修改source,如果原来未绑定则添加绑定。
  10. firewall-cmd [--permanent] [--zone=zone] --remove-source=source[/mask] //删除绑定
  11.  
  12. //interface 如eth0, 也可以在网卡配置文件ifcfg-*中加入 ZONE=ZONE名
  13. firewall-cmd [--permanent] [--zone=zone] --list-interfaces
  14. firewall-cmd [--permanent] [--zone=zone] --add-interface=interface
  15. firewall-cmd [--zone=zone] --change-interface=interface
  16. firewall-cmd [--permanent] [--zone=zone] --query-interface=interface
  17. firewall-cmd [--permanent] [--zone=zone] --remove-interface=interface
  18.  
  19. //service
  20. firewall-cmd [--permanent] [--zone=zone] --list-services
  21. firewall-cmd [--permanent] [--zone=zone] --add-service=service [--timeout=seconds]
  22. firewall-cmd [--permanent] [--zone=zone] --remove-service=service
  23. firewall-cmd [--permanent] [--zone=zone] --query-service=service
  24.  
  25. //port
  26. firewall-cmd [--permanent] [--zone=zone] --list-ports
  27. firewall-cmd [--permanent] [--zone=zone] --add-port=portid[-portid]/protocol [--timeout=seconds]
  28. firewall-cmd [--permanent] [--zone=zone] --remove-port=portid[-portid]/protocol
  29. firewall-cmd [--permanent] [--zone=zone] --query-port=portid[-portid]/protocol
  30.  
  31. //icmp-block, 默认允许所有ICMP通过
    firewall-cmd --get-icmptypes //查看所有支持的ICMP类型:
                    // destination-unreachable echo-reply echo-request parameter-problemr-solicitation source-quench time-exceeded
    firewall-cmd [--permanent] [--zone=zone] --list-icmp-blocks
  32. firewall-cmd [--permanent] [--zone=zone] --add-icmp-block=icmptype [--timeout=seconds]
  33. firewall-cmd [--permanent] [--zone=zone] --remove-icmp-block=icmptype
  34. firewall-cmd [--permanent] [--zone=zone] --query-icmp-block=icmptype
  35.  
  36. //masquerade
  37. firewall-cmd [--permanent] [--zone=zone] --add-masquerade [--timeout=seconds]
  38. firewall-cmd [--permanent] [--zone=zone] --remove-masquerade
  39. firewall-cmd [--permanent] [--zone=zone] --query-masquerade
  40.  
  41. //端口转发
  42. firewall-cmd [--permanent] [--zone=zone] --list-forward-ports
  43. firewall-cmd [--permanent] [--zone=zone] --add-forward-port=port=PORT[-PORT]:proto=PROTOCAL[:toport=PORT[-PORT]][:toaddr=ADDRESS[/MASK]][--timeout=SECONDS]
  44. firewall-cmd [--permanent] [--zone=zone] --remove-forward-port=port=PORT[-PORT]:proto=PROTOCAL[:toport=PORT[-PORT]][:toaddr=ADDRESS[/MASK]]
  45. firewall-cmd [--permanent] [--zone=zone] --query-forward-port=port=PORT[-PORT]:proto=PROTOCAL[:toport=PORT[-PORT]][:toaddr=ADDRESS[/MASK]]
  46.  
  47. //rule规则, 'rule'是将xml配置中的<和/>符号去掉后的字符串,如 'rule family="ipv4" source address="1.2.3.4" drop'
  48. firewall-cmd [--permanent] [--zone=zone] --list-rich-rules
  49. firewall-cmd [--permanent] [--zone=zone] --add-rich-rule='rule' [--timeout=seconds]
  50. firewall-cmd [--permanent] [--zone=zone] --remove-rich-rule='rule'
  51. firewall-cmd [--permanent] [--zone=zone] --query-rich-rule='rule'
 

参考文档

http://drops.wooyun.org/tips/1424

http://blog.chinaunix.net/uid-26000296-id-4111127.html

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html#sec-Introduction_to_firewalld

http://blog.chinaunix.net/uid-26495963-id-3279216.html

http://www.linuxso.com/linuxpeixun/10332.html

http://www.cnblogs.com/excelib/p/5155951.html

http://www.cnblogs.com/excelib/p/5150647.html

http://www.cnblogs.com/Anker/p/3269106.html

Linux防火墙配置(iptables, firewalld)的更多相关文章

  1. Linux防火墙(iptables/firewalld)

    Linux防火墙(iptables/firewalld) 目录 Linux防火墙(iptables/firewalld) 一.iptables 1. iptables概述 2. netfilter和i ...

  2. Linux防火墙简介 – iptables配置策略

    Linux防火墙简介 – iptables配置策略 Netfilter/iptables简介 要想真正掌握Linux防火墙体系,首先要搞清楚Netfilter和iptables的关系,Netfilte ...

  3. Linux防火墙:iptables禁IP与解封IP常用命令

    在Linux服务器被攻击的时候,有的时候会有几个主力IP.如果能拒绝掉这几个IP的攻击的话,会大大减轻服务器的压力,说不定服务器就能恢复正常了. 在Linux下封停IP,有封杀网段和封杀单个IP两种形 ...

  4. Linux防火墙配置—SNAT2

    1.实验目标 以实验"Linux防火墙配置-SNAT1"为基础,为网关增加外网IP地址,为eth1创建虚拟接口,使外网测试主机在Wireshark中捕获到的地址为eth1虚拟接口的 ...

  5. linux防火墙之iptables

    linux防火墙之iptables 1.1.1 关于iptables简介 IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统.如果 Linux 系统连接到因特网或 ...

  6. 【Redhat系列linux防火墙工具】firewalld与iptables防火墙工具的激烈碰撞

    前言 iptables与firewalld防火墙管理工具在linux发行版Redhat7系列使用较为广泛. UFW则是在linux发行版Ubuntu下进行管理防火墙的一款管理工具. 在选用防火墙工具的 ...

  7. Linux防火墙配置与管理(16)

    防火墙指的是一个由软件和硬件设备组合而成.在内部网和外部网之间.专用网与公共网之间的边界上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intra ...

  8. 2、linux防火墙的使用(firewalld)

    2.1.说明: 1.在 RHEL7 里有几种防火墙共存,firewalld.iptables,默认是使用 firewalld 来管理 netfilter 子系统,不过底层调用的命令仍然是 iptabl ...

  9. 要想重启后也生效LINUX防火墙配置

    新配置的一台服务器,安装的是CentOS6.3系统,在安装完LNMP之后,发现nginx进程存在,且php解析正常,但是用分配的独立IP去访问的时候发现无法访问. 查了下网上的资料,发现可能是Linu ...

随机推荐

  1. AJAX + WebService 实现文件上传

    1. 界面HTML <p >上传文件: <input id="zfiles" type="file" name="file" ...

  2. BZOJ2982——combination

    1.题意:求 C(n,m) % 10007 ,10007是质数咯 n和m < 2000000000 2.分析:这个东西太大了,显然不能用n!的阶乘预处理的方式搞出来,也不能用递推公式搞出来 于是 ...

  3. 双系统Ubuntu分区扩容过程记录

    本人电脑上安装了Win10 + Ubuntu 12.04双系统.前段时间因为在Ubuntu上做项目要安装一个比较大的软件,导致Ubuntu根分区的空间不够了.于是,从硬盘又分出来一部分空间,分给Ubu ...

  4. strcmp

     C++ Code  123456789101112   int strcmp(const char *dest, const char *source) {     assert((NULL !=  ...

  5. Javascript 执行环境及作用域

    执行环境是javascript中最为重要的一个概念. 执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为. 每个执行环境都有一个与之关联的变量对象(variable object),环境 ...

  6. 如何有效地描述软件缺陷(Defect)?

    最近一个月偷懒了,刚看到一篇博文很不错.最近也是碰到一样的问题,由于我记录bug的描述不够清晰.导致开发看不懂我描述的bug,还有一些配置信息没记录好.出现一问三不知的情况,还被领导训.下面的博文是来 ...

  7. 2.EasyUI学习总结(二)——easyloader分析与使用(转载)

    本文转载自:http://www.cnblogs.com/haogj/archive/2013/04/22/3036685.html 使用脚本库总要加载一大堆的样式表和脚本文件,在easyui 中,除 ...

  8. SAP 销售订单的文本项目

    http://blog.itpub.net/9859323/viewspace-616508/ ls_hdname = wa_vbak-vbeln .     CALL FUNCTION 'READ_ ...

  9. js计算散点图方程式

    //pointArrayX,pointArrayY 为两个数组,分别为x轴对应的点和y轴对应的点 function getEquationPara(pointArrayX, pointArrayY) ...

  10. C#调用webservice简单实例

    如何利用IIS创建webservice不多做阐述,直接讲C#代码中如何调用已创建好的webservice. 首先在VS2010中新建一个工程项目,然后右键点击工程名选择添加服务引用. 在URL一栏中输 ...