저는 현재 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
.
이것은 약간의 캐치 22입니다!
이 문제를 해결하는 가장 쉬운 방법은 다음 2개의 커널 모듈을 로드하도록 유도하는 것입니다.
- 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
그런 다음 누락된 파일을 생성하여 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가 있는지 확인합니다.