this is a extra element for clear the floated element
squid+iptables建立internet网关
  • 12/31
  • 2008
iptables | Linux 3005 次查看
  系统环境:

  RedHat 7.2

  squid (http://squid-cache.org/)

  1. 系统设置:

  运行:setup

  选择server

  默认情况下iptables 和 ipchains都已经被选择了。请把ipchains去掉,只让iptables运行

  2. 安装squid

  建议从RedHat的安装光盘上安装

  mount /mnt/cdrom

  cd /mnt/cdrom/RedHat/RPMS/

  rpm -ivh squid-2.4.2.STABLE2-8.i386.rpm

  启动squid:/etc/rc.d/init.d/squid start

  ***一般情况下默认安装的squid不用更改squid.conf文件就可以工作。

  3. 为配合iptables做透明网关更改squid.conf文件

  vi /etc/squid/squid.conf

  更改以下行:

  http_port 3128

  httpd_accel_host virtual

  httpd_accel_port 80

  httpd_accel_with_proxy on

  httpd_accel_uses_host_header on

  4. iptables设置:

  建议从这个脚本设置iptables规则。见附件。

  ./iptables

  然后执行:

  service iptables save

  这样系统就会把刚才执行脚本的命令保存在 /etc/sysconfig/iptables里。下次系统就会

  自动加载这些规则

  如果你用这个脚本在你的系统上无法执行,可能是文件没有执行权限。

  chmod a+x iptables使之可执行。(不要把这个文件拷贝到/etc/rc.d/init.d/下执行。)

  #!/bin/sh

  INET_IP="222.222.222.1" #代理服务器的internet ip地址

  INET_IFACE="eth0" #代理服务的网卡设备

  LAN_IP="192.168.100.4" #代理服务器的内部地址

  LAN_IP_RANGE="192.168.100.0/16" #局域网的ip网段

  LAN_BCAST_ADRESS="192.168.100.255" #局域网的广播地址

  LAN_IFACE="eth1" 代理服务器内部网卡设备

  LO_IFACE="lo"

  LO_IP="127.0.0.1"

  #

  # IPTables Configuration.

  #

  IPTABLES="/sbin/iptables"

  ###########################################################################

  #

  # 2. Module loading.

  #

  #

  # Needed to initially load modules

  #

  /sbin/depmod -a

  #

  # 2.1 Required modules

  #加载需要的模块

  /sbin/modprobe ip_tables

  /sbin/modprobe ip_conntrack

  /sbin/modprobe iptable_filter

  /sbin/modprobe iptable_mangle

  /sbin/modprobe iptable_nat

  /sbin/modprobe ipt_LOG

  /sbin/modprobe ipt_limit

  /sbin/modprobe ipt_state

  #

  # 2.2 Non-Required modules

  #

  #/sbin/modprobe ipt_owner

  #/sbin/modprobe ipt_REJECT

  #/sbin/modprobe ipt_MASQUERADE

  #/sbin/modprobe ip_conntrack_ftp

  #/sbin/modprobe ip_conntrack_irc

  ###########################################################################

  #

  # 3. /proc set up.

  #

  #

  # 3.1 Required proc configuration

  #设置ip forward

  echo "1" > /proc/sys/net/ipv4/ip_forward

  #

  # 3.2 Non-Required proc configuration

  #

  echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

  #echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp

  #echo "1" > /proc/sys/net/ipv4/ip_dynaddr

  ###########################################################################

  #

  # 4. rules set up.

  #

  ######

  # 4.1 Filter table

  #

  #

  # 4.1.1 Set policies

  #

  $IPTABLES -P INPUT DROP

  $IPTABLES -P OUTPUT DROP

  $IPTABLES -P FORWARD DROP

  #

  # 4.1.2 Create userspecified chains

  #

  #

  # Create chain for bad tcp packets

  #

  $IPTABLES -N bad_tcp_packets

  #

  # Create separate chains for ICMP, TCP and UDP to traverse

  #

  $IPTABLES -N allowed

  $IPTABLES -N icmp_packets

  $IPTABLES -N tcp_packets

  $IPTABLES -N udpincoming_packets

  #

  # 4.1.3 Create content in userspecified chains

  #

  #

  # bad_tcp_packets chain

  #

  $IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG

  --log-prefix "New not syn:"

  $IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

  #

  # allowed chain

  #

  $IPTABLES -A allowed -p TCP --syn -j ACCEPT

  $IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT

  $IPTABLES -A allowed -p TCP -j DROP

  #

  # ICMP rules

  #

  # Changed rules totally

  $IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT

  $IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

  #

  # TCP rules

  #

  $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed

  $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed

  $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed

  $IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 113 -j allowed

  #

  # UDP ports

  #

  # nondocumented commenting out of these rules

  $IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 53 -j ACCEPT

  #$IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 123 -j ACCEPT

  $IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 2074 -j ACCEPT

  $IPTABLES -A udpincoming_packets -p UDP -s 0/0 --source-port 4000 -j DROP #禁止客户使用OICQ

  #

  # 4.1.4 INPUT chain

  #

  #

  # Bad TCP packets we don't want.

  #

  $IPTABLES -A INPUT -p tcp -j bad_tcp_packets

  #

  # Rules for incoming packets from the internet.

  #

  $IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets

  $IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets

  $IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udpincoming_packets

  #

  # Rules for special networks not part of the Internet

  #

  $IPTABLES -A INPUT -p ALL -i $LAN_IFACE -d $LAN_BCAST_ADRESS -j ACCEPT

  $IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT

  $IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT

  $IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT

  $IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT

  $IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED

  -j ACCEPT

  #

  # Log weird packets that don't match the above.

  #

  $IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG

  --log-level DEBUG --log-prefix "IPT INPUT packet died: "

  #

  # 4.1.5 FORWARD chain

  #

  #

  # Bad TCP packets we don't want

  #

  $IPTABLES -A FORWARD -p tcp -j bad_tcp_packets

  #

  # Accept the packets we actually want to forward

  #

  $IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT

  $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

  #

  # Log weird packets that don't match the above.

  #

  $IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG

  --log-level DEBUG --log-prefix "IPT FORWARD packet died: "

  #

  # 4.1.6 OUTPUT chain

  #

  #

  # Bad TCP packets we don't want.

  #

  $IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets

  #

  # Special OUTPUT rules to decide which IP's to allow.

  #

  $IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT

  $IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT

  $IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT

  #

  # Log weird packets that don't match the above.

  #

  $IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG

  --log-level DEBUG --log-prefix "IPT OUTPUT packet died: "

  ######

  # 4.2 nat table

  #

  #

  # 4.2.1 Set policies

  #

  #

  # 4.2.2 Create user specified chains

  #

  #

  # 4.2.3 Create content in user specified chains

  #

  #

  # 4.2.4 PREROUTING chain

  #

  $IPTABLES -t nat -I PREROUTING -m mac --mac-source 00:50:4c:3b:e6:fb -j DROP #禁止网卡的MAC为

  #00:50:4c:3b:e6:fb访问internet

  #

  # 4.2.5 POSTROUTING chain

  #

  #$IPTABLES -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

  #

  $IPTABLES -t nat -A PREROUTING -s 192.168.100.0/24 -d 0/0 -p tcp --dport 80 -j DNAT --to 192.168.100.4:3128

  #把客户的http的请求转发到squid的3128端口上(透明代理)

  # Enable simple IP Forwarding and Network Address Translation

  #

  $IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP

  #

  # 4.2.6 OUTPUT chain

  #

  ######

  # 4.3 mangle table

  #

  #

  # 4.3.1 Set policies

  #

  #

  # 4.3.2 Create user specified chains

  #

  #

  # 4.3.3 Create content in user specified chains

  #

  #

  # 4.3.4 PREROUTING chain

  #

  $IPTABLES -t nat -A PREROUTING -s 0/0 -d 0/0 -p udp --destination-port 8000 -j DROP

  #禁止客户访问OICQ服务器

  文章选项: 友善列印 将这篇文章放置于备忘录中,待有空时回覆 通知板主

  linux

  注册会员

  Reged: 11/11/02

  篇文章: 17

  Re: squid+iptables建立internet网关 [re: linux]

  11/12/02 03:28 PM ()

  编辑文章 编辑 回应这篇文章 回覆

  # NETWORK OPTIONS

  # -----------------------------------------------------------------------------

  #http_port 3128

  #icp_port 3130

  #htcp_port 4827

  #mcast_groups 239.128.16.128

  #

  #tcp_outgoing_address 0.0.0.0

  #udp_incoming_address 0.0.0.0

  #udp_outgoing_address 0.0.0.0

  #cache_peer hostname type 3128 3130

  #icp_query_timeout 0

  #maximum_icp_query_timeout 2000

  #mcast_icp_query_timeout 2000

  #dead_peer_timeout 10 seconds

  #hierarchy_stoplist cgi-bin ?

  #acl QUERY urlpath_regex cgi-bin ?

  #no_cache deny QUERY

  cache_mem 16 MB

  #cache_swap_low 90

  #cache_swap_high 95

  #maximum_object_size 4096 KB

  #ipcache_size 1024

  #ipcache_low 90

  #ipcache_high 95

  # TAG: fqdncache_size (number of entries)

  # Maximum number of FQDN cache entries.

  #fqdncache_size 1024

  #

  cache_dir ufs /var/spool/squid 100 16 256

  cache_access_log /var/log/squid/access.log

  #cache_log /var/log/squid/cache.log

  #

  #cache_store_log /var/log/squid/store.log

  #

  #cache_swap_log

  #emulate_httpd_log off

  #mime_table /etc/squid/mime.conf

  #log_mime_hdrs off

  #useragent_log none

  #pid_filename /var/run/squid.pid

  #debug_options ALL,1

  #log_fqdn off

  #client_netmask 255.255.255.255

  #ftp_user Squid@

  #ftp_list_width 32

  #ftp_passive on

  #cache_dns_program /usr/lib/squid/dnsserver

  #dns_children 5

  #dns_defnames off

  #dns_nameservers none

  #unlinkd_program /usr/lib/squid/unlinkd

  #pinger_program /usr/lib/squid/pinger

  #redirect_program none

  #redirect_children 5

  #redirect_rewrites_host_header on

  #authenticate_children 5

  #authenticate_ttl 3600

  #authenticate_ip_ttl 0

  #wais_relay_host localhost

  #wais_relay_port 8000

  #request_header_max_size 10 KB

  #

  #request_body_max_size 1 MB

  #reply_body_max_size 0

  #Default:

  refresh_pattern ^ftp: 1440 20% 10080

  refresh_pattern ^gopher: 1440 0% 1440

  refresh_pattern . 0 20% 4320

  #replacement_policy LFUDA

  #

  #reference_age 1 year

  #quick_abort_min 16 KB

  #quick_abort_max 16 KB

  #quick_abort_pct 95

  #negative_ttl 5 minutes

  #positive_dns_ttl 6 hours

  #negative_dns_ttl 5 minutes

  #range_offset_limit 0 KB

  #connect_timeout 120 seconds

  #peer_connect_timeout 30 seconds

  #siteselect_timeout 4 seconds

  #read_timeout 15 minutes

  #request_timeout 30 seconds

  #client_lifetime 1 day

  #half_closed_clients on

  #pconn_timeout 120 seconds

  #ident_timeout 10 seconds

  #shutdown_lifetime 30 seconds

  # ACCESS CONTROLS

  # -----------------------------------------------------------------------------

  #Examples:

  #acl myexample dst_as 1241

  #acl password proxy_auth REQUIRED

  #

  #Defaults:

  acl all src 0.0.0.0/0.0.0.0

  acl manager proto cache_object

  acl localhost src 127.0.0.1/255.255.255.255

  acl SSL_ports port 443 563

  acl Safe_ports port 80 21 443 563 70 210 1025-65535

  acl Safe_ports port 280 # http-mgmt

  acl Safe_ports port 488 # gss-http

  acl Safe_ports port 591 # filemaker

  acl Safe_ports port 777 # multiling http

  acl CONNECT method CONNECT

  acl chat url_regex -i chat sex oicq

  http_access deny chat

  #禁止访问url里带chat,sex,oicq词的网站

  # TAG: http_access

  #Default configuration:

  #http_access allow manager localhost

  #http_access deny manager

  #http_access deny !Safe_ports

  #http_access deny CONNECT !SSL_ports

  #

  # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

  #

  http_access allow lan

  # TAG: icp_access

  # Reply to all ICP queries we receive

  #

  icp_access allow all

  miss_access allow all

  #proxy_auth_realm Squid proxy-caching web server

  #ident_lookup_access deny all

  #

  cache_mgr master@cctk.net

  cache_effective_user squid

  cache_effective_group squid

  #visible_hostname www-cache.foo.org

  #unique_hostname www-cache1.foo.org

  # TAG: hostname_aliases

  # A list of other DNS names that your cache has.

  #announce_period 1 day

  #announce_host tracker.ircache.net

  #announce_port 3131

  # HTTPD-ACCELERATOR OPTIONS

  # -----------------------------------------------------------------------------

  httpd_accel_host 192.168.10.251

  httpd_accel_port 80

  httpd_accel_with_proxy on

  httpd_accel_uses_host_header on

  #dns_testnames netscape.com internic.net nlanr.net microsoft.com

  #logfile_rotate 0

  #append_domain .yourdomain.com

  #tcp_recv_bufsize 0 bytes

  #err_html_text

  #memory_pools on

  #forwarded_for on

  #log_icp_queries on

  #icp_hit_stale off

  #minimum_direct_hops 4

  #cachemgr_passwd secret shutdown

  #cachemgr_passwd lesssssssecret info stats/objects

  #cachemgr_passwd disable all

  #store_avg_object_size 13 KB

  #store_objects_per_bucket 50

  #client_db on

  #

  #netdb_low 900

  #netdb_high 1000

  #netdb_ping_period 5 minutes

  #query_icmp off

  #test_reachability off

  #buffered_logs off

  #reload_into_ims off

  #anonymize_headers

  #fake_user_agent none

  #error_directory /etc/squid/errors

  #minimum_retry_timeout 5 seconds

  #maximum_single_addr_tries 3

  #snmp_port 3401

  #Example:

  #snmp_access allow snmppublic localhost

  #snmp_access deny all

  #snmp_incoming_address 0.0.0.0

  #snmp_outgoing_address 0.0.0.0

  #wccp_router 0.0.0.0

  #wccp_version 4

  #wccp_incoming_address 0.0.0.0

  #wccp_outgoing_address 0.0.0.0

  #delay_pools 0

  #delay_pools 2 # 2 delay pools

  #delay_class 1 2 # pool 1 is a class 2 pool

  #delay_class 2 3 # pool 2 is a class 3 pool

  #

  #

  #delay_access 1 allow some_big_clients

  #delay_access 1 deny all

  #delay_access 2 allow lotsa_little_clients

  #delay_access 2 deny all

  #delay_parameters 1 -1/-1 8000/8000

  #delay_parameters 2 32000/32000 8000/8000 600/64000

  #delay_initial_bucket_level 50

  #incoming_icp_average 6

  #incoming_http_average 4

  #min_icp_poll_cnt 8

  #min_http_poll_cnt 8

  #uri_whitespace strip

  #acl buggy_server url_regex ^http://....

  #broken_posts allow buggy_server

  nderstand what you are doing.

  #prefer_direct on

  #ignore_unknown_nameservers on

  #digest_generation on

  #digest_bits_per_entry 5

  #digest_rewrite_period 1 hour

  #digest_swapout_chunk_size 4096 bytes

  #digest_rebuild_chunk_percentage 10

  #client_persistent_connections on

  #server_persistent_connections on