Đây là lệnh có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình mô phỏng trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS
CHƯƠNG TRÌNH:
TÊN
ferm - trình phân tích quy tắc tường lửa cho linux
SYNOPSIS
sâu bọ lựa chọn tập tin đầu vào
MÔ TẢ
sâu bọ là một giao diện người dùng cho iptables. Nó đọc các quy tắc từ một tập tin cấu hình có cấu trúc
và cuộc gọi iptables(8) để chèn chúng vào kernel đang chạy.
sâu bọMục tiêu của nó là làm cho các quy tắc tường lửa dễ viết và dễ đọc. Nó cố gắng giảm
nhiệm vụ tẻ nhạt là viết ra các quy tắc, do đó cho phép quản trị viên tường lửa dành
nhiều thời gian hơn vào việc phát triển các quy tắc tốt hơn là thực hiện đúng quy tắc.
Để đạt được điều này, sâu bọ sử dụng ngôn ngữ cấu hình đơn giản nhưng mạnh mẽ, cho phép
biến, hàm, mảng, khối. Nó cũng cho phép bạn bao gồm các tập tin khác, cho phép
bạn tạo các thư viện gồm các cấu trúc và hàm thường được sử dụng.
sâu bọ, phát âm là "chắc chắn", là viết tắt của "Để lập quy tắc dễ dàng".
THẬN TRỌNG
Trang hướng dẫn này làm không dự định dạy bạn cách hoạt động của tường lửa và cách viết tốt
quy tắc. Đã có đủ tài liệu về chủ đề này.
GIỚI THIỆU
Hãy bắt đầu với một ví dụ đơn giản:
chuỗi INPUT {
proto tcp CHẤP NHẬN;
}
Điều này sẽ thêm một quy tắc vào chuỗi đầu vào được xác định trước, khớp và chấp nhận tất cả tcp
gói. Được rồi, hãy làm cho nó phức tạp hơn:
chuỗi (INPUT OUTPUT) {
proto (udp tcp) CHẤP NHẬN;
}
Điều này sẽ chèn 4 quy tắc, cụ thể là 2 quy tắc đầu vào chuỗi và 2 quy tắc đầu ra chuỗi, khớp và
chấp nhận cả gói udp và tcp. Thông thường bạn sẽ gõ thế này:
iptables -A INPUT -p tcp -j CHẤP NHẬN
iptables -A ĐẦU RA -p tcp -j CHẤP NHẬN
iptables -A INPUT -p udp -j CHẤP NHẬN
iptables -A ĐẦU RA -p udp -j CHẤP NHẬN
Lưu ý chúng ta cần phải gõ ít hơn bao nhiêu? :-)
Về cơ bản, đây là tất cả những gì cần làm, mặc dù bạn có thể làm cho nó phức tạp hơn.
Một cái gì đó để xem xét:
chuỗi INPUT {
CHẤP NHẬN chính sách;
Daddr 10.0.0.0/8 proto tcp dport ! ftp jump mychain sport :1023 TOS 4 settos 8 mark 2;
Daddr 10.0.0.0/8 proto tcp dport ftp TỪ CHỐI;
}
Quan điểm của tôi ở đây là, *bạn* cần đặt ra những quy tắc hay, giữ cho chúng dễ đọc đối với bạn và
những người khác và không làm cho nó trở nên lộn xộn.
Nó sẽ hỗ trợ người đọc nếu các quy tắc tường lửa thu được được đặt ở đây để tham khảo.
Ngoài ra, bạn có thể bao gồm phiên bản lồng nhau để dễ đọc hơn.
Hãy thử sử dụng nhận xét để hiển thị những gì bạn đang làm:
# dòng này cho phép ủy quyền http minh bạch cho mạng nội bộ:
proto tcp nếu eth0 chadr ! 192.168.0.0/255.255.255.0
dport http REDIRECT sang cổng 3128;
Bạn sẽ biết ơn nó sau này!
chuỗi INPUT {
CHẤP NHẬN chính sách;
giao diện (eth0 ppp0) {
# từ chối truy cập của hacker Notorius, quay lại đây nếu không khớp
# đã được tìm thấy để tiếp tục tường lửa bình thường
nhảy kẻ xấu;
giao thức tcp nhảy fw_tcp;
giao thức udp nhảy fw_udp;
}
}
Bạn càng làm tổ thì trông càng đẹp. Hãy chắc chắn rằng thứ tự bạn chỉ định là chính xác, bạn
sẽ không muốn làm điều này:
chuỗi FORWARD {
nguyên mẫu ! udp THẢ;
proto tcp dport ftp CHẤP NHẬN;
}
bởi vì quy tắc thứ hai sẽ không bao giờ phù hợp. Cách tốt nhất là trước tiên hãy chỉ định mọi thứ
được phép, và sau đó từ chối mọi thứ khác. Hãy xem các ví dụ để có những bức ảnh chụp nhanh đẹp hơn.
Hầu hết mọi người đều làm điều gì đó như thế này:
nguyên tcp {
cổng (
ssh http ftp
) CHẤP NHẬN;
cổng 1024:65535 ! đồng thời CHẤP NHẬN;
LÀM RƠI;
}
Cơ cấu OF A BỨC TƯỜNG LỬA FILE
Cấu trúc của một tệp tường lửa thích hợp trông giống như mã C được đơn giản hóa. Chỉ có một vài
các ký tự cú pháp được sử dụng trong các tập tin cấu hình ferm. Ngoài những điều đặc biệt này
ký tự, ferm sử dụng 'khóa' và 'giá trị', coi chúng như các tùy chọn và tham số hoặc như
các biến và giá trị, bất cứ điều gì.
Với những từ này, bạn xác định các đặc điểm của tường lửa của mình. Mọi tường lửa
bao gồm hai điều: Đầu tiên, hãy xem lưu lượng truy cập mạng có phù hợp với các điều kiện nhất định không và
thứ hai, phải làm gì với lưu lượng truy cập đó.
Bạn có thể chỉ định các điều kiện hợp lệ cho chương trình giao diện kernel mà bạn đang sử dụng,
có lẽ iptables(số 8). Ví dụ: trong iptables, khi bạn đang cố gắng so khớp các gói tcp,
bạn sẽ nói:
iptables --giao thức tcp
Trong ferm, điều này sẽ trở thành:
giao thức tcp;
Chỉ cần gõ cái này vào ferm không làm được gì cả, bạn cần nói với ferm (thực ra, bạn cần phải
nói iptables(8) và kernel) phải làm gì với bất kỳ lưu lượng truy cập nào phù hợp với điều kiện này:
iptables --protocol tcp -j CHẤP NHẬN
Hoặc, dịch sang sâu bọ:
giao thức tcp CHẤP NHẬN;
; ký tự nằm ở cuối mỗi quy tắc ferm. Ferm bỏ qua ngắt dòng, nghĩa là
ví dụ trên giống hệt như sau:
giao thức tcp
CHẤP NHẬN;
Dưới đây là danh sách các ký tự đặc biệt:
; Ký tự này hoàn thiện một quy tắc.
Được phân tách bằng dấu chấm phẩy, bạn có thể viết nhiều quy tắc trên một dòng, mặc dù điều này
giảm khả năng đọc:
giao thức tcp CHẤP NHẬN; giao thức udp DROP;
{} Biểu tượng lồng nhau xác định một 'khối' quy tắc.
Dấu ngoặc nhọn chứa bất kỳ số lượng quy tắc lồng nhau nào. Tất cả các trận đấu trước
khối được chuyển tiếp tới những khối này.
Dấu ngoặc nhọn đóng sẽ hoàn tất bộ quy tắc. Bạn không nên viết dấu ';' sau đó
điều đó, bởi vì đó sẽ là một quy tắc trống rỗng.
Ví dụ:
chuỗi INPUT proto icmp {
CHẤP NHẬN yêu cầu tiếng vang kiểu icmp;
LÀM RƠI;
}
Khối này hiển thị hai quy tắc bên trong một khối, cả hai sẽ được hợp nhất với bất kỳ quy tắc nào
ở phía trước nó, vì vậy bạn sẽ nhận được hai quy tắc:
iptables -A INPUT -p icmp --icmp-type echo-request -j CHẤP NHẬN
iptables -A INPUT -p icmp -j THẢ
Có thể có nhiều cấp độ lồng nhau:
chuỗi INPUT {
proto icmp {
CHẤP NHẬN yêu cầu tiếng vang kiểu icmp;
LÀM RƠI;
}
chadr 172.16.0.0/12 TỪ CHỐI;
}
Lưu ý rằng quy tắc 'REJECT' không bị ảnh hưởng bởi 'proto icmp', mặc dù không có
';' sau dấu ngoặc nhọn đóng. Đã dịch sang iptables:
iptables -A INPUT -p icmp --icmp-type echo-request -j CHẤP NHẬN
iptables -A INPUT -p icmp -j THẢ
iptables -A INPUT -d 172.16.0.0/12 -j TỪ CHỐI
$ Mở rộng biến. Thay thế '$FOO' bằng giá trị của biến. Xem phần
BIẾN để biết thêm chi tiết.
& Lời gọi hàm. Xem phần CHỨC NĂNG để biết thêm chi tiết.
() Ký hiệu mảng. Bằng cách sử dụng dấu ngoặc đơn, bạn có thể xác định một 'danh sách' các giá trị
nên được áp dụng cho chìa khóa bên trái của nó.
Ví dụ:
giao thức (tcp udp icmp)
điều này sẽ dẫn đến ba quy tắc:
... -p tcp ...
... -p udp ...
... -p icmp ...
Chỉ các giá trị mới có thể được 'liệt kê', vì vậy bạn không thể làm những việc như thế này:
proto tcp ( ACCEPT LOG );
nhưng bạn có thể làm điều này:
chuỗi (INPUT OUTPUT FORWARD) proto (icmp udp tcp) DROP;
(sẽ dẫn đến chín quy tắc!)
Các giá trị được phân tách bằng dấu cách. Ký hiệu mảng ở cả bên trái và bên phải
liên kết, trái ngược với khối lồng nhau, chỉ liên kết bên trái.
" # " Biểu tượng nhận xét. Bất cứ điều gì theo sau biểu tượng này cho đến cuối dòng là
mặc kệ.
"`lệnh`"
Thực thi lệnh trong shell và chèn đầu ra của quá trình. Xem phần
gậy chống để biết thêm chi tiết.
'sợi dây'
Trích dẫn một chuỗi có thể chứa khoảng trắng, ký hiệu đô la, v.v.
Tiền tố nhật ký LOG ' này, đây là tiền tố nhật ký của tôi!';
"dây"
Trích dẫn một chuỗi (xem ở trên), nhưng các tham chiếu biến có ký hiệu đô la là
đã đánh giá:
DNAT thành "$myhost:$myport";
Từ khóa
Ở phần trước chúng tôi đã giới thiệu một số từ khóa cơ bản như "chuỗi",
"giao thức" và "CHẤP NHẬN". Hãy cùng khám phá bản chất của chúng.
Có ba loại từ khóa:
· địa điểm thư viện nào từ khóa xác định nơi quy tắc sẽ được tạo. Ví dụ: "bàn", "chuỗi".
· phù hợp với từ khóa thực hiện kiểm tra trên tất cả các gói đi qua. Quy định hiện tại là không có
có hiệu lực nếu một (hoặc nhiều) trận đấu không thành công. Ví dụ: "proto", "daddr".
Hầu hết các kết quả trùng khớp đều được theo sau bởi một tham số: "proto tcp", "daddr 172.16.0.0/12".
· mục tiêu từ khóa nêu rõ phải làm gì với một gói. Ví dụ: "CHẤP NHẬN", "TỪ CHỐI",
"nhảy".
Một số mục tiêu xác định thêm từ khóa để chỉ định chi tiết: "TỪ CHỐI từ chối-với icmp-
mạng không thể truy cập được".
Mỗi quy tắc bao gồm một địa điểm thư viện nào và mục tiêu, cộng với bất kỳ số nào diêm:
bộ lọc bảng # vị trí
proto tcp dport (http https) # khớp
CHẤP NHẬN; # mục tiêu
Nói đúng ra thì có loại thứ tư: sâu bọ từ khóa (kiểm soát nội bộ của ferm
hành vi), nhưng chúng sẽ được giải thích sau.
Thông số Kỹ thuật
Nhiều từ khóa lấy tham số. Chúng có thể được chỉ định dưới dạng chữ, tham chiếu biến hoặc
danh sách (mảng):
proto udp
buồn bã $TRUSTED_HOSTS;
proto tcp dport (http https ssh);
Tiền tố nhật ký LOG "cảnh báo wardriver thú vị: ";
Một số trong số chúng có thể bị phủ định (danh sách không thể bị phủ định):
nguyên mẫu !esp;
proto udp dport !domain;
Từ khóa không có tham số sẽ bị phủ định bởi tiền tố '!':
proto tcp !syn;
Đọc iptables(8) để xem nơi ! có thể được sử dụng.
BASIC TỪ KHÓA
Địa điểm từ khóa
miền [ip|ip6]
Đặt tên miền. "ip" là mặc định và có nghĩa là "IPv4" (iptables). "ip6" dành cho IPv6
hỗ trợ, sử dụng "ip6tables".
bàn [bộ lọc|nat|mangle]
Chỉ định bảng netfilter nào mà quy tắc này sẽ được chèn vào: "filter" (mặc định),
"nat" hoặc "manle".
chuỗi [tên chuỗi]
Chỉ định chuỗi netfilter (trong bảng hiện tại) quy tắc này sẽ là
chèn vào. Tên chuỗi được xác định trước phổ biến là "INPUT", "OUTPUT", "FORWARD",
"PROUTING", "POSTROUTING", tùy thuộc vào bảng. Xem bộ lọc mạng
tài liệu để biết chi tiết.
Nếu bạn chỉ định một chuỗi không tồn tại ở đây, ferm sẽ thêm quy tắc vào chuỗi tùy chỉnh
với tên đó.
điều luật [CHẤP NHẬN|BỎ|..]
Chỉ định chính sách mặc định cho chuỗi hiện tại (chỉ tích hợp sẵn). Có thể là một trong
các mục tiêu tích hợp (CHẤP NHẬN, THẢ, TỪ CHỐI, ...). Một gói không phù hợp với quy tắc
trong một chuỗi sẽ được xử lý theo quy định của chính sách.
Để tránh sự mơ hồ, hãy luôn chỉ định chính sách của tất cả các chuỗi được xác định trước
một cách rõ ràng.
@subchain ["TÊN CHUỖI"] { ... }
Hoạt động giống như các toán tử khối thông thường (tức là không có @subchain từ khóa), ngoại trừ
việc này sâu bọ di chuyển các quy tắc trong dấu ngoặc nhọn vào một chuỗi tùy chỉnh mới. Tên
vì chuỗi này được chọn tự động bởi ferm.
Trong nhiều trường hợp, việc này nhanh hơn chỉ một khối vì kernel có thể bỏ qua một khối.
khối quy tắc khổng lồ khi điều kiện tiên quyết là sai. Hãy tưởng tượng ví dụ sau:
chuỗi bộ lọc bảng INPUT {
saddr (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) CHẤP NHẬN;
tên miền dport proto udp CHẤP NHẬN;
}
}
Điều này tạo ra 20 quy tắc. Khi một gói đến mà không vượt qua được Saddr
khớp, tuy nhiên nó vẫn kiểm tra tất cả 20 quy tắc. Với @subchain, việc kiểm tra này đã xong
một lần, giúp lọc mạng nhanh hơn và tải CPU ít hơn:
chuỗi bộ lọc bảng 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) CHẤP NHẬN;
tên miền dport proto udp CHẤP NHẬN;
}
}
Tùy chọn, bạn có thể xác định tên của chuỗi con:
saddr (1.2.3.4 2.3.4.5 3.4.5.6) @subchain "foobar" {
proto tcp dport (http https ssh) CHẤP NHẬN;
tên miền dport proto udp CHẤP NHẬN;
}
Tên có thể là một chuỗi ký tự được trích dẫn hoặc một biểu thức ferm mở rộng
chẳng hạn như @cat("interface_", $iface) hoặc @substr($var,0,20).
Bạn có thể đạt được điều tương tự bằng cách khai báo rõ ràng chuỗi tùy chỉnh, nhưng bạn có thể cảm thấy
mà sử dụng @subchain yêu cầu gõ ít hơn.
Cơ bản iptables phù hợp với từ khóa
giao diện [tên giao diện]
Xác định tên giao diện, card mạng bên ngoài của bạn, như eth0 hoặc quay số như
ppp1 hoặc bất kỳ thiết bị nào bạn muốn kết hợp để truyền gói. Nó tương đương
đến nút "-i" trong iptables(8).
mặt ngoài [tên giao diện]
Tương tự như giao diện, chỉ để khớp giao diện gửi đi cho một gói, như trong
iptables(8).
giao thức [tên giao thức|số giao thức]
Hiện tại được kernel hỗ trợ là tcp, udp và icmp hoặc tương ứng của chúng
số.
saddr|daddr [thông số địa chỉ]
Khớp với các gói có nguồn gốc từ địa chỉ được chỉ định (saddr) hoặc được nhắm mục tiêu tại
địa chỉ (daddr).
Ví dụ:
saddr 192.168/8 CHẤP NHẬN; # (giống hệt với cái tiếp theo :)
saddr 192.168.0.0/255.255.255.0 CHẤP NHẬN;
Daddr my.domain.com CHẤP NHẬN;
miếng
Chỉ định rằng chỉ các gói IP bị phân mảnh mới được khớp. Khi các gói được
lớn hơn kích thước gói tối đa mà hệ thống của bạn có thể xử lý (được gọi là Tối đa
Đơn vị truyền dẫn hoặc MTU), chúng sẽ được cắt thành các bit và gửi từng bit một dưới dạng
các gói đơn lẻ. Nhìn thấy ifconfig(8) nếu bạn muốn tìm MTU cho hệ thống của mình (
mặc định thường là 1500 byte).
Các mảnh vỡ thường được sử dụng trong các cuộc tấn công DOS vì không có cách nào để tìm ra
ra nguồn gốc của một gói phân đoạn.
thể thao|dport [thông số cổng]
Khớp với các gói trên cổng TCP hoặc UDP được chỉ định. "thể thao" khớp với nguồn
cổng và dport khớp với cổng đích.
Trận đấu này chỉ có thể được sử dụng sau khi bạn chỉ định "giao thức tcp" hoặc "giao thức udp",
bởi vì chỉ có hai giao thức này thực sự có cổng.
Và một số ví dụ về cổng/phạm vi hợp lệ:
dport 80 CHẤP NHẬN;
dport http CHẤP NHẬN;
dport ssh:http CHẤP NHẬN;
dport 0:1023 CHẤP NHẬN; # tương đương với :1023
dport 1023:65535 CHẤP NHẬN;
syn Chỉ định rằng cờ SYN trong gói tcp phải khớp, được sử dụng để
xây dựng các kết nối tcp mới. Bạn có thể xác định các kết nối đến bằng điều này và
quyết định xem bạn có muốn cho phép hay không. Các gói không có cờ này
có thể là từ một kết nối đã được thiết lập sẵn nên nó được coi là hợp lý
an toàn để cho những điều này đi qua.
mô-đun [tên mô-đun]
Tải mô-đun iptables. Hầu hết các mô-đun cung cấp nhiều từ khóa phù hợp hơn. Chúng ta sẽ đến
điều đó sau.
Cơ bản mục tiêu từ khóa
nhảy [tên chuỗi tùy chỉnh]
Nhảy tới một chuỗi tùy chỉnh. Nếu không có quy tắc nào trong chuỗi tùy chỉnh khớp, netfilter sẽ trả về
tới quy tắc tiếp theo trong chuỗi trước đó.
thật [tên chuỗi tùy chỉnh]
Đi đến một chuỗi tùy chỉnh. Không giống như nhảy Tùy chọn, TRỞ VỀ sẽ không tiếp tục xử lý
trong chuỗi này mà thay vào đó là chuỗi đã gọi chúng tôi qua nhảy.
Từ khóa thật được chọn trong thời kỳ chuyển tiếp, bởi vì goto
(đã không được dùng nữa) từng là bí danh cho nhảy.
CHẤP NHẬN Chấp nhận các gói phù hợp.
Thả Thả các gói phù hợp mà không cần thông báo thêm.
TỪ CHỐI Từ chối các gói phù hợp, tức là gửi gói ICMP đến người gửi, đó là cổng-
không thể truy cập theo mặc định. Bạn có thể chỉ định loại ICMP khác.
TỪ CHỐI; # mặc định là icmp-port-unreachable
TỪ CHỐI từ chối-với icmp-net-không thể truy cập được;
Nhập "iptables -j TỪ CHỐI -h" để biết chi tiết.
TRỞ VỀ Kết thúc chuỗi hiện tại và quay lại chuỗi đang gọi (nếu "nhảy
[tên chuỗi tùy chỉnh]" đã được sử dụng).
NOP Không có hành động nào cả.
BỔ SUNG TỪ KHÓA
Netfilter là mô-đun. Các mô-đun có thể cung cấp các mục tiêu bổ sung và từ khóa phù hợp. Danh sách
của các mô-đun netfilter không ngừng phát triển và ferm cố gắng theo kịp việc hỗ trợ chúng
tất cả. Chương này mô tả các mô-đun hiện đang được hỗ trợ.
iptables phù hợp với mô-đun
Tài khoản Lưu lượng truy cập tài khoản cho tất cả các máy chủ trong mạng/mặt nạ mạng được xác định. Đây là một trong những
khớp các mô-đun hoạt động giống như mục tiêu, tức là bạn hầu như sẽ phải sử dụng NOP
Mục tiêu.
tài khoản mod có tên mynetwork aaddr 192.168.1.0/24 ashort NOP;
loại địa chỉ
Kiểm tra loại địa chỉ; địa chỉ nguồn hoặc địa chỉ đích.
mod addrtype src-type BROADCAST;
mod addrtype dst-type ĐỊA PHƯƠNG;
Nhập "iptables -m addrtype -h" để biết chi tiết.
ah Kiểm tra tiêu đề SPI trong gói AH.
mod à ahspi 0x101;
mod à ahspi ! 0x200:0x2ff;
Đối số bổ sung cho IPv6:
mod ah ahlen 32 CHẤP NHẬN;
mod à ahlen !32 CHẤP NHẬN;
mod ah ahres CHẤP NHẬN;
bình luận Thêm nhận xét có tối đa 256 ký tự vào quy tắc mà không có hiệu lực. Lưu ý rằng
không giống như nhận xét ferm ('#'), nhận xét này sẽ hiển thị trong "iptables -L".
mod bình luận bình luận "Đây là bình luận của tôi." CHẤP NHẬN;
điều kiện
Khớp nếu giá trị trong /proc/net/ipt_condition/NAME là 1 (đường dẫn là
/proc/net/ip6t_condition/NAME cho miền ip6).
điều kiện mod (abc def) CHẤP NHẬN;
điều kiện mod điều kiện !foo CHẤP NHẬN;
connbyte
Khớp theo số lượng byte hoặc gói kết nối (hoặc một trong hai luồng
cấu thành kết nối) đã được chuyển cho đến nay hoặc theo số byte trung bình trên mỗi
gói.
mod connbytes connbytes 65536: connbytes-dir cả hai byte chế độ kết nối ACCEPT;
mod connbytes connbytes !1024:2048 connbytes-dir trả lời các gói chế độ connbytes CHẤP NHẬN;
Giá trị hợp lệ cho connbyte-dir: nguyên, trả lời, cả hai; cho chế độ kết nối:
gói, byte, trung bình.
giới hạn
Cho phép bạn hạn chế số lượng kết nối TCP song song tới một máy chủ trên mỗi
địa chỉ IP của khách hàng (hoặc khối địa chỉ).
mod connlimit connlimit-trên 4 TỪ CHỐI;
mod connlimit connlimit-trên !4 CHẤP NHẬN;
mod connlimit connlimit-trên 4 connlimit-mask 24 TỪ CHỐI;
đồng ý
Kiểm tra trường đánh dấu được liên kết với kết nối do mục tiêu CONNMARK đặt.
mod connmark mark 64;
mod connmark mark 6/7;
theo dõi
Kiểm tra thông tin theo dõi kết nối.
mod conntrack ctstate (THÀNH LẬP LIÊN QUAN);
mod kết nối ctproto tcp;
mod kết nối torigsrc 192.168.0.2;
mod kết nối torigdst 1.2.3.0/24;
mod kết nối ctorigsrcport 67;
mod kết nối torigdstport 22;
mod conntrack cttreplsrc 2.3.4.5;
mod conntrack ctrepldst ! 3.4.5.6;
mod conntrack ctstatus ĐẢM BẢO;
mod conntrack ctexpire 60;
mod conntrack ctexpire 180:240;
Nhập "iptables -m conntrack -h" để biết chi tiết.
dccp Kiểm tra các thuộc tính cụ thể của DCCP (Giao thức kiểm soát tắc nghẽn gói dữ liệu). Cái này
mô-đun được tải tự động khi bạn sử dụng "giao thức dccp".
proto dccp sport 1234 dport 2345 CHẤP NHẬN;
proto dccp dccp-types (SYNCACK ACK) CHẤP NHẬN;
proto dccp dccp-types !YÊU CẦU THẢ;
proto dccp dccp-option 2 CHẤP NHẬN;
dscp Khớp trường DSCP 6 bit trong trường TOS.
mod dscp dscp 11;
mod dscp dscp-class AF41;
ecn Khớp các bit ECN của tiêu đề IPv4 TCP.
mod ecn ecn-tcp-cwr;
mod ecn ecn-tcp-ece;
mod ecn ecn-ip-ect 2;
Nhập "iptables -m ecn -h" để biết chi tiết.
đặc biệt Kiểm tra tiêu đề SPI trong gói ESP.
mod đặc biệt 0x101;
mod đặc biệt! 0x200:0x2ff;
eui64 "Mô-đun này khớp với phần EUI-64 của địa chỉ IPv6 được cấu hình tự động không trạng thái.
Nó so sánh EUI-64 được lấy từ địa chỉ MAC nguồn trong khung Ehternet với
64 bit thấp hơn của địa chỉ nguồn IPv6. Nhưng bit "Universal/Local" thì không
so. Mô-đun này không khớp với khung lớp liên kết khác và chỉ hợp lệ trong
các chuỗi PREROUTING, INPUT và Forward."
mod eui64 CHẤP NHẬN;
mờ "Mô-đun này khớp với giới hạn tốc độ dựa trên bộ điều khiển logic mờ [FLC]."
mod mờ giới hạn dưới 10 giới hạn trên 20 CHẤP NHẬN;
hbh Khớp với tiêu đề Tùy chọn từng chặng (ip6).
mod hbh hbh-len 8 CHẤP NHẬN;
mod hbh hbh-len !8 CHẤP NHẬN;
mod hbh hbh-opts (1:4 2:8) CHẤP NHẬN;
hl Khớp với trường Giới hạn bước nhảy (ip6).
mod hl-eq (8 10) CHẤP NHẬN;
mod hl-eq !5 CHẤP NHẬN;
mod hl-gt 15 CHẤP NHẬN;
mod hl-lt 2 CHẤP NHẬN;
helper Kiểm tra mô-đun trợ giúp conntrack nào theo dõi kết nối này. Cảng có thể là
được chỉ định bằng "-portnr".
người trợ giúp mod người trợ giúp irc CHẤP NHẬN;
người trợ giúp mod người trợ giúp ftp-21 CHẤP NHẬN;
icmp Kiểm tra các thuộc tính cụ thể của ICMP. Mô-đun này được tải tự động khi bạn sử dụng
"giao thức icmp".
proto icmp icmp-loại echo-yêu cầu CHẤP NHẬN;
Tùy chọn này cũng có thể được sử dụng trong ip6 tên miền, mặc dù điều này được gọi là icmpv6 in
bảng ip6.
Sử dụng "iptables -p icmp "-h"" để lấy danh sách các loại ICMP hợp lệ.
Phạm vi ip Phù hợp với một loạt các địa chỉ IPv4.
mod iprange src-range 192.168.2.0-192.168.3.255;
mod iprange dst-range ! 192.168.6.0-192.168.6.255;
tùy chọn ipv4
Phù hợp với các tùy chọn tiêu đề IPv4 như định tuyến nguồn, tuyến đường ghi, dấu thời gian và
cảnh báo bộ định tuyến.
mod ipv4options ssrr CHẤP NHẬN;
mod ipv4options lsrr CHẤP NHẬN;
mod ipv4options no-srr CHẤP NHẬN;
mod ipv4options !rr CHẤP NHẬN;
mod ipv4options !ts CHẤP NHẬN;
mod ipv4options !ra CHẤP NHẬN;
mod ipv4options !any-opt CHẤP NHẬN;
tiêu đề ipv6
Phù hợp với tiêu đề mở rộng IPv6 (ip6).
tiêu đề mod ipv6header !(hop frag) CHẤP NHẬN;
tiêu đề mod ipv6header (auth dst) CHẤP NHẬN;
giới hạn băm
Tương tự như 'giới hạn mod', nhưng thêm khả năng thêm mỗi điểm đến hoặc mỗi cổng
giới hạn được quản lý trong bảng băm.
mod hashlimit hashlimit 10/phút hashlimit-burst 30/phút
hashlimit-mode dstip hashlimit-name foobar CHẤP NHẬN;
Các giá trị có thể có cho chế độ hashlimit: dstip dstport srcip srcport (hoặc một danh sách có
nhiều hơn một trong số này).
Có nhiều cài đặt khả thi hơn, nhập "iptables -m hashlimit -h" cho
tài liệu hướng dẫn.
chiều dài Kiểm tra chiều dài gói.
chiều dài mod 128; # chính xác là 128 byte
chiều dài mod 512:768; # phạm vi
chiều dài mod chiều dài! 256; # phủ định
hạn chế Giới hạn tốc độ gói.
giới hạn giới hạn mod 1/giây;
giới hạn giới hạn mod 15/phút giới hạn-bùng nổ 10;
Nhập "iptables -m limit -h" để biết chi tiết.
mac Khớp địa chỉ MAC nguồn.
mod mac mac-nguồn 01:23:45:67:89;
dấu So khớp các gói dựa trên trường đánh dấu netfilter của chúng. Đây có thể là số nguyên 32 bit
giữa 0 và 4294967295.
dấu hiệu mod 42;
mh Phù hợp với tiêu đề di động (miền ip6).
proto mh mh-type ràng buộc cập nhật CHẤP NHẬN;
nhiều cổng
Khớp một tập hợp cổng nguồn hoặc cổng đích (chỉ UDP và TCP).
mod cổng nguồn đa cổng (https ftp);
mod cổng đích đa cổng (miền mysql);
Quy tắc này có lợi thế lớn hơn "dport" và "sport": nó chỉ tạo ra một quy tắc
cho tối đa 15 cổng thay vì một quy tắc cho mỗi cổng.
thứ n Phù hợp với mọi gói thứ n.
mod thứ n mỗi 3;
bộ đếm thứ n mod 5 cứ 2;
mod thứ n bắt đầu 2 cứ sau 3;
mod thứ n bắt đầu 5 gói 2 cứ sau 6;
Nhập "iptables -m nth -h" để biết chi tiết.
osf Ghép các gói tùy thuộc vào hệ điều hành của người gửi.
mod osf thể loại Linux;
mod osf ! thể loại FreeBSD ttl 1 log 1;
Nhập "iptables -m osf -h" để biết chi tiết.
chủ sở hữu Kiểm tra thông tin về người tạo gói, cụ thể là id người dùng, id nhóm, id tiến trình,
id phiên và tên lệnh.
chủ sở hữu mod uid-chủ sở hữu 0;
chủ sở hữu mod gid-chủ sở hữu 1000;
chủ sở hữu mod pid-chủ sở hữu 5432;
chủ sở hữu mod sid-chủ sở hữu 6543;
chủ sở hữu mod cmd-owner "sendmail";
("cmd-owner", "pid-owner" và "sid-owner" yêu cầu các bản vá kernel đặc biệt không
được bao gồm trong nhân Linux vani)
vật lý Phù hợp với thiết bị vật lý nơi gói được nhập hoặc sắp rời khỏi
máy móc. Điều này rất hữu ích cho các giao diện cầu nối.
mod physdev physdev-in ppp1;
mod physdev physdev-out eth2;
mod physdev Physdev-is-in;
mod physdev Physdev-is-out;
mod physdev Physdev-is-bridged;
pkttype Kiểm tra loại gói lớp liên kết.
mod pkttype pkt-loại unicast;
mod pkttype pkt-loại chữ rộng;
mod pkttype pkt-loại multicast;
điều luật Phù hợp với chính sách IPsec đang được áp dụng cho gói này.
chính sách mod hướng ra pol ipsec CHẤP NHẬN;
chính sách mod yêu cầu nghiêm ngặt 23 spi 0x10 proto ah CHẤP NHẬN;
chế độ chính sách mod đường hầm đường hầm-src 192.168.1.2 CHẤP NHẬN;
chế độ chính sách mod đường hầm đường hầm-dst 192.168.2.1 CHẤP NHẬN;
chính sách mod nghiêm ngặt tiếp theo yêu cầu 24 spi 0x11 CHẤP NHẬN;
Lưu ý rằng từ khóa do đó cũng được sử dụng như một phiên bản tốc ký của giao thức
(mô-đun trận đấu tích hợp). Bạn có thể khắc phục xung đột này bằng cách luôn sử dụng
từ khóa giao thức.
psd Phát hiện quét cổng TCP/UDP.
mod psd psd-ngưỡng trọng lượng 21 psd-độ trễ-ngưỡng 300
psd-lo-port-weight 3 psd-hi-port-weight 1 DROP;
phần Triển khai hạn ngạch mạng bằng cách giảm bộ đếm byte với mỗi gói.
hạn ngạch mod hạn ngạch 65536 CHẤP NHẬN;
ngẫu nhiên Khớp một tỷ lệ phần trăm ngẫu nhiên của tất cả các gói.
mod trung bình ngẫu nhiên 70;
vương quốc Phù hợp với lĩnh vực định tuyến. Hữu ích trong môi trường sử dụng BGP.
mod vương quốc 3;
gần đây Tạm thời đánh dấu địa chỉ IP nguồn.
bộ mod gần đây;
mod rcheck giây gần đây 60;
mod đặt tên nguồn gần đây "badguy";
mod đặt thứ tự gần đây nhất;
mod tên nguồn rcheck gần đây "badguy" giây 60;
mod cập nhật gần đây giây 120 hitcount 3 rttl;
Mô-đun netfilter này có một lỗi thiết kế: mặc dù nó được triển khai dưới dạng khớp
module, nó có hành vi giống mục tiêu khi sử dụng từ khóa "set".
<http://snowman.net/projects/ipt_recent/>
rt Khớp tiêu đề định tuyến IPv6 (chỉ ip6).
mod rt rt-type 2 rt-len 20 CHẤP NHẬN;
mod rt rt-type !2 rt-len !20 CHẤP NHẬN;
mod rt rt-segsleft 2:3 CHẤP NHẬN;
mod rt rt-segsleft !4:5 CHẤP NHẬN;
mod rt rt-0-res rt-0-addrs (::1 ::2) rt-0-không nghiêm ngặt CHẤP NHẬN;
sctp Kiểm tra các thuộc tính cụ thể của SCTP (Giao thức truyền điều khiển luồng). Cái này
mô-đun được tải tự động khi bạn sử dụng "giao thức sctp".
proto sctp sport 1234 dport 2345 CHẤP NHẬN;
chỉ có các loại chunk proto sctp DỮ LIỆU: ĐƯỢC CHẤP NHẬN;
proto sctp chunk-loại bất kỳ (INIT INIT_ACK) CHẤP NHẬN;
proto sctp chunk-type !all (HEARTBEAT) CHẤP NHẬN;
Sử dụng "iptables -p sctp "-h"" để lấy danh sách các loại đoạn hợp lệ.
định Kiểm tra IP/Cổng/MAC nguồn hoặc đích theo một bộ.
bộ mod đặt badguys src DROP;
Nhìn thấyhttp://ipset.netfilter.org/> để biết thêm thông tin.
nhà nước Kiểm tra trạng thái theo dõi kết nối.
mod bang bang INVALID DROP;
mod trạng thái bang (ĐÃ ĐƯỢC THIẾT LẬP CÓ LIÊN QUAN) CHẤP NHẬN;
Nhập "iptables -m state -h" để biết chi tiết.
thống kê
Người kế nhiệm của thứ n và ngẫu nhiên, hiện không có giấy tờ trong iptables(8) trang người.
chế độ thống kê mod xác suất ngẫu nhiên 0.8 CHẤP NHẬN;
chế độ thống kê mod thứ n cứ sau 5 gói 0 DROP;
chuỗi Khớp với một chuỗi.
chuỗi chuỗi mod "thanh foo" CHẤP NHẬN;
chuỗi mod algo kmp từ 64 đến 128 chuỗi lục giác "deadbeef" CHẤP NHẬN;
tcp Kiểm tra các thuộc tính cụ thể của TCP. Mô-đun này được tải tự động khi bạn sử dụng
"giao thức tcp".
thể thao proto tcp 1234;
proto tcp dport 2345;
cờ tcp proto tcp (SYN ACK) SYN;
cờ tcp proto tcp ! (SYN ACK) ĐỒNG HÀNH;
cờ tcp proto tcp TẤT CẢ (RST ACK);
đồng bộ proto tcp;
proto tcp tcp-tùy chọn 2;
proto tcp mss 512;
Nhập "iptables -p tcp -h" để biết chi tiết.
tcpmss Kiểm tra trường TCP MSS của gói SYN hoặc SYN/ACK.
mod tcpmss mss 123 CHẤP NHẬN;
mod tcpmss mss 234:567 CHẤP NHẬN;
thời gian Kiểm tra xem thời gian gói đến có nằm trong phạm vi nhất định không.
thời gian mod bắt đầu 12:00;
thời gian mod dừng lại 13:30;
thời gian mod ngày (Thứ Hai Thứ Tư Thứ Sáu);
thời gian mod bắt đầu 2005:01:01;
thời gian mod bắt đầu 2005:01:01:23:59:59;
thời gian mod datestop 2005:04:01;
mod thời gian ngày trong tháng (30 31);
mod thời gian các ngày trong tuần (Thứ Tư Thứ Năm);
thời gian mod bắt đầu 12:00 utc;
thời gian mod bắt đầu 12:00 localtz;
Nhập "iptables -m time -h" để biết chi tiết.
trẻ con Khớp một gói trên giá trị TOS được chỉ định.
sửa đổi để giảm thiểu chi phí CHẤP NHẬN;
mod tos tos !CHẤP NHẬN Dịch vụ Thông thường;
Nhập "iptables -m tos -h" để biết chi tiết.
ttl Khớp với trường ttl (thời gian tồn tại) trong tiêu đề IP.
mod ttl ttl-eq 12; # ttl bằng
mod ttl ttl-gt 10; # ttl lớn hơn
mod ttl ttl-lt 16; # ít hơn
u32 So sánh dữ liệu thô từ gói. Bạn có thể chỉ định nhiều bộ lọc trong một ferm
danh sách; những điều này không được mở rộng thành nhiều quy tắc.
mod u32 u32 '6&0xFF=1' CHẤP NHẬN;
mod u32 u32 ('27&0x8f=7' '31=0x527c4833') THẢ;
ô uế Khớp các gói có vẻ không đúng định dạng hoặc bất thường. Trận đấu này không còn gì nữa
thông số.
iptables mục tiêu mô-đun
Các mục tiêu bổ sung sau đây có sẵn trong ferm, miễn là bạn đã bật chúng trong
hạt nhân của bạn:
PHÂN LOẠI
Đặt lớp CBQ.
PHÂN LOẠI set-class 3:50;
CLUSTERIP
Định cấu hình một cụm nút đơn giản chia sẻ một địa chỉ IP và MAC nhất định.
Các kết nối được phân phối tĩnh giữa các nút.
CLUSTERIP mã băm mới sourceip clustermac 00:12:34:45:67:89
tổng số nút 4 nút cục bộ 2 hàm băm-init 12345;
KẾT NỐI
Đặt giá trị đánh dấu netfilter được liên kết với một kết nối.
CONNMARK đặt mốc 42;
Dấu lưu CONNMARK;
CONNMARK khôi phục dấu;
Mặt nạ lưu dấu CONNMARK 0x7fff;
Mặt nạ khôi phục CONNMARK 0x8000;
CONNSECARK
Mô-đun này sao chép các dấu hiệu bảo mật từ các gói đến các kết nối (nếu không được gắn nhãn),
và từ các kết nối trở lại các gói (cũng chỉ khi không được gắn nhãn). Thường được sử dụng trong
kết hợp với SECMARK, nó chỉ hợp lệ trong bảng mangle.
CONNSECMARK lưu;
khôi phục CONNSECMARK;
ADNT đến [địa chỉ ip|phạm vi ip|phạm vi cổng ip]
Thay đổi địa chỉ đích của gói.
DNAT lên 10.0.0.4;
DNAT thành 10.0.0.4:80;
DNAT thành 10.0.0.4:1024-2048;
DNAT đến 10.0.1.1-10.0.1.20;
ECN Mục tiêu này cho phép hoạt động có chọn lọc xung quanh các lỗ đen ECN đã biết. Nó chỉ có thể
được sử dụng trong bảng mangle.
ECN ecn-tcp-xóa;
HL Sửa đổi trường Giới hạn bước nhảy của IPv6 (chỉ ip6/manle).
HL hl-bộ 5;
HL hl-tháng 2 XNUMX;
HL hl-inc 1;
IPV4OPTSSTRIP
Loại bỏ tất cả các tùy chọn IP khỏi một gói. Mô-đun này không có bất kỳ tùy chọn nào.
IPV4OPTSSTRIP;
LOG Ghi nhật ký tất cả các gói phù hợp với quy tắc này vào nhật ký kernel. Hãy cẩn thận với nhật ký
lũ lụt. Lưu ý rằng đây là "mục tiêu không kết thúc", tức là truyền tải quy tắc
tiếp tục ở quy tắc tiếp theo.
Tiền tố nhật ký cảnh báo cấp độ nhật ký LOG "Nhìn vào đây: ";
LOG log-tcp-chuỗi tùy chọn log-tcp;
LOG log-ip-tùy chọn;
DẤU Đặt trường đánh dấu netfilter cho gói (số nguyên 32 bit trong khoảng từ 0 đến
4294967295):
MARK đặt mốc 42;
MARK set-xmark 7/3;
ĐÁNH DẤU và-đánh dấu 31;
ĐÁNH DẤU hoặc-đánh dấu 1;
MARK xor-mark 12;
MẶT NẠ
Giả trang các gói phù hợp. Tùy chọn theo sau là một cổng hoặc phạm vi cổng cho
iptables. Chỉ định là "123", "123-456" hoặc "123:456". Tham số phạm vi cổng
chỉ định các kết nối giả mạo cổng cục bộ sẽ bắt nguồn từ đâu.
MASQUERADE;
MASQUERADE tới các cổng 1234:2345;
MASQUERADE tới các cổng 1234:2345 ngẫu nhiên;
MIRROR Mục tiêu trình diễn thử nghiệm đảo ngược trường nguồn và đích
trong tiêu đề IP.
GƯƠNG;
MẠNG MẠNG Ánh xạ toàn bộ mạng vào một mạng khác trong giáng sinh bảng.
NETMAP tới 192.168.2.0/24;
KHÔNG CÓ DẤU VẾT Vô hiệu hóa theo dõi kết nối cho tất cả các gói phù hợp với quy tắc đó.
proto tcp dport (135:139 445) KHÔNG THEO DÕI;
NFLOG Ghi nhật ký các gói qua netlink; đây là người kế nhiệm của ULOG.
NFLOG nflog-group 5 tiền tố nflog "Hãy nhìn vào đây: ";
NFLOG nflog-phạm vi 256;
NFLOG nflog-ngưỡng 10;
NFQUEUE Xếp hàng không gian người dùng, yêu cầu hỗ trợ kernel nfnetlink_queue.
proto tcp dport ftp NFQUEUE hàng đợi-num 20;
XẾP HÀNG Hàng đợi không gian người dùng, tiền thân của NFQUEUE. Tất cả các gói đi vào hàng đợi 0.
proto tcp dport ftp QUEUE;
GIẢM GIÁ đến cổng [cổng]
Proxy trong suốt: thay đổi IP đích của gói vào máy
chính nó.
proto tcp dport http REDIRECT tới các cổng 3128;
proto tcp dport http REDIRECT tới các cổng 3128 ngẫu nhiên;
TƯƠNG TỰ Tương tự như SNAT, nhưng một máy khách được ánh xạ tới cùng một IP nguồn cho tất cả
CÙNG với 1.2.3.4-1.2.3.7;
CÙNG với 1.2.3.8-1.2.3.15 gật đầu;
CÙNG với 1.2.3.16-1.2.3.31 ngẫu nhiên;
BÍ MẬT Điều này được sử dụng để đặt giá trị dấu bảo mật liên quan đến gói để sử dụng bởi
các hệ thống con bảo mật như SELinux. Nó chỉ hợp lệ trong bảng mangle.
SECMARK selectx "system_u:object_r:httpd_packet_t:s0";
SET [thêm-bộ|del-set] [đặt tên] [(các) lá cờ]
Thêm IP vào bộ được chỉ định. Nhìn thấyhttp://ipset.netfilter.org/>
proto icmp icmp-type echo-request SET add-set badguys src;
SNAT đến [địa chỉ ip|phạm vi ip|phạm vi cổng ip]
Thay đổi địa chỉ nguồn của gói.
SNAT đến 1.2.3.4;
SNAT đến 1.2.3.4:20000-30000;
SNAT đến 1.2.3.4 ngẫu nhiên;
TCPMSS Thay đổi giá trị MSS của gói TCP SYN.
TCPMSS set-mss 1400;
TCPMSS kẹp-mss-to-pmtu;
HO thiết lập [giá trị]
Đặt bit Loại dịch vụ của gói tcp thành giá trị này. Điều này sẽ được sử dụng bởi
bất kỳ bộ lập lịch lưu lượng truy cập nào sẵn sàng, chủ yếu là máy linux của riêng bạn, nhưng có thể
hơn. Các bit to ban đầu được để trống và ghi đè bởi giá trị này.
Thiết lập TOS Tối đa hóa thông lượng;
ĐKDV và-tos 7;
ĐKDV hoặc-tos 1;
ĐKDV xor-tos 4;
Nhập "iptables -j TOS -h" để biết chi tiết.
TTL Sửa đổi trường tiêu đề TTL.
TTL ttl-bộ 16;
TTL ttl-dec 1; # giảm 1
TTL ttl-inc 4; # tăng 4
ULOG Ghi nhật ký các gói vào chương trình không gian người dùng.
ULOG ulog-nlgroup 5 tiền tố ulog "Hãy nhìn vào đây: ";
ULOG ulog-cprange 256;
ULOG ulog-qthreshold 10;
KHÁC TÊN MIỀN
Kể từ phiên bản 2.0, sâu bọ hỗ trợ không chỉ ip và ip6, Mà còn arp (bảng ARP) và eb
(bảng cầu nối ethernet). Các khái niệm tương tự như iptables.
bảng xếp chồng từ khóa
nguồn-ip, đích-ip
Khớp với địa chỉ IPv4 nguồn hoặc đích. Giống như Saddr và bố trong ip
miền.
nguồn-mac, đích-mac
Khớp với địa chỉ MAC nguồn hoặc đích.
giao diện, mặt ngoài
Giao diện đầu vào và đầu ra.
chiều dài h
Chiều dài phần cứng của gói.
chuỗi INPUT h-độ dài 64 CHẤP NHẬN;
opcode Mã hoạt động, để biết chi tiết xem iptables(8).
mã lệnh 9 CHẤP NHẬN;
loại h Loại phần cứng.
h-loại 1 CHẤP NHẬN;
nguyên mẫu
Loại giao thức.
loại nguyên mẫu 0x800 CHẤP NHẬN;
Xáo trộn
Các từ khóa mangle-ip-s, mangle-ip-d, mangle-mac-s, mangle-mac-d, mục tiêu mangle
có thể được sử dụng để xáo trộn ARP. Nhìn thấy iptables(8) để biết chi tiết.
đồ ăn có thể ăn được từ khóa
do đó Phù hợp với giao thức đã tạo khung, ví dụ: IPv4 or PPP. Để biết danh sách, xem
/etc/ethertypes.
giao diện, mặt ngoài
Giao diện đầu vào và đầu ra vật lý.
logic-vào, logic-ra
Giao diện cầu logic.
Saddr, bố
Khớp với địa chỉ MAC nguồn hoặc đích.
Trận đấu mô-đun
Các mô-đun kết hợp sau được hỗ trợ: 802.3, arp, ip, mark_m, pkttype, stp,
vlan, nhật ký.
Mục tiêu mở rộng
Các tiện ích mở rộng mục tiêu sau được hỗ trợ: arpreply, dnat, mark, redirect,
snat.
Xin lưu ý rằng có sự xung đột giữa --dấu từ đánh dấu_m mô-đun trận đấu
và -j dấu. Vì cả hai sẽ được triển khai bằng từ khóa ferm dấu, Chúng tôi
quyết định giải quyết vấn đề này bằng cách viết tên mục tiêu bằng chữ in hoa, giống như cách khác
tên miền. Ví dụ sau viết lại dấu 1 thành 2:
đánh dấu 1 ĐIỂM 2;
ADVANCED Tính năng nổi bật:
Biến
Trong các tệp tường lửa phức tạp, việc sử dụng các biến sẽ rất hữu ích, ví dụ như để cung cấp cho mạng
Giao diện một cái tên có ý nghĩa.
Để đặt biến, hãy viết:
@def $DEV_INTERNET = eth0;
@def $PORTS = (http ftp);
@def $MORE_PORTS = ($PORTS 8080);
Trong mã ferm thực, các biến được sử dụng giống như bất kỳ tham số từ khóa nào khác:
chuỗi giao diện INPUT $DEV_INTERNET proto tcp dport $MORE_PORTS CHẤP NHẬN;
Lưu ý rằng các biến chỉ có thể được sử dụng trong tham số từ khóa ("192.168.1.1", "http"); họ
không thể chứa các từ khóa ferm như "proto" hoặc "interface".
Các biến chỉ hợp lệ trong khối hiện tại:
@def $DEV_INTERNET = eth1;
chuỗi INPUT {
nguyên tcp {
@def $DEV_INTERNET = ppp0;
giao diện $DEV_INTERNET dport http ACCEPT;
}
giao diện $DEV_INTERNET DROP;
}
sẽ được mở rộng tới:
chuỗi INPUT {
nguyên tcp {
giao diện ppp0 dport http CHẤP NHẬN;
}
giao diện eth1 THẢ;
}
"def $DEV_INTERNET = ppp0" chỉ hợp lệ trong khối "proto tcp"; khối cha mẹ
vẫn biết "đặt $DEV_INTERNET = eth1".
Tệp bao gồm là đặc biệt - các biến được khai báo trong tệp được bao gồm vẫn có sẵn trong
khối gọi. Điều này hữu ích khi bạn đưa vào một tệp chỉ khai báo các biến.
Tự động biến
Một số biến được thiết lập nội bộ bởi ferm. Tập lệnh Ferm có thể sử dụng chúng giống như bất kỳ tập lệnh nào khác
biến.
$ FILENAME
Tên của tệp cấu hình liên quan đến thư mục ferm đã được bắt đầu.
$TÊN TỆP
Tên cơ sở của tập tin cấu hình.
$DIRNAME
Thư mục của tập tin cấu hình.
$ DOMAIN Tên miền hiện tại. Một trong ip, ip6, arp, eb.
BẢNG $ Bảng netfilter hiện tại.
CHUỖI $ Chuỗi netfilter hiện tại.
$LINE Dòng của kịch bản hiện tại. Nó có thể được sử dụng như thế này:
@def &log($msg) = {
Tiền tố nhật ký LOG "rule=$msg:$LINE ";
}
.
.
.
&log("tin nhắn nhật ký");
Chức năng
Hàm tương tự như biến, ngoại trừ việc chúng có thể có tham số và cung cấp
lệnh ferm, không phải giá trị.
@def &FOO() = tên miền dport proto (tcp udp);
&FOO() CHẤP NHẬN;
@def &TCP_TUNNEL($port, $dest) = {
chuỗi bộ lọc bảng Giao diện CHUYỂN TIẾP ppp0 proto tcp dport $port Daddr $ Dest Outsideface eth0 CHẤP NHẬN;
bảng nat chuỗi giao diện TRƯỚC ppp0 proto tcp dport $port Daddr 1.2.3.4 DNAT tới $dest;
}
&TCP_TUNNEL(http, 192.168.1.33);
&TCP_TUNNEL(ftp, 192.168.1.30);
&TCP_TUNNEL((ssh smtp), 192.168.1.2);
Lệnh gọi hàm chứa một khối (như '{...}') phải là lệnh cuối cùng trong ferm
quy tắc, tức là theo sau nó phải là dấu ';'. Các '&FOO()' ví dụ không chứa một khối, do đó
bạn có thể viết 'CHẤP NHẬN' sau cuộc gọi. Để tránh điều này, bạn có thể sắp xếp lại các từ khóa:
@def &IPSEC() = { proto (đặc biệt ah); proto udp dport 500; }
chuỗi INPUT CHẤP NHẬN &IPSEC();
Gậy ngược
Với backticks, bạn có thể sử dụng đầu ra của lệnh bên ngoài:
@def $DNSSERVERS = `grep máy chủ tên / Etc / resolv.conf | awk '{print $2}'`;
chuỗi INPUT proto tcp saddr $DNSSERVERS CHẤP NHẬN;
Lệnh được thực thi với shell (/ Bin / sh), giống như dấu tích ngược trong Perl. Ferm làm
không thực hiện bất kỳ mở rộng biến nào ở đây.
Đầu ra sau đó được mã hóa và lưu dưới dạng danh sách ferm (mảng). Các dòng bắt đầu bằng '#'
bị bỏ qua; các dòng khác có thể chứa bất kỳ số lượng giá trị nào, được phân tách bằng khoảng trắng.
Bao gồm
@bao gồm từ khóa cho phép bạn bao gồm các tệp bên ngoài:
@include 'vars.ferm';
Tên tệp có liên quan đến tệp gọi, ví dụ: khi bao gồm từ
/etc/ferm/ferm.conf, câu trên bao gồm /etc/ferm/vars.ferm. Biến và
các hàm được khai báo trong tệp đi kèm vẫn có sẵn trong tệp gọi.
bao gồm hoạt động trong một khối:
chuỗi INPUT {
@include 'input.ferm';
}
Nếu bạn chỉ định một thư mục (có dấu '/'), tất cả các tệp trong thư mục này là
bao gồm, sắp xếp theo thứ tự abc:
@include 'ferm.d/';
Với biểu tượng ống ở cuối, sâu bọ thực thi lệnh shell và phân tích đầu ra của nó:
@include '/root/generate_ferm_rules.sh $HOSTNAME|'
Điều kiện
Từ khóa @nếu như giới thiệu một biểu thức điều kiện:
@if $điều kiện THẢ;
Một giá trị được đánh giá là đúng giống như trong Perl: 0, danh sách trống, chuỗi trống là sai,
mọi thứ khác đều đúng. Ví dụ về giá trị thực:
(ab); 1; 'foo'; (0 0)
Ví dụ về giá trị sai:
(); 0; '0'; ''
Ngoài ra còn có @khác:
@if $điều kiện THẢ; @else TỪ CHỐI;
Lưu ý dấu chấm phẩy trước @khác.
Có thể sử dụng dấu ngoặc nhọn sau @nếu như or @khác:
@if $điều kiện {
MARK đặt mốc 2;
TRỞ LẠI;
} @khác {
MARK đặt mốc 3;
}
Vì dấu ngoặc nhọn đóng cũng kết thúc lệnh nên không cần dấu chấm phẩy.
Không có @elsif, Sử dụng @khác @nếu như thay thế.
Ví dụ:
@def $have_ipv6 = `test -f /proc/net/ip6_tables_names && echo 1 || tiếng vang`;
@if $have_ipv6 {
tên miền ip6 {
# ...
}
}
Hooks
Để chạy các lệnh tùy chỉnh, bạn có thể cài đặt hook:
@hook trước "echo 0 >/proc/sys/net/ipv4/conf/eth0/chuyển tiếp";
@hook đăng bài "echo 1 >/proc/sys/net/ipv4/conf/eth0/chuyển tiếp";
@hook tuôn ra "echo 0 >/proc/sys/net/ipv4/conf/eth0/chuyển tiếp";
Lệnh đã chỉ định được thực thi bằng shell. "pre" có nghĩa là chạy lệnh trước
áp dụng các quy tắc tường lửa và "đăng" có nghĩa là chạy lệnh sau đó. móc "xả"
được chạy sau khi ferm đã loại bỏ các quy tắc tường lửa (tùy chọn --flush). Bạn có thể cài đặt bất kỳ
số lượng móc.
ĐƯỢC XÂY DỰNG TRONG CHỨC NĂNG
Có một số chức năng tích hợp sẵn mà bạn có thể thấy hữu ích.
@eq(a,b)
Kiểm tra hai giá trị cho sự bằng nhau. Ví dụ:
@if @eq($DOMAIN, ip6) THẢ;
@ne(a,b)
Tương tự như @eq, điều này kiểm tra sự không bình đẳng.
@không(x)
Phủ định một giá trị boolean.
@resolve((tên máy chủ1 tên máy chủ2 ...), [kiểu])
Thông thường, tên máy chủ được phân giải bằng iptables. Để cho phép ferm phân giải tên máy chủ, hãy sử dụng
chức năng @resolve:
saddr @resolve(my.host.foo) proto tcp dport ssh CHẤP NHẬN;
saddr @resolve((another.host.foothird.host.foo)) proto tcp dport openvpn CHẤP NHẬN;
Daddr @resolve(ipv6.google.com, AAAA) proto tcp dport http CHẤP NHẬN;
Lưu ý dấu ngoặc kép ở dòng thứ hai: cặp bên trong để tạo danh sách ferm,
và cặp bên ngoài làm dấu phân cách tham số hàm.
Tham số thứ hai là tùy chọn và chỉ định loại bản ghi DNS. Mặc định là "A".
Hãy cẩn thận với tên máy chủ đã được phân giải trong cấu hình tường lửa. Yêu cầu DNS có thể chặn
cấu hình tường lửa trong thời gian dài, khiến máy dễ bị tấn công hoặc có thể bị lỗi.
@cat(a, b, ...)
Nối tất cả các tham số thành một chuỗi.
@substr(biểu thức, bù lại, chiều dài)
Trích xuất một chuỗi con ra khỏi biểu thức và trả về nó. Ký tự đầu tiên ở offset 0. Nếu
OFFSET là số âm, bắt đầu ở xa cuối chuỗi.
@length(biểu thức)
Trả về độ dài tính bằng ký tự của giá trị EXPR.
@basename(đường dẫn)
Trả về tên cơ sở của tệp cho một đường dẫn nhất định (File::Spec::splitpath).
@dirname(đường dẫn)
Trả về tên của thư mục cuối cùng cho một đường dẫn nhất định, giả sử thành phần cuối cùng là một
tên tệp (Tệp::Spec::splitpath).
@ipfilter(danh sách)
Lọc ra các địa chỉ IP rõ ràng không khớp với tên miền hiện tại. Đó là
hữu ích để tạo các biến và quy tắc chung cho IPv4 và IPv6:
@def $TRUSTED_HOSTS = (192.168.0.40 2001:abcd:ef::40);
chuỗi tên miền (ip ip6) INPUT {
saddr @ipfilter($TRUSTED_HOSTS) proto tcp dport ssh CHẤP NHẬN;
}
CÔNG THỨC NẤU ĂN
./examples/ thư mục chứa nhiều cấu hình ferm có thể được sử dụng để bắt đầu
một tường lửa mới. Phần này chứa nhiều mẫu, công thức và thủ thuật hơn.
Dễ dàng cổng chuyển tiếp
Chức năng Ferm thực hiện các công việc thường ngày nhanh chóng và dễ dàng:
@def &FORWARD_TCP($proto, $port, $dest) = {
chuỗi bộ lọc bảng Giao diện FORWARD $DEV_WORLD mặt ngoài $DEV_DMZ chadr $dest proto $proto dport $port ACCEPT;
bảng nat chuỗi giao diện TRƯỚC $DEV_WORLD chadr $HOST_STATIC proto $proto dport $port DNAT tới $dest;
}
&FORWARD_TCP(tcp, http, 192.168.1.2);
&FORWARD_TCP(tcp, smtp, 192.168.1.3);
&FORWARD_TCP((tcp udp), tên miền, 192.168.1.4);
Làm việc từ xa sâu bọ
Nếu máy mục tiêu không thể chạy sâu bọ vì lý do nào đó (có thể là một thiết bị nhúng
không có Perl), bạn có thể chỉnh sửa sâu bọ tập tin cấu hình trên một máy tính khác và để sâu bọ
tạo tập lệnh shell ở đó.
Ví dụ cho OpenWRT:
ferm --remote --shell mywrt/ferm.conf >mywrt/firewall.user
chmod +x mywrt/firewall.user
scp mywrt/firewall.user mywrt.local.net:/Vân vân/
ssh mywrt.local.net /etc/firewall.user
LỰA CHỌN
--noexec Không thực hiện các iptables(8) lệnh nhưng bỏ qua. Bằng cách này bạn có thể
phân tích dữ liệu của bạn, sử dụng --dòng để xem đầu ra.
--tuôn ra Xóa các quy tắc tường lửa và đặt chính sách của tất cả các chuỗi thành CHẤP NHẬN. sâu bọ
cần một tệp cấu hình để xác định tên miền và bảng nào
bị ảnh hưởng.
--dòng Hiển thị các dòng tường lửa được tạo ra từ các quy tắc. Chúng sẽ được hiển thị
ngay trước khi chúng được thực thi, vì vậy nếu bạn nhận được thông báo lỗi từ iptables(8)
v.v., bạn có thể xem quy tắc nào đã gây ra lỗi.
- tương tác
Áp dụng các quy tắc tường lửa và yêu cầu người dùng xác nhận. Hoàn nguyên về
bộ quy tắc trước đó nếu không có phản hồi hợp lệ của người dùng trong vòng 30 giây (xem
--hết giờ). Điều này rất hữu ích cho việc quản trị tường lửa từ xa: bạn có thể kiểm tra
các quy tắc mà không sợ bị nhốt mình.
--hết giờ S If - tương tác được sử dụng, sau đó quay lại nếu không có phản hồi hợp lệ của người dùng
sau số giây này. Mặc định là 30.
--Cứu giúp Hiển thị danh sách ngắn gọn các tùy chọn dòng lệnh có sẵn.
--phiên bản Hiển thị số phiên bản của chương trình.
--Nhanh Bật chế độ nhanh: ferm tạo ra một iptables-lưu(8) và cài đặt nó
với iptables-khôi phục(số 8). Việc này nhanh hơn nhiều vì ferm gọi iptables(8)
một lần cho mọi quy tắc theo mặc định.
Chế độ nhanh được bật theo mặc định vì sâu bọ 2.0, không dùng tùy chọn này nữa.
--chậm Tắt chế độ nhanh, tức là chạy iptables(8) cho mọi quy tắc và không sử dụng
iptables-khôi phục(8).
--vỏ bọc Tạo tập lệnh Shell gọi iptables-khôi phục(8) và in nó.
Ngụ ý --fast --lines.
--Xa xôi Tạo quy tắc cho máy từ xa. ngụ ý --noexec và --dòng. Có thể
kết hợp với --vỏ bọc.
--miền {ip|ip6}
Chỉ xử lý miền được chỉ định. sâu bọ đầu ra có thể trống nếu tên miền là
không được cấu hình trong tập tin đầu vào.
--def '$name=giá trị'
Ghi đè một biến được xác định trong tệp cấu hình.
Sử dụng ferm trực tuyến bằng dịch vụ onworks.net
