
중앙 집중식 방화벽 제어
중앙 집중식 방화벽 제어는 iptables를 실행하는 여러 서버 또는 로드밸런서의 방화벽을 중앙에서 관리할 수 있는 방법을 제공합니다. 이를 통해 여러 서버에서 하나의 명령으로 남용(abuse) IP 범위 등을 빠르게 허용/차단/삭제/검색할 수 있습니다. 해당 서버에는 ssh를 통해 접근합니다.
IPv4와 IPv6를 모두 지원합니다.
Debian 6.x / 7.x / 8.x / 9.x에서 테스트되었지만 다른 배포판에서도 작동해야 합니다.
IPv6에 대해 'precheck', 'protected' 및 'findip' 기능을 사용하려면 'netaddr' 파이썬 모듈이 설치되어 있어야 합니다. IPv4는 IP의 이진 형태에 대한 접두사 일치(prefix matching)를 사용하므로 필요하지 않습니다.
Debian: apt-get install python3-netaddr
iptables와 함께 'ipset'을 사용하는 것이 더 효율적입니다. Ipset은 iptables가 참조하고 사용할 수 있는 목록을 관리하는 데 사용할 수 있습니다. 이 방식은 더 빠르게 작동하며 목록 조작도 더 유연하고 이 스크립트를 사용하는 권장 방법입니다.
Debian: apt-get install ipset
이 스크립트는 ssh로 지정된 서버에 연결하므로 사용하기 전에 그러한 접근 권한이 있어야 합니다.
첫 번째로 cfc.cfg-example의 예제 구성을 cfc.cfg로 복사하십시오.
구성 파일에서 다음 설정을 지정할 수 있습니다:
action: 규칙을 추가할 때 동작을 설정합니다. 기본값: DROP
checkaggrbin: checkaggr.py 스크립트의 경로. 기본값: ./checkaggr.py
cleanupconfirmation: clean 명령을 실행하기 전에 확인을 요청합니다. cron 사용 시 false로 설정하십시오. 기본값: true
date: 방화벽 주석의 날짜 형식을 설정합니다. 기본값: $(date +%d%m%Y) -> 22062016
dateipset: ipset 방화벽 주석의 날짜 형식을 설정합니다. 일부 기능이 깨지지 않도록 기본값으로 두십시오. 기본값: $(date +%Y%m%d) -> 20160622
ipsetname: IPSET 목록 이름을 설정합니다. 기본값: blockedips
ipsetservers: iptables 대신 IPSET을 사용하는 서버를 설정합니다. 기본값: "lvs05.example.com lvs06.example.com"
fwchain: 추가/삭제/검색할 방화벽 체인의 이름. 기본값: INPUT
masklimit: 추가할 수 있는 IP 범위의 최대 크기. 기본값: /21
precheck: 추가하려는 IP가 이미 방화벽에 있거나 더 큰 추가 범위의 일부인지 확인합니다. IPv6의 대규모 방화벽에서는 다소 느릴 수 있습니다(서버당 500개 IP 범위 검색 시 약 25초). 기본값: true
protected: 추가된 보호 범위를 활성화합니다. 기본값: true
protectedranges: 'add' 기능에서 제외되는 IP 범위로, 일반적으로 로컬 네트워크가 소유한 범위입니다. 기본값: "172.16.0.0/12 10.0.0.0/8 192.168.0.0/16"
pythonbin: 사용되는 Python 바이너리의 위치. 기본값: /usr/bin/python3
servers: iptables만 사용하는 서버를 설정합니다. 기본값: "lvs01.example.com lvs02.example.com lvs03.example.com lvs04.example.com"
IPv6 기능은 '6' 접미사로 표시됩니다.
다음 명령으로 IP/범위를 입력할 때는 CIDR 표기법으로 입력하십시오. 이는 검증되며 다른 형식은 허용되지 않습니다.
add:
cfc.sh add n.n.n.n/NN '<선택적 주석>'
cfc6.sh add <IPv6_address_range> '<선택적 주석>'
지정된 IP(범위)를 해당 소스의 모든 트래픽에 대해 구성된 동작으로 방화벽에 추가합니다. 기본적으로 현재 날짜로 주석을 만들며, 작은따옴표를 사용하여 선택적 주석을 추가하여 해당 범위의 이유나 소유자를 예로 들어 추가할 수 있습니다. 나중에 해당 주석으로 검색할 수도 있습니다.
addstring:
cfc.sh addstring <protocol>:<dport> <string>
cfc6.sh addstring <protocol>:<dport> <string>
특정 프로토콜 및 대상 포트에 대해 iptables에 문자열 차단을 추가합니다. 실제 예로는 여러 웹 서버로 향하는 User-Agent를 차단하는 것입니다. 즉, 문자열이 'Firefox/28.0'인 tcp 포트 80으로 향하는 연결의 경우, 해당 문자열과 일치하는 tcp 포트 80으로의 모든 수신 트래픽이 차단됩니다:
cfc.sh addstring tcp:80 'Firefox/28.0'
주의하십시오. 문자열이 충분히 구체적이지 않으면 큰 결과를 초래할 수 있습니다!
clean:
cfc.sh clean <older_than_number_of_days>
n일보다 오래된 모든 CFC 방화벽 규칙을 정리합니다. 기본 날짜 형식에 따라 달라진다는 점을 유의하십시오! 따라서 날짜 형식을 사용자 지정한 경우 'clean' 섹션의 스크립트를 조정해야 합니다.
del:
cfc.sh del n.n.n.n/NN
cfc6.sh del <IPv6_address_range>
지정된 IP(범위)/규칙을 방화벽에서 삭제합니다.
delstring:
cfc.sh delstring <protocol>:<dport> <string>
cfc6.sh delstring <protocol>:<dport> <string>
특정 프로토콜 및 대상 포트에 대해 iptables의 문자열 차단을 삭제합니다.
find:
cfc.sh find <string>
cfc6.sh find <string>
방화벽에서 지정된 문자열을 검색합니다(대소문자 구분 안 함). IP / 범위 / 주석의 (일부)일 수 있습니다.
findip:
cfc.sh findip n.n.n.n/NN
cfc6.sh findip <IPv6_address_range>
지정된 IP(범위)가 이미 추가된 규칙의 일부인지 방화벽에서 검색합니다. IPv6의 대규모 방화벽에서는 다소 느릴 수 있습니다(서버당 500개 IP 범위 검색 시 약 25초). IPv4는 대신 IP의 이진 형태에 대한 접두사 일치를 사용하는데 이는 약 500% 더 빠르며, precheck 및 protectedranges 기능에도 사용됩니다.
ipsethostinit:
cfc.sh ipsethostinit <server_name>
cfc6.sh ipsethostinit <server_name>
지정된 호스트에 IPSET 목록을 추가하고 cfc.cfg에 정의된 매개변수를 사용하여 이를 참조하는 iptables 규칙을 추가합니다. 이 작업은 방화벽 규칙을 추가하기 전에 한 번만 수행하면 됩니다.
last:
cfc.sh last <nr_of_most_recent_rules>
cfc6.sh last <nr_of_most_recent_rules>
방화벽에 가장 최근에 추가된 개 항목을 표시합니다.