在当今快速发展的IT行业中,运维团队面临着越来越多的挑战,其中包括对服务器安全性和稳定性要求的不断提高。Ansible作为一款开源的自动化软件工具,因其简单、灵活和强大的特性而受到广泛欢迎。本文将介绍如何使用Ansible来管理Linux系统的Firewalld、Iptables以及Cron服务,帮助您提高运维效率,确保系统安全稳定运行。

重复性工作,交给机器
定时任务是系统管理员经常需要处理的任务之一,而Cron则是Linux下最常用的定时任务调度器。Ansible通过cron模块,可以非常方便地创建、修改或删除定时任务。
| 模块名称 | 模块说明 |
| name(required) | 定时任务名称 |
| user | 执行定时任务的用户,默认root |
| minute/hour/day/month/weekday | 执行定时任务的时间,默认是* |
| job | 定时任务的执行内容 |
| state | present/absent,默认present |
| cron_file | cron文件路径,通常是/etc/crontab 注意:必须搭配user参数使用;如果没有改参数则将任务写在用户 crontab -l 下 |
示例配置:
# root用户每隔1小时整点执行job任务。例如:0,2,4,6点执行
$ ansible -i hosts 172.139.20.17 -m cron -a "name='test1 cron' job='ls /tmp 2> /dev/null' minute=0 hour=*/2 state=present"
# root用户3,5点整点执行job任务,该任务写在/etc/crontab文件中。
$ ansible -i hosts 172.139.20.17 -m cron -a "name='test2 cron' job='ls /tmp 2> /dev/null' user=root minute=0 hour=3,5 cron_file=/etc/crontab state=present"
# 删除/etc/crontab文件中test2 cron任务名
$ ansible -i hosts 172.139.20.17 -m cron -a "name='test2 cron' cron_file=/etc/crontab state=absent"
对于偏好使用Iptables的传统Linux用户来说,Ansible同样提供了强大的支持。通过iptables模块,可以方便地管理规则链。
| 模块名称 | 模块说明 |
| table | iptables操作表 |
| chain | iptables操作链,默认:filter |
| protocol | 网络协议 |
| source | 源地址 |
| source_port | 源端口 |
| destination | 目的地址 |
| destination_port | 目的端口 |
| ctstate | conntrack 模块中要匹配的连接状态列表 |
| jump | 匹配该主机需要做什么动作。eg:丢弃(DROP),放通(ACCEPT) |
| action | 规则是否应附加在底部或插入在顶部,默认是append |
| comment | 规则注解 |
| policy | 规则策略,即默认规则 |
| state | present,absent。默认:present |
示例配置:
# 允许172.139.20.x网段访问9100端口的数据包通过防火墙
$ ansible -i hosts db -m iptables -a "chain=INPUT source=172.139.20.0/24 protocol=tcp destination_port=9100 jump=ACCEPT comment='The 172.139.20.x address allows access to port 9100'"
# 只允许tcp/22端口且SYN的数据包通过防火墙(建立连接)
ansible -i hosts db -m iptables -a "chain=INPUT protocol=tcp destination_port=22 ctstate=NEW syn=match jump=ACCEPT comment='Accept new SSH connections'"
# 允许所有已建立的连接和与已建立连接相关的数据包通过防火墙 并 将该规则插入到第一行
ansible -i hosts db -m iptables -a "chain=INPUT ctstate=ESTABLISHED,RELATED jump=ACCEPT action=insert"
# 允许172.139.20.x网段访问22, 5432, 9999端口的数据包通过防火墙
$ ansible -i hosts db -m iptables -a "chain=INPUT source=172.139.20.0/24 protocol=tcp match=multiport destination_port=22,5432,9999 jump=ACCEPT"
# 删除172.139.20.x网段放通9100端口规则
$ ansible -i hosts db -m iptables -a "chain=INPUT source=172.139.20.0/24 protocol=tcp destination_port=9100 jump=ACCEPT comment='The 172.139.20.x address allows access to port 9100' state=absent"
# filter表INPUT链默认DROP所有数据包
$ ansible -i hosts db -m iptables -a "table=filter chain=INPUT policy=DROP"
Tip:删除规则时,必须所有匹配上才能删除成功。
Firewalld是CentOS/RHEL 7及以上版本默认的防火墙管理工具,它提供了动态管理防火墙的功能,并且支持多个网络区域。使用Ansible管理Firewalld,可以通过firewalld模块实现对规则的添加、删除等操作。
| 模块名称 | 模块说明 |
| port | 端口 |
| service | 服务,需要在firewall-cmd --get-services有定义过的 |
| rich_rule | 富规则 |
| permanent | 是否将规则持久化到配置文件中 |
| immediate | 当permanent=yes且需要当前生效的话,需要immediate=yes |
| state(required) | 启用或禁用设置
|
示例配置:
# 放通所有主机访问3000/tcp
# 注意:没有持久化该规则
$ ansible -i hosts ansible -m firewalld -a "port=3000/tcp state=enabled"
# 放通所有主机访问libvirt服务且持久化规则
$ ansible -i hosts ansible -m firewalld -a "service=libvirt permanent=yes immediate=yes state=enabled"
# 允许172.139.20.0/24网段访问3000/tcp端口
$ ansible -i hosts ansible -m firewalld -a "rich_rule='rule family=ipv4 source address=172.139.20.0/24 port port=3000 protocol=tcp accept' state=enabled"
通过本文的介绍,相信您已经了解了如何使用Ansible来管理和配置Linux系统中的Firewalld、Iptables以及Cron服务。Ansible的强大之处在于它的简洁性和灵活性,能够极大地提高运维工作的效率和准确性。未来,随着云计算和容器化技术的发展,Ansible的应用场景将会更加广泛。希望本文能为您在自动化运维的道路上提供一定的帮助。如果想了解更多关于Ansible的知识,欢迎继续关注我们的公众号,我们将持续分享更多实用技巧和案例分析。
别忘了,关注我们的公众号,获取更多关于容器技术和云原生领域的深度洞察和技术实战,让我们携手在技术的海洋中乘风破浪!





