Xây dựng Linux router và proxy với iptables + squid docx

16 403 0
Xây dựng Linux router và proxy với iptables + squid docx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Xây dựng Linux router và proxy với iptables + squid Linux router là một hệ thống đứng giữa Internal network và Internet hoặc phân cách một network và một network khác. Linux router là một firewall được xây dựng bằng Netfilter/iptables, luôn có sẵn trên hầu hết các bản phân phối của Linux. Nếu bạn là một người dùng bình thường truy cập internet thông qua modem thông thường, bạn không cần thiết phải có một firewall vì IP của bạn thường xuyên thay đổi, bạn không sử dụng một dịch vụ nào đặc biệt cần được bảo vệ, và hạn chế bởi một tường lửa chuyên dụng. Đối với môi trường doanh nghiệp, việc triển khai nhiều hệ thống, dịch vụ cần sự bảo mật, và tối ưu trong quản lí, cả mạng Lan và các truy xuất từ bên ngoài vào, tường lửa là một nhu cầu thiết yếu và tối cần thiết. Các sản phẩm router phần cứng thường rất mắc và cần sự hỗ trợ tương đối từ phía cung cấp, trong khi việc xây dựng riêng một Linux firewall là việc không quá khó, tốn ít tài nguyên + tiền bạc, mà còn có thể xây dựng một hệ thống all in one tùy theo nhu cầu và mục đích, quản lí chặt chẽ và quan trọng là khả năng bền bỉ mà bản thân Linux mang lại. Bài viết này sẽ cố gắng đưa ra một mô hình cụ thể, cách cài đặt và vận hành một Linux Firewall, transparent proxy, DHCP server trên một máy chủ Linux. Mô hình thực hiện với máy chủ có cấu hình : Pentium Dual Core 2.8 GB, 1GB Ram và 80GB hard disk, sử dụng centos 5.3 enterprise với các gói cài đặt chuẩn, không có giao diện đồ họa. Trước tiên hãy mô tả một chút về mô hình network mà ta cố gắng xây dựng: Một công ty sử dụng đường truyền cáp quang từ FPT, với đường truyền này công ty được cung cấp một đia chỉ IP tĩnh 111.111.111.111, đường truyền đi qua một router, sau đó đi vào mạng bên trong. Nhu cầu của công ty cần một vài dịch vụ web, mail, ftp, vpn và chia cách, quản lí truy cập từ bên ngoài vào LAN bằng một firewall, proxy. 1. Kiểm sóat luồng truy cập từ bên ngoài vào mạng LAN. 2. Cấm các truy cập bất hợp lệ từ LAN ra internet 3. Cấm sử dụng các dịch vụ chat (Instant message) từ LAN. 4. Xây dựng một DHCP server tự động cung cấp IP cho mạng LAN. Mô hình mạng được miêu tả như hình. Cách thức họat động: Linux router có 2 netwok cards: eth0 là địa chỉ mặt ngoài tiếp xúc với Modem có địa chỉ là 192.168.1.2 eth1 là địa chỉ mặt trong tiếp xúc với LAN có địa chỉ là 172.16.0.1 Trên Router ta triển khai DHCP server cung cấp IP cho toàn bộ mạng LAN. Cũng trên server này ta xây dựng router và squid proxy để thực hiện các yêu cầu đưa ra. 1. DHCP server: Đây là dịch vụ đơn giản và dễ dàng nhất trong bài viết này. Gói cài đặt được cung cấp sẵn + một vài thay đổi nhỏ trong cấu hình là ta đã cấp được IP cho toàn bộ mạng LAN. Dùng yum để download và cài đặt dhcpd: view plaincopy to clipboardprint? 1. [hungnv@home ~]$ sudo yum 2. install dpcp dhcp-devel 3. [sudo] password for hungnv: [hungnv@home ~]$ sudo yum install dpcp dhcp-devel [sudo] password for hungnv: Mở file /etc/dhcpd.conf, xóa trắng nếu có nội dung và thêm vào tương tự: view plaincopy to clipboardprint? 1. 2. [hungnv@home ~]$ vim /etc/dhcpd.conf 3. 4. # 5. # DHCP Server Configuration file. 6. # see /usr/share/doc/dhcp*/dhcpd.conf.sample 7. # 8. ddns-update-style none; 9. deny bootp; 10. authoritstive; 11. subnet 172.16.0.0 netmask 255.255.0.0 12. { 13. option subnet-mask 255.255.0.0; 14. option domain-name "opensource.com.vn"; 15. option routers 172.16.0.1; 16. option domain-name- servers ns1.opensource.com.vn, ns2.opensource.com.vn, dns.fpt.vn; 17. #option netbios-name-servers 192.168.0.2; 18. range dynamic-bootp 172.16.0.20 172.16.0.120; 19. default-lease-time 31200; 20. max-lease-time 62400; 21. } 22. [hungnv@home ~]$ vim /etc/dhcpd.conf # # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.sample # ddns-update-style none; deny bootp; authoritstive; subnet 172.16.0.0 netmask 255.255.0.0 { option subnet-mask 255.255.0.0; option domain-name "opensource.com.vn"; option routers 172.16.0.1; option domain-name-servers ns1.opensource.com.vn, ns2.opensource.com.vn, dns.fpt.vn; #option netbios-name-servers 192.168.0.2; range dynamic-bootp 172.16.0.20 172.16.0.120; default-lease-time 31200; max-lease-time 62400; } Khởi động dhcp server view plaincopy to clipboardprint? 1. 2. [root @home ~]# 3. service dhcpd restart 4. Shutting down dhcpd: [ OK ] 5. Starting dhcpd: [ OK ] 6. [root @home ~]# service dhcpd restart Shutting down dhcpd: [ OK ] Starting dhcpd: [ OK ] Ở client, dùng dhclient để lấy IP: view plaincopy to clipboardprint? 1. 2. [user@client~]# dhclient eth0 3. [user@client~]# dhclient eth0 Sau đó dùng ifconfig để xem IP hiện tại của client này. Squid như là một transparent proxy: Cài đặt: view plaincopy to clipboardprint? 1. 2. #yum install squid 3. #yum install squid Mở file /etc/squid/squid.conf Thêm vào nội dung bên dưới view plaincopy to clipboardprint? 1. 2. acl manager proto cache_object 3. acl localhost src 127.0.0.1/32 4. acl localnet src 172.16.0.0/16 5. acl all src 0/0 6. http_port 172.16.0.1:1234 7. # Define safe ports to be allowed by transparent proxy 8. acl SSL_ports port 443 563 9. acl Safe_ports port 25 #smtp server 10. acl Safe_ports port 143 #Imap mail server 11. acl Safe_ports port 6789 #ssh mapped port 12. acl Safe_ports port 80 # http 13. acl Safe_ports port 21 # ftp 14. acl Safe_ports port 443 # https 15. acl Safe_ports port 1025-65535 # unregistered ports 16. acl Safe_ports port 6222 #Jabber server 17. acl Safe_ports port 993 #imap over ssl 18. acl Safe_ports port 7025 #Local mail delivery 19. acl Safe_ports port 7036 #Mysql local 20. acl Safe_ports port 7071 #Zimbra admin cosole 21. 22. # Deny yahoo messsenger 23. # Yahoo! Messenger 24. acl ym dstdomain .yahoo.com 25. acl ym dstdomain .us.il.yimg.com .msg.yahoo.com .pager.yahoo.c om 26. acl ym dstdomain .rareedge.com .ytunnelpro.com .chat.yahoo.com 27. acl ym dstdomain .voice.yahoo.com .address.yahoo.com 28. 29. acl ymregex url_regex yupdater.yim ymsgr myspaceim 30. 31. #Other protocols Yahoo!Messenger uses ?? 32. acl ym dstdomain .skype.com .imvu.com 33. 34. http_access deny ym 35. http_access deny ymregex 36. 37. acl CONNECT method CONNECT 38. http_access allow localnet 39. http_access allow manager localhost 40. http_access allow proxypass 41. http_access deny manager 42. http_access deny !Safe_ports 43. http_access deny CONNECT !SSL_ports 44. 45. http_access deny all 46. 47. icp_access deny all 48. hierarchy_stoplist cgi-bin ? 49. cache_mem 256 MB 50. cache_dir ufs /var/spool/squid 2048 16 256 51. cache_mgr hungnv@opensource.com.vn 52. cache_effective_user squid 53. cache_effective_group squid 54. 55. access_log /var/log/squid/access.log squid 56. 57. refresh_pattern ^ftp: 1440 20% 10080 58. refresh_pattern ^gopher: 1440 0% 1440 59. refresh_pattern (cgi-bin|\?) 0 0% 0 60. refresh_pattern . 0 20% 4320 61. 62. visible_hostname opensource.com.vn 63. 64. icp_port 3130 65. 66. always_direct allow all 67. 68. forwarded_for off 69. 70. coredump_dir /var/spool/squid 71. acl manager proto cache_object acl localhost src 127.0.0.1/32 acl localnet src 172.16.0.0/16 acl all src 0/0 http_port 172.16.0.1:1234 # Define safe ports to be allowed by transparent proxy acl SSL_ports port 443 563 acl Safe_ports port 25 #smtp server acl Safe_ports port 143 #Imap mail server acl Safe_ports port 6789 #ssh mapped port acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 6222 #Jabber server acl Safe_ports port 993 #imap over ssl acl Safe_ports port 7025 #Local mail delivery acl Safe_ports port 7036 #Mysql local acl Safe_ports port 7071 #Zimbra admin cosole # Deny yahoo messsenger # Yahoo! Messenger acl ym dstdomain .yahoo.com acl ym dstdomain .us.il.yimg.com .msg.yahoo.com .pager.yahoo.com acl ym dstdomain .rareedge.com .ytunnelpro.com .chat.yahoo.com acl ym dstdomain .voice.yahoo.com .address.yahoo.com acl ymregex url_regex yupdater.yim ymsgr myspaceim #Other protocols Yahoo!Messenger uses ?? acl ym dstdomain .skype.com .imvu.com http_access deny ym http_access deny ymregex acl CONNECT method CONNECT http_access allow localnet http_access allow manager localhost http_access allow proxypass http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access deny all icp_access deny all hierarchy_stoplist cgi-bin ? cache_mem 256 MB cache_dir ufs /var/spool/squid 2048 16 256 cache_mgr hungnv@opensource.com.vn cache_effective_user squid cache_effective_group squid access_log /var/log/squid/access.log squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern (cgi-bin|\?) 0 0% 0 refresh_pattern . 0 20% 4320 visible_hostname opensource.com.vn icp_port 3130 always_direct allow all forwarded_for off coredump_dir /var/spool/squid Trong đoạn cấu hình trên, ta đã cấu hình cho squid chặn các dịch vụ IM như yahoo và skype, danh sách các protocol bị chặn các bạn có thể xem ở: http://wiki.squid-cache.org/ConfigExamples/ phần instant message. Tiếp theo là phần cài đặt router. Nếu ta đã biết rõ được nhu cầu của mình cần gì và có được sơ đồ những dịch vụ cần thiết, việc thiết lập router/firewall là không hề khó. Iptables là dịch vụ có sẵn trên centos, cho nên ta không cần phải cài đặt. view plaincopy to clipboardprint? 1. #!/bin/sh 2. # Script makes a linux box acts as an Linux Router. 3. # 22-10-2009 4. # By hungnv@opensource.com.vn and some others from the internet :) 5. # 6. echo -e "\n\n\n Installing iptables script " 7. # Name of Internal Interface 8. LANIF="eth1" 9. # Enter Lan Network 10. IPLAN="172.16.0.0/16" 11. # ipaddress of internal interface 12. LANIP="172.16.0.1/16" 13. # Name of External Interface 14. WANIF="eth0" 15. # ipaddress of external interface 16. EXTIP="192.168.1.2" 17. echo "Preparing " 18. /sbin/depmod -a 19. /sbin/modprobe ip_tables 20. /sbin/modprobe ip_conntrack 21. /sbin/modprobe ip_conntrack_ftp 22. /sbin/modprobe ip_conntrack_irc 23. /sbin/modprobe iptable_nat 24. /sbin/modprobe ip_nat_ftp 25. /sbin/modprobe ip_nat_irc 26. 27. echo " Enabling IP forwarding " 28. echo "1" > /proc/sys/net/ipv4/ip_forward 29. echo "1" > /proc/sys/net/ipv4/ip_dynaddr 30. 31. echo " External interface: $EXTIF" 32. echo " External interface IP address is: $EXTIP" 33. echo " Loading firewall server rules " 34. ALL="0.0.0.0/0" 35. # Set default policy to DROP 36. iptables -P INPUT DROP 37. iptables -F INPUT 38. iptables -P OUTPUT DROP 39. iptables -F OUTPUT 40. iptables -P FORWARD DROP 41. iptables -F FORWARD 42. iptables -F -t nat [...]... policy to DROP iptables -P INPUT DROP iptables -F INPUT iptables -P OUTPUT DROP iptables -F OUTPUT iptables -P FORWARD DROP iptables -F FORWARD iptables -F -t nat # Flush the user chain if it exists if [ " `iptables -L | grep drop-and-log-it`" ]; then iptables -F drop-and-log-it fi # Delete all User-specified chains iptables -X # Reset all IPTABLES counters iptables -Z # Creating a DROP chain iptables -N... REDIRECT to-port $SQUID_ PORT echo -e " Setting up firewall complete\n\n" Lưu script trên với tên tùy ý, cho tùy chọn execute ( +x ) và đặt vào /etc/rc.local để script chạy lúc khởi động, Lúc này bạn test thử truy cập internet và thêm vào các phần khác theo nhu cầu riêng của mình Xin lưu ý rằng các script cũng như lệnh nói đến trong bài viết này chỉ nhằm mục đích tạo ra một dhcp server, proxy và firewall...43 # Flush the user chain if it exists 44 if [ " `iptables -L | grep drop-and-log-it`" ]; then 45 iptables -F drop-and-log-it 46 fi 47 # Delete all User-specified chains 48 iptables -X 49 50 # Reset all IPTABLES counters 51 iptables -Z 52 53 # Creating a DROP chain 54 iptables -N drop-and-log-it 55 iptables -A drop-and-log-it -j LOG log-level info 56 iptables -A drop-and-log-it -j REJECT 57 echo -e... and logged iptables -A FORWARD -j drop-and-log-it # Enable SNAT (MASQUERADE) functionality on $EXTIF iptables -t nat -A POSTROUTING -o $EXTIF -j SNAT to $EXTIP ############################################################### ######## # For Squid Server ### # INTIP="172.16.0.1" iptables -t nat -A PREROUTING -i $INTIF protocol tcp dport 80 -j DNAT to $INTIP: $SQUID_ PORT # if it is same system iptables. .. $INTIP: $SQUID_ PORT 108 # if it is same system 109 iptables -t nat -A PREROUTING -i $EXTIF protocol tcp -dport 80 -j REDIRECT to-port $SQUID_ PORT 110 111 echo -e " Setting up firewall complete\n\n" 112 #!/bin/sh # Script makes a linux box acts as an Linux Router # 22-10-2009 # By hungnv@opensource.com.vn and some others from the internet :) # echo -e "\n\n\n Installing iptables script " # Name of Internal Interface... logged 97 iptables -A FORWARD -j drop-and-log-it 98 99 # Enable SNAT (MASQUERADE) functionality on $EXTIF 100 iptables -t nat -A POSTROUTING -o $EXTIF -j SNAT -to $EXTIP 101 102 ##################################################### ################## 103 # For Squid Server 104 ### 105 # 106 INTIP="172.16.0.1" 107 iptables -t nat -A PREROUTING -i $INTIF protocol tcp -dport 80 -j DNAT to $INTIP: $SQUID_ PORT... drop-and-log-it iptables -A drop-and-log-it -j LOG log-level info iptables -A drop-and-log-it -j REJECT echo -e " - Loading INPUT rulesets" # loopback interfaces are valid iptables -A INPUT -i lo -s $ALL -d $ALL -j ACCEPT # local interface, local machines, going anywhere is valid iptables -A INPUT -i $INTIF -s $INTNET -d $ALL -j ACCEPT # remote interface, claiming to be local machines, IP spoofing, get lost iptables. .. 60 iptables -A INPUT -i lo -s $ALL -d $ALL -j ACCEPT 61 62 # local interface, local machines, going anywhere is valid 63 iptables -A INPUT -i $INTIF -s $INTNET -d $ALL -j ACCEPT 64 # remote interface, claiming to be local machines, IP spoofing, get lost 65 iptables -A INPUT -i $EXTIF -s $INTNET -d $ALL -j drop-andlog-it 66 # remote interface, any source, going to permanent PPP address is valid 67 iptables. .. loopback interface is valid iptables -A OUTPUT -o lo -s $ALL -d $ALL -j ACCEPT # local interfaces, any source going to local net is valid iptables -A OUTPUT -o $INTIF -s $EXTIP -d $INTNET -j ACCEPT # local interface, any source going to local net is valid iptables -A OUTPUT -o $INTIF -s $INTIP -d $INTNET -j ACCEPT # outgoing to local net on remote interface, stuffed routing, deny iptables -A OUTPUT -o $EXTIF... # anything else outgoing on remote interface is valid iptables -A OUTPUT -o $EXTIF -s $EXTIP -d $ALL -j ACCEPT # Catch all rule, all other outgoing is denied and logged iptables -A OUTPUT -s $ALL -d $ALL -j drop-and-log-it echo -e " - Loading FORWARD rulesets" iptables -A FORWARD -i $EXTIF -o $INTIF -m state state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT # Catch . Xây dựng Linux router và proxy với iptables + squid Linux router là một hệ thống đứng giữa Internal network và Internet hoặc phân cách một network và một network khác. Linux router là. này ta xây dựng router và squid proxy để thực hiện các yêu cầu đưa ra. 1. DHCP server: Đây là dịch vụ đơn giản và dễ dàng nhất trong bài viết này. Gói cài đặt được cung cấp sẵn + một vài thay. ngoài vào, tường lửa là một nhu cầu thiết yếu và tối cần thiết. Các sản phẩm router phần cứng thường rất mắc và cần sự hỗ trợ tương đối từ phía cung cấp, trong khi việc xây dựng riêng một Linux

Ngày đăng: 14/08/2014, 04:21

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan