iptables命令详解
iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
-t table,是指操作的表,filter、nat、mangle或raw, 默认使用filter
链管理
-N, --new-chain chain:新建一个自定义的规则链;
范例: iptables -N denied 说明: 定义新的规则链。
-X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链;
-F, --flush [chain]:清空指定的规则链上的规则;
范例: iptables -F INPUT 说明: 删除INPUT规则链中的所有规则。
-E, --rename-chain old-chain new-chain:重命名链;
-Z, --zero [chain [rulenum]]:置零计数器;
范例:iptables -Z INPUT 说明 将INPUT链中的数据包计数器归零。它是计算同一数据包出现次数,过滤阻断式攻击不可少的工具。
-P, --policy chain target, 设置链路的默认策略
范例 :iptables -P INPUT DROP 说明 :定义默认的过滤策略。 数据包没有找到符合的策略,则根据此预设方式处理。
规则管理
-A, --append chain rule-specification:追加新规则于指定链的尾部;
-I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部;
-R, --replace chain rulenum rule-specification:替换指定的规则为新的规则,会泽被取代后并不会改变顺序;
-D, --delete chain rulenum:根据规则编号删除规则;
例:范例:iptables -D INPUT -p tcp --dport 80 -j ACCEPT 或 : iptables -D INPUT 1 说明: 从INPUT规则链中删除上面建立的规则,可输入完整规则,或直接指定规则编号加以删除。
查看规则
-L, --list [chain]:列出规则;
-v, --verbose:详细信息;
-vv, -vvv 更加详细的信息
-n, --numeric:数字格式显示主机地址和端口号;
-x, --exact:显示计数器的精确值;
--line-numbers:列出规则时,显示其在链上的相应的编号;
-S, --list-rules [chain]:显示指定链的所有规则;
匹配条件
匹配条件包括通用匹配条件和扩展匹配条件。
通用匹配条件是指针对源地址、目标地址的匹配,包括单一源IP、单一源端口、单一目标IP、单一目标端口、数据包流经的网卡以及协议。
扩展匹配条件指通用匹配之外的匹配条件。
通用匹配条件
-s, --source address:检查报文的源IP地址是否符合此处指定的范围,或是否等于此处给定的地址; 例:iptables -A INPUT -s 192.168.1.1
-d, --destination address:检查报文的目标IP地址是否符合此处指定的范围,或是否等于此处给定的地址;例:iptables -A INPUT -d 192.168.12.1
-p, --protocol protocol:匹配报文中的协议,可用值tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh 或者 “all”, 亦可以数字格式指明协议;例:iptables -A INPUT -p tcp
-i, --in-interface name:限定报文仅能够从指定的接口流入;only for packets entering the INPUT, FORWARD and PREROUTING chains.例:iptables -A INPUT -i eth0
-o, --out-interface name:限定报文仅能够从指定的接口流出;for packets entering the FORWARD, OUTPUT and POSTROUTING chains.例:iptables -A FORWARD -o eth0
-j 指定要进行的处理动作,常用的动作有:DROP:丢弃、REJECT:明示拒绝、ACCEPT:接受
案例一:搭建web服务,设置任何人能够通过80端口访问
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@localhost ~]# iptables -L --line-numbers
[root@localhost ~]# iptables -D INPUT 1
案例二:禁止所有人ssh远程登录该服务器
[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -j REJECT
删除设置的拒绝ssh连接:
[root@localhost Desktop]# iptables -D INPUT 1
案例三:禁止某个主机地址ssh远程登录该服务器,允许该主机访问服务器的web服务。服务器地址为172.24.8.128
拒绝172.24.8.129通过ssh远程连接服务器:
[root@localhost ~]# iptables -I INPUT -p tcp -s 172.24.8.129 --dport 22 -j REJECT
允许172.24.8.129访问服务器的web服务:
[root@localhost ~]# iptables -I INPUT -p tcp -s 172.24.8.129 --dport 80 -j ACCEPT
firewalld
如果我们把这种哪怕只修改一条规则也要进行所有规则的重新载入的模式称为静态防火墙的话,那么 firewalld 所提供的模式就可以叫做动态防火墙,它的出现就是为了解决这一问题,任何规则的变更都不需要对整个防火墙规则列表进行重新加载,只需要将变更部分保存并更新即可,它具备对 IPv4 和 IPv6 防火墙设置的支持。
相比于传统的防火墙管理工具,firewalld支持动态更新技术并加入了区域的概念。区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以选择不同的集合,从而实现防火墙策略之间的快速切换
firewalld中常见的区域名称(默认为public)以及相应的策略规则:
区域 | 默认规则策略 |
---|---|
阻塞区域(block) | 拒绝流入的流量,除非与流出的流量相关 |
工作区域(work) | 拒绝流入的流量,除非与流出的流量相关 |
家庭区域(home) | 拒绝流入的流量,除非与流出的流量相关 |
公共区域(public) | 不相信网络上的任何计算机,只有选择接受传入的网络连接。 |
隔离区域(DMZ) | 隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接 |
信任区域(trusted) | 允许所有的数据包 |
丢弃区域(drop) | 拒绝流入的流量,除非与流出的流量相关 |
内部区域(internal) | 等同于home区域 |
外部区域(external) | 拒绝流入的流量,除非与流出的流量有关;而如果流量与ssh服务相关,则允许流量 |
firewalld默认提供的九个zone配置文件都保存在“/usr/lib/firewalld/zones/”目录下,分别为:block.xml drop.xml home.xml public.xml work.xml dmz.xml external.xml internal.xml trusted.xml。
在RHEL7中,firewalld服务是默认的防火墙配置管理工具,他拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。firewall-config和firewall-cmd是直接编辑xml文件,其中firewall-config是图形化工具,firewall-cmd是命令行工具。
安装firewalld服务的软件:
[root@localhost ~]# rpm -qa | grep firewall
firewall-config-0.3.9-14.el7.noarch
firewalld-0.3.9-14.el7.noarch
示例:
[root@localhost ~]# firewall-cmd --version查看版本
[root@localhost ~]# firewall-cmd --help 查看帮助
[root@localhost ~]# firewall-cmd --state显示状态
[root@localhost ~]# firewall-cmd --get-services查看命令支持的服务
[root@localhost ~]# firewall-cmd --list-all查看所有的规则
[root@localhost ~]#firewall-cmd --panic-on启用紧急模式,所有的规则出入都拒绝
[root@localhost ~]#firewall-cmd --panic-off关闭紧急模式
[root@localhost ~]#firewall-cmd --query-panic查询紧急模式状态
[root@localhost ~]#firewall-cmd --get-default-zone查看当前区域
[root@localhost ~]#firewall-cmd --get-zones查看所有支持的区域
[root@localhost ~]#firewall-cmd --set-default-zone=trusted设置trusted区域为当前区域
[root@localhost ~]#firewall-cmd --get-zone-of-interface=eno16777736 根据接口查询区域
[root@localhost ~]#firewall-cmd --permanent --add-service=服务名
[root@localhost ~]#firewall-cmd --reload重载查看才有该服务
使用firewalld配置的防火墙策略默认为当前生效,会随着系统的重启而失效。如果想让策略一直存在,就需要使用永久模式了,即在使用firewall-cmd命令设置防火墙策略时添加–permanent参数,这样配置的防火墙策略就可以永久生效了,最后想要使用这种方式设置的策略生效,只能重启或者输入命令:firewall-cmd --reload。
[root@localhost ~]# systemctl restart firewalld
任何人可以访问该服务器的web服务:
[root@localhost ~]# firewall-cmd --add-port=80/tcp
或者[root@localhost ~]# firewall-cmd --add-service=http(临时生效,重启失效)
添加富规则
[root@localhost ~]#firewall-cmd --permanent --add-service=ssh先添加服务,默认已添加
[root@localhost ~]# firewall-cmd --permanent --add-rich-rule 'rule family=“ipv4” source address=“172.24.8.0/24” service name=“ssh” reject’禁止172.24.8.0网段的地址进行ssh访问
[root@localhost ~]# firewall-cmd --reload重载之后当前会话不会断开,新连接的被拒绝
[root@localhost ~]# firewall-cmd --permanent --remove-rich-rule='rule family=“ipv4” source address=“172.24.8.0/24” service name=“ssh” reject’删除富规则
禁止某个ip地址进行ssh访问,应该写成ip/32
配置端口转发(在172.24.8.0网段的主机访问该服务器的5423端口将被转发到80端口)
[root@system1 ~]# firewall-cmd --permanent --add-rich-rule=‘rule family=“ipv4” source address=“172.24.8.0/24” forward-port port=“5423” protocol=“tcp” to-port=“80”’
samba服务对应应该在防火墙添加的服务为:samba
nfs服务对应应该在防火墙添加的服务为:nfs,rpc-bind,mountd
iscsi服务对应应该在防火墙添加的服务为:iscsi-target