이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 명령입니다.
프로그램:
이름
ferm - Linux용 방화벽 규칙 파서
개요
상사 옵션 입력 파일
기술
상사 에 대한 프런트엔드입니다 iptables에. 구조화된 구성 파일에서 규칙을 읽습니다.
그리고 전화 iptables에(8) 실행 중인 커널에 삽입합니다.
상사의 목표는 방화벽 규칙을 쉽게 작성하고 읽기 쉽게 만드는 것입니다. 감소시키려고 노력합니다
규칙을 작성하는 지루한 작업으로 인해 방화벽 관리자는
규칙을 적절하게 구현하는 것보다 좋은 규칙을 개발하는 데 더 많은 시간을 투자합니다.
이를 달성하기 위해 상사 간단하지만 강력한 구성 언어를 사용합니다.
변수, 함수, 배열, 블록. 또한 다른 파일을 포함할 수도 있습니다.
일반적으로 사용되는 구조와 기능의 라이브러리를 만들 수 있습니다.
상사, "firm"이라고 발음하는 것은 "For Easy Rule Making"을 의미합니다.
주의
이 매뉴얼 페이지는 지원 방화벽이 작동하는 방식과 좋은 글을 작성하는 방법을 가르쳐 드리고자 합니다.
규칙. 이 주제에 대한 문서는 이미 충분합니다.
소개
간단한 예부터 시작해 보겠습니다.
체인 입력 {
프로토 TCP 수락;
}
그러면 사전 정의된 입력 체인에 규칙이 추가되어 모든 TCP와 일치하고 허용됩니다.
패킷. 좋아, 좀 더 복잡하게 만들어보자:
체인(입력 출력) {
프로토(udp tcp) 수락;
}
그러면 4개의 규칙, 즉 체인 입력에 2개, 체인 출력에 2개가 삽입됩니다.
udp 및 tcp 패킷을 모두 허용합니다. 일반적으로 다음과 같이 입력합니다.
iptables -A 입력 -p tcp -j 수락
iptables -A 출력 -p tcp -j 수락
iptables -A 입력 -p udp -j 수락
iptables -A 출력 -p udp -j 수락
얼마나 적은 양의 타이핑을 해야 하는지 기억하시나요? :-)
기본적으로 이것이 전부이지만 훨씬 더 복잡하게 만들 수도 있습니다.
살펴봐야 할 사항:
체인 입력 {
정책 수락;
Daddr 10.0.0.0/8 프로토 TCP dport! ftp 점프 mychain 스포츠 :1023 TOS 4 settos 8 mark 2;
daddr 10.0.0.0/8 proto tcp dport ftp 거부;
}
여기서 내 요점은 *당신*이 좋은 규칙을 만들고, 그 규칙을 당신이 읽을 수 있도록 유지하고,
다른 사람들을 혼란스럽게 만들지 마세요.
참조용으로 결과 방화벽 규칙을 여기에 배치하면 독자에게 도움이 될 것입니다.
또한 더 나은 가독성을 위해 중첩 버전을 포함할 수도 있습니다.
코멘트를 사용해 당신이 무엇을 하고 있는지 보여주세요:
# 이 줄은 내부 네트워크에 대한 투명한 http 프록시를 활성화합니다.
eth0 Daddr인 경우 프로토 TCP! 192.168.0.0/255.255.255.0
dport http REDIRECT to-포트 3128;
나중에 감사하게 될 거예요!
체인 입력 {
정책 수락;
인터페이스(eth0 ppp0) {
# 악명 높은 해커에 대한 접근을 거부합니다. 일치하는 항목이 없으면 여기로 돌아옵니다.
# 정상적인 방화벽을 재개하는 것으로 확인되었습니다
점프 악당;
프로토콜 TCP 점프 fw_tcp;
프로토콜 UDP 점프 fw_udp;
}
}
많이 중첩할수록 더 좋아 보입니다. 지정한 순서가 올바른지 확인하세요.
이 일을 하고 싶지 않을 것입니다:
앞으로 체인 {
프로토! UDP 삭제;
프로토 tcp dport ftp 수락;
}
두 번째 규칙은 절대 일치하지 않기 때문입니다. 가장 좋은 방법은 먼저 모든 것을 지정하는 것입니다.
허용한 다음 다른 모든 것을 거부합니다. 더 좋은 스냅샷을 보려면 예시를 살펴보세요.
대부분의 사람들은 다음과 같은 일을 합니다.
프로토 TCP {
포트(
SSH http FTP
) 수용하다;
dport 1024:65535 ! 동의함;
떨어지다;
}
구조 OF A 방화벽 FILE
적절한 방화벽 파일의 구조는 단순화된 C 코드처럼 보입니다. 단지 몇 가지
구문 문자는 ferm-구성 파일에 사용됩니다. 이 외에도 특별한
문자, ferm은 '키'와 '값'을 사용합니다. 이를 옵션 및 매개변수로 생각하거나
변수든 값이든 뭐든요.
이 단어를 사용하여 방화벽의 특성을 정의합니다. 모든 방화벽
두 가지로 구성됩니다. 첫째, 네트워크 트래픽이 특정 조건과 일치하는지 확인하고,
둘째, 그 트래픽을 어떻게 처리할 것인가.
사용 중인 커널 인터페이스 프로그램에 유효한 조건을 지정할 수 있습니다.
아마 iptables에(8). 예를 들어, iptables에서 tcp 패킷을 일치시키려고 할 때,
당신은 이렇게 말할 것이다:
iptables --프로토콜 TCP
실제로는 다음과 같습니다.
프로토콜 TCP;
ferm에 이것을 입력하는 것만으로는 아무 일도 하지 않습니다. ferm에게 알려야 합니다(실제로는 다음과 같이 해야 합니다).
이야기 iptables에(8) 및 커널) 이 조건과 일치하는 트래픽을 어떻게 처리해야 할까요?
iptables --protocol tcp -j 수락
또는 다음과 같이 번역됩니다. 상사:
프로토콜 tcp 수락;
The ; 성격은 모든 ferm 규칙의 끝에 있습니다. Ferm은 줄 바꿈을 무시합니다.
위의 예는 다음과 동일합니다.
프로토콜 TCP
수용하다;
특수 문자 목록은 다음과 같습니다.
; 이 캐릭터는 규칙을 마무리합니다.
세미콜론으로 구분하여 한 줄에 여러 규칙을 작성할 수 있습니다.
가독성이 떨어집니다:
프로토콜 tcp 수락; 프로토콜 UDP DROP;
{} 중첩 기호는 규칙의 '블록'을 정의합니다.
중괄호에는 여러 개의 중첩 규칙이 포함됩니다. 이전의 모든 경기
블록은 이들로 전달됩니다.
닫는 중괄호는 규칙 세트를 마무리합니다. ';'를 쓰면 안 됩니다. ~ 후에
왜냐하면 그것은 공허한 규칙이 되기 때문입니다.
예:
체인 INPUT 프로토콜 ICMP {
icmp 유형 에코 요청 수락;
떨어지다;
}
이 블록은 블록 내부에 두 가지 규칙을 표시하며 둘 다 어떤 것과도 병합됩니다.
그 앞에는 두 가지 규칙이 있습니다.
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A 입력 -p icmp -j DROP
여러 중첩 수준이 있을 수 있습니다.
체인 입력 {
프로토 ICMP {
icmp 유형 에코 요청 수락;
떨어지다;
}
Daddr 172.16.0.0/12 거부;
}
'REJECT' 규칙은 'proto icmp'의 영향을 받지 않습니다.
';' 닫는 중괄호 뒤에. iptables로 번역됨:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A 입력 -p icmp -j DROP
iptables -A 입력 -d 172.16.0.0/12 -j 거부
$ 가변 확장. '$FOO'를 변수 값으로 대체합니다. 섹션을 참조하세요
변수 를 참조하세요
& 함수 호출. 섹션을 참조하세요 기능 를 참조하세요
() 배열 기호입니다. 괄호를 사용하여 다음과 같은 값의 '목록'을 정의할 수 있습니다.
왼쪽에 있는 키에 적용해야 합니다.
예:
프로토콜(tcp udp icmp)
그러면 세 가지 규칙이 발생합니다.
... -p TCP ...
... -p UDP ...
... -p ICMP ...
값만 '나열'할 수 있으므로 다음과 같은 작업을 수행할 수 없습니다.
프로토 TCP(ACCEPT LOG);
하지만 당신은 이렇게 할 수 있습니다:
체인(입력 출력 전달) proto(icmp udp tcp) DROP;
(이로 인해 XNUMX개의 규칙이 생성됩니다!)
값은 공백으로 구분됩니다. 배열 기호는 왼쪽과 오른쪽 모두입니다.
왼쪽 연관만 있는 중첩 블록과 달리 연관적입니다.
" # " 주석 기호입니다. 줄 끝까지 이 기호를 따르는 모든 내용은 다음과 같습니다.
무시되었습니다.
"명령"
셸에서 명령을 실행하고 프로세스 출력을 삽입합니다. 섹션을 참조하세요
백틱 를 참조하세요
'끈'
공백, 달러 기호 등을 포함할 수 있는 문자열을 인용하세요.
LOG log-prefix '야, 이게 내 로그 접두어야!';
"끈"
문자열을 인용하되(위 참조) 달러 기호가 있는 변수 참조는
평가:
DNAT를 "$myhost:$myport"로;
이전 섹션에서는 이미 "체인"과 같은 몇 가지 기본 키워드를 소개했습니다.
"프로토콜" 및 "수락". 그들의 본성을 탐구해 봅시다.
키워드에는 세 가지 종류가 있습니다.
· 위치 키워드는 규칙이 생성될 위치를 정의합니다. 예: "테이블", "체인".
· 일치 키워드는 전달되는 모든 패킷에 대해 테스트를 수행합니다. 현재 규칙은 다음과 같습니다.
하나 이상의 경기가 통과하지 못한 경우 적용됩니다. 예: "프로토", "daddr".
대부분의 일치 항목 뒤에는 "proto tcp", "daddr 172.16.0.0/12" 매개변수가 옵니다.
· 목표 키워드는 패킷으로 무엇을 해야 하는지를 나타냅니다. 예: "수락", "거부",
"도약".
일부 대상은 세부 정보를 지정하기 위해 더 많은 키워드를 정의합니다. "REJECT recognition-with icmp-
네트워크에 연결할 수 없습니다."
모든 규칙은 위치 및 목표, 그리고 원하는 만큼의 성냥:
테이블 필터 # 위치
proto tcp dport(http https) # 일치
수용하다; # 표적
엄밀히 말하면 네 번째 종류가 있습니다. 상사 키워드(ferm의 내부를 제어하는 키워드)
행동), 이에 대해서는 나중에 설명하겠습니다.
파라미터
많은 키워드가 매개변수를 사용합니다. 이는 리터럴, 변수 참조 또는
목록(배열):
프로토 udp
슬픈 $TRUSTED_HOSTS;
프로토 TCP dport(http https ssh);
LOG 로그 접두사 "펑키 워드라이버 경고: ";
그 중 일부는 부정될 수 있습니다(목록은 부정될 수 없음).
프로토!esp;
프로토 UDP dport !도메인;
매개변수를 사용하지 않는 키워드는 접두사 '!'로 무효화됩니다.
프로토 TCP !syn;
읽기 iptables에(8) 어디에 있는지 알아보기 위해 ! 사용할 수 있습니다.
BASIC 키워드
위치 키워드
도메인 [ip|ip6]
도메인을 설정합니다. "ip"는 기본값이며 "IPv4"(iptables)를 의미합니다. "ip6"은 IPv6용입니다.
"ip6tables"를 사용하여 지원합니다.
테이블 [필터|nat|mangle]
이 규칙이 삽입될 netfilter 테이블을 지정합니다: "filter"(기본값),
"nat" 또는 "mangle".
체인 [체인명]
이 규칙이 될 netfilter 체인(현재 테이블 내)을 지정합니다.
에 삽입되었습니다. 미리 정의된 일반적인 체인 이름은 "INPUT", "OUTPUT", "FORWARD",
테이블에 따라 "PREROUTING", "POSTROUTING". 넷필터 보기
자세한 내용은 문서를 참조하십시오.
여기에 존재하지 않는 체인을 지정하면 ferm이 규칙을 사용자 정의 체인에 추가합니다.
그 이름으로.
정책 [수락|삭제|..]
현재 체인에 대한 기본 정책을 지정합니다(기본 제공만 해당). 다음 중 하나일 수 있습니다.
내장된 대상(ACCEPT, DROP, REJECT, ...). 규칙과 일치하지 않는 패킷
체인에서는 정책에 지정된 대로 처리됩니다.
모호함을 피하기 위해 항상 사전 정의된 모든 체인의 정책을 지정하십시오.
명시 적으로.
@서브체인 ["체인 이름"] { ... }
일반 블록 연산자처럼 작동합니다(예: @서브체인 키워드) 제외
그 상사 중괄호 안의 규칙을 새로운 사용자 정의 체인으로 이동합니다. 이름
이 체인은 ferm에 의해 자동으로 선택됩니다.
많은 경우 커널이 블록을 건너뛸 수 있으므로 이는 단순한 블록보다 빠릅니다.
전제조건이 거짓일 때 거대한 규칙 블록. 다음 예를 상상해 보세요.
테이블 필터 체인 INPUT {
슬픈 (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) {
proto tcp dport (http https ssh) 수락;
프로토 UDP dport 도메인 ACCEPT;
}
}
그러면 20개의 규칙이 생성됩니다. 통과하지 못한 패킷이 도착했을 때 사드르
일치하더라도 20개의 규칙을 모두 확인합니다. 와 함께 @서브체인, 확인이 완료되었습니다
한 번만 실행하면 네트워크 필터링 속도가 빨라지고 CPU 로드가 줄어듭니다.
테이블 필터 체인 INPUT {
saddr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) @subchain {
proto tcp dport (http https ssh) 수락;
프로토 UDP dport 도메인 ACCEPT;
}
}
선택적으로 하위 체인의 이름을 정의할 수 있습니다.
saddr (1.2.3.4 2.3.4.5 3.4.5.6) @subchain "foobar" {
proto tcp dport (http https ssh) 수락;
프로토 UDP dport 도메인 ACCEPT;
}
이름은 인용된 문자열 리터럴이거나 확장된 ferm 표현식일 수 있습니다.
@cat("interface_", $iface) 또는 @substr($var,0,20) 등이 있습니다.
사용자 정의 체인을 명시적으로 선언하여 동일한 결과를 얻을 수 있지만 다음과 같은 느낌이 들 수도 있습니다.
그 사용 @서브체인 타이핑이 덜 필요합니다.
Basic iptables에 일치 키워드
인터페이스 [인터페이스 이름]
인터페이스 이름, eth0과 같은 외부 네트워크 카드 또는 다음과 같은 전화 접속을 정의하십시오.
ppp1 또는 패킷 전달에 일치시키려는 모든 장치. 그것은 동등하다
"-i" 스위치에 iptables에(8).
겉면 [인터페이스 이름]
인터페이스와 동일하지만 다음과 같이 패킷의 발신 인터페이스를 일치시키는 데만 사용됩니다.
iptables에(8).
프로토콜 [프로토콜 이름|프로토콜 번호]
현재 커널에서 지원되는 것은 tcp, udp 및 icmp 또는 각각의 것입니다.
숫자.
슬픈|아빠 [주소-사양]
지정된 주소(saddr)에서 시작되거나 다음을 대상으로 하는 패킷과 일치합니다.
주소(daddr).
예 :
saddr 192.168/8 수락; # (다음과 동일합니다 :)
saddr 192.168.0.0/255.255.255.0 수락;
Daddr my.domain.com 수락;
파편
조각화된 IP 패킷만 일치하도록 지정합니다. 패킷이
시스템이 처리할 수 있는 최대 패킷 크기(최대라고 함)보다 큽니다.
전송 단위(MTU))는 비트로 잘려서 다음과 같이 하나씩 전송됩니다.
단일 패킷. 보다 ifconfig를(8) 시스템의 MTU를 찾으려는 경우(
기본값은 일반적으로 1500바이트입니다.
조각은 찾을 방법이 없기 때문에 DOS 공격에 자주 사용됩니다.
조각 패킷의 출처를 벗어납니다.
스포츠|dport [포트 사양]
지정된 TCP 또는 UDP 포트의 패킷과 일치합니다. "스포츠"가 소스와 일치합니다.
port, dport는 대상 포트와 일치합니다.
이 일치 항목은 "protocol tcp" 또는 "protocol udp"를 지정한 후에만 사용할 수 있습니다.
왜냐하면 이 두 프로토콜에만 실제로 포트가 있기 때문입니다.
유효한 포트/범위의 몇 가지 예는 다음과 같습니다.
dport 80 수락;
dport http 수락;
dport ssh:http 수락;
dport 0:1023 수락; # :1023과 동일
dport 1023:65535 수락;
가 SYN tcp 패키지의 SYN 플래그가 일치해야 함을 지정합니다.
새로운 TCP 연결을 구축하십시오. 이를 통해 들어오는 연결을 식별할 수 있으며,
허용할지 여부를 결정합니다. 이 플래그가 없는 패킷은
아마도 이미 설정된 연결에서 나온 것이므로 합리적으로 간주됩니다.
통과시켜도 안전합니다.
모듈 [모듈 이름]
iptables 모듈을 로드합니다. 대부분의 모듈은 더 많은 일치 키워드를 제공합니다. 우리는 갈 것이다
그건 나중에.
Basic 목표 키워드
도약 [맞춤 체인 이름]
사용자 정의 체인으로 이동합니다. 사용자 정의 체인에 일치하는 규칙이 없으면 netfilter가 반환됩니다.
이전 체인의 다음 규칙으로 이동합니다.
진짜고토 [맞춤 체인 이름]
맞춤 체인으로 이동하세요. 와 달리 도약 선택권, RETURN 처리를 계속하지 않습니다
이 체인에 있지만 대신에 우리를 호출한 체인에 있습니다. 도약.
키워드 진짜고토 전환 기간 동안 선택되었기 때문입니다. 고토
(이미 더 이상 사용되지 않음)의 별칭이었습니다. 도약.
동의 일치하는 패킷을 허용합니다.
DROP 추가 통지 없이 일치하는 패킷을 삭제합니다.
받지 않다 일치하는 패킷을 거부합니다. 즉, 포트가 있는 발신자에게 ICMP 패킷을 보냅니다.
기본적으로 도달할 수 없습니다. 다른 ICMP 유형을 지정할 수도 있습니다.
거부하다; # 기본값은 icmp-port-unreachable입니다
icmp-net-unreachable을 사용하여 거부 거부;
자세한 내용을 보려면 "iptables -j REJECT -h"를 입력하세요.
RETURN 현재 체인을 완료하고 호출 체인으로 돌아갑니다("jump"인 경우).
[맞춤 체인 이름]'이 사용되었습니다).
NOP 전혀 조치가 없습니다.
추가 키워드
Netfilter는 모듈식입니다. 모듈은 추가 대상과 일치 키워드를 제공할 수 있습니다. 목록
netfilter 모듈의 수가 지속적으로 증가하고 있으며 ferm은 이를 지원하기 위해 노력하고 있습니다.
모두. 이 장에서는 현재 지원되는 모듈에 대해 설명합니다.
iptables에 일치 모듈
계정 정의된 네트워크/넷마스크에 있는 모든 호스트에 대한 계정 트래픽입니다. 이것은 다음 중 하나입니다.
타겟처럼 동작하는 모듈을 일치시키십시오. 즉, 대부분 다음을 사용해야 합니다. NOP
대상입니다.
모드 계정 aname mynetwork aaddr 192.168.1.0/24 ashort NOP;
주소 유형
주소 유형을 확인하세요. 소스 주소 또는 대상 주소 중 하나입니다.
mod addrtype src-type BROADCAST;
모드 주소 유형 dst-type LOCAL;
자세한 내용을 보려면 "iptables -m addrtype -h"를 입력하세요.
ah AH 패킷의 SPI 헤더를 확인합니다.
모드 아 아아스피 0x101;
모드 아 아아스피! 0x200:0x2ff;
IPv6에 대한 추가 인수:
모드 아 알렌 32 수락;
mod ah ahlen !32 수락;
Mod ah ahres 수락;
본문 효과 없이 규칙에 최대 256자의 설명을 추가합니다. 참고하세요
ferm 주석('#')과 달리 이 주석은 "iptables -L"에 표시됩니다.
모드 댓글 댓글 "이것은 내 댓글입니다." 수용하다;
조건
/proc/net/ipt_condition/NAME의 값이 1인 경우 일치합니다(경로는
ip6 도메인의 경우 /proc/net/ip6t_condition/NAME).
mod 조건 조건(abc def) ACCEPT;
모드 조건 조건 !foo ACCEPT;
콘바이트
연결(또는 두 흐름 중 하나)의 바이트 또는 패킷 수를 기준으로 일치시킵니다.
연결을 구성하는) 지금까지 전송된 수 또는 초당 평균 바이트 수
패킷.
mod connbytes connbytes 65536: connbytes-dir 모두 connbytes-mode 바이트 ACCEPT;
mod connbytes connbytes !1024:2048 connbytes-dir 응답 connbytes-mode 패킷 ACCEPT;
유효한 값 connbytes-dir: 실물, 댓글, 두; ...에 대한 콘바이트 모드:
패킷, 바이트, 평균.
제한
서버당 병렬 TCP 연결 수를 제한할 수 있습니다.
클라이언트 IP 주소(또는 주소 블록).
모드 connlimit connlimit-위 4 REJECT;
mod connlimit connlimit-above !4 수락;
mod connlimit connlimit-위 4 connlimit-mask 24 REJECT;
콘마크
CONNMARK 대상에 의해 설정된 연결과 관련된 표시 필드를 확인하십시오.
모드 콘마크 마크 64;
모드 connmark 마크 6/7;
협곡
연결 추적 정보를 확인하세요.
mod conntrack ctstate(설정됨 관련);
모드 conntrack ctproto tcp;
모드 conntrack ctorigsrc 192.168.0.2;
모드 conntrack ctorigdst 1.2.3.0/24;
모드 conntrack ctorigsrcport 67;
모드 conntrack ctorigdstport 22;
모드 conntrack ctreplsrc 2.3.4.5;
모드 conntrack ctrepldst! 3.4.5.6;
mod conntrack ctstatus 보증됨;
모드 conntrack ctexpire 60;
모드 conntrack ctexpire 180:240;
자세한 내용을 보려면 "iptables -m conntrack -h"를 입력하세요.
DCCP DCCP(Datagram Congestion Control Protocol) 특정 속성을 확인하세요. 이것
"protocol dccp"를 사용하면 모듈이 자동으로 로드됩니다.
프로토 dccp 스포츠 1234 dport 2345 수락;
proto dccp dccp 유형(SYNCACK ACK) 수락;
proto dccp dccp-types !REQUEST DROP;
proto dccp dccp-옵션 2 수락;
dscp TOS 필드 내에서 6비트 DSCP 필드를 일치시킵니다.
모드 dscp dscp 11;
모드 dscp dscp 클래스 AF41;
ecn IPv4 TCP 헤더의 ECN 비트를 일치시킵니다.
모드 ecn ecn-tcp-cwr;
모드 ecn ecn-tcp-ece;
모드 ecn ecn-ip-ect 2;
자세한 내용을 보려면 "iptables -m ecn -h"를 입력하세요.
ESP ESP 패킷의 SPI 헤더를 확인합니다.
모드 esp espspi 0x101;
모드 ESP 에스피! 0x200:0x2ff;
eui64 "이 모듈은 상태 비저장 자동 구성 IPv64 주소의 EUI-6 부분과 일치합니다.
이더넷 프레임의 소스 MAC 주소에서 파생된 EUI-64를 다음과 비교합니다.
IPv64 소스 주소의 하위 6비트입니다. 그러나 "Universal/Local" 비트는 그렇지 않습니다.
비교. 이 모듈은 다른 링크 레이어 프레임과 일치하지 않으며 다음에서만 유효합니다.
PREROUTING, INPUT 및 FORWARD 체인."
mod eui64 수락;
흐린 "이 모듈은 퍼지 논리 컨트롤러(FLC)를 기반으로 속도 제한과 일치합니다."
mod 퍼지 하한 10 상한 20 ACCEPT;
hbh 홉별 옵션 헤더(ip6)와 일치합니다.
mod hbh hbh-len 8 수락;
mod hbh hbh-len !8 수락;
mod hbh hbh-opts (1:4 2:8) 수락;
hl 홉 제한 필드(ip6)와 일치합니다.
mod hl hl-eq (8 10) 수락;
mod hl hl-eq !5 수락;
mod hl hl-gt 15 수락;
mod hl hl-lt 2 수락;
도우미 이 연결을 추적하는 conntrack 도우미 모듈을 확인합니다. 포트는 다음과 같을 수 있습니다.
"-portnr"로 지정됩니다.
모드 도우미 도우미 irc ACCEPT;
모드 도우미 도우미 ftp-21 ACCEPT;
icmp ICMP 관련 속성을 확인하세요. 이 모듈은 다음을 사용할 때 자동으로 로드됩니다.
"프로토콜 ICMP".
proto icmp icmp-type echo-request ACCEPT;
이 옵션은 be에서도 사용할 수 있습니다. ip6 도메인이라고 하지만 ICMPV6 in
IP6테이블.
유효한 ICMP 유형 목록을 얻으려면 "iptables -p icmp "-h""를 사용하십시오.
아이프렌지 IPv4 주소 범위를 일치시킵니다.
모드 IPrange src-범위 192.168.2.0-192.168.3.255;
모드 iprange dst-range ! 192.168.6.0-192.168.6.255;
ipv4옵션
소스 라우팅, 레코드 경로, 타임스탬프 및 같은 IPv4 헤더 옵션과 일치합니다.
라우터 경고.
모드 ipv4options ssrr 수락;
모드 ipv4options lsrr 수락;
mod ipv4options no-srr ACCEPT;
모드 ipv4options !rr 수락;
mod ipv4options !ts 수락;
모드 ipv4options !ra 수락;
mod ipv4options !any-opt 수락;
ipv6헤더
IPv6 확장 헤더(ip6)와 일치합니다.
mod ipv6header 헤더 !(홉 조각) ACCEPT;
mod ipv6header 헤더(auth dst) ACCEPT;
해시한도
'모드 제한'과 유사하지만 대상별 또는 포트별 추가 기능이 추가되었습니다.
해시 테이블에서 관리되는 한도.
mod hashlimit hashlimit 10/분 hashlimit-burst 30/분
해시 제한 모드 dstip 해시 제한 이름 foobar ACCEPT;
hashlimit-mode에 가능한 값: dstip dstport srcip srcport(또는 다음이 포함된 목록)
이 중 하나 이상).
더 많은 설정이 가능합니다. "iptables -m hashlimit -h"를 입력하세요.
선적 서류 비치.
길이 패키지 길이를 확인하세요.
모드 길이 길이 128; # 정확히 128바이트
모드 길이 길이 512:768; # 범위
모드 길이 길이! 256; # 부정됨
제한 패킷 속도를 제한합니다.
모드 제한 제한 1/초;
모드 제한 제한 15/분 제한-버스트 10;
자세한 내용을 보려면 "iptables -mlimit -h"를 입력하세요.
맥 소스 MAC 주소를 일치시킵니다.
모드 맥 맥 소스 01:23:45:67:89;
표 netfilter 표시 필드를 기반으로 패킷을 일치시킵니다. 32비트 정수일 수 있습니다.
0과 4294967295 사이.
모드 마크 마크 42;
mh 이동성 헤더와 일치합니다(도메인 ip6).
proto mh mh-type 바인딩 업데이트 ACCEPT;
멀티포트
소스 또는 대상 포트 집합을 일치시킵니다(UDP 및 TCP만 해당).
mod 다중 포트 소스 포트(https ftp);
mod 다중 포트 대상 포트(mysql 도메인);
이 규칙은 "dport" 및 "sport"에 비해 큰 이점이 있습니다. 단 하나의 규칙만 생성합니다.
모든 포트에 대해 하나의 규칙 대신 최대 15개의 포트에 대해.
n 번째 모든 n번째 패킷을 일치시킵니다.
3마다 n번째 mod;
5마다 mod n번째 카운터 2;
mod n번째는 2마다 3를 시작합니다.
mod n번째 시작 5 패킷 2 매 6;
자세한 내용을 보려면 "iptables -m nth -h"를 입력하세요.
OSF 보낸 사람의 운영 체제에 따라 패킷을 일치시킵니다.
모드 OSF 장르 리눅스;
모드 OSF! 장르 FreeBSD ttl 1 log 1;
자세한 내용을 보려면 "iptables -m osf -h"를 입력하세요.
소유자 패킷 생성자에 대한 정보, 즉 사용자 ID, 그룹 ID, 프로세스 ID를 확인합니다.
세션 ID 및 명령 이름.
모드 소유자 uid-소유자 0;
모드 소유자 gid-owner 1000;
모드 소유자 pid-소유자 5432;
모드 소유자 sid-owner 6543;
모드 소유자 cmd-소유자 "sendmail";
("cmd-owner", "pid-owner" 및 "sid-owner"에는 특별한 커널 패치가 필요합니다.
바닐라 리눅스 커널에 포함됨)
물리데브 패킷이 들어오거나 나가려고 하는 물리적 장치와 일치합니다.
기계. 이는 브리지된 인터페이스에 유용합니다.
모드 physdev physdev-in ppp1;
모드 physdev physdev-out eth2;
모드 physdev physdev-is-in;
모드 physdev physdev-is-out;
모드 physdev physdev-is-bridged;
패키지 유형 링크 계층 패킷 유형을 확인하십시오.
mod pkttype pkt 유형 유니캐스트;
mod pkttype pkt-type 브로드케이스;
mod pkttype pkt-type 멀티캐스트;
정책 이 패킷에 적용되는 IPsec 정책과 일치합니다.
mod 정책 dir out pol ipsec ACCEPT;
모드 정책 엄격한 요구사항 23 spi 0x10 proto ah ACCEPT;
모드 정책 모드 터널 터널-src 192.168.1.2 ACCEPT;
모드 정책 모드 터널 터널-dst 192.168.2.1 ACCEPT;
모드 정책 엄격한 다음 필수 24 spi 0x11 ACCEPT;
키워드는 참고하세요 프로토 의 단축 버전으로도 사용됩니다. 프로토콜
(내장 일치 모듈). 항상 긴 문자를 사용하여 이 충돌을 해결할 수 있습니다.
키워드는 프로토콜.
의 PSD TCP/UDP 포트 스캔을 감지합니다.
mod psd psd-가중치-임계값 21 psd-지연-임계값 300
psd-lo-포트-가중치 3 psd-hi-포트-가중치 1 DROP;
할당량 각 패킷마다 바이트 카운터를 줄여 네트워크 할당량을 구현합니다.
모드 할당량 할당량 65536 수락;
닥치는대로의 모든 패킷의 임의 비율을 일치시킵니다.
모드 무작위 평균 70;
왕국 라우팅 영역을 일치시킵니다. BGP를 사용하는 환경에 유용합니다.
모드 영역 영역 3;
최근 소스 IP 주소를 임시로 표시합니다.
모드 최근 세트;
최근 rcheck 초 60;
최근 설정된 rsource 이름 "badguy";
모드 최근 설정 rdest;
mod 최근 rcheck rsource 이름 "badguy" 초 60;
모드 최근 업데이트 초 120 히트 카운트 3 rttl;
이 netfilter 모듈에는 설계 결함이 있습니다. 일치 항목으로 구현되었지만
모듈에서는 "set" 키워드를 사용할 때 타겟과 유사한 동작을 갖습니다.
<http://snowman.net/projects/ipt_recent/>
rt IPv6 라우팅 헤더를 일치시킵니다(ip6만 해당).
mod rt rt-type 2 rt-len 20 수락;
mod rt rt-type !2 rt-len !20 수락;
mod rt rt-segsleft 2:3 수락;
mod rt rt-segsleft !4:5 수락;
mod rt rt-0-res rt-0-addrs (::1 ::2) rt-0-엄격하지 않음 ACCEPT;
sctp SCTP(Stream Control Transmission Protocol) 특정 속성을 확인하세요. 이것
"protocol sctp"를 사용하면 모듈이 자동으로 로드됩니다.
프로토 sctp 스포츠 1234 dport 2345 수락;
proto sctp 청크 유형만 DATA:Be ACCEPT;
proto sctp 청크 유형 any (INIT INIT_ACK) ACCEPT;
proto sctp 청크 유형 !all (HEARTBEAT) ACCEPT;
유효한 청크 유형 목록을 얻으려면 "iptables -p sctp "-h""를 사용하십시오.
세트 세트에 대해 소스 또는 대상 IP/포트/MAC를 확인합니다.
모드 세트 세트 badguys src DROP;
보다http://ipset.netfilter.org/> 자세한 내용은.
상태 연결 추적 상태를 확인합니다.
모드 상태 상태 INVALID DROP;
모드 상태 상태(ESTABLISHED RELATED) ACCEPT;
자세한 내용을 보려면 "iptables -m state -h"를 입력하세요.
통계량
후계자 n 번째 그리고 닥치는대로의, 현재 문서화되지 않은 iptables에(8) 매뉴얼 페이지.
모드 통계 모드 무작위 확률 0.8 ACCEPT;
Mod 통계 모드 n번째 매 5 패킷 0 DROP;
현 문자열과 일치합니다.
mod 문자열 string "foo bar" ACCEPT;
mod string algo kmp 64에서 128까지 XNUMX진수 문자열 "deadbeef" ACCEPT;
TCP TCP 특정 속성을 확인합니다. 이 모듈은 다음을 사용할 때 자동으로 로드됩니다.
"프로토콜 TCP".
프로토 TCP 스포츠 1234;
프로토 TCP dport 2345;
proto tcp tcp-플래그(SYN ACK) SYN;
프로토 TCP TCP-플래그! (SYN ACK) SYN;
proto tcp tcp-flags ALL(RST ACK);
프로토 TCP syn;
프로토 TCP TCP-옵션 2;
프로토 TCP mss 512;
자세한 내용을 보려면 "iptables -p tcp -h"를 입력하세요.
tcpmss SYN 또는 SYN/ACK 패킷의 TCP MSS 필드를 확인하세요.
모드 tcpmss mss 123 수락;
mod tcpmss mss 234:567 수락;
시간 패킷이 도착하는 시간이 주어진 범위 내에 있는지 확인하십시오.
모드 시간 시간 시작 12:00;
모드 시간 시간 중지 13:30;
모드 시간 요일(월, 수, 금);
모드 시간 날짜 시작 2005:01:01;
모드 시간 날짜 시작 2005:01:01:23:59:59;
모드 시간 날짜 중지 2005:04:01;
Mod 시간 월요일(30 31);
모드 시간 평일(수목);
모드 시간 시간 시작 12:00 utc;
모드 시간 timestart 12:00 localtz;
자세한 내용을 보려면 "iptables -m time -h"를 입력하세요.
TOS 지정된 TOS 값의 패킷과 일치합니다.
Mod tos tos 최소화 비용 수락;
mod tos tos !Normal-Service ACCEPT;
자세한 내용을 보려면 "iptables -m tos -h"를 입력하세요.
TTL IP 헤더의 ttl(Time to Live) 필드와 일치합니다.
모드 ttl ttl-eq 12; #ttl은 같음
모드 ttl ttl-gt 10; #ttl보다 큼
모드 ttl ttl-lt 16; #ttl보다 작음
u32 패킷의 원시 데이터를 비교합니다. ferm에서 둘 이상의 필터를 지정할 수 있습니다.
목록; 이는 여러 규칙으로 확장되지 않습니다.
mod u32 u32 '6&0xFF=1' 수락;
mod u32 u32 ('27&0x8f=7' '31=0x527c4833') 삭제;
더러운 형식이 잘못되었거나 이상해 보이는 패킷과 일치합니다. 이 경기는 더 이상 없습니다
매개 변수를 설정합니다.
iptables에 목표 모듈
다음 추가 대상을 활성화한 경우 ferm에서 사용할 수 있습니다.
귀하의 커널:
나누다
CBQ 클래스를 설정합니다.
CLASSIFY 세트 클래스 3:50;
클러스터IP
특정 IP 및 MAC 주소를 공유하는 간단한 노드 클러스터를 구성합니다.
연결은 노드 간에 정적으로 분산됩니다.
CLUSTERIP 새로운 해시 모드 sourceip Clustermac 00:12:34:45:67:89
총 노드 4개 로컬 노드 2 해시 초기화 12345;
콘마크
연결과 관련된 netfilter 표시 값을 설정합니다.
CONNMARK 세트 마크 42;
CONNMARK 저장 표시;
CONNMARK 복원 표시;
CONNMARK 저장 표시 마스크 0x7fff;
CONNMARK 복원 표시 마스크 0x8000;
CONNSECMARK
이 모듈은 패킷의 보안 표시를 연결(레이블이 지정되지 않은 경우)로 복사합니다.
연결에서 다시 패킷으로(레이블이 지정되지 않은 경우에만) 일반적으로 사용되는
SECMARK와 결합하면 맹글 테이블에서만 유효합니다.
CONNSECMARK 저장;
CONNSECMARK 복원;
DTA 에 [ip 주소|ip 범위|ip 포트 범위]
패킷의 대상 주소를 변경합니다.
DNAT를 10.0.0.4로;
DNAT를 10.0.0.4:80으로;
DNAT에서 10.0.0.4:1024-2048;
DNAT를 10.0.1.1-10.0.1.20으로;
ECN 이 목표를 사용하면 알려진 ECN 블랙홀을 선택적으로 해결할 수 있습니다. 그것은 단지
맹글 테이블에 사용됩니다.
ECN ecn-tcp-제거;
HL IPv6 홉 제한 필드를 수정합니다(ip6/mangle에만 해당).
HL hl-세트 5;
HL hl-dec 2;
HL hl-inc 1;
IPV4OPTSSTRIP
패킷에서 모든 IP 옵션을 제거합니다. 이 모듈은 어떤 옵션도 사용하지 않습니다.
IPV4OPTSSTRIP;
LOG 커널 로그에 이 규칙과 일치하는 모든 패킷을 기록합니다. 로그에 주의하세요
홍수. 이는 "종료되지 않는 대상"입니다. 즉, 규칙 순회입니다.
다음 규칙에서 계속됩니다.
LOG 로그 수준 경고 log-prefix "이것을 보세요: ";
LOG 로그-tcp-시퀀스 로그-tcp-옵션;
LOG 로그-ip-옵션;
표 패킷에 대한 netfilter 표시 필드를 설정합니다(32에서 0비트 사이의 정수).
4294967295) :
MARK 세트마크 42;
MARK set-xmark 7/3;
표와 표 31;
표시 또는 표시 1;
MARK xor-mark 12;
가장 무도회
일치하는 패킷을 가장합니다. 선택적으로 다음에 대한 포트 또는 포트 범위가 옵니다.
iptables. "123", "123-456" 또는 "123:456"으로 지정하세요. 포트 범위 매개변수
가장된 연결이 시작되어야 하는 로컬 포트를 지정합니다.
가장 무도회;
MASQUERADE-포트 1234:2345;
MASQUERADE 포트 1234:2345 무작위;
반전 소스 및 대상 필드를 반전시키는 실험적 시연 대상
IP 헤더에.
거울;
넷맵 전체 네트워크를 다른 네트워크에 매핑합니다. NAT 테이블.
192.168.2.0/24에 대한 NETMAP;
NOTRACK 해당 규칙과 일치하는 모든 패킷에 대한 연결 추적을 비활성화합니다.
프로토 TCP dport (135:139 445) NOTRACK;
NFLOG netlink를 통해 패킷을 기록합니다. 이게 그 후계자야. ULOG.
NFLOG nflog-group 5 nflog-prefix "이것을 보세요: ";
NFLOG nflog-범위 256;
NFLOG nflog-임계값 10;
NQUEUE 사용자 공간 대기열에는 nfnetlink_queue 커널 지원이 필요합니다.
proto tcp dport ftp NFQUEUE 대기열 번호 20;
열 사용자 공간 대기열, 이전 버전 NQUEUE. 모든 패킷은 대기열 0으로 이동합니다.
프로토 TCP dport FTP 대기열;
리디렉션 포트로 [포트]
투명 프록시: 패킷의 대상 IP를 머신으로 변경합니다.
자체.
proto tcp dport http REDIRECT to-ports 3128;
proto tcp dport http REDIRECT to-ports 3128 무작위;
같은 SNAT와 유사하지만 클라이언트는 모든 클라이언트에 대해 동일한 소스 IP에 매핑됩니다.
연결.
1.2.3.4-1.2.3.7과 동일;
1.2.3.8-1.2.3.15 nodst와 동일;
1.2.3.16-1.2.3.31과 동일하며 무작위입니다.
보안마크 이는 패킷과 관련된 보안 표시 값을 설정하는 데 사용됩니다.
SELinux와 같은 보안 하위 시스템. 맹글 테이블에서만 유효합니다.
SECMARK selctx "system_u:object_r:httpd_packet_t:s0";
SET를 [추가-세트|델-세트] [세트 이름] [플래그]
지정된 세트에 IP를 추가합니다. 보다http://ipset.netfilter.org/>
proto icmp icmp-type echo-request SET 추가 설정 badguys src;
SNAT 에 [ip 주소|ip 범위|ip 포트 범위]
패킷의 소스 주소를 변경합니다.
SNAT를 1.2.3.4로;
SNAT 1.2.3.4:20000-30000;
SNAT에서 1.2.3.4로 무작위;
TCPMSS TCP SYN 패킷의 MSS 값을 변경합니다.
TCPMSS 세트-mss 1400;
TCPMSS 클램프-mss-pmtu;
서비스 약관 설정 [값]
tcp 패키지 서비스 유형 비트를 이 값으로 설정합니다. 이는 다음에 의해 사용됩니다.
트래픽 스케줄러가 원하는 것이 무엇이든, 대부분은 자신의 Linux 시스템이지만 아마도
더. 원래의 tos-bit는 공백으로 표시되고 이 값으로 덮어쓰여집니다.
TOS는 처리량 최대화로 설정됩니다.
TOS 및 7;
TOS 또는-tos 1;
TOS xor-tos 4;
자세한 내용을 보려면 "iptables -j TOS -h"를 입력하세요.
TTL TTL 헤더 필드를 수정합니다.
TTL ttl-세트 16;
TTL ttl-dec 1; # 1씩 감소
TTL ttl-inc 4; # 4씩 증가
ULOG 사용자 공간 프로그램에 패킷을 기록합니다.
ULOG ulog-nlgroup 5 ulog-prefix "이것을 보세요: ";
ULOG ulog-cprange 256;
ULOG ulog-qthreshold 10;
기타 도메인
2.0 버전부터 상사 뿐만 아니라 지원 ip 그리고 ip6뿐만 아니라, ARP (ARP 테이블) 및 eb
(이더넷 브리징 테이블). 개념은 비슷합니다 iptables에.
아파트 키워드
소스 IP, 대상 IP
소스 또는 대상 IPv4 주소와 일치합니다. 와 동일 사드르 그리고 아빠 인간을 ip
도메인입니다.
소스 맥, 대상 맥
소스 또는 대상 MAC 주소와 일치합니다.
인터페이스, 겉면
입력 및 출력 인터페이스.
h 길이
패킷의 하드웨어 길이입니다.
체인 INPUT h 길이 64 ACCEPT;
오피 작업 코드, 자세한 내용은 다음을 참조하세요. iptables에(8).
opcode 9 수락;
h형 하드웨어 유형.
h-유형 1 수락;
원기
프로토콜 유형.
프로토타입 0x800 ACCEPT;
맹글링
키워드 맹글-ip-s, 맹글-ip-d, 맹글-맥-s, 맹글-맥-d, 맹글 타겟
ARP 맹글링에 사용될 수 있습니다. 보다 iptables에(8) 자세한 내용은.
ebtables 키워드
프로토 프레임을 생성한 프로토콜과 일치합니다. 예: IPv4 or PPP. 목록은 다음을 참조하세요.
/etc/ethertypes.
인터페이스, 겉면
물리적 입력 및 출력 인터페이스.
논리 입력, 논리적 출력
논리적 브리지 인터페이스.
사드르, 아빠
소스 또는 대상 MAC 주소와 일치합니다.
경기 모듈
다음 일치 모듈이 지원됩니다: 802.3, arp, ip, mark_m, pkttype, stp,
VLAN, 로그.
목표 확장
다음과 같은 대상 확장이 지원됩니다: arpreply, dnat, mark, 리디렉션,
콧물.
사이에 충돌이 있음을 주의하세요. --표시 인사말 mark_m 일치 모듈
그리고 -j 표. 둘 다 ferm 키워드로 구현되므로 표에서
다른 이름과 마찬가지로 대상 이름을 대문자로 작성하여 이 문제를 해결하기로 결정했습니다.
도메인. 다음 예에서는 마크 1을 2로 다시 작성합니다.
표시 1 표시 2;
고사양 STYLE
변수
복잡한 방화벽 파일에서는 변수를 사용하는 것이 도움이 됩니다. 예를 들어 네트워크에
의미 있는 이름을 인터페이스합니다.
변수를 설정하려면 다음을 작성하십시오.
@def $DEV_INTERNET = eth0;
@def $PORTS = (http ftp);
@def $MORE_PORTS = ($PORTS 8080);
실제 ferm 코드에서 변수는 다른 키워드 매개변수처럼 사용됩니다.
체인 INPUT 인터페이스 $DEV_INTERNET proto tcp dport $MORE_PORTS ACCEPT;
변수는 키워드 매개변수("192.168.1.1", "http")에만 사용할 수 있습니다. 그들
"proto" 또는 "인터페이스"와 같은 ferm 키워드를 포함할 수 없습니다.
변수는 현재 블록에서만 유효합니다.
@def $DEV_INTERNET = eth1;
체인 입력 {
프로토 TCP {
@def $DEV_INTERNET = ppp0;
인터페이스 $DEV_INTERNET dport http ACCEPT;
}
인터페이스 $DEV_INTERNET DROP;
}
다음으로 확장됩니다.
체인 입력 {
프로토 TCP {
인터페이스 ppp0 dport http ACCEPT;
}
인터페이스 eth1 DROP;
}
"def $DEV_INTERNET = ppp0"은 "proto tcp" 블록에서만 유효합니다. 상위 블록
여전히 "set $DEV_INTERNET = eth1"을 알고 있습니다.
포함 파일은 특별합니다. 포함 파일에 선언된 변수는 계속해서 사용할 수 있습니다.
호출 블록. 이는 변수만 선언하는 파일을 포함할 때 유용합니다.
Automatic 변수
일부 변수는 ferm에 의해 내부적으로 설정됩니다. Ferm 스크립트는 다른 스크립트와 마찬가지로 이를 사용할 수 있습니다.
변하기 쉬운.
$FILENAME
ferm이 시작된 디렉토리와 관련된 구성 파일의 이름입니다.
$FILEBNAME
구성 파일의 기본 이름입니다.
$DIRNAME
구성 파일의 디렉터리입니다.
$도메인 현재 도메인입니다. 다음 중 하나 ip, ip6, ARP, eb.
$TABLE 현재 netfilter 테이블입니다.
$CHAIN 현재 넷필터 체인.
$LINE 현재 스크립트의 줄입니다. 다음과 같이 사용할 수 있습니다.
@def &log($msg) = {
LOG 로그 접두사 "rule=$msg:$LINE ";
}
.
.
.
&log("로그 메시지");
기능
함수는 매개변수를 가질 수 있다는 점을 제외하면 변수와 유사하며 다음을 제공합니다.
값이 아닌 ferm 명령입니다.
@def &FOO() = proto (tcp udp) dport 도메인;
&FOO() 수락;
@def &TCP_TUNNEL($port, $dest) = {
테이블 필터 체인 FORWARD 인터페이스 ppp0 proto tcp dport $port Daddr $dest externalface eth0 ACCEPT;
테이블 nat 체인 PREROUTING 인터페이스 ppp0 proto tcp dport $port Daddr 1.2.3.4 DNAT to $dest;
}
&TCP_TUNNEL(http, 192.168.1.33);
&TCP_TUNNEL(ftp, 192.168.1.30);
&TCP_TUNNEL((ssh smtp), 192.168.1.2);
블록(예: '{...}')을 포함하는 함수 호출은 ferm의 마지막 명령이어야 합니다.
규칙, 즉 ';'이 뒤에 와야 합니다. '&푸()' 예제에는 블록이 포함되어 있지 않으므로
통화 후에 'ACCEPT'라고 쓸 수 있습니다. 이를 방지하려면 키워드를 재정렬하면 됩니다.
@def &IPSEC() = { proto (특히 아); 프로토 UDP dport 500; }
체인 입력 승인 &IPSEC();
백틱
백틱을 사용하면 외부 명령의 출력을 사용할 수 있습니다.
@def $DNSSERVERS = `grep 네임서버 / 기타 / resolv.conf에 | awk '{print $2}'`;
체인 INPUT proto tcp saddr $DNSSERVERS ACCEPT;
명령은 쉘(/ 빈 / SH), Perl의 백틱과 같습니다. 정말 그래
여기서는 변수 확장을 수행하지 마십시오.
그런 다음 출력은 토큰화되어 ferm 목록(배열)으로 저장됩니다. '#'으로 시작하는 줄
무시됩니다. 다른 줄에는 공백으로 구분된 값이 얼마든지 포함될 수 있습니다.
포함 사항
The @포함하다 키워드를 사용하면 외부 파일을 포함할 수 있습니다.
@include 'vars.ferm';
파일 이름은 호출 파일을 기준으로 합니다(예: 다음을 포함하는 경우).
/etc/ferm/ferm.conf, 위의 진술에는 다음이 포함됩니다 /etc/ferm/vars.ferm. 변수 및
포함된 파일에 선언된 함수는 호출 파일에서 계속 사용할 수 있습니다.
들 블록 내에서 작동합니다.
체인 입력 {
@include 'input.ferm';
}
디렉터리를 지정하면(후행 '/' 포함) 이 디렉터리의 모든 파일은
포함, 알파벳순으로 정렬:
@include 'ferm.d/';
후행 파이프 기호를 사용하면 상사 쉘 명령을 실행하고 그 출력을 구문 분석합니다.
@include '/root/generate_ferm_rules.sh $HOSTNAME|'
조건부
키워드 @만약에 조건식을 소개합니다.
@if $조건 DROP;
Perl에서와 마찬가지로 값은 true로 평가됩니다. XNUMX, 빈 목록, 빈 문자열은 false입니다.
다른 모든 것은 사실입니다. 실제 값의 예:
(ab); 1; '푸'; (0 0)
거짓 값의 예:
(); 0; '0'; ''
도 있습니다 @또 다른:
@if $조건 DROP; @else 거부;
앞에 세미콜론을 주목하세요 @또 다른.
다음 중 하나 뒤에 중괄호를 사용할 수 있습니다. @만약에 or @또 다른:
@if $조건 {
MARK 세트마크 2;
반품;
} @또 다른 {
MARK 세트마크 3;
}
닫는 중괄호도 명령을 종료하므로 세미콜론이 필요하지 않습니다.
없다. @엘시프사용 @또 다른 @만약에 대신.
예:
@def $have_ipv6 = `test -f /proc/net/ip6_tables_names && echo 1 || 에코`;
@if $have_ipv6 {
도메인 IP6 {
# ....
}
}
후크
사용자 정의 명령을 실행하려면 후크를 설치할 수 있습니다.
@hook pre "에코 0 >/proc/sys/net/ipv4/conf/eth0/전달";
@hook 게시물 "에코 1 >/proc/sys/net/ipv4/conf/eth0/전달";
@hook 플러시 "에코 0 >/proc/sys/net/ipv4/conf/eth0/전달";
지정된 명령은 셸을 사용하여 실행됩니다. "pre"는 이전에 명령을 실행한다는 의미입니다.
방화벽 규칙을 적용하고 "게시"는 나중에 명령을 실행하는 것을 의미합니다. "플러시" 후크
ferm이 방화벽 규칙을 플러시한 후에 실행됩니다(옵션 --flush). 무엇이든 설치할 수 있습니다.
후크 수.
빌트인 기능
유용하다고 생각되는 몇 가지 내장 함수가 있습니다.
@eq(a,b)
두 값이 같은지 테스트합니다. 예:
@if @eq($DOMAIN, ip6) 삭제;
@네(a,b)
@eq와 유사하게 이는 비균등성을 테스트합니다.
@not(엑스)
부울 값을 부정합니다.
@resolve((호스트 이름1 호스트 이름2 ...), [유형])
일반적으로 호스트 이름은 iptables에 의해 확인됩니다. ferm이 호스트 이름을 확인하도록 하려면 다음을 사용하십시오.
함수 @resolve:
saddr @resolve(my.host.foo) proto tcp dport ssh ACCEPT;
saddr @resolve((another.host.foo third.host.foo)) proto tcp dport openvpn ACCEPT;
Daddr @resolve(ipv6.google.com, AAAA) proto tcp dport http ACCEPT;
두 번째 줄의 이중 괄호에 주목하세요: ferm 목록을 생성하기 위한 내부 쌍,
함수 매개변수 구분 기호로 외부 쌍을 사용합니다.
두 번째 매개변수는 선택사항이며 DNS 레코드 유형을 지정합니다. 기본값은 "A"입니다.
방화벽 구성에서 확인된 호스트 이름에 주의하세요. DNS 요청이 차단될 수 있습니다.
방화벽 구성을 오랫동안 방치하면 시스템이 취약해지거나 실패할 수 있습니다.
@고양이(아, b, ~)
모든 매개변수를 하나의 문자열로 연결합니다.
@substr(표현식, 오프셋, 길이)
표현식에서 하위 문자열을 추출하여 반환합니다. 첫 번째 문자는 오프셋 0에 있습니다.
OFFSET은 음수이며 문자열 끝에서부터 시작됩니다.
@길이(표현식)
EXPR 값의 문자 길이를 반환합니다.
@basename(경로)
주어진 경로(File::Spec::splitpath)에 대한 파일의 기본 이름을 반환합니다.
@dirname(경로)
마지막 구성요소가 다음과 같다고 가정하고, 주어진 경로에 대한 마지막 디렉터리의 이름을 반환합니다.
파일 이름(파일::Spec::splitpath).
@ipfilter(목록)
현재 도메인과 확실히 일치하지 않는 IP 주소를 필터링합니다. 그건
IPv4 및 IPv6에 대한 공통 변수 및 규칙을 만드는 데 유용합니다.
@def $TRUSTED_HOSTS = (192.168.0.40 2001:abcd:ef::40);
도메인(ip ip6) 체인 INPUT {
saddr @ipfilter($TRUSTED_HOSTS) proto tcp dport ssh ACCEPT;
}
레시피
The ./예제/ 디렉토리에는 시작하는 데 사용할 수 있는 수많은 ferm 구성이 포함되어 있습니다.
새로운 방화벽. 이 섹션에는 더 많은 샘플, 레시피 및 요령이 포함되어 있습니다.
Easy 포트 전송
Ferm 기능을 사용하면 일상적인 작업을 빠르고 쉽게 수행할 수 있습니다.
@def &FORWARD_TCP($proto, $port, $dest) = {
테이블 필터 체인 FORWARD 인터페이스 $DEV_WORLD 외부 표면 $DEV_DMZ Daddr $dest proto $proto dport $port ACCEPT;
테이블 nat 체인 PREROUTING 인터페이스 $DEV_WORLD Daddr $HOST_STATIC proto $proto dport $port DNAT to $dest;
}
&FORWARD_TCP(tcp, http, 192.168.1.2);
&FORWARD_TCP(tcp, smtp, 192.168.1.3);
&FORWARD_TCP((tcp UDP), 도메인, 192.168.1.4);
원격수행 상사
대상 컴퓨터를 실행할 수 없는 경우 상사 어떤 이유에서인지(내장 장치일 수도 있음)
Perl 없이), 편집할 수 있습니다 상사 다른 컴퓨터에 구성 파일을 저장하고 상사
거기에서 쉘 스크립트를 생성하십시오.
OpenWRT의 예:
ferm --remote --shell mywrt/ferm.conf >mywrt/firewall.user
chmod +x mywrt/firewall.user
scp mywrt/firewall.user mywrt.local.net:/기타/
SSH mywrt.local.net /etc/firewall.user
옵션
--noexec 실행하지 마십시오 iptables에(8) 명령이지만 대신 건너뜁니다. 이렇게하면 할 수 있습니다
데이터를 구문 분석하고 사용하십시오. --윤곽 출력을 보려면.
--플러시 방화벽 규칙을 삭제하고 모든 체인의 정책을 ACCEPT로 설정합니다. 상사
어떤 도메인과 테이블이 있는지 확인하려면 구성 파일이 필요합니다.
체하는.
--윤곽 규칙에서 생성된 방화벽 라인을 표시합니다. 표시됩니다
실행 직전에 오류 메시지가 표시되면 iptables에(8)
등을 통해 어떤 규칙이 오류를 일으켰는지 확인할 수 있습니다.
--인터렉티브
방화벽 규칙을 적용하고 사용자에게 확인을 요청합니다. 다음으로 되돌아갑니다.
30초 이내에 유효한 사용자 응답이 없는 경우 이전 규칙 세트(참조
--시간 초과). 이는 원격 방화벽 관리에 유용합니다. 테스트할 수 있습니다.
자신을 가두는 것을 두려워하지 않고 규칙을 따르십시오.
--시간 초과 S If --인터렉티브 사용된 후 유효한 사용자 응답이 없으면 롤백됩니다.
이 초 후에. 기본값은 30입니다.
--도움 사용 가능한 명령줄 옵션의 간략한 목록을 표시합니다.
--번역 프로그램의 버전 번호를 표시합니다.
--빠른 빠른 모드 활성화: ferm이 iptables-저장(8) 파일을 다운로드하여 설치합니다.
과 iptables-복원(8). ferm이 호출하기 때문에 훨씬 빠릅니다. iptables에(8)
기본적으로 모든 규칙에 대해 한 번.
빠른 모드는 기본적으로 활성화되어 있습니다. 상사 2.0에서는 이 옵션을 더 이상 사용하지 않습니다.
--느린 빠른 모드 비활성화, 즉 실행 iptables에(8) 모든 규칙에 대해 사용하지 마십시오.
iptables-복원(8).
--껍질 호출하는 쉘 스크립트를 생성하십시오. iptables-복원(8) 그리고 그것을 인쇄합니다.
--fast --line을 의미합니다.
--원격 원격 시스템에 대한 규칙을 생성합니다. 암시하다 --noexec 그리고 --윤곽. 수
과 결합 --껍질.
--도메인 {ip|ip6}
지정된 도메인만 처리합니다. 상사 도메인이 다음인 경우 출력이 비어 있을 수 있습니다.
입력 파일에 구성되지 않았습니다.
--def '$이름=값'
구성 파일에 정의된 변수를 재정의합니다.
onworks.net 서비스를 사용하여 온라인으로 ferm을 사용하세요.
