Mục lục
1. An toàn cho các giao dịch trên mạng
2. Bảo mật Linux server
3. Firewall
4. Xây dựng hệ thống mạng Linux
35 trang |
Chia sẻ: maiphuongdc | Lượt xem: 3059 | Lượt tải: 5
Bạn đang xem trước 20 trang tài liệu Đề tài An toàn và bảo mật trên hệ điều hành Linux, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
sự đây là một cuộc tấn
công nhằm xâm nhập vào hệ thống của bạn). Sao chép lại tất cả các files mà kẻ xâm
nhập để lại hay thay đổi (như những đoạn mã chương trình, log file, ...)
x Liên hệ nhà chức trách để báo cáo về vụ tấn công.
Những bước bạn nên làm để giảm rủi ro và đối phó với sự tấn công trong tương
lai :
o Xây dựng và trao quyền cho nhóm đối phó với sự tấn công
o Thi hành kiểm tra an ninh và đánh giá mức độ rủi ro của hệ thống
o Cài đặt các phần mềm an toàn hệ thống phù hợp để giảm bớt rủi ro
o Nâng cao khả năng của mình về an toàn máy tính
Đề tài: An toàn và bảo mật trên hệ điều hành Linux
Page 13
GVHD:Nguyễn Tấn Khôi Sinh viên thực hiện:
Lê Thị Huyền Trang
Nguyễn Huy Chương
Các bước kiểm tra để giúp bạn bảo đảm tính hiệu quả của hệ thống an ninh
o Kiểm tra hệ thống an ninh mới cài đặt : chắc chắn tính đúng đắn của chính sách
an ninh hiện có và cấu hình chuẩn của hệ thống.
o Kiểm tra tự động thường xuyên : để khám phá sự “viếng thăm” của những hacker
hay những hành động sai trái của nhân viên trong công ty.
o Kiểm tra ngẫu nhiên: để kiểm tra chính sách an ninh và những tiêu chuẩn, hoặc
kiểm tra sự hiện hữu của những lỗ hổng đã được phát hiện (chẳng hạn những lỗi được
thông báo từ nhà cung cấp phần mềm)
o Kiểm tra hằng đêm những file quan trọng: để đánh giá sự toàn vẹn của những file
và cơ sở dữ liệu quan trọng
o Kiểm tra các tài khoản người dùng: để phát hiện các tài khoản không sử dụng,
không tồn tại, ...
o Kiểm tra định kỳ để xác định trạng thái hiện tại của hệ thống an ninh của bạn
Thiết lập tường lửa Iptables cho Linux
Cấu hình Tables
Việc cài đặt Iptables là một phần trong việc cài đặt Red Hat ban đầu. Nguyên
bản khởi tạo tìm kiếm sự tồn tại của file Iptables, rules/etc/sysconfig/iptables, Và
nếu chúng đã tồn tại iptables khởi động với cầu hình đã được chỉ rõ. Một khi server
này là gởi mail và nhận mail, cấu hình Iptables nên cho phép những kết nối từ đầu
vào sendmail đến bất kỳ nơi đâu. Người quản trị hệ thống sẽ chỉ sử dụng shh từ bên
trong các máy, đặc biệt là MIS. Iptables rules sẽ cài đặt để cho phép các kết nối shh
từ 2 MIS. Ping ICMP sẽ cho phép bất kỳ đâu. Không có công nào khác cho phép kết
nối đến người phục vụ này. Đây là mức bổ sung cho việc phòng thủ của server trong
trường hợp Firewal được thoã hiệp. Thêm vào đó là việc bảo vệ cho ssh sẽ được
cung cấp bởi cấu hình các gói tcp bên dưới.
Những quy tắc để thực hiện cấu hình Iptables như sau:
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT(1)
/sbin/iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT(2)
/sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT(3)
/sbin/iptables -A INPUT -p tcp --dport 22 -s 10.100.200.0/24 -j ACCEPT(4)
/sbin/iptables -A INPUT -p tcp --dport 22 -s 10.100.201.0/24 -j ACCEPT(5)
/sbin/iptables -A INPUT -p udp --sport 53 -s 10.100.50.50 -j ACCEPT(6)
/sbin/iptables -A INPUT -p udp -sport 53 -s 10.100.42.42 -j ACCEPT(7)
/sbin/iptables -A INPUT -j LOG(8)
/sbin/iptables -P INPUT DROP(9)
(1) Cho phép những kết nối liên quan và đã thiết lập đến server
(2) Cho phép các host khác ping đến server sendmaid
(3) Cho phép kết nối SMTP đến server
(4), (5) Cho phép kết nối ssh từ 2 MÍ (subnets)
(6), (7) Cho phép người phục vụ tên DNS cho box sendmaid để cung cấp giải pháp
DNS. Nếu bạn có hơn một domain – DNS, thì thêm một dòng cho mỗi DNS.
(8) log bất kỳ kết nối nào cố gắng mà nó không đặc biệt cho phép
(9) Cài dặt chính sách mặc định cho bảng INPUT to DROP
Tất cả các kết nối đặc biệt không cho phép sẽ bị rớt. Chương trình losentry sẽ được
cấu hình để định rằng bất kỳ dòng nào log cũng như sự xâm phạm an toàn. Để giữ
được cấu hình qua reboot, ta phải chạy Iptables- Save. Chạy lệnh như sau:
/sbin/iptables-save > /etc/sysconfig/iptables
Khi hệ thống khởi động lên, file Iptables sẽ được đọc và cấu hình hiệu dụng.
Đề tài: An toàn và bảo mật trên hệ điều hành Linux
Page 14
GVHD:Nguyễn Tấn Khôi Sinh viên thực hiện:
Lê Thị Huyền Trang
Nguyễn Huy Chương
Iptables là một tường lửa ứng dụng lọc gói dữ liệu rất mạnh, miễn phí và có sẵn trên
Linux.. Netfilter/Iptables gồm 2 phần là Netfilter ở trong nhân Linux và Iptables nằm
ngoài nhân. Iptables chịu trách nhiệm giao tiếp giữa người dùng và Netfilter để đẩy các
luật của người dùng vào cho Netfiler xử lí. Netfilter tiến hành lọc các gói dữ liệu ở mức
IP. Netfilter làm việc trực tiếp trong nhân, nhanh và không làm giảm tốc độ của hệ thống.
Cách đổi địa chỉ IP động (dynamic NAT)
Trước khi đi vào phần chính, mình cần giới thiệu với các bạn về công nghệ đổi địa chỉ NAT
động và đóng giả IP Masquerade. Hai từ này được dùng rất nhiều trong Iptables nên bạn
phải biết. Nếu bạn đã biết NAT động và Masquerade, bạn có thể bỏ qua phần này.
NAT động là một trong những kĩ thuật chuyển đổi địa chỉ IP NAT (Network Address
Translation). Các địa chỉ IP nội bộ được chuyển sang IP NAT như sau:
NAT Router đảm nhận việc chuyển dãy IP nội bộ 169.168.0.x sang dãy IP mới
203.162.2.x. Khi có gói liệu với IP nguồn là 192.168.0.200 đến router, router sẽ đổi IP
nguồn thành 203.162.2.200 sau đó mới gởi ra ngoài. Quá trình này gọi là SNAT (Source-
NAT, NAT nguồn). Router lưu dữ liệu trong một bảng gọi là bảng NAT động. Ngược lại, khi
có một gói từ liệu từ gởi từ ngoài vào với IP đích là 203.162.2.200, router sẽ căn cứ vào
bảng NAT động hiện tại để đổi địa chỉ đích 203.162.2.200 thành địa chỉ đích mới là
192.168.0.200. Quá trình này gọi là DNAT (Destination-NAT, NAT đích). Liên lạc giữa
192.168.0.200 và 203.162.2.200 là hoàn toàn trong suốt (transparent) qua NAT router.
NAT router tiến hành chuyển tiếp (forward) gói dữ liệu từ 192.168.0.200 đến
203.162.2.200 và ngược lại.
Đề tài: An toàn và bảo mật trên hệ điều hành Linux
Page 15
GVHD:Nguyễn Tấn Khôi Sinh viên thực hiện:
Lê Thị Huyền Trang
Nguyễn Huy Chương
Cách đóng giả địa chỉ IP (masquerade)
Đây là một kĩ thuật khác trong NAT.
NAT Router chuyển dãy IP nội bộ 192.168.0.x sang một IP duy nhất là 203.162.2.4
bằng cách dùng các số hiệu cổng (port-number) khác nhau. Chẳng hạn khi có gói dữ liệu
IP với nguồn 192.168.0.168:1204, đích 211.200.51.15:80 đến router, router sẽ đổi
nguồn thành 203.162.2.4:26314 và lưu dữ liệu này vào một bảng gọi là bảng
masquerade động. Khi có một gói dữ liệu từ ngoài vào với nguồn là 221.200.51.15:80,
đích 203.162.2.4:26314 đến router, router sẽ căn cứ vào bảng masquerade động hiện tại
để đổi đích từ 203.162.2.4:26314 thành 192.168.0.164:1204. Liên lạc giữa các máy
trong mạng LAN với máy khác bên ngoài hoàn toàn trong suốt qua router
Cấu trúc của Iptables
Iptables được chia làm 4 bảng (table): bảng filter dùng để lọc gói dữ liệu, bảng nat
dùng để thao tác với các gói dữ liệu được NAT nguồn hay NAT đích, bảng mangle dùng để
thay đổi các thông số trong gói IP và bảng conntrack dùng để theo dõi các kết nối. Mỗi
table gồm nhiều mắc xích (chain). Chain gồm nhiều luật (rule) để thao tác với các gói dữ
liệu. Rule có thể là ACCEPT (chấp nhận gói dữ liệu), DROP (thả gói), REJECT (loại bỏ gói)
hoặc tham chiếu (reference) đến một chain khác.
Quá trình chuyển gói dữ liệu qua Netfilter
Gói dữ liệu (packet) chạy trên chạy trên cáp, sau đó đi vào card mạng (chẳng hạn như
eth0). Đầu tiên packet sẽ qua chain PREROUTING (trước khi định tuyến). Tại đây, packet
có thể bị thay đổi thông số (mangle) hoặc bị đổi địa chỉ IP đích (DNAT). Đối với packet đi
vào máy, nó sẽ qua chain INPUT. Tại chain INPUT, packet có thể được chấp nhận hoặc bị
hủy bỏ. Tiếp theo packet sẽ được chuyển lên cho các ứng dụng (client/server) xử lí và
tiếp theo là được chuyển ra chain OUTPUT. Tại chain OUTPUT, packet có thể bị thay đổi
các thông số và bị lọc chấp nhận ra hay bị hủy bỏ. Đối với packet forward qua máy,
packet sau khi rời chain PREROUTING sẽ qua chain FORWARD. Tại chain FORWARD, nó
cũng bị lọc ACCEPT hoặc DENY. Packet sau khi qua chain FORWARD hoặc chain OUTPUT
sẽ đến chain POSTROUTING (sau khi định tuyến). Tại chain POSTROUTING, packet có thể
được đổi địa chỉ IP nguồn (SNAT) hoặc MASQUERADE. Packet sau khi ra card mạng sẽ
được chuyển lên cáp để đi đến máy tính khác trên mạng.
Đề tài: An toàn và bảo mật trên hệ điều hành Linux
Page 16
GVHD:Nguyễn Tấn Khôi Sinh viên thực hiện:
Lê Thị Huyền Trang
Nguyễn Huy Chương
Các tham số dòng lệnh thường gặp của Iptables
1. Gọi trợ giúp
Để gọi trợ giúp về Iptables, bạn gõ lệnh $ man iptables hoặc $ iptables --help. Chẳng hạn
nếu bạn cần biết về các tùy chọn của match limit, bạn gõ lệnh $ iptables -m limit --help.
2. Các tùy chọn để chỉ định thông số
- chỉ định tên table: -t , ví dụ -t filter, -t nat, .. nếu không chỉ định table, giá
trị mặc định là filter
- chỉ đinh loại giao thức: -p , ví dụ -p tcp, -p udp hoặc -p ! udp để chỉ
định các giao thức không phải là udp
- chỉ định card mạng vào: -i , ví dụ: -i eth0, -i lo
- chỉ định card mạng ra: -o , ví dụ: -o eth0, -o pp0
- chỉ định địa chỉ IP nguồn: -s , ví dụ: -s 192.168.0.0/24 (mạng
192.168.0 với 24 bít mạng), -s 192.168.0.1-192.168.0.3 (các IP 192.168.0.1,
192.168.0.2, 192.168.0.3).
- chỉ định địa chỉ IP đích: -d , tương tự như -s
- chỉ định cổng nguồn: --sport , ví dụ: --sport 21 (cổng 21), --sport 22:88
(các cổng 22 .. 88), --sport :80 (các cổng =22)
- chỉ định cổng đích: --dport , tương tự như --sport
3. Các tùy chọn để thao tác với chain
- tạo chain mới: iptables -N
- xóa hết các luật đã tạo trong chain: iptables -X
- đặt chính sách cho các chain `built-in` (INPUT, OUTPUT & FORWARD): iptables -P
, ví dụ: iptables -P INPUT
ACCEPT để chấp nhận các packet vào chain INPUT
- liệt kê các luật có trong chain: iptables -L
- xóa các luật có trong chain (flush chain): iptables -F
- reset bộ đếm packet về 0: iptables -Z
4. Các tùy chọn để thao tác với luật
- thêm luật: -A (append)
- xóa luật: -D (delete)
- thay thế luật: -R (replace)
- chèn thêm luật: -I (insert)
Mình sẽ cho ví dụ minh họa về các tùy chọn này ở phần sau.
Phân biệt giữa ACCEPT, DROP và REJECT packet
- ACCEPT: chấp nhận packet
- DROP: thả packet (không hồi âm cho client)
- REJECT: loại bỏ packet (hồi âm cho client bằng một packet khác)
Ví dụ:
# iptables -A INPUT -i eth0 --dport 80 -j ACCEPT chấp nhận các packet vào cổng 80 trên
card mạng eth0
Đề tài: An toàn và bảo mật trên hệ điều hành Linux
Page 17
GVHD:Nguyễn Tấn Khôi Sinh viên thực hiện:
Lê Thị Huyền Trang
Nguyễn Huy Chương
# iptables -A INPUT -i eth0 -p tcp --dport 23 -j DROP thả các packet đến cổng 23 dùng
giao thức TCP trên card mạng eth0
# iptables -A INPUT -i eth1 -s ! 10.0.0.1-10.0.0.5 --dport 22 -j REJECT --reject-with tcp-
reset gởi gói TCP với cờ RST=1 cho các kết nối không đến từ dãy địa chỉ IP 10.0.0.1..5
trên cổng 22, card mạng eth1
# iptables -A INPUT -p udp --dport 139 -j REJECT --reject-with icmp-port-unreachable
gởi gói ICMP `port-unreachable` cho các kết nối đến cổng 139, dùng giao thức UDP
Phân biệt giữa NEW, ESTABLISHED và RELATED
- NEW: mở kết nối mới
- ESTABLISHED: đã thiết lập kết nối
- RELATED: mở một kết nối mới trong kết nối hiện tại
Ví dụ:
# iptables -P INPUT DROP đặt chính sách cho chain INPUT là DROP
# iptables -A INPUT -p tcp --syn -m state --state NEW -j ACCEPT chỉ chấp nhận các gói
TCP mở kết nối đã set cờ SYN=1
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT không đóng các
kết nối đang được thiết lập,đồng thời cũng cho phép mở các kết nối mới trong kết nối
được thiết lập
# iptables -A INPUT -p tcp -j DROP các gói TCP còn lại đều bị DROP
Tùy chọn --limit, --limit-burst
--limit-burst: mức đỉnh, tính bằng số packet
--limit: tốc độ khi chạm mức đỉnh, tính bằng số packet/s(giây), m(phút), d(giờ) hoặc
h(ngày)
Mình lấy ví dụ cụ thể để bạn dễ hiểu:
# iptables -N test
# iptables -A test -m limit --limit-burst 5 --limit 2/m -j RETURN
# 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,
mình 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 đó mình 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.Bạn thử ping đến localhost
xem sao?
$ ping -c 10 localhost
Chỉ 5 gói đầu trong phút đầu tiên được chấp nhận, thỏa luật RETURN đó. Bây giờ đã đạt
đến mức đỉnh là 5 gói, lập tức Iptables sẽ giới hạn PING tới lo là 2 gói trên mỗi phút bất
chấp có bao nhiêu gói được PING tới lo đi nữa. Nếu trong phút tới không có gói nào PING
tới, Iptables sẽ giảm limit đi 2 gói tức là tốc độ đang là 2 gói/phút sẽ tăng lên 4 gói/phút.
Nếu trong phút nữa không có gói đến, limit sẽ giảm đi 2 nữa là trở về lại trạng thái cũ
chưa đạt đến mức đỉnh 5 gói. Quá trình cứ tiếp tục như vậy. Bạn chỉ cần nhớ đơn giản là
khi đã đạt tới mức đỉnh, tốc độ sẽ bị giới hạn bởi tham số--limit. Nếu trong một đơn vị
thời gian tới không có gói đến, tốc độ sẽ tăng lên đúng bằng --limit đến khi trở lại trạng
thái chưa đạt mức --limit-burst thì thôi.
Để xem các luật trong Iptables bạn gõ lệnh $ iptables -L -nv (-L tất cả các luật trong tất
cả các chain, table mặc định là filter, -n liệt kê ở dạng số, v để xem chi tiết)
# iptables -L -nv
Chain INPUT (policy ACCEPT 10 packets, 840 bytes)
pkts bytes target prot opt in out source destination
10 840 test icmp -- lo * 0.0.0.0/0 0.0.0.0/0 icmp type 8
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
Đề tài: An toàn và bảo mật trên hệ điều hành Linux
Page 18
GVHD:Nguyễn Tấn Khôi Sinh viên thực hiện:
Lê Thị Huyền Trang
Nguyễn Huy Chương
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 15 packets, 1260 bytes)
pkts bytes target prot opt in out source destination
Chain test (1 references)
pkts bytes target prot opt in out source destination
5 420 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 2/min burst 5
5 420 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
# iptables -Z reset counter
# iptables -F flush luật
# iptables -X xóa chain đã tạo
Redirect cổng
Iptables hổ trợ tùy chọn -j REDIRECT cho phép bạn đổi hướng cổng một cách dễ dàng. Ví
dụ như SQUID đang listen trên cổng 3128/tcp. Để redirect cổng 80 đến cổng 3128 này
bạn làm như sau:
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
Lưu ý: tùy chọn -j REDIRECT cho có trong chain PREROUTING
SNAT & MASQUERADE
Để tạo kết nối `transparent` giữa mạng LAN 192.168.0.1 với Internet bạn lập cấu hình
cho tường lửa Iptables như sau:
# echo 1 > /proc/sys/net/ipv4/ip_forward cho phép forward các packet qua máy chủ đặt
Iptables
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 210.40.2.71 đổi IP nguồn
cho các packet ra card mạng eth0 là 210.40.2.71. Khi nhận được packet vào từ Internet,
Iptables sẽ tự động đổi IP đích 210.40.2.71 thành IP đích tương ứng của máy tính trong
mạng LAN 192.168.0/24.
Hoặc bạn có thể dùng MASQUERADE thay cho SNAT như sau:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(MASQUERADE thường được dùng khi kết nối đến Internet là pp0 và dùng địa chỉ IP
động)
Đề tài: An toàn và bảo mật trên hệ điều hành Linux
Page 19
GVHD:Nguyễn Tấn Khôi Sinh viên thực hiện:
Lê Thị Huyền Trang
Nguyễn Huy Chương
DNAT
Giả sử bạn đặt các máy chủ Proxy, Mail và DNS trong mạng DMZ. Để tạo kết nối trong
suốt từ Internet vào các máy chủ này bạn là như sau:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination
192.168.1.2
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to-destination
192.168.1.3
# iptables -t nat -A PREROUTING -i eth0 -p udp --dport 53 -j DNAT --to-destination
192.168.1.4
Lập cấu hình Iptables cho máy chủ phục vụ Web
Phần này mình sẽ trình bày qua ví dụ cụ thể và chỉ hướng dẫn các bạn lọc packet vào. Các packet
f`orward` và 'output' bạn tự làm nha. Giả sử như máy chủ phục vụ Web kết nối mạng trực tiếp vào
Internet qua card mạng eth0, địa chỉ IP là 1.2.3.4. Bạn cần lập cấu hình tường lửa cho Iptables đáp
ứng các yêu cầu sau:
- cổng TCP 80 (chạy apache) mở cho mọi người truy cập web
- cổng 21 (chạy proftpd) chỉ mở cho webmaster (dùng để upload file lên public_html)
- cổng 22 (chạy openssh) chỉ mở cho admin (cung cấp shel `root` cho admin để nâng cấp & patch lỗi
cho server khi cần)
- cổng UDP 53 (chạy tinydns) để phục vụ tên miền (đây chỉ là ví dụ)
- chỉ chấp nhận ICMP PING tới với code=0x08, các loại packet còn lại đều bị từ chối.
Bước 1: thiết lập các tham số cho nhân
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 10 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
echo 0 > /proc/sys/net/ipv4/tcp_sack
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 0 > /proc/sys/net/ipv4/conf/eth0/accept_source_route
tcp_syncookies=1 bật chức năng chống DoS SYN qua syncookie của Linux
tcp_fin_timeout=10 đặt thời gian timeout cho quá trình đóng kết nối TCP là 10 giây
tcp_keepalive_time=1800 đặt thời gian giữ kết nối TCP là 1800 giây
...
Các tham số khác bạn có thể xem chi tiết trong tài liệu đi kèm của nhân Linux.
Bước 2: nạp các môđun cần thiết cho Iptables
Để sử dụng Iptables, bạn cần phải nạp trước các môđun cần thiết. Ví dụ nếu bạn muốn
dùng chức năng LOG trong Iptables, bạn phải nạp môđun ipt_LOG vào trước bằng lệnh #
modprobe ipt_LOG.
Đề tài: An toàn và bảo mật trên hệ điều hành Linux
Page 20
GVHD:Nguyễn Tấn Khôi Sinh viên thực hiện:
Lê Thị Huyền Trang
Nguyễn Huy Chương
MODULES="ip_tables iptable_filter ipt_LOG ipt_limit ipt_REJECT ipt_state
for i in $MODULES; do
/sbin/modprobe $MODULES
done
Bước 3: nguyên tắc đặt luật là "drop trước, accept sau"
Đây là nguyên tắc mà bạn nên tuân theo. Đầu tiên hãy đóng hết các cổng, sau đó mở
dần cách cổng cần thiết. Cách này tránh cho bạn gặp sai sót trong khi đặt luật cho
Iptables.
iptables -P INPUT DROP thả packet trước
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT giữ các kết nối hiện
tại và chấp nhận các kết nối có liên quan
iptables -A INPUT -i lo -s 127.0.0.1 -j ACCEPT chấp nhận các gói vào looback từ IP
127.0.0.1
iptables -A INPUT -i lo -s 1.2.3.4 -j ACCEPT và 1.2.3.4
BANNED_IP="10.0.0.0/8 192.168.0.0/16 172.16.0.0/12 224.0.0.0/4 240.0.0.0/5"
for i in $BANNED_IP; do
iptables -A INPUT -i eth0 -s $i -j DROP thả các gói dữ liệu đến từ các IP nằm trong
danh sách cấm BANNER_IP
done
Bước 4: lọc ICMP vào và chặn ngập lụt PING
LOG của Iptables sẽ được ghi vào file /var/log/firewal.log. Bạn phải sửa lại cấu hình cho
SYSLOG như sau:
# vi /etc/syslog.conf
kern.=debug /var/log/firewall.log
# /etc/rc.d/init.d/syslogd restart
Đối với các gói ICMP đến, chúng ta sẽ đẩy qua chain CHECK_PINGFLOOD để kiểm tra
xem hiện tại đang bị ngập lụt PING hay không, sau đó mới cho phép gói vào. Nếu đang bị
ngập lụt PING, môđun LOG sẽ tiến hành ghi nhật kí ở mức giới hạn --limit $LOG_LIMIT và
--limit-burst $LOG_LIMIT_BURST, các gói PING ngập lụt sẽ bị thả hết.
LOG_LEVEL="debug"
LOG_LIMIT=3/m
LOG_LIMIT_BURST=1
PING_LIMIT=500/s
PING_LIMIT_BURST=100
iptables -A CHECK_PINGFLOOD -m limit --limit $PING_LIMIT --limit-burst
$PING_LIMIT_BURST -j RETURN
iptables -A CHECK_PINGFLOOD -m limit --limit $LOG_LIMIT --limit-burst
$LOG_LIMIT_BURST -j LOG --log-level $LOG_LEVEL --log-prefix "fp=PINGFLOOD:warning
a=DROP "
iptables -A CHECK_PINGFLOOD -j DROP
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -j CHECK_PINGFLOOD
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -j ACCEPT
Bước 5: reject quét cổng TCP và UDP
Ở đây bạn tạo sẵn chain reject quét cổng, chúng ta sẽ đẩy vào chain INPUT sau. Đối
với gói TCP, chúng ta reject bằng gói TCP với cờ SYN=1 còn đối với gói UDP, chúng ta sẽ
reject bằng gói ICMP `port-unreachable`
Đề tài: An toàn và bảo mật trên hệ điều hành Linux
Page 21
GVHD:Nguyễn Tấn Khôi Sinh viên thực hiện:
Lê Thị Huyền Trang
Nguyễn Huy Chương
iptables-N REJECT_PORTSCAN
iptables-A REJECT_PORTSCAN -p tcp -m limit --limit $LOG_LIMIT --limit-burst
$LOG_LIMIT_BURST -j LOG --log-level $LOG_LEVEL --log-prefix "fp=PORTSCAN:tcp
a=REJECT "
iptables-A REJECT_PORTSCAN -p udp -m limit --limit $LOG_LIMIT --limit-burst
$LOG_LIMIT_BURST -j LOG --log-level $LOG_LEVEL --log-prefix "fp=PORTSCAN:udp
a=REJECT "
iptables-A REJECT_PORTSCAN -p tcp -j REJECT --reject-with tcp-reset
iptables-A REJECT_PORTSCAN -p udp -j REJECT --reject-with icmp-port-unreachable
Bước 6: phát hiện quét cổng bằng Nmap
iptables-N DETECT_NMAP
iptables-A DETECT_NMAP -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit $LOG_LIMIT
--limit-burst $LOG_LIMIT_BURST -j LOG --log-level $LOG_LEVEL --log-prefix
"fp=NMAP:XMAS a=DROP "
iptables-A DETECT_NMAP -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit --limit
$LOG_LIMIT --limit-burst $LOG_LIMIT_BURST -j LOG --log-level $LOG_LEVEL --log-prefix
"fp=NMAP:XMAS-PSH a=DROP "
iptables-A DETECT_NMAP -p tcp --tcp-flags ALL ALL -m limit --limit $LOG_LIMIT --limit-
burst $LOG_LIMIT_BURST -j LOG --log-level $LOG_LEVEL --log-prefix "fp=NMAP:XMAS-
ALL a=DROP "
iptables-A DETECT_NMAP -p tcp --tcp-flags ALL FIN -m limit --limit $LOG_LIMIT --limit-
burst $LOG_LIMIT_BURST -j LOG --log-level $LOG_LEVEL --log-prefix "fp=NMAP:FIN
a=DROP "
iptables-A DETECT_NMAP -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit
$LOG_LIMIT --limit-burst $LOG_LIMIT_BURST -j LOG --log-level $LOG_LEVEL --log-prefix
"fp=NMAP:SYN-RST a=DROP "
iptables-A DETECT_NMAP -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit $LOG_LIMIT
--limit-burst $LOG_LIMIT_BURST -j LOG --log-level $LOG_LEVEL --log-prefix
"fp=NMAP:SYN-FIN a=DROP "
iptables-A DETECT_NMAP -p tcp --tcp-flags ALL NONE -m limit --limit $LOG_LIMIT --
limit-burst $LOG_LIMIT_BURST -j LOG --log-level $LOG_LEVEL --log-prefix
"fp=NMAP:NULL a=DROP "
iptables-A DETECT_NMAP -j DROP
iptables-A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -j DETECT_NMAP
Đối với các gói TCP đến eth0 mở kết nối nhưng không đặt SYN=1 chúng ta sẽ chuyển
sang chain DETECT_NMAP. Đây là những gói không hợp lệ và hầu như là quét cổng bằng
nmap hoặc kênh ngầm. Chain DETECT_NMAP sẽ phát hiện ra hầu hết các kiểu quét của
Nmap và tiến hành ghi nhật kí ở mức --limit $LOG_LIMIT và --limit-burst
$LOG_LIMIT_BURST. Ví dụ để kiểm tra quét XMAS, bạn dùng tùy chọn --tcp-flags ALL
FIN,URG,PSH nghĩa là 3 cờ FIN, URG và PSH được bật, các cờ khác đều bị tắt. Các gói
qua chain DETECT_NMAP sau đó sẽ bị DROP hết.
Bước 7: chặn ngập lụt SYN
Gói mở TCP với cờ SYN được set 1 là hợp lệ nhưng không ngoại trừ khả năng là các
gói SYN dùng để ngập lụt. Vì vậy, ở dây bạn đẩy các gói SYN còn lại qua chain
CHECK_SYNFLOOD để kiểm tra ngập lụt SYN như sau:
iptables-N CHECK_SYNFLOOD
iptables-A CHECK_SYNFLOOD -m limit --limit $SYN_LIMIT --limit-burst
$SYN_LIMIT_BURST -j RETURN
iptables-A CHECK_SYNFLOOD -m limit --limit $LOG_LIMIT --limit-burst
$LOG_LIMIT_BURST -j LOG --log-level $LOG_LEVEL --log-prefix
"fp=SYNFLOOD:warning a=DROP "
iptables-A CHECK_SYNFLOOD -j DROP
iptables-A INPUT -i eth0 -p tcp --syn -j CHECK_SYNFLOOD
Đề tài: An toàn và bảo mật trên hệ điều hành Linux
Page 22
GVHD:Nguyễn Tấn Khôi Sinh viên thực hiện:
Lê Thị Huyền Trang
Nguyễn Huy Chương
Bước 8: giới hạn truy cập SSH cho admin
SSH_IP="1.1.1.1"
iptables -N SSH_ACCEPT
iptables -A SSH_ACCEPT -m state --state NEW -j LOG --log-level $LOG_LEVEL --log-
prefix "fp=SSH:admin a=ACCEPT "
iptables -A SSH_ACCEPT -j ACCEPT
iptables -N SSH_DENIED
iptables -A SSH_DENIED -m limit --limit $LOG_LIMIT --limit-burst
$LOG_LIMIT_BURST -j LOG --log-level $LOG_LEVEL --log-prefix "fp=SSH:attempt
a=REJECT "
iptables -A SSH_DENIED -p tcp -j REJECT --reject-with tcp-reset
for i in $SSH_IP; do
iptables -A INPUT -i eth0 -p tcp -s $i --dport 22 -j SSH_ACCEPT
done
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -j SSH_DENIED
Bước 9: giới hạn FTP cho web-master
FTP_IP="2.2.2.2"
iptables -N FTP_ACCEPT
iptables -A FTP_ACCEPT -m state --state NEW -j LOG --log-level $LOG_LEVEL --log-
prefix "fp=FTP:webmaster a=ACCEPT "
iptables -A FTP_ACCEPT -j ACCEPT
iptables -N FTP_DENIED
iptables -A FTP_DENIED -m limit --limit $LOG_LIMIT --limit-burst
$LOG_LIMIT_BURST -j LOG --log-level $LOG_LEVEL --log-prefix "fp=FTP:attempt
a=REJECT "
iptables -A FTP_DENIED -p tcp -j REJECT --reject-with tcp-reset
for i in $FTP_IP; do
Các file đính kèm theo tài liệu này:
- AntoanvabaomattrenLinux.pdf