暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Ansible自动化:系统服务之firewalld/iptables/cron实战指南

Linux运维智行录 2024-11-19
321

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

重复性工作,交给机器


01
cron模块

定时任务是系统管理员经常需要处理的任务之一,而Cron则是Linux下最常用的定时任务调度器。Ansible通过cron模块,可以非常方便地创建、修改或删除定时任务。

模块名称模块说明
name(required)定时任务名称
user执行定时任务的用户,默认root
minute/hour/day/month/weekday执行定时任务的时间,默认是*
job定时任务的执行内容
statepresent/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"

02
iptables模块

对于偏好使用Iptables的传统Linux用户来说,Ansible同样提供了强大的支持。通过iptables模块,可以方便地管理规则链。

模块名称模块说明
tableiptables操作表
chainiptables操作链,默认:filter
protocol网络协议
source源地址
source_port源端口
destination目的地址
destination_port目的端口
ctstateconntrack 模块中要匹配的连接状态列表
jump匹配该主机需要做什么动作。eg:丢弃(DROP),放通(ACCEPT)
action规则是否应附加在底部或插入在顶部,默认是append
comment规则注解
policy规则策略,即默认规则
statepresent,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:删除规则时,必须所有匹配上才能删除成功。

03
firewalld模块

Firewalld是CentOS/RHEL 7及以上版本默认的防火墙管理工具,它提供了动态管理防火墙的功能,并且支持多个网络区域。使用Ansible管理Firewalld,可以通过firewalld模块实现对规则的添加、删除等操作。

模块名称模块说明
port端口
service服务,需要在firewall-cmd --get-services有定义过的
rich_rule富规则
permanent是否将规则持久化到配置文件中
immediate当permanent=yes且需要当前生效的话,需要immediate=yes
state(required)启用或禁用设置
  • 该端口/服务应该enabled/disabled

  • present 和 absent 的状态只能在区域级操作中使用

示例配置:

# 放通所有主机访问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"



04
结语

通过本文的介绍,相信您已经了解了如何使用Ansible来管理和配置Linux系统中的Firewalld、Iptables以及Cron服务。Ansible的强大之处在于它的简洁性和灵活性,能够极大地提高运维工作的效率和准确性。未来,随着云计算和容器化技术的发展,Ansible的应用场景将会更加广泛。希望本文能为您在自动化运维的道路上提供一定的帮助。如果想了解更多关于Ansible的知识,欢迎继续关注我们的公众号,我们将持续分享更多实用技巧和案例分析。


别忘了,关注我们的公众号,获取更多关于容器技术和云原生领域的深度洞察和技术实战,让我们携手在技术的海洋中乘风破浪!

END

文章转载自Linux运维智行录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论