나는 nftables를 규칙으로 사용합니다.
내 질문: tcp 플래그를 기록하는 방법은 무엇입니까?
내 규칙은 다음과 같습니다.
nft add rule filter input tcp dport 22 ct state new tcp flags \& \(fin\|syn\) ==\( fin \| syn\) accept
내가 항상 얻는 결과는 다음과 같습니다.
Dec 6 13:40:19 my_host my_FIN IN=eth0 OUT=eth1 MAC= SRC=x.1.1.1 DST=x.2.2.2 LEN=40 TOS=00 PREC=0x00 TTL=127 ID=17695 DF PROTO=TCP SPT=54049 DPT=422SEQ=2558094232 ACK=0 WINDOW=8192 SYN URGP=0 MARK=0
편집하다 내 규칙:
chain FORWARD {
ip saddr 1.1.1.1 ip daddr . tcp dport @myset tcp flags & (fin | syn) == fin | syn counter packets 0 bytes 0 log prefix " myprefix " group 1 accept
}
답변1
TCP의 경우 Netfilter의 conntrack은 내부 상태와 동등한 TCP 상태 간의 추가 일관성 검사를 수행합니다. 이것웹 개발 2.1 PDF문서(죄송하지만 이에 대한 netdev URL을 찾을 수 없습니다. 작성자의 웹사이트에서 가져온 것입니다)에서는 이에 대해 설명합니다.
L4 추적기는 상태(예: tcp:trace 상태)를 유지하려고 시도하며 시퀀스 번호를 확인합니다. 예:
- 새로운TCP 패킷?동기화비트 설정?
- 예상 창의 TCP 시퀀스 번호?
- 확인되지 않은 데이터? →시간 초과 조정
- 첫 번째? 지느러미? → 연결 제거 및/또는 시간 제한 조정
연결하다새로운상태가 TCP와 일치함SYN_SENT또는 TCPSYN_수신됨상태. 당신이 선택하는 경우새로운규칙의 상태 조건을 사용하면 ct state new
어떤 것과도 일치하지 않습니다.지느러미패킷이 없기 때문에지느러미패킷은 새로운 TCP 연결 설정에 참여합니다.
삭제하고 다시 시도해 보세요 ct state new
.
고쳐 쓰다: 처음에 보지 못한 두 번째 질문이 있습니다. 이 표현은:
tcp flags & (fin | syn) == fin | syn
FIN+SYN이 모두 발견되지 않기 때문에(일부 임의의 유효하지 않은 시도 제외) FIN 플래그와 일치하는 항목은 절대 없습니다. 올바른 표현은 다음과 같아야 합니다.
tcp flags & (fin | syn) != 0
FIN일 때마다 일치또는SYN이 설정되었습니다. 실제로nftables다음 사항만 표시하거나 요구하도록 단순화했습니다.
tcp flags fin,syn
따라서 이 두 가지 조정(아직 제거해야 함)을 고려하면 ct state new
규칙은 다음과 같습니다.
nft add rule filter FORWARD 'tcp dport 22 tcp flags fin,syn log prefix " my_FIN " group 1 accept
또는 전체 체인 세트에서:
chain FORWARD {
type filter hook forward priority 0; policy accept;
ip saddr 1.1.1.1 ip daddr . tcp dport @myset tcp flags fin,syn counter log prefix " myprefix " group 1 accept
}
위의 규칙을 사용하여 FIN 패킷을 실제로 탐지할 수 있게 되면 특정 TCP 공격을 필터링하려는 의도인 경우(정말 필요합니까?) netfilter가 TCP 연결의 첫 번째 패킷을 먼저 고려할 수 있다는 점에 유의하십시오. 아래 표시된 TCP FIN을 참조하세요.유효하지 않은상태: 이러한 상태를 기록하는 데 관심이 있을 수 있습니다( ct state invalid
). 결과를 변경할 수 있는 netfilter sysctl 스위치가 있습니다.유효하지 않은상태: 활성화됨nf_conntrack_tcp_be_liberal 이는 유효하지 않은 것으로 분류되지 않고 비활성화됩니다.nf_conntrack_tcp_loose이렇게 하면 설정된 TCP 연결의 재개가 중지됩니다. 즉, SYN 없이 NEW 상태가 중지됩니다. 이 복구는 연결 추적이 손실된 후에만 발생해야 합니다. 즉, 방화벽 라우터를 재부팅한 후 또는 새로 고침 conntrack 상태를 사용한 후지 conntrack -F
만 편집증이 여기에서 선택될 수 있다는 것을 누가 알겠습니까?