Files
go-nftables-client/README.md

89 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# go-nftables-client
Go-низкоуровневая обёртка для управления [nftables](https://wiki.nftables.org/wiki-nftables/index.php/Main_Page) через командную строку.
## Возможности
- Добавление и удаление таблиц (`add table`, `delete table`)
- Добавление и удаление цепочек (`add chain`, `delete chain`, настройка hook/policy)
- Добавление, удаление, очистка правил (`add rule`, `delete rule`, `flush`)
- Абстракции для работы с IP/IP6/inet/arp/bridge/netdev families
- Интерфейс для выполнения CLI-команд nftables напрямую
- Простой и минималистичный API для быстрой интеграции
## Установка
```sh
go get git.kor-elf.net/kor-elf-shield/go-nftables-client
```
## Пример использования
```go
package main
import (
"log"
"git.kor-elf.net/kor-elf-shield/go-nftables-client"
"git.kor-elf.net/kor-elf-shield/go-nftables-client/family"
"git.kor-elf.net/kor-elf-shield/go-nftables-client/chain"
)
func main() {
nft, err := nft.New()
if err != nil {
log.Fatalf("nft not found: %v", err)
}
// Добавить таблицу
if err := nft.Table().Add(family.IP, "test"); err != nil {
log.Fatalf("table add failed: %v", err)
}
chainType := chain.NewBaseChainOptions(chain.TypeFilter)
chainType.Hook = chain.HookOutput
chainType.Priority = 0
chainType.Policy = chain.PolicyAccept
if err := nft.Chain().Add(family.IP, "test", "test", chainType); err != nil {
log.Fatalf("table add failed: %v", err)
}
// Добавить правило (пример: дропать пакеты от 1.2.3.4)
if err := nft.Rule().Add(family.IP, "test", "test", "ip", "saddr", "1.2.3.4", "drop"); err != nil {
log.Fatalf("rule add failed: %v", err)
}
}
```
## Краткое описание API
```go
nft.Table().Add(family.Type, tableName string) error
nft.Table().Delete(family.Type, tableName string) error
nft.Table().Clear(family.Type, tableName string) error
nft.Chain().Add(family.Type, table, chain string, baseChain chain.ChainOptions) error
nft.Chain().Create(family family.Type, table, chain string, baseChain chain.ChainOptions) error
nft.Chain().Rename(family family.Type, table, oldChainName, newChainName string) error
nft.Chain().Delete(family.Type, table, chain string) error
nft.Chain().Clear(family.Type, table, chain string) error
nft.Rule().Add(family.Type, table, chain string, expr ...string) error
nft.Rule().Insert(family family.Type, table, chain string, expr ...string) error
nft.Rule().Replace(family family.Type, table, chain string, handle uint64, expr ...string) error
nft.Rule().Delete(family family.Type, table, chain string, handle uint64) error
nft.Clear() error // flush ruleset
nft.Version() (Version, error) // информация о версии nftables
nft.Command() command.NFT // ручное выполнение любых nft-команд
```
## Требования
- Go 1.25+
- Установленный nft (`/usr/sbin/nft`, `/sbin/nft` или доступен через PATH)
## Лицензия
[MIT](https://git.kor-elf.net/kor-elf-shield/go-nftables-client/src/branch/main/LICENSE)