微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!
一个经典实用的iptables shell脚本
PS:这个iptables脚本不错,很实用,根据实际应用改一下就可以自己用。分享出来,供大家来参考。原作者佚名。源代码如下:#!/bin/sh#modprobe ipt_MASQUERADEmodprobe ip_conntrack_ftpmodprobe ip_nat_ftpiptables -Fiptables -t nat -Fiptables -Xiptables -t nat -X###########################INPUT键###################################iptables -P INPUT DROPiptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -p tcp -m multiport --dports 110,80,25 -j ACCEPTiptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 139 -j ACCEPT#允许内网samba,smtp,pop3,连接iptables -A INPUT -i eth1 -p udp -m multiport --dports 53 -j ACCEPT#允许dns连接iptables -A INPUT -p tcp --dport 1723 -j ACCEPTiptables -A INPUT -p gre -j ACCEPT#允许外网vpn连接iptables -A INPUT -s 192.186.0.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -i ppp0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP#为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃iptables -A INPUT -s 192.186.0.0/24 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP#为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃iptables -A INPUT -p icmp -m limit --limit 3/s -j LOG --log-level INFO --log-prefix "ICMP packet IN: "iptables -A INPUT -p icmp -j DROP#禁止icmp通信-ping 不通iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE#内网转发iptables -N syn-floodiptables -A INPUT -p tcp --syn -j syn-floodiptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURNiptables -A syn-flood -j REJECT#防止SYN攻击 轻量#######################FORWARD链###########################iptables -P FORWARD DROPiptables -A FORWARD -p tcp -s 192.168.0.0/24 -m multiport --dports 80,110,21,25,1723 -j ACCEPTiptables -A FORWARD -p udp -s 192.168.0.0/24 --dport 53 -j ACCEPTiptables -A FORWARD -p gre -s 192.168.0.0/24 -j ACCEPTiptables -A FORWARD -p icmp -s 192.168.0.0/24 -j ACCEPT#允许 vpn客户走vpn网络连接外网iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -mtime --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的8:00-12:30禁止qq通信iptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -mtime --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的8:00-12:30禁止qq通信iptables -I FORWARD -p udp --dport 53 -m string --string "tencent" -mtime --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROPiptables -I FORWARD -p udp --dport 53 -m string --string "TENCENT" -mtime --timestart 13:30 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的13:30-20:30禁止QQ通信iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com" -mtime --timestart 8:15 --timestop 12:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的8:00-12:30禁止qq网页iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com" -mtime --timestart 13:00 --timestop 20:30 --days Mon,Tue,Wed,Thu,Fri,Sat -j DROP#星期一到星期六的13:30-20:30禁止QQ网页iptables -I FORWARD -s 192.168.0.0/24 -m string --string "ay2000.net" -j DROPiptables -I FORWARD -d 192.168.0.0/24 -m string --string "宽频影院" -j DROPiptables -I FORWARD -s 192.168.0.0/24 -m string --string "色情" -j DROPiptables -I FORWARD -p tcp --sport 80 -m string --string "广告" -j DROP#禁止ay2000.net,宽频影院,色情,广告网页连接 !但中文 不是很理想iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROPiptables -A FORWARD -p tcp -m ipp2p --ares -j DROPiptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP#禁止BT连接iptables -A FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 24#######################################################################sysctl -w net.ipv4.ip_forward=1 &>/dev/null#打开转发#######################################################################sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null#打开 syncookie (轻量级预防 DOS 攻击)sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=3800 &>/dev/null#设置默认 TCP 连接痴呆时长为 3800 秒(此选项可以大大降低连接数)sysctl -w net.ipv4.ip_conntrack_max=300000 &>/dev/null#设置支持最大连接树为 30W(这个根据你的内存和 iptables 版本来,每个 connection 需要 300 多个字节)#######################################################################iptables -I INPUT -s 192.168.0.50 -j ACCEPTiptables -I FORWARD -s 192.168.0.50 -j ACCEPT#192.168.0.50是我的机子,全部放行!############################完#########################################
运维人员20道必会iptables面试题
1、详述iptales工作流程以及规则过滤顺序?iptables过滤的规则顺序是由上至下,若出现相同的匹配规则则遵循由上至下的顺序 2、iptables有几个表以及每个表有几个链?Iptables有四表五链 3、iptables的几个表以及每个表对应链的作用,对应企业应用场景?    filter:INPUT  作用:for  packets destined  to  local  sockets                FORWARD 作用:for packets  being  routed  through  the box                OUTPUT 作用:for locally-generated packets    nat:PREROUTING 作用:for altering packets  as  soon as they come in            OUTPUT     作用:for altering locally-gener- ated packets before routing            POSTROUTING 作用:for altering packets as they are about to go out    mangle :PRE-ROUTING  (for  altering incoming packets before rout-ing) and OUTPUT (for altering locally-generated pack-ets  before  routing).   INPUT  (forpackets  coming  into  the  box itself), FORWARD (foraltering packets being routed through the  box),  and POSTROUTING  (for  altering packets as they are about to go out). 4、画图讲解iptables包过滤经过不同表和链简易流程图并阐述。5、请写出查看iptables当前所有规则的命令。     iptables -L -n --line-numbers 6、禁止来自10.0.0.188 ip地址访问80端口的请求     iptables -A INPUT -p tcp --dport 80 -j DROP 7、如何使在命令行执行的iptables规则永久生效?    /etc/init.d/iptables save    iptables save >>/etc/sysconfig/iptables 8、实现把访问10.0.0.3:80的请求转到172.16.1.17:80     iptables -t nat -A PREROUTING -d 10.0.0.3 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.6:80 9、实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网。    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 124.32.54.26    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE10、描述tcp 3次握手及四次断开过程?11.详细描述HTTP工作原理?    1 ) 地址解析    2)封装HTTP请求数据包    3)封装成TCP包,建立TCP连接(TCP的三次握手)    4)客户机发送请求命令    5)服务器响应    6)服务器关闭TCP连接12.请描述iptables的常见生产应用场景。     端口映射企业应用场景:1) 把访问外网IP及端口的请求映射到内网某个服务器及端口(企业内部);2) 硬件防火墙,把访问LVS/nginx外网VIP及80端口的请求映射到IDC 负载均衡服务器内部IP及端口上(IDC机房的操作) ;    局域网共享上网    iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 120.43.61.124 13、请描述下面iptables命令的作用iptables -N syn-flood            iptables -A INPUT -i eth0 -syn -j syn-floodiptables -A syn-flood -m limit -limit 5000/s -limit-burst 200 -j RETURNiptables -A syn-flood -j DROP 防止syn-flood攻击的 14、企业WEB应用较大并发场景如何优化iptables?net.nf_conntrack_max = 25000000net.netfilter.nf_conntrack_max = 25000000net.netfilter.nf_conntrack_tcp_timeout_established = 180net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120  (二)企业运维经验面试题:15、写一个防火墙配置脚本,只允许远程主机访问本机的80端口(奇虎360面试题)   iptables -A INPUT -p tcp --dport 80 -j accept   iptables -A INPUT -p tcp  -j DROP 16、请描述如何配置一个linux上网网关?         route add -net 192.168.0.0/24 gw 10.0.0.253 dev eth1 17、请描述如何配置一个专业的安全的WEB服务器主机防火墙?先将默认的INPUT链和Forward链关闭,只开放允许进入的端口iptables -P OUTPUT ACCEPTiptables -P  FORWARD DROPiptables -P INPUT DROP 18、企业实战题6:请用至少两种方法实现!写一个脚本解决DOS攻击生产案例提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。防火墙命令为:iptables -I INPUT -s 10.0.1.10 -j DROP。方法一:netstat -na|grep EST|awk -F "[ :]+" '{print $6}'|sort|uniq -c >>/tmp/a.log while true    do    grep EST a.log|awk -F '[ :]+' '{print $6}'|sort|uniq -c >/tmp/tmp.log    exec </tmp/tmp.log    while read line    do        ip=`echo $line|awk "{print $2}"`        count=`echo $line|awk "{print $1}"`        if [  $count -gt 100 ] && [ `iptables -L -n|grep $ip|wc -l` -lt 1  ]        then            iptables -I INPUT -s $ip -j DROP     //-I 将其封杀在iptables显示在第一条            echo "$line is dropped" >>/tmp/dropip.log        fi    done    sleep 180    done     方法二:netstat -na|grep EST|awk -F "[ :]+" '{print $6}'|awk '{S[$1]++}END{for(i in S) print i,S[i]}'   19、/var/log/messages日志出现kernel: nf_conntrack: table full, dropping packet.请问是什么原因导致的?如何解决?优化内核参数net.nf_conntrack_max = 25000000net.netfilter.nf_conntrack_max = 25000000net.netfilter.nf_conntrack_tcp_timeout_established = 180net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120   20、压轴上机实战iptables考试题 iptables -t nat -A POSTROUTING -s 10.0.0.253 -j SNAT -o eth0 --to-source 120.43.61.124iptables -A INPUT -p tcp --dport 80 -j ACCEPT tcpdump ip host 10.0.0.253 and  10.0.0.6 或 tcpdump ip host 10.0.0.253 and  10.0.0.7iptables -t nat -A PREROUTING -d 120.43.61.124 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.6:80 
关于Linux防火墙'iptables'的面试问答
 1. 你听说过Linux下面的iptables和Firewalld么?知不知道它们是什么,是用来干什么的?答案 : iptables和Firewalld我都知道,并且我已经使用iptables好一段时间了。iptables主要由C语言写成,并且以GNU GPL许可证发布。它是从系统管理员的角度写的,最新的稳定版是iptables 1.4.21。iptables通常被用作类UNIX系统中的防火墙,更准确的说,可以称为iptables/netfilter。管理员通过终端/GUI工具与iptables打交道,来添加和定义防火墙规则到预定义的表中。Netfilter是内核中的一个模块,它执行包过滤的任务。Firewalld是RHEL/CentOS 7(也许还有其他发行版,但我不太清楚)中最新的过滤规则的实现。它已经取代了iptables接口,并与netfilter相连接。2. 你用过一些iptables的GUI或命令行工具么?答案 : 虽然我既用过GUI工具,比如与Webmin结合的Shorewall;以及直接通过终端访问iptables,但我必须承认通过Linux终端直接访问iptables能给予用户更高级的灵活性、以及对其背后工作更好的理解的能力。GUI适合初级管理员,而终端适合有经验的管理员。3. 那么iptables和firewalld的基本区别是什么呢?答案 : iptables和firewalld都有着同样的目的(包过滤),但它们使用不同的方式。iptables与firewalld不同,在每次发生更改时都刷新整个规则集。通常iptables配置文件位于‘/etc/sysconfig/iptables‘,而firewalld的配置文件位于‘/etc/firewalld/‘。firewalld的配置文件是一组XML文件。以XML为基础进行配置的firewalld比iptables的配置更加容易,但是两者都可以完成同样的任务。例如,firewalld可以在自己的命令行界面以及基于XML的配置文件下使用iptables。4. 如果有机会的话,你会在你所有的服务器上用firewalld替换iptables么?答案 : 我对iptables很熟悉,它也工作的很好。如果没有任何需求需要firewalld的动态特性,那么没有理由把所有的配置都从iptables移动到firewalld。通常情况下,目前为止,我还没有看到iptables造成什么麻烦。IT技术的通用准则也说道“为什么要修一件没有坏的东西呢?”。上面是我自己的想法,但如果组织愿意用firewalld替换iptables的话,我不介意。5. 你看上去对iptables很有信心,巧的是,我们的服务器也在使用iptables。iptables使用的表有哪些?请简要的描述iptables使用的表以及它们所支持的链。答案 : 谢谢您的赞赏。至于您问的问题,iptables使用的表有四个,它们是:Nat 表Mangle 表Filter 表Raw 表Nat表 : Nat表主要用于网络地址转换。根据表中的每一条规则修改网络包的IP地址。流中的包仅遍历一遍Nat表。例如,如果一个通过某个接口的包被修饰(修改了IP地址),该流中其余的包将不再遍历这个表。通常不建议在这个表中进行过滤,由NAT表支持的链称为PREROUTING 链,POSTROUTING 链和OUTPUT 链。Mangle表 : 正如它的名字一样,这个表用于校正网络包。它用来对特殊的包进行修改。它能够修改不同包的头部和内容。Mangle表不能用于地址伪装。支持的链包括PREROUTING 链,OUTPUT 链,Forward 链,Input 链和POSTROUTING 链。Filter表 : Filter表是iptables中使用的默认表,它用来过滤网络包。如果没有定义任何规则,Filter表则被当作默认的表,并且基于它来过滤。支持的链有INPUT 链,OUTPUT 链,FORWARD 链。Raw表 : Raw表在我们想要配置之前被豁免的包时被使用。它支持PREROUTING 链和OUTPUT 链。6. 简要谈谈什么是iptables中的目标值(能被指定为目标),他们有什么用答案 : 下面是在iptables中可以指定为目标的值:ACCEPT : 接受包QUEUE : 将包传递到用户空间 (应用程序和驱动所在的地方)DROP : 丢弃包RETURN : 将控制权交回调用的链并且为当前链中的包停止执行下一调用规则7. 让我们来谈谈iptables技术方面的东西,我的意思是说实际使用方面你怎么检测在CentOS中安装iptables时需要的iptables的rpm?答案 : iptables已经被默认安装在CentOS中,我们不需要单独安装它。但可以这样检测rpm:# rpm -qa iptablesiptables-1.4.21-13.el7.x86_64如果您需要安装它,您可以用yum来安装。# yum install iptables-services8. 怎样检测并且确保iptables服务正在运行?答案 : 您可以在终端中运行下面的命令来检测iptables的状态。# service status iptables [On CentOS 6/5]# systemctl status iptables [On CentOS 7]如果iptables没有在运行,可以使用下面的语句---------------- 在CentOS 6/5下 ----------------# chkconfig --level 35 iptables on# service iptables start---------------- 在CentOS 7下 ----------------# systemctl enable iptables# systemctl start iptables我们还可以检测iptables的模块是否被加载:# lsmod | grep ip_tables9. 你怎么检查iptables中当前定义的规则呢?答案 : 当前的规则可以简单的用下面的命令查看:# iptables -L示例输出Chain INPUT (policy ACCEPT)target prot opt source destinationACCEPT all -- anywhere anywhere state RELATED,ESTABLISHEDACCEPT icmp -- anywhere anywhereACCEPT all -- anywhere anywhereACCEPT tcp -- anywhere anywhere state NEW tcp dpt:sshREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT)target prot opt source destinationREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT)target prot opt source destination10. 你怎样刷新所有的iptables规则或者特定的链呢?答案 : 您可以使用下面的命令来刷新一个特定的链。# iptables --flush OUTPUT要刷新所有的规则,可以用:# iptables --flush11. 请在iptables中添加一条规则,接受所有从一个信任的IP地址(例如,192.168.0.7)过来的包。答案 : 上面的场景可以通过运行下面的命令来完成。# iptables -A INPUT -s 192.168.0.7 -j ACCEPT我们还可以在源IP中使用标准的斜线和子网掩码:# iptables -A INPUT -s 192.168.0.7/24 -j ACCEPT# iptables -A INPUT -s 192.168.0.7/255.255.255.0 -j ACCEPT12. 怎样在iptables中添加规则以ACCEPT,REJECT,DENY和DROP ssh的服务?答案 : 但愿ssh运行在22端口,那也是ssh的默认端口,我们可以在iptables中添加规则来ACCEPT ssh的tcp包(在22号端口上)。# iptables -A INPUT -p tcp --dport 22 -j ACCEPTREJECT ssh服务(22号端口)的tcp包。# iptables -A INPUT -p tcp --dport 22 -j REJECTDENY ssh服务(22号端口)的tcp包。# iptables -A INPUT -p tcp --dport 22 -j DENYDROP ssh服务(22号端口)的tcp包。# iptables -A INPUT -p tcp --dport 22 -j DROP13. 让我给你另一个场景,假如有一台电脑的本地IP地址是192.168.0.6。你需要封锁在21、22、23和80号端口上的连接,你会怎么做?答案 : 这时,我所需要的就是在iptables中使用‘multiport‘选项,并将要封锁的端口号跟在它后面。上面的场景可以用下面的一条语句搞定:# iptables -A INPUT -s 192.168.0.6 -p tcp -m multiport --dport 22,23,80,8080 -j DROP可以用下面的语句查看写入的规则。# iptables -LChain INPUT (policy ACCEPT)target prot opt source destinationACCEPT all -- anywhere anywhere state RELATED,ESTABLISHEDACCEPT icmp -- anywhere anywhereACCEPT all -- anywhere anywhereACCEPT tcp -- anywhere anywhere state NEW tcp dpt:sshREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedDROP tcp -- 192.168.0.6 anywhere multiport dports ssh,telnet,http,webcacheChain FORWARD (policy ACCEPT)target prot opt source destinationREJECT all -- anywhere anywhere reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT)target prot opt source destination 
