防火墙
[root@localhost ~]# firewall-cmd --state
not running
[root@localhost ~]# firewall-cmd --state
running
放行http和https端口
[root@localhost ~]# firewall-cmd --permanent --add-port=80/tcp
success
[root@localhost ~]# firewall-cmd --permanent --add-port=443/tcp
success
--add-port:放行的端口
--permanent:firewalld在每次服务器启动时加载此规则
[root@localhost ~]# firewall-cmd --reload
success
--reload:将添加的规则适应当前会话
[root@localhost ~]# firewall-cmd --list-services
ssh dhcpv6-client
--list-services:查看当前防火墙的设置
系统管理员需知的iptables 使用技巧
技巧#1: 开始之前先备份一下 iptables 配置文件。
用如下命令备份配置文件:
/sbin/iptables-save > /root/iptables-works
用如下命令加时间戳:
技巧#2: 更妥当的做法,给文件加上时间戳。
/sbin/iptables-save > /root/iptables-works-`date +%F`
然后你就可以生成如下名字的文件:
/root/iptables-works-2018-09-11
这样万一使得系统不工作了,你也可以很快的利用备份文件恢复原状:
/sbin/iptables-restore < /root/iptables-works-2018-09-11
技巧#3: 每次创建 iptables 配置文件副本时,都创建一个指向最新的文件的链接。
ln -s /root/iptables-works-`date +%F` /root/iptables-works-latest
技巧#4: 将特定规则放在策略顶部,底部放置通用规则。
避免在策略顶部使用如下的一些通用规则:
iptables -A INPUT -p tcp --dport 22 -j DROP
你在规则中指定的条件越多,封锁自己的可能性就越小。不要使用上面非常通用的规则,而是使用如下的规则:
iptables -A INPUT -p tcp --dport 22 -s 10.0.0.0/8 -d 192.168.100.101 -j DROP
此规则表示在INPUT 链尾追加一条新规则,将源地址为10.0.0.0/8、目的地址是192.168.100.101、目的端口号是22 (--dport 22 )的TCP(-p tcp )数据包通通丢弃掉。
技巧#5: 在策略规则顶部将你的 IP 列入白名单。
这是一个有效地避免封锁自己的设置:
iptables -I INPUT -s <your IP> -j ACCEPT
你需要将该规则添加到策略首位置。-I 表示则策略首部插入规则,-A 表示在策略尾部追加规则。
技巧#6: 理解现有策略中的所有规则。
不犯错就已经成功了一半。如果你了解iptables 策略背后的工作原理,使用起来更为得心应手。如果有必要,可以绘制流程图来理清数据包的走向。还要记住:策略的预期效果和实际效果可能完全是两回事。
设置防火墙策略
按时间规定做限制- 场景1
1 应用场景:公司员工强烈反对限制一切对Facebook 的访问,这导致了 CEO 放宽了要求(考虑到员工的反对以及他的助理提醒说她负责更新他的 Facebook 页面)。然后 CEO 决定允许在午餐时间访问 Facebook(中午 12 点到下午 1 点之间)。假设默认规则是丢弃,使用 iptables 的时间功能便可以实现。
2 iptables -A OUTPUT -p tcp -m multiport --dport http,https -i eth0 -o eth1 -m time --timestart 12:00 --timestop 13:00 -d 31.13.64.0/18 -j ACCEPT
-m multiport:启用多端口扩展
-i eth0:从eth0网卡流入
-o eth1:从eth0网卡流出
--timestart:开始时间
按时间规定做限制- 场景2
应用场景:在计划系统维护期间,你需要设置凌晨2 点到 3 点之间拒绝所有的 TCP 和 UDP 访问,这样维护任务就不会受到干扰。使用两个 iptables 规则可实现:
iptables -A INPUT -p tcp -m time --timestart 02:00 --timestop 03:00 -j DROP
iptables -A INPUT -p udp -m time --timestart 02:00 --timestop 03:00 -j DROP
该规则禁止(-j DROP)在凌晨2点(--timestart 02:00)到凌晨3点(--timestop 03:00)之间的TCP 和 UDP (-p tcp and -p udp)的数据进入(-A INPUT)访问。
限制连接数量
应用场景:你的web 服务器有可能受到来自世界各地的 DoS 攻击,为了避免这些攻击,你可以限制单个 IP 地址到你的 web 服务器创建连接的数量:
iptables -A INPUT -p tcp -syn -m multiport --dport http,https -m connlimit --connlimit-above 20 -j REJECT --reject-with-tcp-reset
-syn:防止SYN攻击 轻量级预防
-m connlimit --connlimit-above 20:限制一个客户端并发请求为20
--reject-with-tcp-reset:返回tcp重置
分析一下上面的命令。如果单个主机在一分钟之内新建立(-p tcp -syn)超过20 个(-connlimit-above 20)到你的web 服务器(--dport http,https)的连接,服务器将拒绝(-j REJECT)建立新的连接,然后通知对方新建连接被拒绝(--reject-with-tcp-reset)。