Tải bản đầy đủ (.doc) (21 trang)

Bảo mật trong linux

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (408.25 KB, 21 trang )

Bộ Công Thương
Trường Đại Học Công Nghiệp Hà Nội
Khoa Công nghệ thông tin


Báo cáo bài tập lớn
Môn: Hệ Điều Hành
Đề tài : Bảo

mật trong Linux

Lớp:KHMT1-K3
Giáo viên hướng dẫn
Nhóm 3

: Thầy Nguyễn Thanh Hải

Hà Nội

1


Mục lục
1. Quan điểm về bảo mật……………………………………………….. 4
2. Các bước ban đầu trong việc thiết kế một hệ thống an ninh……… 6
2.1 Ngắt kết nối tới các mạng không mong muốn……………………. 6
2.2 Bảy điều không bao giờ nên làm để bảo mật hệ thống…………... 7
2.2.1 Không bao giờ sử dụng những mật khẩu đơn giản hoặc dễ đoán.. 7
2.2.2 Không sử dụng tài khoản gốc trừ khi thật cần…………………… 7
2.2.3 Không được chia sẻ các mật khẩu của bạn……………………… 8
2.2.4 Đừng tin tưởng một cách mù quáng những file nhị phân mà được


đưa cho bạn…………………………………………………………. 8
2.2.5 Đừng bỏ qua các file log…………………………………………. 9
2.2.6 Đừng để hệ thống của bạn không được cập nhật………………… 9
2.2.7 Đừng quên về bảo mật vật lí……………………………………... 9
3. Cấu hình TCP Wrapper……………………………………………... 9
3.1 Sử dụng TCP Wrapper với inetd………………………………….. 10
3.2 Sử dụng TCP Wrapper với xinetd………………………………… 10
3.3 /etc/hosts.allow và /etc/hosts.deny…………………………………. 10
4. Tường lửa: Lọc IP của các gói tin…………………………………... 12
4.1 Netfilter cơ bản……………………………………………………... 13
4.2 Phát triển các bộ qui tắc lọc IP……………………………………. 17
4.3 Quản lí lọc IP và các file kịch bản………………………………… 18
4.4 Cấu hình ví dụ với netfilter………………………………………... 18
4.4.1 Ví dụ lọc IP đơn giản……………………………………………..... 18
4.4.2 Giao thức lọc IP để bảo vệ toàn bộ mạng máy tính…………………. 21

2


Lời nói đầu
Hệ điều hành Linux đang phát triển rất mạnh trên thế giới, các ưu điểm mà hệ điều
hành này mang lại là vô cùng to lớn, tuy nhiên ở Việt Nam hệ điều hành này vẫn chưa được
nhiều người biết đến và sử dụng một cách thành thạo như các hệ điều hành khác (Windows là
một hệ điều hành rất nổi tiếng mà phần lớn máy tính ở Việt Nam được cài đặt và sử dụng).
Nhằm tìm hiểu sâu hơn về hệ điều hành này, nhóm Sinh viên chúng em quyết định chọn hệ
điều hành Linux làm đề tài cho bài tập lớn môn Hệ điều hành, và sẽ đi tìm hiểu chi tiết về hệ
thống bảo mật của nó. Ngày nay vấn đề an ninh mạng cũng đang là một trong những vấn đề
nóng trong lĩnh vực Công nghệ thông tin, tìm hiểu những khái niệm cơ bản, những phương
pháp đảm bảo an ninh cho hệ thống máy tính là một đòi hỏi đối với sinh viên ngành Công
nghệ thông tin. Để hoàn thành bài tập lớn chúng em đã tham khảo rất nhiều tài liệu về hệ điều

hành Linux trong đó chủ yếu là ở tài liệu mà thầy đã cung cấp (Running Linux, 4 th Edition). Vì
thời gian làm bài tập lớn của chúng em có phần hơi hạn hẹp do đó kết quả vẫn còn nhiều thiết
sót.

3


BẢO MẬT CƠ BẢN TRONG LINUX
Trong phần này chúng ta sẽ thảo luận về hệ thống bảo mật cơ bản của Linux. Bảo mật là
một chủ đề luôn luôn quan trọng, đặc biệt với sự gia tăng sử dụng của các hệ thống mạng
kết nối cố định mà dễ bị tổn thương do bị tấn công từ xa trong khi không được giám sát
Rất nhiều kĩ thuật tốt nhất là đơn giản nhất, thường bị thực tiễn bỏ qua, chúng ta sẽ
khám phá chúng trước. Sau đó sẽ chuyển sang một vài chủ đề ít rõ ràng hơn, và chúng ta sẽ
kết thúc bằng một cuộc thảo luận ngắn về một chủ đề khá phức tạp trong bảo mật mạng.
Chúng ta cũng sẽ thảo luận một vài hướng dẫn về tường lửa để bảo vệ các quá trình cài đặt
đơn giản chống lại các cuộc tấn công mạng.

1. Quan điểm về hệ thống bảo mật
Có một quan điểm đúng đắn, công bằng về một hệ thống bảo mật đôi khi là rất khó.
Phương tiện hướng tới các câu chuyện giật gân liên quan tới các hệ thống bảo mật, đặc biệt
khi chúng bao gồm các công ty hoặc các viện nghiên cứu nỗi tiếng. Mặt khác, quản lí bảo
mật có thể là một thách thức về mặt kĩ thuật và là một công việc tốn khá nhiều thời gian.
Rất nhiều người dùng Internet giữ cách nhìn rằng hệ thống của họ giữ những dữ liệu không
có giá trị, bảo mật không nhiều. Số khác nỗ lực thật nhiều để bảo vệ hệ thống của họ khỏi
việc sử dụng trái phép. Dù bạn nằm ở nhóm nào bạn cũng nên nhận thức rằng luôn có một
sự rủi ro, nguy hiểm mà bạn sẽ trở thành nạn nhân của một cuộc tấn công bảo mật. Có rất
nhiều lí do, chẳng hạn như tại sao ai đó thích tấn công vào hệ thống bảo mật của bạn. Giá
trị của dữ liệu trên hệ thống của bạn chỉ là một trong số đó, chúng ta sẽ thảo luận về những
cái khác tiếp theo trong những phần sau.
Hệ thống bảo mật truyền thống tập trung vào các hệ thống có thể truy cập thông qua

một thiết bị cuối được kết nối hoặc một kết nối trực tiếp. Trong lĩnh vực này nguy hiểm lớn
nhất một cách tiêu biểu đến từ bên trong tổ chức sở hữu hệ thống, và dạng bảo mật tốt nhất
là bảo vệ mức vật lí, nơi mà các console, các thiết bị cuối và host ở trong những "phòng" bị
khóa. Thậm chí khi hệ thống máy tính được khởi động và kết nối vào mạng, truy cập vẫn
rất hạn chế. Các mạng đang sử dụng thường đắt để truy cập, hoặc bị đóng mà không cho
phép các kết nối tới host từ bất kì nơi nào.
Sự phổ biến của Internet đã làm tăng một làn sóng mới về bảo mật liên quan tới mạng.
Một máy tính kết nối Internet mở ra khả năng lạm dụng của hàng vạn host trên toàn thế
giới. Trên Internet, một số lượng có nhiều các dạng hành vi khó gần, gây khó khăn cho các
nhà quản trị hệ thống. Vì thế chúng ta sẽ đề cập đến chúng, đó là:
• Denial of service (DoS) (Từ chối dịch vụ)
Loại tấn công này làm giảm hoặc phá vỡ một dịch vụ trên hệ thống.
• Intrusion (Xâm nhập)
Loại tấn công này truy cập vào hệ thống bằng cách đoán các mật khẩu hoặc vạch
trần các dịch vụ (service). Một khi kẻ xâm nhập đã truy cập được vào hệ thống, chúng
có thể phá hỏng hoặc ăn cắp dữ liệu hay sử dụng hệ thống đích để tiến hành các cuộc
tấn công khác trên một host khác.

4


• Snooping (Rình mò)
Loại tấn công này bao gồm việc chặn dữ liệu của các người dùng khác và nghe
ngóng mật khẩu hoặc các thông tin nhạy cảm khác. Đôi khi loại tấn công này cũng bao
gồm việc sửa đổi dữ liệu. Snooping thường bao gồm việc nghe trộm trên các kết nối
mạng, nhưng cũng có thể được thực hiện bằng cách vạch trần một hệ thống để chặn thư
viện hoặc các lời gọi hệ thống mà mang các thông tin nhạy cảm (thông tin cá nhân, mật
khẩu hay thông tin tín dụng...)
• Viruses, worms, and Trojan Horses (Virus, sâu và Trojan Horses)
Những loại tấn công này mỗi loại đều dựa vào một hành động của người sử dụng

