Một đặc trưng rất hữu dụng của Iptables là khả năng nhúm cỏc nguyờn tắc quan hệ với nhau vào cựng một chain, cú thể đặt tờn chain bất kỳ mà bạn muốn, nhưng để phõn biệt với chain đó xõy dựng sẵn nờn đặt tờn chain bằng chữ thường. Tờn chain cú thể lờn tới 16 ký tự.
- Tạo chain mới: dựng tuỳ chọn ‘-N’ hoặc ‘new-chain’. - Xoỏ chain: Dựng tuỳ chọn ‘-X’ hoặc ‘delete-chain’.
Cú một cặp giới hạn xoỏ chain: xoỏ rỗng và khụng là mục tiờu của bất kỳ nguyờn tắc nào. Khụng thể xoỏ một trong ba chain được xõy dựng sẵn. Nếu khụng chỉ rừ chain thỡ tất cả cỏc chain do người dựng định nghĩa sẽ bị xoỏ nếu cú thể.
- Liệt kờ một chain: Cú thể liệt kờ tất cả cỏc nguyờn tắc trong một chain bằng lệnh ‘-L’. ‘refcnt’ được liệt kờ cho mỗi chain do người dựng định nghĩa cú số của nguyờn tắc cú chain như là hành động của nú. Chain này phải rỗng trước khi cú thể xoỏ chỳng. Nếu tờn chain bị bỏ qua thỡ tất cả chain được liệt kờ ngay cả chain rỗng.
* Cú 3 tuỳ chọn cú thể đi cựng với ‘-L’
‘-n’ rất hữu dụng để ngăn chặn Iptables cố gắng tỡm kiếm địa chỉ IP, nếu dựng DNS như mọi người thỡ sẽ là nguyờn nhõn lớn nếu DNS khụng được cài đặt đỳng hoặc cú lọc yờu cầu DNS ở ngoài. Nú cũng là nguyờn nhõn port TCP và UDP xuất ra một số khỏc hơn tờn.
‘-v’ cho xem chi tiết tất cả cỏc nguyờn tắc như đếm số packet và số byte, so sanh TOS và giao diện, nếu khụng thỡ giỏ trị này bị bỏ qua. Số lượng packet và số lượng byte được hiển thị sử dụng cỏc hậu tố ‘K’, ‘M’, ‘G’ mụ tả cho 1000, 1000000, 1000000000.
Sử dụng cờ ‘-x’ sẽ in ra tất cả cỏc số.
- Khởi động lại bộ đếm: Nú hữu dụng cho reset bộ đếm. Được thực hiện với lựa chọn ‘-Z’ hoặc ‘--zero’. Vấn đề với cỏch tiếp cận này là thỉnh thoảng cần biết giỏ trị bộ đếm tức thời trước khi reset lại bộ đếm.
- Cài đặt chớnh sỏch: Chỳng ta chỳ thớch toàn bộ cỏi gỡ xảy ra khi một packet vào cuối một chain được xõy dựng sẵn khi chỳng ta thảo luận làm thế nào một packet đi qua cỏc chain trước đú. Trong trường hợp này, chớnh sỏch của chain xỏc định số phận của packet. Chỉ những chain được xõy dựng sẵn (INPUT, OUTPUT, FORWARD) mới cú chớnh sỏch, bởi vỡ nếu packet rơi vào cuối chain của người dựng định nghĩa thỡ nú duyệt trở lại chain trước. Chớnh sỏch cú thể là ACCEPT hoặc DROP.
4.1.3 luật đơn
Đõy là cụng việc hàng ngày của việc lọc packet, vận hành cỏc nguyờn tắc. Với cỏc lệnh hay sử dụng là thờm (-A), chốn (-I), xoỏ (-D) và thay thế (-R) là mở rộng của cỏc khỏi niệm này.
Mỗi nguyờn tắc là một tập hợp cỏc điều kiện mà packet phải gặp, và phải làm gỡ nếu gặp chỳng. Vớ dụ nếu bạn muốn huỷ tất cả cỏc packet ICMP đến từ địa chỉ 127.0.0.1 thỡ trong trường hợp này điều kiện giao thức phải là ICMP địa chỉ nguồn phải là 127.0.0.1 và hành động là ‘DROP’. Và cõu lệnh thực hiện sẽ là
# iptables –A INPUT –s 127.0.0.1 –p icmp –j DROP
Thờm 1 nguyờn tắc vào chain INPUT, một nguyờn tắc chỉ định cho cỏc packet từ 127.0.0.1 ‘-s 127.0.0.1’ với giao thức icmp ‘-p icmp’ và nhảy đến huỷ ‘-j DROP’
Chỳng ta cú thể xoỏ một nguyờn tắc bằng một trong hai cỏch. Nếu chỳng ta biết đú là luật duy nhất trong chain INPUT, chỳng ta cú thể dựng số của nguyờn tắc để xoỏ.
# iptables –D INPUT 1 : Xoỏ nguyờn tắc 1 trong chain INPUT
Cỏch thứ hai là làm giống như lệnh thờm nguyờn tắc nhưng thay –A thành –D. Lệnh này cho phộp chỳng ta xoỏ một nguyờn tắc trong chain cú
# iptables –D INPUT –s 127.0.0.1 –p icmp –j DROP
cỳ phỏp –D phải chớnh xỏc giống như cỏc lựachọn –A (hoặc –I hoặc – R). Nếu cú nhiều nguyờn tắc giống nhau trong một chain thỡ nguyờn tắc đầu tiờn sẽ bị xoỏ.
4.1.4 Mụ tả bộ lọc
Chỳng ta sử dụng ‘-p’ để chỉ định giao thức và ‘-s’ để chỉ định địa chỉ nguồn nhưng cú cỏc lựa chọn khỏc để chỳng ta cú thể sử dụng để chỉ định những đặc tớnh của packet. Sau đõy là cỏc tuỳ chọn cơ bản
- Chỉ định IP nguồn (‘-s’ ‘--source’ hoặc ‘--src’) và IP đớch (‘-d’ ‘-- destination’ hoặc ‘--dst’) cú thể sử dụng theo 4 cỏch: Thụng thường là dựng tờn đầy đủ ‘localhost’ hoặc ‘www.linuxhq.com’. Cỏch thứ 2 là chỉ rừ địa chỉ IP ‘127.0.0.1’. Cỏch 3 và cỏch 4 cho phộp chỉ ra một nhúm địa chỉ IP vớ dụ 199.95.207.0/24 hoặc 199.95.207.0/255.255.255.0. Cả hai đều chỉ định địa chỉ IP từ 199.95.207.0 tới 199.95.207.255. Trong trường hợp đặc biệt để chỉ định địa chỉ IP ‘/0’ chỳng ta dựng cõu lệnh: # iptables -A input -s -j DENY
- Chỉ định ngược: Cú nhiều cờ, bao gồm ‘-s’ hoặc ‘-d’ cú tham số ‘!’ đặt trước nú để chỉ định khụng đỳng với địa chỉ đó cho. Vớ dụ ‘-s ! localhost’ chỉ định cỏc packet khụng đến từ mỏy cục bộ.
- Chỉ định giao thức: Giao thức cú thể chỉ định với cờ ‘-p’. Giao thức cũng cú số hiệu hoặc tờn (TCP, UDP, ICMP). Tờn giao thức cú thể là chữ hoa hay chữ thường. Giao thức cú thể chỉ định dấu ‘!’ trước nú.
- Chỉ định một giao diện: Tuỳ chọn ‘-i’ (hoặc ‘--in-interface’) và ‘-o’ (hoặc
‘--out-interface’ để chỉ tờn một giao diện được thoả. Một giao diện là thiết bị vật lý mà packet đi vào ‘-i’ hoặc đi ra ‘-o’. Cú thể dựng lệnh ‘ifconfig’ để liệt kờ cỏc giao diện đang hoạt động .
* Cỏc packet duyệt qua chain INPUT nghĩa là khụng phải giao diện đi ra, vỡ vậy bất kỳ nguyờn tắc sử dụng ‘-o’ trong chain này sẽ khụng bao giờ được thoả. Tương tự cỏc packet duyệt qua chain OUTPUT nghĩa là giao diện đi vào, vỡ vậy bất kỳ nguyờn tắc sử dụng ‘-i’ trong chain này sẽ khụng bao giờ được thoả. Chỉ cú cỏc packet chuyển đến chain FORWARD cú cả 2 giao diện đi vào và đi ra.
* Hoàn toàn hợp lý để chỉ định giao diện khụng tồn tại, nguyờn tắc sẽ khụng thoả món bất kỳ cho đến khi giao diện được đưa ra. Điều này cực kỳ
hữu dụng cho liờn kết gọi bằng cỏch quay số PPP (Point to Point Protocol) dựng giao diện ppp0 và cỏc liờn kết tương tự.
* Trong trường hợp đặc biệt, một tờn giao diện ở cuối với dấu cộng ‘+’ sẽ thoả món với tất cả giao diện (dự cú tồn tại hay khụng) mà nú bắt đầu với chuỗi đú. Vớ dụ chỉ định một nguyờn tắc đỳng với tất cả giao diện ppp thỡ tuỳ chọn ‘-i ppp+ được sử dụng.
* Tờn giao diện cú thể được đặt trước bởi dấu ‘!’ để packet khụng thoả với giao diện chỉ định.
- Chỉ định phõn đoạn packet: Một vài packet quỏ lớn để đưa lờn đường truyền một lần, nờn packet được chia thành nhiều mảnh nhỏ hơn và gửi đi như là nhiều packet . Ở nơi nhận nú sẽ gộp lại cỏc mảnh này để khụi phục lại toàn bộ packet.
* Vấn đề với phõn mảnh là sau khi header của IP là một phần của bờn trong packet. Nếu nhỡn phớa trong packet đại diện cho cỏc header giao thức (TCP, UDP, ICMP) thỡ khụng thể biết, vỡ cỏc header chỉ chứa trong mảnh đầu tiờn.
* Nếu bạn đang theo dừi dấu vết sự kết nối hoặc NAT thỡ đừng lo lắng về sự phõn mảnh vỡ tất cả cỏc mảnh được trộn lại với nhau trước khi chỳng đến bộ lọc.
* Điều quan trọng là phải hiểu sự phõn mảnh như thế nào để xem xột bởi nguyờn tắc lọc. Bất kỳ một nguyờn tắc lọc hỏi những thụng tin mà chỳng cú sẽ khụng thoả. Điều này phõn mảnh đầu tiờn được xem như bất kỳ packet khỏc, cỏc phõn mảnh thứ 2 trở về sau thỡ khụng thể. Thớ dụ: Một nguyờn tắc –p TCP –sport www sẽ khụng bao giờ thoả phõn mảnh nào khỏc hơn phõn mảnh đầu tiờn kể cả nguyờn tắc ngược lại –p TCP –sport ! www.
* Tuy nhiờn, bạn chỉ cú thể chỉ định một nguyờn tắc đặc biệt cho cỏc phõn mảnh thứ 2 trở về sau sử dụng cờ ‘-f’ hoặc ‘--fragment’. Nú cũng hợp lý để chỉ định rằng một nguyờn tắc khụng chấp nhận cỏc mảnh thứ 2 trở đi bởi dấu ‘!’ đi trước.
* Thường được chỳ ý như một sự an toàn cho cỏc phõn mảnh thứ 2 trở đi để đi qua, từ khi bộ lọc ảnh hưởng đến phõn mảnh đầu tiờn và theo đú ngăn chặn lắp ghộp trờn host đớch.
* Cỏc packet khỏc thường (chẳng hạn cỏc packet TCP, UDP hoặc ICMP quỏ ngắn) sẽ bị huỷ bỏ khi lọc.
- Sự mở rộng đến iptables: Iptables cú khả năng mở rộng, nghĩa là cả kernel và cụng cụ iptables cú thể mở rộng để cung cấp đặc tớnh mới.
- Sự mở rộng TCP: TCP được tự động tải nếu ‘--protocol tcp’ được chỉ định và khụng thoả những cỏi khỏc. Nú cung cấp những lựa chọn sau (khụng thoả với việc phõn mảnh).
* --tcp-flags: theo sau bởi tuỳ chọn ‘!’, tiếp theo là 2 chuỗi cờ, cho phộp lọc trờn cờ TCP chỉ dịnh. Chuỗi đầu tiờn của cờ là mặt nạ: Một danh sỏch cờ muốn kiểm tra. Chuỗi thứ hai của cờ núi cỏi nào được thi hành. Vớ dụ
# iptables -A INPUT --protocol tcp --tcp-flags ALL,SYN,ACK –j DENY
Chỉ định này là tất cả cỏc cờ sẽ kiểm tra (‘ALL’ đồng nghĩa với ‘SYN, ACK, FIN, RST, URG, PSH’), nhưng chỉ SYN và ACK được thi hành. Cú tham số ‘NONE’ nghĩa là khụng cú cờ.
* --syn đi trước tuỳ chọn này là ‘!’, điều này là viết ngắn cho ‘--tcp- flags SYN, RST, ACK, SYN’
* --source-port: theo sau tuỳ chọn ‘!’, là một port đơn hoặc một dóy port. Port cú thể là tờn port hoặc số. Dóy port hoặc là 2 tờn port cỏch nhau bởi dấu ‘-’ hoặc chỉ định lớn hơn hoặc bằng cho một port, hoặc nhỏ hơn hoặc bằng cho một port.
* --sport đồng nghĩa với ‘--source-port’ chỉ định cổng nguồn
* --destination-port và –dport là chỉ định cổng đớch, chỉ định lớn hơn hoặc bằng cho một cổng hoặc nhỏ hơn hoặc bằng.
* --tcp-option: Theo sau tuỳ chọn ‘!’ và một số, thoả một packet với tuỳ chọn TCP bằng số đú. Một packet khụng cú header TCP phức tạp sẽ bị huỷ tự động nếu cố gắng làm kiểm tra tuỳ chọn TCP.
- Mở rộng cờ TCP: Nú thỉnh thoảng hữu dụng để cho phộp một kết núi TCP trực tiếp, nhưng khụng ngược lại. Vớ dụ: Muốn cho phộp một kết nối đến server www bờn ngoài, nhưng khụng cú sự kết nối Server này.
* Sự tiếp cận mà khụng hiểu sự ngăn chặn cỏc packet TCP đến từ Server. Thật khụng may sự kết nối TCP đũi hỏi cỏc packet làm việc cả 2 hướng.
* Giải phỏp là chỉ khoỏ những packet được sử dụng cho yờu cầu của kết nối. Những packet này được gọi là packet SYN, bởi chỉ khụng cho phộp cỏc packet này, cú thể ngừng sự cố gắng kết nối trờn đường đi của chỳng.
* Cờ ‘--syn’ được dựng cho mục đớch này: nú chỉ hợp lệ đối với những nguyờn tắc chỉ định giao thức TCP. Vớ dụ để chỉ rừ kết nối tạm thời từ 192.168.6.1: -p TCP –s 192.168.1.1 –syn
* Cờ này cú thể đảo ngược với dấu ‘!’ phớa trước, điều này cú nghĩa là mọi packet trừ những packet khởi tạo.
- Mở rộng UDP: Mở rộng này sẽ tự động được tải nếu ‘--protocol udp’ được chỉ định, và khụng hợp lệ cho cỏc chỉ định khỏc. Nú cung cấp tuỳ chọn ‘--source-port’, ‘--destination-port’ và ‘--dport’ giống như TCP ở trờn. - Mở rộng ICMP: Mở rộng này tự động tải về nếu ‘--protocol icmp’ được chỉ định, và khụng thoả với cỏc chỉ định khỏc. Nú cung cấp một tuỳ chọn mới:
* --icmp-type :theo sau tuỳ chọn ‘!’ tiếp theo là tờn kiểu hoặc kiểu số hoặc kiểu số và mó được cỏch bởi ‘/’. Vớ dụ --icmp-type network-redirect, --icmp-type 8 hoặc --icmp-type 8/0. Để biết được danh sỏch cỏc kiểu ICMP hợp lệ dựng cõu lệnh ‘-p icmp --help’.
- Cỏc mở rộng khỏc: Cú 2 mở rộng khỏc trong netfilter nếu được cài đặt, cú thể gọi lờn với tuỳ chọn ‘-m’
* mac: Thành phần này được chỉ định tường minh với ‘-m mac’ hoặc ‘--match mac’. Dựng trong kernel 2.3, 2.4, 2.5, 2.6. Nú được sử dụng để thoả cỏc địa chỉ card mạng nguồn của packet đi vào. Vỡ vậy, nú chỉ cú tỏc dụng cho cỏc packet duyệt qua chain PREROUTING, INPUT và FORWARD. Nú chỉ cú một tuỳ chọn: --mac-source: Nú cú thể theo sau tuỳ chọn ‘!’, tiếp đú là địa chỉ card mạng với hệ số 16 được cỏch nhau bởi dấu hai chấm ‘:’. Vớ dụ: iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01
* limit: Thành phần này phải được chỉ định tường minh với ‘--m limit’ hoặc ‘--match limit’. Nú được dựng để giới hạn tốc độ thoả, như là ngăn chặn những thụng bỏo nhật ký. Nú chỉ thoả cho số lần trờn giõy. Cú 2 tham số tuỳ chọn.
--limit: tốc độ chạm mức đỉnh tớnh bằng số packet/s (giõy), m(phỳt), h (giờ), d (ngày)
--limit-burst: Mức đỉnh, tớnh bằng số packet. Vớ dụ:
# iptables -A test -j DROP
# iptables -A INPUT -i lo -p icmp --icmp-type echo-request -j test
Đầu tiờn lệnh iptables -N test để tạo một chain mới tờn là test (table mặc định là filter). Tựy chọn -A test (append) để thờm luật mới vào chain test. Đối với chain test, giới hạn limit-burst ở mức 5 gúi, limit là 2 gúi/phỳt, nếu thỏa luật sẽ trở về (RETURN) cũn khụng sẽ bị DROP. Sau đú nối thờm chain test vào chain INPUT với tựy chọn card mạng vào là lo, giao thức icmp, loại icmp là echo-request. Luật này sẽ giới hạn cỏc gúi PING tới lo là 2 gúi/phỳt sau khi đó đạt tới 5 gúi.
4.1.5 Mụ tả hành động
- Bõy giờ chỳng ta biết những gỡ cần kiểm tra mà chỳng ta cú thể làm trờn packet. Chỳng ta cần cỏch núi những gỡ làm với packet thoả với kiểm tra của chỳng ta được gọi là hành động của cỏc luật.
- Cú hai hành động đơn giản được xõy dựng sẵn là DROP và ACCEPT. Nếu một luật thoả một packet và hành động của nú là một trong 2 hành động này thỡ khụng cú luật nào được tham khảo: số phận packet đó được quyết định.
- Cú 2 kiểu hành động khỏc được xõy dựng đú là sự mở rộng và chain do người dựng định nghĩa.
4.1.5.1 Chuỗi luật do người dựng định nghĩa
Một mặt mạnh của Iptables thừa hưởng từ Ipchains là khả năng cho người dựng tạo cỏc chain mới, ngoài cỏc chain đó xõy dựng sẵn (INPUT, FORWARD, và OUTPUT). Quy ước cỏc chain do người dựng định nghĩa là chữ thường để phõn biệt với cỏc chain cú sẵn.
Khi một packet thoả một hành động của luật do người dựng định nghĩa chain. Packet bắt đầu đi qua cỏc nguyờn tắc trong chain do người dựng định nghĩa. Nếu chain đú khụng quyết định số phận của packet. Sau đú nú chuyển về chain trước đú và chuyển đến luật kế tiếp trong chain hiện hành.
Chain do người dựng định nghĩa cú thể nhảy đến một chain khỏc do người dựng định nghĩa, nhưng khụng làm vũng lặp. Packet sẽ bị huỷ nếu chỳng tỡm thấy vũng lặp.
4.1.5.2 Sự mở rộng đến Iptables
Một kiểu khỏc của hành động là sự mở rộng. Sự mở rộng của hành động là một thành phần của kernel và mở rộng tuỳ chọn tới Iptables để cung cấp cho dũng lệnh lựa chọn mới.
- LOG: thành phần này cung cấp kernel ghi nhật ký những packet thoả.