firewalld跟iptables比起来,每个服务都需要去设置才能放行,因为默认是拒绝(22端口默认是放开的)。而iptables里默认是每个服务是允许,需要拒绝的才去限制。
iptables 一般应用于小于等于6的版本。
查看iptables状态
service iptables status
开启
service iptables start
设置开机自启
chkconfig iptables on
查看规则
iptables --line-number -nvL INPUT
清空规则
iptables -F INPUT
修改表规则
iptables -P INPUT DROP
添加规则
#开放10088端口,并插入在首行。如果使用的是-A INPUT,则是末尾添加。
iptables -t filter -I INPUT 1 -p tcp -m tcp --dport 10088 -j ACCEPT
#开放地址段从137-145访问1521端口,并插入在第二行
iptables -t filter -I INPUT 2 -m iprange --src-range 192.168.12.137-192.168.12.145 -p tcp -m tcp --dport 1521 -j ACCEPT
iptables -I INPUT -s 192.168.12.0/24 -p tcp --dport 80 -j ACCEPT
开放地址5访问1521端口,并插入在第三行
iptables -t filter -I INPUT 3 -s 192.168.12.5 -p tcp -m tcp --dport 1521 -j ACCEPT
如果开启防火墙后无法访问公网
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
上面添加完后记得保存到配置文件,则下次重启时会自动生效。
service iptables save
删除规则
iptables -D INPUT 3 ###删除第三行
iptables -D INPUT -s 192.168.1.5 -j DROP 删除特定地址
在防火墙关闭的情况下,有时我们可能会遇到启动防火墙就会断开远程连接的尴尬情况。可以先更改配置文件再启用防火墙。
直接修改配置文件/etc/sysconfig/iptables,在最上面添加下面的配置
-A INPUT -p tcp -m tcp --dport 10088 -j ACCEPT
-A INPUT -m iprange --src-range 192.168.12.137-192.168.12.145 -p tcp -m tcp --dport 1521 -j ACCEPT
-A INPUT -s 192.168.12.5 -p tcp -m tcp --dport 1521 -j ACCEPT
#保存规则
service iptables save
查看
iptables --line-number -nvL INPUT
下图中的红框2示例可以填加载第一个红框下面
firewalld 一般用于7及以上版本
systemctl unmask firewalld #执行命令,即可实现取消服务的锁定
systemctl mask firewalld # 下次需要锁定该服务时执行
systemctl start firewalld.service #启动防火墙
systemctl stop firewalld.service #停止防火墙
systemctl reloadt firewalld.service #重载配置
systemctl restart firewalld.service #重启服务
systemctl status firewalld.service #显示服务的状态
systemctl enable firewalld.service #在开机时启用服务
systemctl disable firewalld.service #在开机时禁用服务
systemctl is-enabled firewalld.service #查看服务是否开机启动
systemctl list-unit-files|grep enabled #查看已启动的服务列表
systemctl --failed #查看启动失败的服务列表
firewall-cmd --state #查看防火墙状态
firewall-cmd --reload #更新防火墙规则
firewall-cmd --state #查看防火墙状态
firewall-cmd --reload #重载防火墙规则
firewall-cmd --list-ports #查看所有打开的端口
firewall-cmd --list-services #查看所有允许的服务
firewall-cmd --get-services #获取所有支持的服务
#区域相关
firewall-cmd --list-all-zones #查看所有区域信息
firewall-cmd --get-active-zones #查看活动区域信息
firewall-cmd --set-default-zone=public #设置public为默认区域
firewall-cmd --get-default-zone #查看默认区域信息
firewall-cmd --zone=public --add-interface=eth0 #将接口eth0加入区域public
#接口相关
firewall-cmd --zone=public --remove-interface=eth0 #从区域public中删除接口eth0
firewall-cmd --zone=default --change-interface=eth0 #修改接口eth0所属区域为default
firewall-cmd --get-zone-of-interface=eth0 #查看接口eth0所属区域
#端口控制
firewall-cmd --add-port=80/tcp --permanent #永久添加80端口例外(全局)
firewall-cmd --remove-port=80/tcp --permanent #永久删除80端口例外(全局)
firewall-cmd --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(全局)
firewall-cmd --zone=public --add-port=80/tcp --permanent #永久添加80端口例外(区域public)
firewall-cmd --zone=public --remove-port=80/tcp --permanent #永久删除80端口例外(区域public)
firewall-cmd --zone=public --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(区域public)
firewall-cmd --query-port=8080/tcp # 查询端口是否开放
firewall-cmd --permanent --add-port=80/tcp # 开放80端口
firewall-cmd --permanent --remove-port=8080/tcp # 移除端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" port protocol="tcp" port="80" accept" #开放80端口给200地址访问 拒绝就使用reject,
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address='x.x.x.x/24' port port=22 procotol=tcp accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="139.130.99.0/24" port protocol="tcp" port="22" accept" #开放地址段
firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 source address="123.56.161.140" reject' #删除ip地址规则,将整个规则配置放入标红后面即可。
添加完成后要记得重新加载防火墙,不然不显示新添加的规则
firewall-cmd --reload #重启防火墙(修改配置后要重启防火墙)
yum install iptables-services #安装iptables
systemctl stop firewalld.service #停止firewalld
systemctl mask firewalld.service #禁止自动和手动启动firewalld
systemctl start iptables.service #启动iptables
systemctl start ip6tables.service #启动ip6tables
systemctl enable iptables.service #设置iptables自启动
systemctl enable ip6tables.service #设置ip6tables自启动
chkconfig iptables off #永久停用iptables
chkconfig iptables on #停用后开启
yum remove iptables #千万不要使用(这操作会卸载掉很多系统必要的组件,那就开不了机了,链接不上了。切记切记)
一个重要的概念:区域管理
通过将网络划分成不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流。例如,互联网是不可信任的区域,而内部网络是高度信任的区域。网络安全模型可以在安装,初次启动和首次建立网络连接时选择初始化。该模型描述了主机所连接的整个网络环境的可信级别,并定义了新连接的处理方式。有如下几种不同的初始化区域:
阻塞区域(block):任何传入的网络数据包都将被阻止。
工作区域(work):相信网络上的其他计算机,不会损害你的计算机。
家庭区域(home):相信网络上的其他计算机,不会损害你的计算机。
公共区域(public):不相信网络上的任何计算机,只有选择接受传入的网络连接。
隔离区域(DMZ):隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。
信任区域(trusted):所有的网络连接都可以接受。
丢弃区域(drop):任何传入的网络连接都被拒绝。
内部区域(internal):信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
外部区域(external):不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
注:FirewallD的默认区域是public。
firewalld默认提供了九个zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他们都保存在“/usr/lib /firewalld/zones/”目录下。这个目录下的文件不要轻易修改。
FirewallD的默认区域是public。
用户一般配置的文件在/etc/firewalld/zones/public.xml
root@anhui-01 ~]# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="cockpit"/>
<port port="13306" protocol="tcp"/>
<port port="10086" protocol="tcp"/>
<port port="21" protocol="tcp"/>
<port port="20" protocol="tcp"/>
<port port="4500-4510" protocol="tcp"/>
</zone>
命令添加了一个ip策略
[root@anhui-01 ~]# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="cockpit"/>
<port port="13306" protocol="tcp"/>
<port port="10086" protocol="tcp"/>
<port port="21" protocol="tcp"/>
<port port="20" protocol="tcp"/>
<port port="4500-4510" protocol="tcp"/>
<rule family="ipv4">
<source address="192.168.0.200"/>
<port port="80" protocol="tcp"/>
<accept/>
</rule>
</zone>
添加了两个
[root@anhui-01 ~]# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="cockpit"/>
<port port="13306" protocol="tcp"/>
<port port="10086" protocol="tcp"/>
<port port="21" protocol="tcp"/>
<port port="20" protocol="tcp"/>
<port port="4500-4510" protocol="tcp"/>
<rule family="ipv4">
<source address="192.168.0.200"/>
<port port="80" protocol="tcp"/>
<accept/>
</rule>
<rule family="ipv4">
<source address="192.168.0.200"/>
<port port="8090" protocol="tcp"/>
<accept/>
</rule>
</zone>
添加ip地址段
[root@anhui-01 ~]# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="cockpit"/>
<port port="13306" protocol="tcp"/>
<port port="10086" protocol="tcp"/>
<port port="21" protocol="tcp"/>
<port port="20" protocol="tcp"/>
<port port="4500-4510" protocol="tcp"/>
<rule family="ipv4">
<source address="192.168.0.200"/>
<port port="80" protocol="tcp"/>
<accept/>
</rule>
<rule family="ipv4">
<source address="192.168.0.200"/>
<port port="8090" protocol="tcp"/>
<accept/>
</rule>
<rule family="ipv4">
<source address="139.130.99.0/24"/>
<port port="22" protocol="tcp"/>
<accept/>
</rule>
</zone>