hoặc hệ thống để chạy các chương trình được cung cấp bởi kẻ tấn công. Các chương
trình có thể được nhận trong một thư điện tử, hoặc từ một website, hay thậm chí ở trong
một vài chương trình nhìn bề ngoài tưởng như vô hại được nhận ở đâu đó trên Internet
và được cài vào máy cục bộ.
Một cách chung, DoS tấn công chủ yếu bằng việc tự tạo ra một số lượng lớn các
yêu cầu (request) bất thường tới một dịch vụ được cung cấp bởi một hệ thống. Sự tấn
công ồ ạt của hành động này có thể làm hệ thống host dốc hết bộ nhớ, sức mạnh tính
toán hay băng thông mạng. Và kết quả, các yêu cầu xa hơn khác tới hệ thống bị từ chối,
hoặc làm giảm hiệu suất của hệ thống xuống một mức không thể sử dụng được. Để
cuộc tấn công có thể thực hiện được, kẻ tấn công phải tấn công một dịch vụ được thiết
kết nghèo nàn hoặc có khả năng tự tạo ra một số lượng các yêu cầu (request) vượt quá
khả năng của một dịch vụ có thể đáp ứng.
Một dạng quỉ quyệt của tấn công DoS là DDoS, từ chối dịch vụ phân tán. Trong
dạng tấn công này, một số lượng lớn các máy tính làm nguyên nhân tạo ra các yêu cầu
tới một dịch vụ. Điều này làm tăng sự nguy hại của một cuộc tấn công DoS theo hai
hướng: bằng cách chôn vùi đích tấn công với một lượng lớn các yêu cầu, và bằng cách
ẩn thủ phạm đằng sau hàng ngàn người tham gia không có ý thức. Bằng việc sử dụng
một lượng lớn các máy chủ từ đó tiến hành một cuộc tấn công cũng làm cho tấn công
DDoS trở nên khó khăn để điều khiển hơn rất nhiều và không thể cứu chữa một khi nó
đã xảy ra. Thậm chí những người mà không có liên quan gì với trạng thái của dữ liệu
của họ cũng nên bảo vệ chính họ khỏi dạng tấn công này, để giảm thiểu tối đa mức
nguy hiểm của việc trở thành kẻ tòng phạm không có ý thức trong một cuộc tấn công
DDoS chống lại một ai đó khác.
Dạng thứ hai của tấn công, đôi khi được gọi là cracking, là một trong những dạng mà
hầu hết mọi người đều tiếp xúc trong vấn đề bảo mật. Các công ty và các tổ chức
thường lưu trữ các thông tin nhạy cảm của họ trên một hệ thống máy tính có thể được
nối mạng và truy cập với nhau. Một ví dụ chúng nhất liên quan tới một người dùng
Internet trung bình là lưu trữ thông tin chi tiết của thẻ tín dụng bởi các website. Nơi mà
khuyến khích các cá nhân không lương thiện cố truy cập và ăn cắp sử dụng sai mục
đích, lạm dụng loại thông tin nhạy cảm này.

Đôi khi các biện pháp mà được sử dụng để chống lại các truy cập bất hợp pháp
hoặc làm sập các dịch vụ rất tài tình, khéo léo, nếu hợp đạo đức. Thiết kế một cơ chế
xâm nhập thường yêu cầu một sự hiểu biết vững chắc về hệ thống đích để khám phá ra
lỗ hổng. Thường thường, một khi một cơ chế xâm nhập đã được khám phá ra, nó được
5


đóng gói trong dạng của một cái được gọi là rootkit, một tập hợp các chương trình hoặc
kịch bản mà bất kì ai sở hữu chỉ với một chút hiểu biết cơ bản cũng có thể sử dụng để
khai thác một lỗ hổng bảo mật. Khoảng rộng lớn chính yếu của các kẻ xâm nhập là
được chạy bởi một "script kiddies" mà sử dụng những bộ xâm nhập được đóng gói
trước mà không cần bất kì hiểu biết thực tế hệ thống mà chúng tấn công. Chúng ta sẽ
thảo luận những cách khác nhau để bảo vệ hệ thống trong phần này.

2. Các bước ban đầu trong việc thiết lập một hệ thống an ninh
Có một vài thứ rất cơ bản mà bạn có thể làm để bảo vệ một hệ thống Linux tránh
khỏi hầu hết các rủi ro an ninh cơ bản. Tất nhiên, phụ thuộc vào việc bạn cấu hình, cách
thức mà bạn sẽ sử dụng hệ thống của bạn..., chúng có thể rắc rối hơn việc cài đặt đơn
giản được mô tả ở dưới đây. Trong phần này chúng ta sẽ khám phá một cách ngắn gọn
cơ chế cơ bản để bảo vệ một hệ thống Linux khỏi hầu hết các cuộc tấn công thông
thường - đây là một trong những cách tiếp cận cơ bản mà tách giả thấy được trong khi
cài cho một chiếc máy mới.
2.1. Ngắt kết nối tới các mạng không mong muốn
Bước đầu tiên trong việc bảo mật cho một hệ thống Linux là ngắt kết nối hay vô
hiệu hóa tất cả các mạng ma và các dịch vụ mà bạn không cần. Một cách cơ bản, bất kì
cổng mạng nào mà hệ thống đang chờ kết nối đều có thể nguy hiểm, bởi vì đó có thể là
một sự khai thác bảo mật dựa vào một mạng ma sử dụng cổng đó. Cách nhanh nhất để
tìm ra những cổng nào được mở là sử dụng netstat -an, được chỉ ra dưới đây (tuy nhiên
chúng ta sẽ bỏ đi một vài dòng):
# netstat -an

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address
Foreign Address
State
tcp
0
0 0.0.0.0:7120
0.0.0.0:*
LISTEN
tcp
0
0 0.0.0.0:6000
0.0.0.0:*
LISTEN
tcp
0
0 0.0.0.0:22
0.0.0.0:*
LISTEN
Ở đây chúng ta thấy rằng hệ thống này đang nghe ngóng cho những kết nối trên
cổng 7120, 6000 và 22. Nhìn vào /etc/services, hoặc sử dụng -p với lệnh netstat, có thể
thường tiết lộ mạng ma nào đang giao tiếp với những cổng đó. Trong trường hợp này
nó là X font server, X Window System server và ssh.
Nếu bạn nhìn thấy rất nhiều những cổng khác mở - cho những thứ như telnetd,
sendmail...hãy tự hỏi bạn xem liệu bạn có thực sự cần những deamons đó chạy không.
Qua thời gian, những vấn đề bảo mật sẽ càng bộc lộ, và trừ phi bạn có nhiều kinh
nghiệm trong việc theo dõi tất cả những cập nhật bảo mật, nếu không hệ thống của bạn
có thể bị tổn thương từ những cuộc tấn công. Bởi vậy, telnetd, ftpd, và rshd tất cả bao
gồm gửi các mật khẩu thông qua mạng Internet cho việc chứng thực, một giải pháp tốt
hơn là sử dụng sshd, nó mã hóa dữ liệu và sử dụng một cơ chế chứng thực mạnh hơn.

Thậm chí nếu bạn chưa bảo giờ sử dụng telnetd thì để nó chạy trên hệ thống của bạn
không phải là một ý kiến hay trong trường hợp một ai đó cố tìm một cách phá vỡ nó.
Ngắt các dịch vụ thường phải chỉnh sửa các file cấu hình tương ứng cho bản phân
phối của bạn và khởi động lại hệ thống. Trên các hệ thống Red Hat, ví dụ, nhiều
deamons được bắt đầu bằng các kịch bản trong thư mục /etc/rc.d/init.d.
6


Đổi tên hoặc gỡ bỏ những file kịch bản đó có thể ngăn chặn deamons tương ứng từ
lúc khởi động. Những deamon khácđược khởi động bởi inetd hoặc xinetd trong việc trả
lời các kết nối mạng; sửa những cấu hình của những hệ thống đó có thể giới hạn tập
hợp các daemon chạy trên hệ thống của bạn.
Nếu bạn thực sự cần một dịch vụ chạy trên máy của bạn (chẳng hạn như X server),
hãy tìm những cách để ngăn chặn các kết nối tới dịch vụ đó từ những máy chủ không
mong muốn, chẳng hạn, sẽ là an toàn nhất để cho phép kết nối ssh chỉ từ những máy
chủ tin tưởng, chẳng hạn chỉ từ những máy trong mạng nội bộ của bạn. Trong trường
hợp của X server và X font server, cái mà chạy trên nhiều máy Linux, thường không có
lí do để cho phép các kết nối tới những daemon từ bất kì thứ gì ngoài chính mạng cục
bộ. Lọc các kết nối tới những daemon có thể được thực hiện bởi TCP wrapper hoặc IP
filtering, chúng ta sẽ mô tả trong phần sau.
2.2. Bảy điều không bao giờ nên làm để bảo mật hệ thống
Phần này sẽ tổng kết lại các lỗi bảo mật phổ biến nhất (Không phải thực sự chỉ có 7,
nhưng đó là những lỗi đủ xứng đáng nằm trong top). Một cách kiên định tránh tất cả
những lỗi này là công việc khó.
2.2.1.
Không bao giờ sử dụng những mật khẩu đơn giản hoặc dễ đoán
Không bao giờ sử dụng một mật khẩu mà giống (hoặc có liên quan tới) ID
của bạn, hoặc tên, sinh nhật, tên công ty, hay tên của con cún của bạn. Nếu bạn là
một người yêu thích ô tô đừng bao giờ sử dụng tên kiểu xe hoặc biển số đăng kí xe ô
tô của bạn. Nếu bạn yêu thích động vật cũng đừng bao giờ đặt mật khẩu là tên đăng

kí của động vật đó - từ đó bạn rút ra ý tưởng. Luôn đảm bảo rằng mật khẩu của bạn
không phải là những từ ngữ đơn giản mà có thể tìm thấy trong từ điển. Mật khẩu tốt
nhất là những câu vô lý. Một thói quen tốt là sử dụng một mật khẩu dựa trên một
qui tắc đơn giản mà bạn có thể nhớ. Ví dụ, bạn có thể chọn một qui tắc giống như:
kí tự cuối cùng của mỗi từ trong cụm từ “Mary had a little lamb, its fleece was white
as snow," do đó mật khẩu của bạn sẽ là "ydaebsesesw". Một kĩ thuật chúng khác là
sử dụng số và hệ thống dấu chấm câu trong mật khẩu. Thực vậy vì có một vài
chương trình mật khẩu yêu cầu điều này. Một sự kết hợp của hai kĩ thuật sẽ là tốt
hơn.
2.2.2.
Không sử dụng tài khoản gốc trừ khi thật cần
Một trong những lí do mà nhiều hệ điều hành (chẳng hạn Windows) có thể bị tổn
thương do những cuộc tấn công qua virus email và điều này giống như việc thiếu
một hệ thống quyền toàn diện. Trong những hệ thống như vậy, bất kì người dùng
nào có quyền truy cập vào bất kì file nào, chạy bất kì chương trình nào hoặc cấu
hình lại theo bất kì cách nào. Bởi vì một người dùng có thể dễ dàng chạy một
chương trình nên có thể gây nguy hại cho hệ thống. Trái lại, mô hình bảo mật của
Linux giới hạn một khoảng rộng các tác vụ được phân quyền, chẳng hạn như cài
một phần mềm mới hay chỉnh sửa bất kì file cấu hình nào thành người sử dụng gốc
(root user) . Không được sử dụng tài khoản gốc cho mọi thứ! Nếu làm vậy bạn sẽ bỏ
đi một trong những phần mạnh nhất để chống lại virus và "Trojan Horse. Luôn sử
dụng một tài khoản thường (normal user) và sử dụng lệnh su hoặc lệnh sudo để tạm
thời đạt được truy cập gốc khi bạn cần thực hiện một tác vụ được phân quyền.
7


Ngoài ra có một lợi ích nữa trong việc giới hạn việc sử dụng của tài khoản gốc:
logging (ghi lại các sự kiện của hệ thống dựa trên các hành vi của người dùng hoặc
hành vi của các thành phần trong hệ thống). Lênh su và lệnh sudo viết những thông
điệp tới file log của hệ thống khi chúng được yêu cầu, trong khi thực thi lênh su và

lệnh sudo có đề cập đến ID của người sử dụng. Điều này rất có ích cho việc theo dõi
các quyền gốc đã được sử dụng và bởi ai.
2.2.3.
Không được chia sẻ các mật khẩu của bạn
Không được nói cho bất kì ai mật khẩu của bạn, không bao giờ. Điều này có
nghĩa là bạn không nên viết mật khẩu của bạn trên bất kì sticky nào được dán trên
màn hình của bạn hoặc trong nhập kí của bạn được để ở ngăn kéo trên cùng. Nếu
bạn muốn cho phép ai đó tạm thời truy cập tới hệ thống của bạn, hãy tạo một tài
khoản tạm cho họ sử dụng. Điều này cho phép bạn thuận tiện theo dõi những gì họ
làm, và bạn có thể dễ dàng xóa chúng đi sau khi xong việc. Nếu bạn thực sự tin
tưởng ai đó với tài khoản gốc của bạn hãy sử dụng lệnh sudo, lệnh mà cho phép bạn
đưa các người sử dụng gốc truy cập mà không tiết lộ mật khẩu gốc.
2.2.4.
Đừng tin tưởng một cách mù quáng những file nhị phân mà được đưa cho
bạn
Trong khi rất là thuận tiện để tải về và cài đặt những file nhị phân trên máy của
bạn, bạn nên luôn đặt câu hỏi bạn tin tưởng bao nhiêu vào những file nhị phân đó
trước khi chạy chúng. Nếu bạn đang cài gói phần mềm mà được download trực tiếp
từ sites chính thức hoặc một site phát triển những file nhị phân đó, bạn có thể hoàn
toàn tin tưởng rằng phần mềm đó là an toàn. Nếu bạn lấy chúng từ một site ánh xạ
site không chính thức, bạn cần xem xét bạn tin tưởng bao nhiêu vào người quản trị
của site. Rất có thể rằng một ai đó đang phân phối một bản đã được sửa đổi của
phần mềm với một cửa sau mà sẽ cho phép ai đó được phép truy cập vào máy tính
của bạn. Ví dụ tổ chức Debian đang phát triển một cách thức cho việc phê chuẩn
một gói phần mềm để xác nhận rằng nó chưa bao giờ được sửa đổi. Các bản phân
phối khác được đảm bảo để chấp nhận các kĩ thuật tương tực để bảo vệ tính toàn vẹn
của gói phần mềm thuộc sở hữu của họ.
Nếu bạn muốn cài và chạy một chương trình mà đã được đưa cho bạn dưới dạng
nhị phân, có một vài thứ mà bạn có thể làm để giảm tối thiểu nguy hiểm. Không
may mắn, không có kĩ thuật nào là dễ dàng nếu bạn là một người mới làm quen

trong môi trường Linux. Đầu tiên, luôn chạy những chương trình không tin tưởng
dưới một tài khoản không phải tài khoản gốc. trừ phi chương trinh đặc biệt yêu cầu
những quyền của người dùng gốc để thực hiện. Điều này sẽ chứa các thiệt hại mà
chương trình có thể làm, ảnh hưởng chỉ tới các file và các thư mục của người sử
dụng đó. Nếu bạn muốn nhận một vài ý tưởng về những gì chương trình có thể làm
trước khi bạn chạy nó,bạn có thể chạy một đoạn chương trình và lấy ra các chuỗi.
Nó sẽ chỉ ra cho bạn tất cả các chuỗi mà được code cứng vào trong chương trình.
Bạn nên tìm kiếm xem có bất kì tham chiếu nào tới file hoặc thư mục nào đó không,
chẳng hạn etc/passwd, /bin/login, etc. Nếu bạn nhìn thấy một tham chiếu tới một file
quan trọng, bạn nên tự hỏi mình xem liệu đó có phải là mục đích củchương trình
trong câu hỏi. Nếu không hãy coi chừng. Nếu bạn thiên về kĩ thuật, bạn có thể xem
8


xét lần đầu tiên chạy chương trình và xem nó đang làm gì,sử dụng một chương trình
theo dõi chẳng hạn như strace hoặc Itrace, cái mà sẽ hiển thị hệ các lời gọi và thư
viện hệ thống mà chương trình đang gọi. Nhìn vào cá tham chiếu tới các file hệ
thống hoặc các hoạt động mạng khác thường trong traces
2.2.5.
Đừng bỏ qua các file log
Các file log trong hệ thống của bạn là những người bạn tốt của bạn, và chúng có
thể nói cho bạn biết rất nhiều về những gì đã xảy ra trong hệ thống của bạn. Bạn có
thể tìm thông tin về chúng mỗi khi các kết nối mạng được yêu cầu tới hệ thống của
bạn, ai đã sử dụng tài khoản gốc, và ai cố gắng đăng nhập bị sai. Bạn nên kiểm tra
file log một cách định kì và để biết điều gì là bình thường, và hữu ích hơn cái gì là
không bình thường. Nếu bạn nhìn thấy một vài thứ khác thường, hãy nghiên cứu tỉ
mỉ.
2.2.6. Đừng để hệ thống của bạn không được cập nhật
Hãy luôn giữ phần mềm trong hệ thống của bạn được cập nhật, điều này giúp
đảm bảo rằng tất cả các lỗi bảo mật được sửa chữa và áp dụng. Hầu hết các bản

phân phối Linux cung cấp một tập hợp các gói mà chỉ sửa chữa các lỗi bảo mật, bởi
vậy bạn không phải lo lắng về kết quả, chẳng hạn file cấu hình và những đặc điểm
thay đổi để giữ hệ thống của bạn được bảo mật. Bạn nên theo dõi những sự cập nhật
này.
2.2.7. Đừng quên về bảo mật vật lí
Hầu hết các lỗ thủng bảo mật được thực hiện bởi những người bên trong tổ chức
chạy hệ thống đích. Tất cả các cấu hình an ninh cho phần mềm trong thế giới sẽ
chẳng là gì nếu ai đó có thể bật máy tính và boot từ một đĩa mềm chứa code lợi
dụng tấn công. Nếu máy của bạn sử dụng một BIOS hoặc hệ thống thông báo rằng
cho phép thứ tự thiết bị boot đã được cấu hình hãy thiết lập boot từ đĩa mềm và đĩa
CD sau đĩa cứng. Nếu BIOS của bạn cung cấp hỗ trợ đặt mật khẩu bạn hãy cấu hình
để sử dụng nó. Nếu bạn có thể khóa case của máy lại hãy làm như vậy. Nếu bạn có
thể giữ máy trong một vùng an toàn về mặt vật lí chẳng hạn trong một căn phòng
được khóa, như vậy sẽ rất tốt.

3. Cấu hình TCP Wrapper
Như chúng ta đã biết sự kết nối máy tính của bạn với một hệ thống mạng lớn càng làm
tăng sự nguy hiểm bị tấn công. Sự phán đoán chung không thuộc phương thức nào, nó là
thời gian đợi đóng lại ở an ninh mạng cơ sỏ. bây giờ chúng ta thảo luận về việc làm giảm sự
nguy hiểm không mong muốn khi truy cập mạng, sử dụng công cụ trình bao bọc cấu hình
TCP. Cơ chế wrap này hiện hữu như một dịch vụ( giống như dịch vụ mail), một chương
trình nối mạng mà nối với nó và từ chối từ các địa chỉ trái phép. Nó là cách đơn giản để
thêm dịch vụ điều khiển truy cập, nó không thể tự sáng tạo mà hầu hết dùng chung với
chương trình inet hoặc xinetd deamons(chương trình của UNIX , sử dụng trong nền sau mà
người sủ dụng không biết đến sự có mặt của nó).
TCP Wrapper gần giống với một đội bảo vệ, “bạn phải tìm một lối vào rộng hơn.” Khi
bạn tới gần một khu vực(chuẩn bị đăng nhập), đội bảo vệ sẽ có thể hỏi tên và địa chỉ của
bạn. Đội bảo vệ tra cứu danh sách khách( gues), nếu bạn được cho phép, đội bảo vệ sẽ dẹp
sang một bên và cho bạn đăng nhập hệ thống. khi một kết nối mạng được bảo vệ bởi TCP
9



Wrapper thì Wrapper sẽ là vật đầu tiên bảo vệ nó. Wrapper sẽ kiểm tra nguồn gốc của sự
nối mạng sử dụng máy chủ và địa chỉ sau đó sẽ kiểm tra nó có trong danh sách cho phép
đăng nhập không. Nếu tên và địa chỉ của máy trạm đó khớp với trong danh sách thì
Wrapper sẽ dẹp sang một bên và chính thức cho phép máy trạm đăng nhập hệ thống. Đó là
hai cách mà bạn có thể sử dụng Linux cấu hình và phân phối. Nếu bạn sử dụng Inetd để
quản lý( kiểm tra xem file /etc/inetd.conf có đang tồn tại không), TCP Wrapper sẽ thực hiện
bổ sung lời gọi chương trình đặc biệt tcpd. Nếu bạn sử dụng xinted(kiểm tra thư viện
/etc/xinetd.d ), xinetd sẽ luôn luôn sử dụng TCP Wrapper ngay lập tức. Và sau đây, chúng ta
sẽ nghiên cứu chúng cụ thể.
3.1.

Sử dụng TCP Wrapper với inetd
Nếu bạn sử dụng inet daemon để khởi chạy dịch vụ mạng, nó có thể phải hiệu chỉnh
file /etc/inetd.conf của bạn để chạy TCP Wrapper. Hãy sử dụng lệnh finger daemon
kiểm tra xem người dùng nào đó có đang sủ dụng internet hay không, nó sẽ cho thông
tin về người sủ dụng đó về tên và địa chỉ, ví dụ: in.fingerd. ngôn ngữ cơ sỏ thay thế việc
sử dụng infinger daemon, inetd sủ dụng tcpd daemon để thay thế. Tcpd thực hiện TCP
wrapper và sau đó chạy in.fingerd tại nơi mà sự kết nối được chấp nhận.
TCP wrapper yêu cầu thay đổi rất đơn giản file /etc/inetd.conf. Với lệnh finger
daemon, bạn cần có một danh sách các file ví dụ như sau:
# /etc/in.fingerd finger daemon
finger streamtcp
nowaitroot /usr/sbin/in.fingerd in.fingerd

Đó là lí do lệnh tcpd được sử dụng để thay thế lệnh in.fingerd. Tên đầy đủ của lệnh
finger daemon được khóa với tcpd như một đối số, và tcpd sử dụng đối số đó và khởi
tạo lệnh thực sau khi nó được xác nhận là đã được cho phép đăng nhập.
Bạn nên tạo sự thay đổi này cho các chương trình daemon mà bạn muốn bảo vệ.

Trên hầu hết các hệ thống Linux, bạn có thể tìm thấy tcpd tự định cấu hình, nên sự thay
đổi đó không là cần thiết.
3.2. Sử dụng TCP Wrapper với xinetd
Xinetd được sử dụng để thay thế cho inetd vì vài sự phân phối (ví dụ như Red hat)
là một điển hình. Trong hầu hết các trường hợp thì xinetd có xây dựng hỗ trợ cho TCP
Wrapper, tất cả các thứ để bạn thay đổi cấu hình tập tin TCP Wrapper(/etc/hosts.allow
and /etc/hosts.deny) cũng được mô tả trong phần tiếp. Nếu tự bạn đã cài xinetd thì được
chắc chắn sự hỗ trợ cho TCP Wrapper.
3.3.

/etc/hosts.allow và /etc/hosts.deny
TCP Wrapper sử dụng hai file cấu hình /etc/hosts.allow và /etc/hosts.deny. Đây là
những file được sử dụng để chỉ định những quy tắc truy cập cho các mạng daemon
được bảo vệ bởi TCP Wrapper.
Khi TCP Wrapper được gọi, nó thu được địa chỉ IP của máy chủ kết nối và cố
gắng tìm ra tên máy chủ sử dụng tìm kiếm hệ thống tên miền. Tiếp theo nó tra cứu file
etc/hosts.allow để xem máy chủ này có được cho phép đăng nhập hay không để sử
dụng dịch vụ. Nếu khớp, sự đăng nhập được cho phép và lệnh daemon về mạng thực
1


sự được gọi. Nếu không khớp với trong file /etc/hosts.allow file, /etc/hosts.deny sẽ
được đem ra tra cứu. Nếu khớp thì sự kết nối sẽ kết thúc, nếu không khớp, nó sẽ được
tìm trong các file khác và sự truy cập cứ cho là tạm ổn. Đây là kĩ thuật đơn giản để
kiểm soát hầu hết các truy cập.
Cú pháp của hosts.allow và hosts.deny là khá đơn giản.
Một vài file bao gồm các quy tắc cài đặt. Mỗi quy tắc chung trên một đường nhưng có
thể bị tách thành nhiều đường sử dụng một dấu vạch chéo ngược ở cuối dòng. Ví dụ
form của một câu lệnh như sau.
daemon_list : client_list : shell_command

daemon_list là một danh sách ngăn cách bởi dấu phẩy của daemon để…lệnh
được sử dụng. Những lệnh daemon được dùng với danh nghĩa như là tên cở sở lệnh.
Đó là những lệnh tồn tại để phục vụ những yêu cầu của dịch vụ. client_list là
một danh sách tên máy chủ hoặc địa chỉ IP (Internet protocol) để so sánh xem có
khớp không. shell_command là tùy chọn và chỉ rõ lệnh nào được chạy khi đã so
khớp. daemon_list và client_list có thể cho phép bạn khớp với số của
những lệnh daemon hoặc máy chủ bên ngoài có tên rõ ràng. Thêm vào đó, bạn có thể sử
dụng một số các dấu hiệu chứng tỏ trước đó để dễ dàng đọc và xây dựng . Chúng ta có
thể vào trang quản lý host_access.
Với một file hosts.deny trông như sau:
# /etc/hosts.deny
ALL: ALL
Dòng đầu tiên là lời chú thích, dòng tiếp theo là biên dịch :” truy cập từ chối yêu
cầu tới tất cả các dịch vụ từ các máy chủ.”Nếu /etc/hosts.allow là rỗng thì quy tắc này
sẽ đóng truy cập đến mọi thứ từ tất cả các máy chủ trên Internet, bao gồm cả máy chủ
địa phương. Chúng ta có thể thay đổi đơn giản file như sau:
# /etc/hosts.deny
ALL: ALL EXCEPT localhost
Nó được ngầm định như là một quy tắc an toàn. Bạn nên nhớ tham khảo quy tắc
/etc/hosts.allow trước /etc/hosts.deny vì thêm quy tắc hosts.allow chúng ta có thể ghi
đè lên những cài đặt ngầm định trong hosts.deny. ví dụ như,ta có thể hình dung là
chúng ta có thể cho phép mỗi máy chủ trên Internet truy cập daemon finger(lệnh cho
biết thông tin ai đang truy cập Internet), muốn làm được như vậy ta cần thêm một quy
tắc như sau:
# /etc/host.allow
In.fingerd: ALL
Thông thường có thể sử dụng TCP Wrapper để hạn chế các cài đặt truy cập dịch
vụ của các máy chủ. Máy chủ có thể hướng dẫn sử dụng địa chỉ IP hoặc tên máy chủ
hoặc ví dụ cụ thể về một địa chỉ IP, hostname nào đó. Ví dụ, lệnh daemon finger có thể
chỉ từ một trong các máy chủ. Trong trường hợp này file hosts.allow sẽ được sửa như

sau:
1


# /etc/hosts.allow
In.fingerd: spagetti.vpasta.com, v.pizza.com, 192.168.1
Trong ví dụ trên ta vừa cho phép yêu cầu FTP( truyền tập tin) từ máy chủ có tên
là: spaghetti.vpasta.com hoặc miền v.pizza.com hoặc từ bất kì máy nào có tên bắt đầu
dạng: 192.168.1.
Việc so khớp các quy tắc trong hosts.allow và hosts.deny là rất quan trọng, sự có
mặt và vị trí của dấu chấm cũng rất quan trọng. Một dạng bắt đầu từ một dấu chấm
được giả định là tên của miền được xác định bởi hệ thống. còn dạng có dấu chấm ở
cuối là chỉ rõ dạng địa chỉ IP. Đó là các cách xác định các nhóm máy chủ thuộc
miền và các kiểu địa chỉ IP cụ thể. Các cài đặt các kiểu cấu hình có thể nằm trong
trang quản lý host_access.

4. Tường lửa: Lọc IP của các gói tin
Trong lúc TCP wrappers có thể được sử dụng dể giới hạn tập hợp của máy chủ,nó có thể
thiết lập kết nối sự phục vụ đến một máy nào dó,trong nhiều trường hợp nó được đưa vào sử
dụng để kiểm soát nhiều hơn các gói thông tin,khi đó nó có thể thâm nhập vào một hệ thống
đã được xác định.Ngoài ra,trong trường hợp dó TCP wrappers chỉ làm việc với những cấu
hình dã được định sẵn inetd hoặc xinetd;có một số dịch vụ(ví dụ như sshd trên một vài hệ
thống) là "độc lập" và được cung cấp quyền kiểm soát những tính nang truy xuất dữ liệu.
Vẫn còn những dịch vụ khác không có quyền thực thi kiểm soát cho chính mình,nhung nó
cần thiết để cung cấp các mức độ bảo vệ khác nhau nếu chúng ta muốn kiểm soát soát kết nối
được tạo thành từ những dịch vụ đó.
Ngày nay đó sẽ là điều đáng được ghi nhớ cho những ai sử dụng Internet để bảo vệ
chính mình chống lại các mối de dọa tấn công từ trên mạng dựa trên việc sử dụng kĩ thuật
đượcc gọi là IP filtering(bộ lọc IP).IP filtering bao gồm nhân kiểm tra mỗi gói tin đuợc
truyên hay nhận trên mạng và quyết định xem liệu có cho gói tin này di qua hay không hoặc

sửa lỗi nó trước khi cho nó di qua.IP filtering thường được gọi là "firewalling",bởi vì nó lọc
các packet đến hoặc đi trên máy tính của bạn mà bạn đang xây dựng một "firewall" giữa hệ
thống và phần còn lại của Internet. IP filtering sẽ bảo vệ máy tính của bạn chống lại sự tấn
công của virus và Trojan Horse và các lỗi ứng dụng, nhung nó có thể bảo vệ máy tính của
bạn khỏi nhiều mối de dọa từ trên mạng,ví dụ nhu tấn công bằng DOS hay giả mạo IP của
bạn.Ngoài ra IP filtering cũng cung cấp một lớp khác để bạn có thể kiểm soát hoặc ngăn
chặn những người sử dụng mà bạn không mong muốn đang truy cập vào hệ thống của bạn.
Ðể tạo một IP filtering làm việc,chúng ta cần biết packet nào cho phép và packet nào
không được phép.Thông thường,sự chọn lựa ra một packet là dựa vào phần mô tả của packet
header,bao gồm cả các thông tin khác ví dụ như nguồn và đích của địa chỉ IP,các kiểu giao
thức (TCP,UDP...),và số hiệu cổng nguồn và số hiệu cổng đích.những dịch vụ mạng khác
nhau sử dụng các giao thức và số hiệu cổng khác nhau.
Ðôi khi việc kiểm tra packet header không đủ khả năng để hoàn thành một nhiệm
vụ,nhưng chúng ta cần kiểm tra và làm sáng tỏ dữ liệu mang theo trong giới hạn một
packet.Ki thuật này thường đượcc gọi là "stateful inspection" bởi lẽ một packet được xem xét
trong ngữ cảnh của một network connection hon là sự cô lập.Ví dụ,chúng ta có thể cho phép
nhũng nguời sử dụng đi sâu vào our network để sử dụng FTP servers bên ngoài mạng. FTP
12


là một giao thức phức tạp sử dụng một kết nối TCP để gọi lệnh tới server.Một cách đáng tiếc
là FTP không có được sự ủy nhiệm của một số hiệu cổng đến dữ liệu hiện thời,nhung client
va server phải đàm phán về số hiêu cổng đang sử dụng chuyển cho phiên lệnh.
IP filtering được thi hành bởi nhân Linux,cái mà chứa code để kiểm tra mỗi gói
nhân và mỗi gói chuyển,áp dụng các quy tắc lọc để quyết định sự t?n t?i của packet.Những
quy tắc đã được định cấu hình sử dụng một user-space, công cụ cấu hình đó được chấp nhận
từ những dòng lệnh đơn filter đã định sẵn,đó là việc được sử dụng các quy tắc bởi nhân.
Có ba thế hệ IP filtering dựa vào kernel trong Linux, và mỗi loại có cơ chế cấu hình của
riêng nó. Thế hệ đầu tiên được gọi là ipfw (cho IP firewall) và cung cấp khả năng lọc cơ bản
nhưng có một chút không mềm dẻo,linh hoạt và không đủ cho những cấu hình phức tạp.

ipfw hiếm khi được sử dụng ngày nay. Thế hệ thứ hai của IP filtering được gọi là IP chain;
cải tiến lớn trên ipfw, và vẫn thường được sử dụng trong ngày nay. Thế hệ cuối cùng của
việc filtering được gọi là netfilter/iptables. netfilter là thành phần nhân và iptables là công cụ
cấu hình không gian người dùng (user/space); những thuật ngữ đó thường được sử dụng
cùng với nhau một cách liên hợp, có thể thay thế cho nhau. netfilter không chỉ mềm dẻo hơn,
dễ cấu hình hớn mà còn có khả năng mở rộng hơn. Trong phần sau chúng ta sẽ mô tả
netfilter và một vài cấu hình đơn giản như những ví dụ.
4.1.

Netfilter cơ bản
Netfilter được thực hiện trong nhân Linux 2.4.0 và các phiên bản mới hơn. Công cụ
chính cho việc thao tác và hiển thị các bảng lọc được gọi là iptables và được bao gồm
trong tất cả các bản phân phối Linux hiện tại. Lệnh iptables cho phép cấu hình một tập
hợp lớn và phức tạp các firewall rules và do đó có một lượng lớn các tùy chọn dòng
lệnh. Chúng ta sẽ nói về những cái chung nhất ở đây. Iptables manager cung cấp một sự
giải thích đầy đủ. Để thêm sự thích thú cả bạn, hãy nhìn vào một đoạn lệnh sau:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
Lệnh này cài một IP filtering rule mà chấp nhận các kết nối mới tới cổng TCP 22
(dịch vụ ssh) trên hệ thống máy cục bộ. Nó cũng sử dụng một module mở rộng được
gọi là state để tăng hiệu quả của hoạt động theo dõi các kết nối. Trên những trang sau
chúng ta sẽ giải thích làm thế nào tất cả những thứ này hoạt động.
Một khái niệm quan trọng trong netfilter là notion of a chain, cái mà bao gồm một
danh sách các qui tắc mà được áp dụng để gói khi chúng đi vào, đi ra hoặc đi ngang
qua các hệ thống. Mặc định nhân định nghĩa ba chain, nhưng administrator có thể chỉ ra
những chain qui tắc mới và liên kết chúng lại với các chain trước đó. Ba chain được
định nghĩa sẵn là:
INPUT
Chain này áp dụng tới các gói tin mà được nhận và đích tới là hệ thống máy
cục bộ,
OUTPUT


1


Chain này áp dụng tới các gói tin mà được chuyển qua bởi hệ thống máy cụ
bộ.
FORWARD
Chain này áp dụng mỗi khi một gói tin được định hướng từ một giao diện
mạng tới những cái khác thông qua hệ thống này. Nó được sử dụng mỗi khi hệ
thống đóng vai trò như một bộ định tuyến (router) cho một gói tin hoặc như là
một gateway, và được áp dụng tới những gói tin mà hoặc bắt đầu từ hoặc được
đích đến hệt thống này.
Mỗi qui tắc trong một chain cung cấp một tập hợp các nguyên tắc mà chỉ ra gói tin
nào trùng khớp với qui tắc, và một hành động mà được thực hiện trên những gói tin mà
được khớp. Các hành động mà có thể được thực hiện trên một gói tin bao gồm chấp
nhận gói (cho phép nó hoặc được nhận hoặc được chuyển) hủy gói tin (đơn giản là từ
chối nhận hoặc chuyển) hoặc chuyển gói tin sang chain khác (sau này sẽ hữu ích khi
xây dựng chain do người dùng định nghĩa, cái mà cho phép những qui tắc lọc gói phức
tạp được xây dựng một cách có cấp bậc) Một gói tin đi ngang qua mỗi qui tắc trong
chain cho tới khi nó được chấp nhận, hủy hoặc chạm tới phần cuối của chain. Nếu nó
chạm tới phần cuối của chain, hành động mặc định sẽ được thực hiện để quyết định "số
phận" của gói tin. Hành động mặc định có thể được cấu hình để hoặc là chấp nhận hoặc
bỏ qua tất cả các gói tin.
Netfilter của Linux hỗ trợ một số lượng các tùy chọn rất hay khác mà bạn có thể làm
trong việc gạo filtering rules. Một trong những thuận lợi chính của netfilter là nó rất
mềm dẻo. Nó có khả năng phát triển các extension (các mở rộng thêm) mà mở rộng
cách thức netfilter hoạt động. Một vài ví dụ về điều khiển các hành động đối với những
gói tin phức tạp là:
Packet logging
Bạn có thể tạo ra các qui tắc mà không làm gì hơn là log một bản mô tả về việc

