linux squid代理 成功 iptables NAT 透明不成功 (问题解决了加分50至100)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux squid代理 成功 iptables NAT 透明不成功 (问题解决了加分50至100)相关的知识,希望对你有一定的参考价值。
我用的是redhat 5.3 用squid代理在浏览器上设代理IP和端口成功,用的是最简方法,但是用iptables NAT来实现透明代理就不成功,搞了快一个月了,要疯了
本来的话直接代理用代理填上IP和端口也不行,后来在iptables上添加了一个3128端口就可以了,但是透明不行
我该做的都做了,iptables 这玩意怎么这么麻烦,还是哪步错了
squid里面已经用了transparent
http_port 3128 transparent
再强调一次,指定IP和端口是可以代理的,就是不能透明代理
echo "1">/proc/sys/net/ipv4/ip_forward//这个已经写入了,不用每开机执行了,
eth1是内网
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp –dport 80 -j REDIRECT –to-ports 3128
eth0是外网
iptables -t nat -A POSTROUTING -o eth0 -j --to 192.168.5.4
上面两行iptables也写入保存了
很多资料说要加载模块
在/etc/rc.local下加入如下几行:
#加载iptables的相关模块:
modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp
或
在/etc/rc.d/目录下用touch命令建立firewall文件,执行chmod u+x firewall以改变文件属性,编辑
/etc/rc.d/rc.local文件,在末尾加上/etc/rc.d/firewall以确保开机时能自动运行该脚本.
firewall内容为:
modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp
上面两种加载模块都试过,还是不行,肯定是iptables在作怪,不知道是哪个地方在作怪
一楼的,这跟交换机没关系吧,我是做代理,举个例子,服务器两块网卡,eth0外网接光纤,eth1接到交换机上,给内网共享
三楼的,squid是2.6以前的版本,至少iptables这条规则,,这个我已经弄了
二楼的说的是什么意思,网上很多资料一步步很详细,都没提到这些
试了下,把原来的iptables清除了,就OK了
iptables -F
#清除预定表filter中,使用者自定链中的规则
iptables -X
#清除预定表mangle中,所有规则链中的规则
iptables -F -t mangle
#清除预定表mangle中,使用者自定链中的规则
iptables -X -t mangle
#清除nat表中的规则
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat
filter(默认,不用-t参数指定就是此表),预设input链,output链,forward链;
net表,预设prerouting,output,postouting链;
mangle表,预设prerouting链,output链。
用户可以自定义表,也可以在预设表中自定义链。
你在这些研究下,具体的配置我也忘了。太久没玩了 参考技术A squid:
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
firewall:
iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth1 -j REDIRECT --to-ports 3128
补充回答:
上面的配置是以前学习时候用RHEL4配成功过的,防火墙确实有这些表,学习防火墙建议你去找本novell的《linux firewalls》看看,我现在不用RHEL了,ubuntu比RHEL系列的好用得多,公司服务器都是ubuntu系统。 参考技术B 有一个关键问题,你的两个网卡是否在一个网络设备上,例如一个hub上。
另外就是你的网络与拓扑没有描述清楚,所以不知道你希望怎样。
就提示你这么多吧,很简单的。
自动安装squid+iptables上网代理及上网行为管理脚本。
#本节内容为配置iptables 与 squid ,并以文件来获取规则,以方便管理规则。 #接上一个脚本内容,此部分内容需根据需求更改部分内容。 #停止squid服务 systemctl enable squid &> /dev/null systemctl stop squid #编辑squid配置文件 squid_conf_file=/etc/squid/squid.conf mv $squid_conf_file $squid_conf_file.bk cat > $squid_conf_file << EOF acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/16 # RFC1918 possible internal network acl localnet src fc00::/7 # RFC 4193 local private network range acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports 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 #visible_hostname http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager acl allow_all src "/etc/squid/rules/allow_all.squid" http_access allow allow_all acl files urlpath_regex -i \.mp3$ \.avi$ \.exe$ \.rar$ \.zip$ \.mp4$ \.7z$ \.rm$ \.rmvb$ \.qsv$ \.mov$ \.msi$ \.wav$ \.torrent$ \.cab$ \.com$ \.bat$ \.gz$ \.bz2$ \.sys$ \.swf$ http_access deny files acl only_web src "/etc/squid/rules/allow_only_web.squid" http_access allow only_web http_access allow localhost http_access deny all #http_port 3128 transparent http_port 3129 cache_dir aufs /var/spool/squid 10240 16 256 cache_mem 1024 MB maximum_object_size 8 MB minimum_object_size 0 kB maximum_object_size_in_memory 4096 kB acl nocache urlpath_regex -i \.asp$ \.jsp$ no_cache deny nocache acl nogov urlpath_regex -i \.gov\.cn no_cache deny nogov ipcache_size 65535 fqdncache_size 65535 coredump_dir /var/spool/squid cache_log /var/log/squid/cache.log access_log /var/log/squid/access.log cache_store_log /var/log/squid/store.log cache_store_log none logfile_rotate 7 cache_swap_low 85 cache_swap_high 95 error_directory /usr/share/squid/errors/zh-cn cache_mgr [email protected] refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i \.(jpg|jpeg|gif|png|xml|html|htm|css|js|ico) 1440 90% 2880 refresh_pattern -i \.(mp3|mp4|swf|rar|zip) 1440 20% 10080 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320 EOF sed -i ‘s/#visible_hostname/visible_hostname ‘${host_name}‘/g‘ ${squid_conf_file} sed -i ‘s/#http_port 3128 transparent/http_port ‘${lan_ip}‘:3128 transparent/g‘ ${squid_conf_file} #configrue iptables #将以下内容复制出来,重新编写变量,用来日常网络权限控制! #日常管理脚本策略根据自身要求自行定义。 #-------copy begin--------- modprobe ip_conntrack_ftp modprobe ip_nat_ftp modprobe ip_conntrack echo "1" > /proc/sys/net/ipv4/tcp_syncookies echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo "1" > /proc/sys/net/ipv4/ip_forward read -p "input manager host ip address : " manager_ip #初始脚本时所定义变量,日常管理脚本不需要。 #------管理脚本,自定义变量------- #lan= #lan_ip= #lan_dns1= #lan_dns2= #lan_net= #manager_ip= #wan= #wan_ip= iptables -F iptables -X iptables -Z iptables -F -t nat iptables -X -t nat iptables -Z -t nat iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -d ${lan_ip} -p tcp --dport 3128 -j ACCEPT iptables -A INPUT -s ${manager_ip} -i ${lan} -p tcp --dport 22 -j ACCEPT iptables -A INPUT -i lo -j ACCEPT AICMP="0 3 3/4 4 11 12 18" for TYICMP in ${AICMP} ; do iptables -A INPUT -i ${lan} -p icmp --icmp-type ${TYICMP} -j ACCEPT done iptables -N syn-flood iptables -A INPUT -p tcp --syn -j syn-flood iptables -I syn-flood -p tcp -m limit --limit 1/s --limit-burst 3 -j RETURN iptables -A syn-flood -j DROP iptables -I OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -s ${wan_ip} -p tcp -m multiport --dports 80,443 -j ACCEPT iptables -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -s ${lan_dns1} -p udp --dport 53 -j ACCEPT iptables -A FORWARD -s ${lan_dns2} -p udp --dport 53 -j ACCEPT # redirect and SNAT iptables -t nat -A PREROUTING -i ${lan} -p tcp --dport 80 -j REDIRECT --to-ports 3128 read -p "input super subnet! exap 192.168.0.0/22 " lan_sup_subnet iptables -t nat -A POSTROUTING -s ${lan_sup_subnet} -o ${wan} -j SNAT --to-source ${wan_ip} #自定义规则,默认规则为拒绝,80端口的权限由 squid 管理,不需要添加。 #本通过读取文件来配置防火墙规则,如,规则文件放在/usr/local/iptabes中。 #规则文件以IP开头,中间以空格分开,后接备注名称,格式如:IP地址 使用人 #exap: 允许所有端口通过。 if [ ! -d /usr/local/iptables ] ; then mkdir /usr/local/iptables fi if [ ! -d /etc/squid/rules ] ; then mkdir /etc/squid/rules fi echo "#允许所有端口通过" > /usr/local/iptables/allow_all.rule #管理脚本需自定义文件,不需要此行 echo "$manager_ip it" >> /usr/local/iptables/allow_all.rule #添加IT ALLOW_ALL_RULE=`grep -v "#" /usr/local/iptables/allow_all.rule | awk ‘{print $1}‘` for ALLOW_ALL in ${ALLOW_ALL_RULE} ; do iptables -A FORWARD -s ${ALLOW_ALL} -o ${wan} -j ACCEPT done #同步 squid 配置文件 echo "用户没有限制" > /etc/squid/rules/allow_all.squid echo $ALLOW_ALL_RULE | awk -v RS=" " ‘{print $0}‘ >> /etc/squid/rules/allow_all.squid #exap: 只允许443,80 通过,但限制 mail关键字,如限制 QQ邮箱。但允许服务器8000端口中的mail关键字。 echo "#只允许443,80端口通过。并限制“Mmail”,但允许服务器8000端口中的mail关键字。 " >> /usr/local/iptables/allow_only_web.rule #管理脚本不需要此行 echo "$manager_ip it" >> /usr/local/iptables/allow_only_web.rule ALLOW_ONLY_WEB_RULE=`grep -v "#" /usr/local/iptables/allow_only_web.rule | awk ‘{print $1}‘` for ALLOW_ONLY_WEB in ${ALLOW_ONLY_WEB_RULE} ; do iptables -A FORWARD -s ${ALLOW_ONLY_WEB} -o ${wan} -j ACCEPT iptables -I FORWARD -d ${ALLOW_ONLY_WEB} -i ${wan} -m string --algo bm --from 40 --to 450 --hex-string "mail" -p tcp ! --sport 8000 -j DROP done #同步 squid 配置文件 echo "允许443,80 通过,但限制 mail关键字" > /etc/squid/rules/allow_only_web.squid echo $ALLOW_ONLY_WEB_RULE | awk -v RS=" " ‘{print $0}‘ >> /etc/squid/rules/allow_only_web.squid #初始化squid。 sleep 1 squid -z #管理脚本不需要此行 sleep 1 systemctl restart squid.service sleep 5 /sbin/squid -k reconfigure #--------copy end ------------- #日常管理中只需更改/usr/local/iptabes中的规则文件,再运行管理脚本退可! #修改规则时,需在管理脚本与squid配置文件中加入相应规则退可。 #编写自启动脚本。 #cat > /usr/lib/systemd/system/ipt.rule.service << EOF #[Unit] #Description=iptables and squid manage script #After=syslog.target network.target nss-lookup.target #[Service] #Type=oneshot #ExecStart=/usr/local/iptables/ipt.rule.sh #[Install] #WantedBy=multi-user.target #EOF #systemctl enable ipt.rule.service
本文出自 “执着” 博客,请务必保留此出处http://charhai.blog.51cto.com/440887/1879853
以上是关于linux squid代理 成功 iptables NAT 透明不成功 (问题解决了加分50至100)的主要内容,如果未能解决你的问题,请参考以下文章