欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

squid+iptables建立internet网关

程序员文章站 2022-05-20 14:35:50
...

系统环境: RedHat 7.2 squid (http://squid-cache.org/) 1. 系统设置: 运行:setup 选择server 默认情况下iptables 和 ipchains都已经被选择了。请把ipchains去掉,只让iptables运行 2. 安装squid 建议从RedHat的安装光盘上安装 mount /mnt/cdrom cd /mnt/cd

系统环境:

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