khớp các gói tin bởi vậy nó có thể chụp lại để được phân tích sau đó. Điều này rất
có ích cho việc dò tìm các cuộc tấn công và cho việc thử nghiệm một cấu hình lọc
Stateful inspection
netfilter bao gồm một tập hợp các module trợ giúp mà có thể thực hiện kiểm tra
kết nối tốt hơn, chẳng hạn như quản lí các kết nối FTP, như đã được mô tả trước
đây.
Network Address Translation
Network Address Translation (NAT), cũng được gọi là IP masquerading (giả
mạo IP), cung cấp một cách thức cho việc viết lại địa chỉ IP và số hiệu cổng của
một gói tin mà chúng được chuyển qua một chain. NAT thường được sử dụng để
cho phép hệ thống trên những mạng cá nhân sử dụng một kết nối tới Internet với
một địa chỉ IP duy nhất. NAT là một chủ đề phức tạp mà chúng ta không thảo luận
sâu, nhưng một ví dụ đơn giản được cung cấp ở phia sau của phần này. Bạn có thể
tìm hiểu thêm về NAT trong cuốn NAT HOWTO hoặc Network Administrator
Guide (của nhà xuất bản O'Reilly)
1


Packet and byte accounting
netfilter cung cấp các bộ đếm mà cho phép bạn đo bao nhiêu băng thông mạng
mà điều khiễn mỗi qui tắc, và một vài hệ thống tính toán IP được dựa trên những
thống kê này. Những bộ đếm đó và có thể nhìn thấy được khi bạn sử dụng iptables
để liệt kê tập hợp các qui tắc trong một chế độ chi tiết; chúng ta sẽ giải thích các
trong ví dụ bên dưới.
Sử dụng lệnh iptables:
Lệnh iptables được sử dụng để tạo ra các thay đổi tới các chain netfilter và các
tập hợp các rule. Bạn có thể tạo ra một chain mới, xóa các chain, liệt kê các qui tắc
trong một chain, flush chain (gỡ bỏ tất cả các qui tắc khỏi một chain) và xác định
hành động mặc định cho một chain. iptables cũng cho phép bạn chèn, thêm, xóa và
thay thế các qui tắc trong một chain.

Lệnh iptables có một số lượng lớn các tham số và tùy chọn dòng lệnh, nhưng khi
bạn dùng nó rất ít lần, cú pháp trở nên hoàn toàn dễ hiểu. Trong phần này chúng ta
chỉ khám phá cách sử dụng chung nhất của iptables, bởi vậy một vài tham số và tùy
chọn có thể bỏ qua trong phần thảo luận của chúng ta. Đặc biệt, chúng ta không thảo
luận về các chain do người dùng định nghĩa ở đây. Bảng sau liệt kê tổng kết về các
tham số của lệnh iptables mà hoạt động trên các chain, và bảng sau nữa tổng kết các
hành động trên các qui tắc riêng lẻ.
Bảng 1.các hoạt động của iptables trên các chain
Tham số
Mô tả
-L chain
Liệt kê các qui tắc trong một chain hoặc tất cả các chain
-F chain
Xóa các qui tắc trong một chain hoặc tất cả các chain
-Z chain
Đưa bộ đếm byte trở về không
-P
chain Thiết lập hành động mặc định trên một chain thành
action
action
Bảng 2. các hoạt động của iptables trên các qui tắc
-A
chain Gắn một qui tắc vào một chain
rulespecificatio
n
D
chain Xóa một qui tắc với rule number từ một chain
rulenum
-R
chain Thay thế rule number rulenum trong chain bằng

rulenum
rulespecification
rulespecificatio
n
-I chain rulenum Chèn một qui tắc vào một chain
rulespecificatio
n

15


Mỗi qui tắc lọc bao gồm các tham số mà mô tả gói tin nào khớp với qui tắc. Các
tham số chung nhất được tổng kết trong bảng sau. Sử dụng một dấu chấm tham
trước mỗi tham số sẽ đảo ngược chúng. Ví dụ, tham số -dport 80 có nghĩa là khớp
cổng đích 80; trong khi tham số -dport !80 có nghĩa là khớp bất kì cổng đích nào
ngoại trừ cổng 80
Bảng 3. các tham số của lệnh iptables
Tham số
Khớp
-p ! protocol Giao thức gói. Thiết lập hợp lệ là tcp, udp, icmp, or
all.
-s !
Địa chỉ nguồn của gói,chỉ ra hostname hoặc địa chỉ IP
source/mas
k
-d !
Địa chỉ đích của gói. Sử dụng cùng cú pháp với địa chỉ
source/mas nguồn
k
- sport ! port

Cổng nguồn của gói. Chỉ ra một hằng số hiệu cổng cho
một dịch vụ
- dport ! port Cổng đích của gói. Sử dụng cùng cú pháp với cổng
nguồn
-i ! interface Giao diện mạng nơi mà gói được nhận
-o !
Địa chỉ mạng nơi mà gói được gửi
interface
Một số lượng các tùy chọn quan trọng được sử dụng khi bạn tạo các tập hơp qui
tắc được tổng kết trong bảng sau:
Bảng 4. những tùy chọn quan trọng của iptables
Tùy chọn
Mô tả
-v
Hữu ích khi liệt kê các qui tắc với –L
-n
Hiển thị địa chỉ IP trong dạng số
-m module Tải iptable module ngoài với tên module
Ngoài ra để chỉ ra các tham số khớp, mỗi qui tắc netfilter phải chỉ ra một vài
hành động để lấy mỗi gói tin khớp với qui tắc. Một cách tổng quát, một qui tắc chỉ
ra rằng một gói nên được chấp nhận hoặc bị từ chối, như được mô tả tiếp theo. Nếu
không có hành động nào được chỉ ra cho một qui tắc, gói tin và bộ đếm byte (byte
counter) cho qui tắc đó sẽ được tăng lên và gói được chuyển sang qui tắc tiếp theo
trong chain. Điều này cho phép một qui tắc chỉ được sử dụng cho mục đích tính toán
mà thôi. Để chỉ ra một hành động cho một qui tắc hãy sử dụng cú pháp sau:
-j target

1



Ở đây, -d đại diện cho "jump", có nghĩa là nếu một gói tin khớp qui tắc này,
processing sẽ jump (nhảy) tới hành động được đặt tên là target. Target có thể là một
trong những:
ACCEPT
Cho phép gói này được chuyển hay nhận
DROP
Bỏ qua gói tin
QUEUE
Pass the packet to a userspace program for processing.
Chuyển gói tin vào một không gian của người sử dụng chờ được xử lí
RETURN
Nếu được sử dụng với một chain do người dùng định nghĩa sẽ làm gói tin được
chuyển tới chain đã gọi nó. Nếu được sử dụng với một chain có sẵn, sẽ làm gói tin
nhảy tới phần cuối của chain (ở đó nó sẽ chạy một hành động mặc định của chain
cho gói tin này)
Khi sử dụng tùy chọn -j, target có thể cũng được đặt teencuar một chain do
người dùng chỉ ra, cái mà sẽ cho phép người dùng định nghĩa một "subchain" (chain
con) của các qui tắc mà sẽ xử lí gói tin này. Như được mô tả trước đây, target
RETURN được sử dụng sẽ làm gói tin được chuyển trở lại chain đã gọi nó.
4.2. Phát triển các bộ qui tắc lọc IP
Thông thường, phần khó nhất của việc thực hiện IP firewall là quyết định xem bạn
thực sự muốn làm gì. Bạn có muốn cho phép các kết nối đi có được tự do hay không?
Bạn có muốn cho phép các gói ICMP hay không? Dịch vụ UDP nào bạn muốn? Loại
logging nào bạn muốn dùng?Một trong những thách thức của việc xây dựng các qui tắc
lọc IP là hầu hết mọi người không phải đã quen thuộc với các khái niệm địa chỉ, giao
thức, số hiệu cổng. Thay vào đó chúng ta thường nghĩ tới các khái niệm về ứng dụng và
người dùng cuối. Để xây dựng các qui tắc lojg, chúng ta phải có khả năng dịch những
yêu cầu mức cao thành chi tiết ở mức thấp với những thao tác lọc
Làm thế nào các dịch vụ mà bạn đang quản lí với IP filtering thực sự làm việc. Đầu
tiên và trước tiên, rất là quan trọng để biết liệu một dịch vụ nào sử dụng TCP hoặc

UDP, và những số hiệu cổng nào mà nó sử dụng. File etc/services có thể thường xuyên
cung cấp về những gì bạn cần biết. Ví dụ, tìm kiếm cho smtp trong các tường của file
này tcp/25, cái mà sẽ chỉ ra rằng giao thức SMTP sử dụng TCP cổng 25. Tương tự, tìm
kiếm cho DNS trả về hai giá trị, một cho udp/53 và một cái khác cho tcp/53; điều này
có nghĩa rằng dịch vụ sử dụng cổng 53 nhưng hoặc sử dụng giao thức TCP hoặc UDP
Một vài giao thức chẳng hạn FTP, có hai entry liên quan tới nhau nhưng khác nhau
trong /ect/services. Như được mô tả trong phần trước, FTP sử dụng một cổngcho phần
lệnh (tcp/21) và một cổng khác cho việc truyền dữ liệu (tcp/20). Không may thay, FTP
client và server được tự do sử dụng những cổng khác nhau cho việc truyền dữ liệu. Bởi
vậy, FTP đã trở thành một mối phiền nhỏ nhỏ trong việc tạo các filtering rules. May
thay, netfilter cung cấp một vài giải pháp với một đặc điểm được gọi là connection
tracking (theo dõi kết nối), cùng với một module trợ giúp đặc biệt hiểu về dịch vụ FTP.
Bởi vì điều này, sẽ chỉ cần thiết tạo ra một qui tắc cho phần lệnh FTP, và netfilter sẽ tự
1


động theo dõi và "trông coi" phần chuyển dữ liệu cho bạn. Chúng ta giải thích điều này
trong ví dụ của phần sau
Nếu /etc/services không cung cấp đủ thông tin, bạn có thể cần đọc tài liệu RFC liên
quan, nó sẽ chỉ rõ giao thức được sử dụng bởi dịch vụ. Thường thường, bạn không cần
biết nhiều về một dịch vụ hơn những giao thức và cổng mà nó sử dụng, cái mà thường
dễ tìm thấy trong các tài liệu RFC.
4.3.

Quản lí lọc IP và các file kịch bản

Quy tắc lọc được lưu trữ và được sử dụng bởi nhân trong nhiều trường hợp chẳng
hạn như định tuyến các entry: khi hệ thống khởi động lại, quy tắc lọc IP phải được cấu
hình lại. Để đảm bảo rằng một cấu hình tường lửa được phục hồi khi khởi động lại hệ
thống, bạn nên để các lệnh IPtables trong một file kịch bản cái mà được tự động chạy

vào thời điểm hệ thống khởi động. Gói phần mềm Iptables đóng gói hai chương trình
iptables-save và iptables-restore, chúng lần lượt được lưu cấu hình hiện tại của netfilter
tới một file và phục hồi nó từ file đó. Nhũng công cụ này làm đơn giản hóa quá trình
quản lý cấu hình tường lửa.
Mỗi bản phân phối của linux có một các quản lý cấu hình tường lửa khác nhau.
Red hat(version 7.0 và sau đó).
Đầu tiên cấu hình các quy tắc lọc IP của bạn sử dụng các lệnh iptables thích hợp.
sau đó chạy dòng lệnh sau:
/sbin/service iptables save
Dòng lệnh trên làm cho các quy tắc lọc được lưu vào /etc/sysconfig/iptables, nó
được tự động đọc ở thời điểm hệ thống khởi động.
Debian
Cài đặt quy tắc iptables như sau:
1. Chỉnh sửa file /etc/default/iptables và đặt enable_iptables_initd=true.
2. Bạn phải tự cấu hình cho iptables sử dụng các lệnh iptables.
3. Gọi file /etc/init.d/iptables save_active để lưu cấu hình bạn vừa cài đặt.
Ở thời điểm hệ thống khởi động, cấu hình được lưu sẽ được tự động khôi phục
lại.

4.4.

SuSE Linux
Để đơn giản, mặc dù không linh hoạt, cấu hình chạy yast2 và chọn cấu hình
tường lửa module Security&Users -> Firewall. Nếu không:
1. Sửa /etc/sysconfig/SuSEfirewall2.
2. Nếu cần thiết, vào file /etc/sysconfig/scripts/SuSEfirewall2- custom và tùy
chỉnh theo ý mình. Điều này yêu cầu một sự hiểu biết sâu hơn về tường lửa hoạt
động như thế nào trong linux.
3. Khởi động tường lửa bởi lời gọi /sbin/SuSEfirewall2 start.
Cấu hình ví dụ với netfilter

4.4.1. Ví dụ lọc IP đơn giản
1


Ở đây chúng ta sẽ mô tả cách sử dụng cơ bản các bộ lọc IP, tương tự như chúng
ta sử dụng TCP wrappers đã mô tả trong phần trước.Ở đây chúng ta muốn in ra màn
hình các gói tin từ tất cả các máy chủ trên Internet, trừ các gói tin đích cho lệnh
finger daemon từ một tập nhỏ các máy chủ.Trong khi TCP wrappers có thể được sử
dụng để thực hiện cùng một chức năng, lọc IP có thể được sử dụng để in ra màn
hình rất nhiều loại khác nhau của các gói tin (ví dụ, ICMP các gói “ping”), và
thường là cần thiết để bảo vệ các dịch vụ mà không được quản lý bởi TCP wrappers.
.
Không giống như TCP wrappers,các qui tắc iptables không thể sử dụng tên máy
chủ để xác định nguồn gốc hoặc các điểm đến của một gói tin ,mà bạn phải sử dụng
địa chỉ IP khi xác định quy tắc.Khi quay trở về tìm tên máy chủ không phải là một
cách an toàn hoàn toàn để nhận dạng một gói tin.(Đó có thể là sự lừa đảo hệ thống
tên miền,làm cho nó hiện ra như là một địa chỉ IP của một máy chủ khác nhau).
Trong hai ví dụ dưới đây, chúng ta sử dụng các địa chỉ IP thay vì tên máy chủ, mà
có thể được thu được bằng cách sử dụng một công cụ như là nslookup.
Ví dụ 1. Ví dụ ipchains đơn giản:
# Nạp mô-đun kết nối theo dõi nếu chúng không được biên soạn vào trong.
Modprobe ip conntrack
Modprobe ip conntrack ftp
#Thiết lập mặc định với chính sách giảm chuỗi đầu vào.
Iptables –p input drop
#Chấp nhận những gói tin thuộc về một kết nối có sẵn.
# –A INPUT được sử dụng để nối với chuỗi đầu vào.
# –m state sử dụng mô-đun kiểm tra trạng thái.
modprobe ip_conntrack
# Chấp nhận tất cả các gói tin trở lại từ các thiết bị ghép nối,trong vùng của máy

chủ.
“-i lo” xác định việc trở lại của các thiết bị ghép nối.
iptables -A INPUT -i lo -j ACCEPT
#Chấp nhận kết nối mới thu được, và các gói tin thuộc kết nối hiện tại đến cổng 22
(ssh).
iptables -A INPUT -m state --state NEW -m tcp -p tcp \
--dport 22 -j ACCEPT
# Chấp nhận kết nối mới thu được từ ftp 192.168.1/24
iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.1/24 \ --dport 21 -j
ACCEPT
#Chấp nhận kết nối mới thu được từ ftp spaghetti.vpizza.com có địa chỉ IP 10.21.2.4
iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 10.21.2.4 \ --dport 21
-j ACCEPT
#Chấp nhận kết nối mới thu được từ ftp *.vpizza.com Nó có hai mạng kết nối mang
172.18.1.0 và 172.25.3.0
iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 172.18.1/24 \
1


--dport 21 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 172.25.3/24 \
--dport 21 -j ACCEPT
Các quy tắc cụ thể chấp nhận tất cả các gói tin thuộc về một kết nối có sẵn.Đây
là điều cần thiết trong trường hợp của FTP, trong đó có phục vụ của máy khách và
điều chỉnh thay thế cho các cổng kết nối truyền dữ liệu.Những mô-đun theo dõi kết
nối (chỉ định với trạng thái –m trong các quy tắc) bảo đảm rằng các kết nối truyền
dữ liệu có thể được chấp nhận.
4.4.2. Giao thức lọc IP để bảo vệ toàn bộ mạng máy tính
Những ví dụ trước đó đã chứng tỏ lọc IP trên một máy chủ. Phần này, chúng ta
nói về trường hợp một mạng lưới các máy (chẳng hạn như tất cả các máy trong một

nhà hoặc văn phòng nhỏ) được kết nối vào Internet thông qua một cổng của máy
tính.Chúng ta có thể viết các quy tắc lọc để lọc lượng truy cập giữa mạng Internet và
mạng nội bộ. Trong trường hợp này, chúng ta sẽ quy định trên cả chain INPUT và
FORWARD.
Dữ liệu được sử dụng để lọc các gói tin đích cho các máy chủ này, trong khi
FORWARD được sử dụng cho các gói tin được chuyển tiếp của các cổng ra (ví dụ,
các gói tin đích cho mạng nội bộ hoặc Internet).Ở đây, chúng ta giả định rằng các
cổng ra, máy sử dụng giao diện ppp0 để giao tiếp với Internet.
Ví dụ 2: Sử dụng lưới lọc đẻ bảo vệ một mạng IP
#Nạp mô-đun kết nối theo dõi nếu chúng không được lập vào trong chương trình
chính
modprobe ip_conntrack
modprobe ip_conntrack_ftp
#Thiết lập mặc định về nguyên tắc đầu vào và chuỗi chuyển tiếp để Drop
iptables -P INPUT DROP
iptables -P FORWARD DROP
#Chấp nhận tất cả các gói tin trở lại từ các thiết bị kết nối
iptables -A INPUT -i lo -j ACCEPT
#Tạo các ứng dụng mới do người dùng xác định.Điều này sẽ chứa chuỗi quy định
liên quan đến cả INPUT va FORWARD.do đó phải nhóm chúng lại với nhau trên
một chuỗi đơn.
iptables -N allowfwdi
#Chấp nhận các gói tin thuộc vào một kết nối hiện tại.
#Lưu ý rằng quy định này (và các quy định sau) được đặt do người dùng xác định
iptables -A allowfwdin -m state --state ESTABLISHED,RELATED -j
ACCEPT
#CHẤP NHẬN yêu cầu kết nối mới từ máy tính trong mạng nội bộ.Điều này cho
phép các máy trên mạng nội bộ thiết lập các kết nối vào Internet,nhưng đó không
phải là phương pháp xoay vòng.Lưu ý việc sử dụng các '-i! ppp0 'để xác định các
gói tin đến từ các thiết bị ghép nối khác hơn là ppp0.

iptables -A allowfwdin -m state --state NEW -i ! ppp0 -j ACCEPT
#Chấp nhận kết nối mới thu được đến cổng 22 (ssh).
20


iptables -A allowfwdin -m state --state NEW -m tcp -p tcp \
--dport 22 -j ACCEPT
# CHẤP NHẬN kết nối mới thu được từ FTP
192.168.1/24
iptables -A allowfwdin -m state --state NEW -m tcp -p tcp -s 192.168.1/24 \
--dport 21 -j ACCEPT
# CHẤP NHẬN kết nối mới thu được từ FTP spagehetti.vpizza.com
iptables -A allowfwdin -m state --state NEW -m tcp -p tcp -s 10.21.2.4 \
--dport 21 -j ACCEPT
#CHẤp NHẬN kết nối mới thu được từ FTP *.vpizza.com
iptables -A allowfwdin -m state --state NEW -m tcp -p tcp -s 172.18.1/24 \
--dport 21 -j ACCEPT
iptables -A allowfwdin -m state --state NEW -m tcp -p tcp -s 172.25.3/24 \
fs
#Hiện nay các gói tin đã thông qua việc xác người dùng phải tùy thuộc vào hành
động LOG.
Sử dụng các mô-đun "giới hạn" để ngăn chặn các gói tin đăng nhập quá nhanh
chóng.
iptables -A allowfwdin -m limit --limit 2/sec -j LOG
#Đặt thao tác mặc định trên dây chuyền do người dùng định ra để DROP
iptables -A allowfwdin -j DROP
# Trực tiếp nhận được tất cả các gói tin cho các đầu vào hoặc chuyển tiếp cho người
sử dụng của các gói tin để xác định chuỗi
iptables -A INPUT -j allowfwdin
iptables -A FORWARD -j allowfwdin

#Kích hoạt tính năng định tuyến IP (theo yêu cầu của tất cả các định tuyến IP, bất kể
việc sử dụng các bộ lọc IP).
echo 1 >/proc/sys/net/ipv4/ip_forward
Để theo dõi bất kỳ hành động nào cố gắng vi phạm an ninh,chúng ta đã thêm một
số quy tắc ghi lại các gói tin đã bị bỏ qua .Tuy nhiên, nếu một số lượng lớn các gói
tin xấu đến,thì nguyên tắc này có thể điền lên đĩa với mục đăng nhập, hoặc làm
chậm các cổng ra vào để thu thập thông tin (phải mất lâu hơn nữa để đăng nhập các
gói hơn là việc chuyển tiếp hoặc lọc các gói tin.Vì vậy, chúng ta sử dụng các môđun hạn chế để kiểm soát tốc độ một quy tắc hành động được thực hiện. Trong ví
dụ trước, chúng ta được cho phép.
một mức độ trung bình gói tin thứ hai sẽ được đăng nhập của hai gói tin xấu.Tất cả
các gói tin sẽ thông qua các nguyên tắc đơn giản để được bỏ qua.
Để xem các quy tắc đã được định cấu hình (xem Ví dụ 3), thì sử dụng danh sách
tùy chọn iptables-L.Sử dụng chế độ verbose (-v) hiển thị nhiều thông tin hơn so với
thông tin cơ bản đưa ra của lệnh.

21



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×