난 방금 읽었어iptables
매뉴얼 페이지. 모듈의 경우 ?를 conntrack
사용/ --ctproto
선호 해야 하는 것 같습니다 .--protocol
지금까지 써본거 더 잘 보여드릴께요, 언젠가는 옮겨갈게요ct*
. 어쨌든, 여기 있습니다:
$ cat /etc/iptables/rules.v4
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
--append INPUT --in-interface lo --match comment --comment "Allow loopback" --jump ACCEPT
--append INPUT --match conntrack --ctstate INVALID --match comment --comment "Drop invalid packets" --jump DROP
--append INPUT --match conntrack --ctstate NEW --protocol tcp ! --syn --match comment --comment "Reject new non-syn TCP" --jump REJECT --reject-with tcp-reset
--append INPUT --match conntrack --ctstate NEW,ESTABLISHED --protocol tcp --match tcp --destination-port 22 --source 192.168.0.0/24 --match comment --comment "Allow local SSH on default port" --jump ACCEPT
--append INPUT --protocol icmp --icmp-type echo-request --match limit --limit 2/second --limit-burst 5 --match comment --comment "Allow only ping and within limits" --jump ACCEPT
--append INPUT --match conntrack --ctstate RELATED,ESTABLISHED --match comment --comment "Normal traffic" --jump ACCEPT
COMMIT
그래서 다음과 같이 다시 작성해 보았습니다.
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
--append INPUT --in-interface lo --match comment --comment "Allow loopback" --jump ACCEPT
--append INPUT --match conntrack --ctstate INVALID --match comment --comment "Drop invalid packets" --jump DROP
--append INPUT --match conntrack --ctstate NEW --ctproto tcp ! --syn --match comment --comment "Reject new non-syn TCP" --jump REJECT --reject-with tcp-reset
--append INPUT --match conntrack --ctstate NEW,ESTABLISHED --ctproto tcp --match tcp --destination-port 22 --source 192.168.0.0/24 --match comment --comment "Allow local SSH on default port" --jump ACCEPT
--append INPUT --match conntrack --ctproto icmp --icmp-type echo-request --match limit --limit 2/second --limit-burst 5 --match comment --comment "Allow only ping and within limits" --jump ACCEPT
--append INPUT --match conntrack --ctstate RELATED,ESTABLISHED --match comment --comment "Normal traffic" --jump ACCEPT
COMMIT
다른 방법을 시도하면 다음과 같은 오류가 발생할 수 있으며 다른 오류도 발생할 수 있습니다.
# iptables-restore < rules.v4-ct
iptables-restore v1.8.4 (legacy): unknown option "--syn"
Error occurred at line: 7
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
# iptables-restore < rules.v4-ct
iptables-restore v1.8.4 (legacy): unknown option "--icmp-type"
Error occurred at line: 9
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
# iptables-restore < rules.v4-ct
iptables-restore: line 11 failed
# iptables-restore < rules.v4-ct
Bad argument `COMMIT'
Error occurred at line: 11
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
이에 대해 밝혀주시면 감사하겠습니다.
답변1
몇 가지 참고사항:
- 사람들이 먼저 사용해야 하는 곳이 어디인지 알고 싶습니다
--ctproto tcp
. - 정밀한OP의 맨페이지 URL 링크10년이 넘었습니다. 예를 들어 이 답변 끝에 있는 주석에 사용된
conntrack
일치 모듈이 포함되어 있지 않습니다.--ctreplsrcport
두 개의 매뉴얼 페이지로 분할되지 않았습니다.iptables
(기본) 및iptables-extensions
오늘날 대부분의 흥미로운 문서(일치 및 표적)가 여기에 존재합니다. 나는 인수와 하위 명령에 대한 링크를 제공하는 데비안 매뉴얼 페이지를 선호하지만(예:conntrack
성냥)가 자주 나타납니다.
질문에 관하여:
--protocol
은 내장된 기능이며iptables
추가 일치 모듈이 필요하지 않습니다(설명 참조iptables-extensions(8)
). 일치 모듈 인수가 아니며 종속성을 여러 모듈로 변경합니다.모듈을 로드하지 않고 모듈별 매개변수를 사용하면 작동하지 않습니다.
프로토콜별 모듈은 프로토콜을 지정해야 합니다.
프로토콜(예:
-p tcp
)을 선언하면 자동으로 동일한 이름(예:-m tcp
)을 가진 모듈 로드를 시도합니다. 그 반대는 사실이 아닙니다. 이것이 바로tcp
ORicmp
모듈이 명시적으로 작성되는 경우가 거의 없지만 그림과 같이 실제로는 항상 존재하는 이유 입니다iptables-save
. 이는 명시적으로 문서화되어 있지 않지만 만약 그렇다면 문서는 다음과 같습니다.엄격하게둘째, 항상 최신 문서를 작성-p tcp
하고 존중해야 합니다.-m tcp
따라서 사용 가능하더라도 --ctproto tcp
일부가 아닌 기능이 필요할 때마다 -p tcp -m tcp
여전히 필요합니다. ICMP도 마찬가지다. 보다 구체적인 방법을 사용할 수 있는 경우 conntrack
이를 위해 모듈을 사용하는 것은 아마도 가치가 없을 것입니다.
또한 conntrack
검색연결하다테이블은 특정 방법보다 비용이 더 많이 들 수 있습니다(그러나 실제로 조회가 완료되면(prio -200 기준)연결하다시설),항목에 대한 참조 캐싱상태는 패킷의 skbuff에서도 직접 확인할 수 있습니다.
몇 가지 참고사항:
-
시스템(네트워크 네임스페이스) 수준에서 이 필터는 다음을 수행합니다.
-A INPUT -p tcp -m conntrack --ctstate NEW --ctproto tcp -m tcp ! --syn -m comment --comment "Reject new non-syn TCP" -j REJECT --reject-with tcp-reset
최종
REJECT
목표를 제외하고는 다음으로 대체될 수 있습니다.sysctl -w net.netfilter.nf_conntrack_tcp_loose=0
이러한 패킷은 이제 유효하지 않은 것으로 분류되어 유효하지 않은 규칙 검사를 통해 삭제됩니다(OP 규칙에서 거부되는 대신). 기본적으로 느슨한 모드는 일시적으로 중단된 트래픽(예: 상태 저장 라우팅 방화벽 다시 시작)을 재개할 수 있도록 활성화됩니다.
8호선은 실제로 완료될 수 있습니다.아니요
-p tcp -m tcp
왜냐면 이 사건 때문에
-m conntrack
대체하는 기능이 있습니다.nat/PREROUTING 규칙은 원래 대상 포트(22와 다를 수 있음)를 변경할 수 있으므로
--ctreplsrcport 22
아래에서는 보다 자연스러운 포트가 선택됩니다--ctorigdstport 22
.-A INPUT -s 192.168.0.0/24 -m conntrack --ctstate NEW,ESTABLISHED --ctproto tcp --ctreplsrcport 22 --match comment --comment "Allow local SSH on default port" --jump ACCEPT
심지어(드물게 사용되는 nat/INPUT은 필터/입력 후에 발생합니다. 일부 문서에서는 달리 설명하지만 소스에서는 아무 것도 변경되지 않으며
--ctorigsrc
자연스럽게 사용할 수 있습니다):-A INPUT -m conntrack --ctstate NEW,ESTABLISHED --ctproto tcp --ctreplsrcport 22 --ctorigsrc 192.168.0.0/24 --match comment --comment "Allow local SSH on default port" --jump ACCEPT