Linux运维跳槽必备的40道面试精华题(转)
下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华,助力大家年后跳槽找个高薪好工作。 1、什么是运维?什么是游戏运维?1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等2)游戏运维又有分工,分为开发运维、应用运维(业务运维)和系统运维开发运维:是给应用运维开发运维工具和运维平台的应用运维:是给业务上线、维护和做故障排除的,用开发运维开发出来的工具给业务上线、维护、做故障排查系统运维:是给应用运维提供业务上的基础设施,比如:系统、网络、监控、硬件等等总结:开发运维和系统运维给应用运维提供了“工具”和“基础设施”上的支撑开发运维、应用运维和系统运维他们的工作是环环相扣的2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?游戏运营要做的一个事情除了协调工作以外还需要与各平台沟通,做好开服的时间、开服数、用户导量、活动等计划3、现在给你三百台服务器,你怎么对他们进行管理?管理3百台服务器的方式:1)设定跳板机,使用统一账号登录,便于安全与登录的考量。2)使用salt、ansiable、puppet进行系统的统一调度与配置的统一管理。3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录。 4、简述raid0 raid1 raid5 三种工作模式的工作原理及特点RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据还有一个大功能,多块盘放在一起可以有冗余(备份)RAID整合方式有很多,常用的:0 1 5 10RAID 0,可以是一块盘和N个盘组合 其优点读写快,是RAID中最好的缺点:没有冗余,一块坏了数据就全没有了RAID 1,只能2块盘,盘的大小可以不一样,以小的为准10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高RAID 5 ,3块盘,容量计算10*(n-1),损失一块盘特点,读写性能一般,读还好一点,写不好冗余从好到坏:RAID1 RAID10 RAID 5 RAID0性能从好到坏:RAID0 RAID10 RAID5 RAID1成本从低到高:RAID0 RAID5 RAID1 RAID10单台服务器:很重要盘不多,系统盘,RAID1数据库服务器:主库:RAID10 从库 RAID5RAID0(为了维护成本,RAID10)WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)有多台,监控、应用服务器,RAID0 RAID5我们会根据数据的存储和访问的需求,去匹配对应的RAID级别 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?LVS: 是基于四层的转发HAproxy: 是基于四层和七层的转发,是专业的代理服务器Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发区别: LVS由于是基于四层的转发所以只能做端口的转发而基于URL的、基于目录的这种转发LVS就做不了工作选择:HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器配置简单,所以中小型企业推荐使用HAproxy6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?Squid、Varinsh和Nginx都是代理服务器什么是代理服务器:能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网 区别:1)Nginx本来是反向代理/web服务器,用了插件可以做做这个副业      但是本身不支持特性挺多,只能缓存静态文件2)从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成3)varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术在内存的利用上,Varnish比Squid具有优势,性能要比Squid高。还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的4)squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境工作中选择:要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。7、Tomcat和Resin有什么区别,工作中你怎么选择?区别:Tomcat用户数多,可参考文档多,Resin用户数少,可考虑文档少最主要区别则是Tomcat是标准的java容器,不过性能方面比resin的要差一些但稳定性和java程序的兼容性,应该是比resin的要好工作中选择:现在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求稳定和程序的兼容8、什么是中间件?什么是jdk? 中间件介绍:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递通过中间件,应用程序可以工作于多平台或OS环境。jdk:jdk是Java的开发工具包它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境9、讲述一下Tomcat8005、8009、8080三个端口的含义?8005==》 关闭时使用8009==》 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口8080==》 一般应用使用10、什么叫CDN?- 即内容分发网络- 其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度11、什么叫网站灰度发布?灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度12、简述DNS进行域名解析的过程?用户要访问www.baidu.com,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com,然后发给请求的服务器,保存一份之后,再发给客户端13、RabbitMQ是什么东西?RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地14、讲一下Keepalived的工作原理?在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息,BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息)多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息15、讲述一下LVS三种模式的工作过程?LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式) 一、NAT模式(VS-NAT)原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址并发至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时大量的数据包都交汇在负载均衡器那,速度就会变慢! 二、IP隧道模式(VS-TUN)原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RSRS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上 三、直接路由模式(VS-DR)原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域也可以简单的理解为在同一台交换机上优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?mysql的innodb如何定位锁问题:在使用 show engine innodb status检查引擎状态时,发现了死锁问题在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎)innodb_trx         ## 当前运行的所有事务innodb_locks     ## 当前出现的锁innodb_lock_waits  ## 锁等待的对应关系 mysql如何减少主从复制延迟:如果延迟比较大,就先确认以下几个因素:1. 从库硬件比主库差,导致复制延迟2. 主从复制单线程,如果主库写并发太大,来不及传送到从库    就会导致延迟。更高版本的mysql可以支持多线程复制3. 慢SQ
BugFree设置邮箱通知(这里以163邮箱为例)
公司用bugfree在进行新建Bug指派抄送给同事的时候,总是有人不及时登录BugFree去查看指派给自己的,所以要加一个邮箱通知,这样可以及时通知到被指派的同事。百度上很多用的是QQ邮箱来实现的,QQ邮箱也可以,网易邮箱也行。我以网易邮箱为例 讲一下配置BugFree邮箱发送的实例。这里以163邮箱为例:首先登陆163邮箱:然后找到 设置->POP3/SMTP/IMAP;开启POP3/SMTP服务(如下图) 开启之后,打开项目找到php-ini文件进行一些配置。修改配置如下 [mail function]; For Win32 only.; http://php.net/smtpSMTP = smtp.163.com; http://php.net/smtp-portsmtp_port = 25; For Win32 only.; http://php.net/sendmail-from;sendmail_from = me@example.com修改好之后接下来配置BugFree里面的protected/config/main.php文件内容如下'mail' =>array ('on' => '1', //开启邮件'from_address' => 'XXXX@163.com',//发送邮件的邮箱地址。'from_name' => 'BugFree','send_method' => 'SMTP','send_params' =>array ('host' => 'smtp.163.com',// SMTP邮箱主机,这里以163为例'smtp_auth' => true, //这里要改成true'username' => 'XXXX',//发送邮箱账号'password' => 'XXXX',//发送邮箱密码),),配置好之后要重启服务器。然后登陆BugFree,找到‘编辑我的信息’’这个地方这样就OK了,BugFree可以实时和定时发送邮件通知。在新建Bug或Test Case并保存后,指派给和抄送给将收到实时邮件通知。可以在“抄送给”编辑框输入多个用户帐号或者邮件地址,地址之间用逗号分隔。本文属原创内容,为了尊重他人劳动,转载请注明本文地址:https://www.cnblogs.com/luokakale/p/9714867.html
SQL数据库面试题以及答案50例题
SQL常见面试题1.用一条SQL 语句 查询出每门课都大于80 分的学生姓名name   kecheng   fenshu张三    语文       81张三     数学       75李四     语文       76李四     数学       90王五     语文       81王五     数学       100王五     英语       90A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)select name from table group by name having min(fenshu)>802. 学生表 如下:自动编号   学号   姓名 课程编号 课程名称 分数1        2005001 张三 0001     数学    692        2005002 李四 0001      数学    893        2005001 张三 0001      数学    69删除除了自动编号不同, 其他都相同的学生冗余信息A: delete tablename where 自动编号 not in(select min( 自动编号) from tablename group by学号, 姓名, 课程编号, 课程名称, 分数)3.一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.你先按你自己的想法做一下,看结果有我的这个简单吗?答:select a.name, b.namefrom team a, team b where a.name < b.name4.请用SQL 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。数据库名:JcyAudit ,数据集:Select * from TestDB答:select a.*from TestDB a ,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) bwhere a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur************************************************************************************5.面试题:怎么把这样一个表儿year   month amount1991   1     1.11991   2     1.21991   3     1.31991   4     1.41992   1     2.11992   2     2.21992   3     2.31992   4     2.4查成这样一个结果year m1   m2   m3   m41991 1.1 1.2 1.3 1.41992 2.1 2.2 2.3 2.4 答案一、select year, (select amount from   aaa m where month=1   and m.year=aaa.year) as m1,(select amount from   aaa m where month=2   and m.year=aaa.year) as m2,(select amount from   aaa m where month=3   and m.year=aaa.year) as m3,(select amount from   aaa m where month=4   and m.year=aaa.year) as m4from aaa   group by year*******************************************************************************6. 说明:复制表( 只复制结构, 源表名:a新表名:b) SQL: select * into b from a where 1<>1       (where1=1,拷贝表结构和数据内容)Oracle:create table bAsSelect * from a where 1=2 [<>(不等于)(SQL Server Compact)  比较两个表达式。 当使用此运算符比较非空表达式时,如果左操作数不等于右操作数,则结果为 TRUE。 否则,结果为 FALSE。] 7. 说明:拷贝表( 拷贝数据, 源表名:a目标表名:b) SQL: insert into b(a, b, c) select d,e,f from a; 8. 说明:显示文章、提交人和最后回复时间SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b9. 说明:外连接查询( 表名1 :a表名2 :b)SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUTER JOIN b ON a.a = b.cORACLE:select a.a, a.b, a.c, b.c, b.d, b.f from a ,bwhere a.a = b.c(+)10. 说明:日程安排提前五分钟提醒SQL: select * from 日程安排 where datediff('minute',f 开始时间,getdate())>511. 说明:两张关联表,删除主表中已经在副表中没有的信息SQL: Delete from info where not exists (select * from infobz where info.infid=infobz.infid )*******************************************************************************12.有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value这道题的SQL 语句怎么写?update b set b.value=(select a.value from a where a.key=b.key) where b.id in(select b.id from b,a where b.key=a.key);*************************************************************************** 13.高级sql 面试题原表:courseid coursename score-------------------------------------1 Java 702 oracle 903 xml 404 jsp 305 servlet 80-------------------------------------为了便于阅读, 查询此表后的结果显式如下( 及格分数为60):courseid coursename score mark---------------------------------------------------1 Java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 pass---------------------------------------------------写出此查询语句select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course完全正确SQL> desc course_vName Null? Type----------------------------------------- -------- ----------------------------COURSEID NUMBERCOURSENAME VARCHAR2(10)SCORE NUMBERSQL> select * from course_v;COURSEID COURSENAME SCORE---------- ---------- ----------1 java 702 oracle 903 xml 404 jsp 305 servlet 80SQL> select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course_v;COURSEID COURSENAME SCORE MARK---------- ---------- ---------- ----1 java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 passSQL面试题(1)create table testtable1(id int IDENTITY,department varchar(12) )select * from testtable1insert into testtable1 values('设计')insert into testtable1 values('市场')insert into testtable1 values('售后')/*结果id department1   设计2   市场3   售后 */create table testtable2(id int IDENTITY,dptID int,name varchar(12))insert into testtable2 values(1,'张三')insert into testtable2 values(1,'李四')insert into testtable2 values(2,'王五')insert into testtable2 values(3,'彭六')insert into testtable2 values(4,'陈七')/*用一条SQL语句,怎么显示如下结果id dptID department name1   1      设计        张三2   1      设计        李四3   2      市场        王五4   3      售后        彭六5   4      黑人        陈七*/答案:SELECT testtable2.* , ISNULL(department,'黑人')FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID也做出来了可比这方法稍复杂。sql面试题(2)有表A,结构如下: A: p_ID p_Num s_id 1 10 01 1