linux下防火墙iptables和firewalld详解

防火墙的作用

防火墙是一个组件,工作在网络边缘(主机边缘),对进出网络数据包基于一定的规则检查,并在匹配某规则时由规则定义的处理进行处理的一组功能的组件。

防火墙类型

根据工作的层次的不同来划分,常见的防火墙工作在OSI第三层,即网络层防火墙,工作在OSI第七层的称为应用层防火墙,或者代理服务器(代理网关)。

网络层防火墙又称包过滤防火墙,在网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素来确定是否允许该数据包的通过,以及数据包的流向等。

还可以分为硬件防火墙和软件防火墙

软件防火墙

  • EL6上的防火墙叫做iptables。

  • EL7上的防火墙叫做firewalld。

iptables语法

iptables -t table CMD chain rule-matcher -j target

     动作 链  规则匹配       执行操作

表table

使用 -t 来指定表,如果省略,则代表对 filter 表进行操作

  • filter 表:用于过滤数据包nat 表:用于修改数据包的来源和目的地 mangle 表:用户修改数据包的生存周期等等 raw 表:跟踪机制

CMD动作

  • A 追加

  • I 插入

  • D 删除

  • L 罗列

  • F 清空

表当中包含链chain

链是用来区分数据包的流向状态

  • INPUT 入站的数据包

  • OUTPUT 出站的数据包

  • PREROUTING 路由判断之前的数据包

  • POSTROUTING 路由判断之后的数据包

  • FORWARD 第一次路由判断之后,到最后一词路由判断之前

规则rule

是用来判断数据包的具体情况

  • -p 协议

  • -s 来源

  • -d 目的地

  • --sport 来源端口

  • --dport 目的端口

  • -i 入站网络接口

  • -o 出站网络接口

  • ! 取反

执行操作target

  • ACCEPT 接受

  • DROP 丢弃

  • REJECT 拒绝

  • DNAT 目标地址转换(重写数据包的目的IP地址)

  • SNAT 源地址转换

常用命令:

查看规则 iptables -L.

规则清空 iptables -F.

预选策略 iptables -P INPUT ACCEPT.

保存策略 service iptables save or iptables-save > /etc/sysconfig/iptables.

开机后重新导入 iptables-restore < /etc/sysconfig/iptables

应用实例说明:

1.只允许172.25.0.250和你自己的服务器能够访问21端口(rhel6)

 

来源 -s 172.25.0.250(注意:如果是一个网段,这样写:172.25.0.0/24)
  -s 172.25.0.11
进来的 INPUT
---------
目标
端口号 --dport 21
协议 -p tcp
--------------
允许 ACCEPT
~~~~~~~~~~~
iptables -A INPUT -s 172.25.0.250 -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -s 172.25.0.11 -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j DROP

除了这两个地址其他不允许访问21端口

iptables -L 查看如下图:

2. 禁止ping包

进来 INPUT
协议 icmp
---------
扔掉
iptables -A INPUT -p icmp -j DROP

策略保存后拿同网段的ip去ping :

iptables -F 清空禁止ping 的差策略后:

3. DNAT 目标地址转换

设想环境

外部IP:200.89.6.211

内部IP:192.168.0.0/24

ftp服务器:IP 192.168.0.10

web服务器:IP 192.168.0.20

-------------------------------------------------

PREROUTING 路由判断前的数据包

目的: -d 200.89.6..211

协议:-p tcp

端口: --dport 21 --dport 80

目的转换:-j DNAT

目标内网:--to 192.168.0.10 --to 192.168.0.20

-----------------------------------------------

iptables -t nat -A PREROUTING -d 200.89.6.211 -p tcp --dport 21 -j DNAT --to 192.168.0.10

iptables -t nat -A PREROUTING -D 200.89.6.211 -p tcp --dport 21 -j DNAT --to 192.168.0.20

 

Firewalld的用法

Firewalld是el7默认的防火墙,和iptables冲突,如果要使用其中之一,需要关闭另外一个

运行、停止、禁用firewalld:

  • 启动:systemctl start firewalld

  • 查看状态:systemctl status firewalld 或者 firewall-cmd --state

  • 停止:systemctl disable firewalld

  • 禁用:systemctl stop firewalld

可以通过1.firewall-config图形化工具 来控制 2.firewall-cmd 命令行工具

Firewall-config

  1. Configuration runtime和permanent 分别是运行时和永久

  2. zone 默认区域配置

  • Trusted:允许所有传入数据包

  • drop:默认丢弃所有包

  • block:拒绝所有外部连接,允许内部发起的连接

  • public:指定外部连接可以进入

  • external:这个不太明白,功能上和上面相同,允许指定的外部连接

  • dmz:和硬件防火墙一样,受限制的公共连接可以进入

  • work:工作区,概念和workgoup一样,也是指定的外部连接允许

  • home:类似家庭组

  • internal:信任所有连接

  1. 富规则:可用于表达基本的允许和拒绝规则。Configuration permenent                                                                                                                                              firewall-cmd --permanent --zone=public --add-rich-rule=\'rule family=ipv4 service name="ssh"source address=192.168.137.11 log prefix="ssh" level="notice" limit value="3/m" reject\'

          将来自于192.168.137.11的ssh拒绝掉,并且将notice以上的日志写入到ssh日志当中,限制每分钟最多三条记录。

实例:

  systemctl stop/start firewalld.service             #停止firewall

  service firewalld start

  systemctl disable firewalld.service        #禁止firewall开机启动

  firewall-cmd --zone=public --add-port=80/tcp   允许某个端口开放

  firewall-cmd --reload 重启防火墙

  1. firewall-cmd [--zone=<zone>] --remove-port=<port>[-<port>]/<protocol>  移除允许的端口
  2. firewall-cmd [--zone=<zone>] --query-port=<port>[-<port>]/<protocol> 查询开启的端口
  3. firewall-cmd --permanent [--zone=<zone>] --add-service=<service> 启用一项服务
  4. firewall-cmd --permanent [--zone=<zone>] --remove-service=<service> 禁用一项服务
  5. firewall-cmd --permanent [--zone=<zone>] --query-service=<service>  查询一项服务是否启用
  6. 重新加载防火墙规则:firewall-cmd --reload (不重启服务)
  7. firewall-cmd --complete-reload  (会重启服务)
 
 

  查询端口号80 是否开启:firewall-cmd --query-port=80/tcp

  永久开放80端口号:firewall-cmd --permanent --zone=public --add-port=80/tcp

  移除80端口号:firewall-cmd --permanent --zone=public --remove-port=80/tcp

  --zone #作用域
  --add-port=80/tcp #添加端口,格式为:端口/通讯协议
  --permanent #永久生效,没有此参数重启后失效

猜你喜欢

转载自www.cnblogs.com/yjiajia/p/13198622.html