현재 CentOS 6.8 최소 설치에 iptables 방화벽을 설치하고 시작하려는 Ansible 플레이북을 작성 중입니다. 저는 Ansible에서 다음을 수행하고 있습니다.
### sets up FW pkgs
- name: Install FW packages
hosts: elasticsearch-servers
become: yes
tasks:
- name: install ipset
yum: name={{ item }} state=present
with_items:
- ipset
- iptables
- name: start iptables service
service: name=iptables state=started enabled=yes
그러나 결과는 다음과 같습니다.
TASK [start iptables service] **************************************************
fatal: [10.40.3.246]: FAILED! => {"changed": false, "failed": true, "msg": "iptables: No config file.[WARNING]\r\n"}
fatal: [10.40.3.254]: FAILED! => {"changed": false, "failed": true, "msg": "iptables: No config file.[WARNING]\r\n"}
fatal: [10.40.3.164]: FAILED! => {"changed": false, "failed": true, "msg": "iptables: No config file.[WARNING]\r\n"}
답변1
그래서 CentOS 6.5 이후부터 문제가 되는 것 같습니다. 다음과 같은 고객 포털 테마가 있습니다.Red Hat Enterprise Linux 6.6 이상의 최소 설치에서 iptables가 시작되지 않습니다..
즉각적인 문제는 /etc/sysconfig/ip*
iptables 서비스를 시작하는 데 필요한 파일이 누락되었다는 것입니다. 를 실행하여 이러한 파일을 강제로 생성할 수 있지만 service iptables save
기본적으로는 를 실행하려면 커널 모듈이 필요하므로 이 파일도 실패합니다 service iptables save
.
Catch-22와 약간 비슷합니다!
이 문제를 해결하는 가장 간단한 방법은 다음 두 커널 모듈을 로드하여 부팅하는 것입니다.
- iptables_필터
- IP_테이블
iptables
다음 명령을 실행하여 :
$ iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
이제 모듈이 로드된 것을 볼 수 있습니다:
$ lsmod | grep iptable
iptable_filter 2793 0
ip_tables 17831 1 iptable_filter
service iptables save
그런 다음 누락된 파일을 생성하기 위해 a를 실행하여 iptables 서비스를 시작할 수 있습니다 .
안시푸르
command:
위 내용은 흥미롭지만 및 모듈의 도움 없이 Ansible을 통해 실행하는 것은 그리 친숙하지 않습니다 shell:
.
그러나 modules:
Ansible의 모듈을 사용하여 커널 모듈의 로드/언로드를 보장할 수 있습니다.
예를 들어:
### sets up FW pkgs
- name: Install FW packages
hosts: elasticsearch-servers
become: yes
tasks:
- name: install ipset
yum: name={{ item }} state=present
with_items:
- ipset
- iptables
# these next 2 tasks work around issue with iptables RPM in CentOS 6.5+
# REF: https://access.redhat.com/solutions/1361093
- name: load ip_tables kernel module
modprobe: name=iptable_filter state=present
- name: initial save iptables generate files
command: /sbin/service iptables save
args:
warn: false
- name: start iptables service
service: name=iptables state=started enabled=yes
위에서는 저장을 시도하기 전에 iptable_filter가 존재하는지 확인했습니다.