iptables企业面试题集锦

举报
互联网老辛 发表于 2021/06/08 22:34:23 2021/06/08
【摘要】 详述iptales工作流程以及规则过滤顺序? iptables采用数据包过滤机制工作的,他会对请求的数据包的包头数据进行分析,并根据预先设定的规则决定是否可以进入主机. 过滤顺序是层层过滤,从上到下,从前到后进行过滤. 只要匹配上就不再往下进行匹配 iptables有几个表以及每个表有几个链? 4个表 5个链 iptables的几个表以及每个表对应链的作用,对应...
  1. 详述iptales工作流程以及规则过滤顺序?

iptables采用数据包过滤机制工作的,他会对请求的数据包的包头数据进行分析,并根据预先设定的规则决定是否可以进入主机.
过滤顺序是层层过滤,从上到下,从前到后进行过滤.
只要匹配上就不再往下进行匹配

  1. iptables有几个表以及每个表有几个链?
    4个表
    5个链

  2. iptables的几个表以及每个表对应链的作用,对应企业应用场景?
    3个表
    Filter表 真正的防火墙功能
    Nat表 负责数据包改写,网关共享,端口映射
    Mangle表 路由相关,用的不多
    5个链
    INPUT 过滤进入主机的数据包
    FORWARD 负责转发流经主机的数据包
    OUTPUT 处理从主机发出去的数据包
    PREROUTING 数据包到达防火墙时进行路由判断之前执行的规则,适合的工作场景是端口映射
    POSTROUTING 数据包离开防火墙时进行路由判断之后执行的规则,适合的工作场景是共享上网

  3. 请写出查看iptables当前所有规则的命令。
    iptables -nL
    iptables -nL -t nat
    iptables -nL -t mangle

  4. 禁止来自10.0.0.188 ip地址访问80端口的请求
    ipttables -A INPUT -p tcp -s 10.0.0.188 --dport 80 -j DROP

  5. 如何使在命令行执行的iptables规则永久生效?
    /etc/init.d/iptables save
    iptables-save >/etc/sysconfig/iptables

  6. 实现把访问10.0.0.5:9000的请求转到172.16.1.8:80
    iptables -t nat -A PREROUTING -d 10.0.0.5 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.8:80

  7. 实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网。
    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.8

  8. 描述tcp 3次握手及四次断开过程?

三次握手:
第一次握手:建立连接时,客户端发送SYN(seq=x)包到服务器,并进入SYN_SENT状态,等待服务器的确认.SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即发送SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到SYN+ACK包,向服务器发送ACK(ack=y+1)包,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手.
完成三次握手,客户端与服务器开始传送数据

四次挥手:
tcp/ip协议的四次断开的过程
注:挥手动作可由客户端或服务器任意一方发起。
 第一次挥手:客户端发送FIN+ACK包(序号为seq=a,确认序号ack=b)给服务端,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态.
 第二次挥手:服务端收到FIN+ACK包后,发送ACK包给客户端进行确认,服务端进入CLOSE_WAIT状态.客户端收到ACK包后进入FIN_WAIT_2状态.到这里,关闭一个单向通道.
 第三次挥手:服务端发送FIN+ACK包给客户端,服务端进入LAST_ACK状态.
 第四次挥手:客户端收到FIN+ACK包后,发送ACK包给服务端进行确认,客户端进入TIME_WAIT状态,在等待30秒(可修改)后进入CLOSED状态.服务端收到ACK包后进入CLOSED状态,关闭另一个单向通道.

  1. 请描述iptables的常见生产应用场景。

1) 局域网共享上网(适合做企业内部局域网上网网关,以及IDC机房内网的上网网关)(nat POSTROUTING)
2) 服务器防火墙功能(适合IDC机房具有外网IP的服务器)(主要是filter INPUT的控制)
3) 把外部IP及端口映射到局域网内部(可以一对一IP映射,也可以针对某一端口映射).也可能是IDC把网站的外网VIP及网站端口映射到负载均衡器上(硬件防火墙).(nat PREROUTING)
4)办公路由器+网关功能(zebra路由+iptables过滤及NAT+squid正向透明代理80+ntop/iftop/iptraf流量查看+tc流量控制限速)
5)邮件的网关

  1. 请描述下面iptables命令的作用

iptables -N syn-flood
iptables -A INPUT -i eth0 -syn -j syn-flood
iptables -A syn-flood -m limit -limit 5000/s -limit-burst 200 -j RETURN
iptables -A syn-flood -j DROP

  1. 企业WEB应用较大并发场景如何优化iptables?

net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_established = 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

  1. 写一个防火墙配置脚本,只允许远程主机访问本机的80端口(360面试题)

iptables -A INPUT --dport 80 -j ACCEPT
iptables -P INPUT DROP

  1. 请描述如何配置一个linux上网网关?
    route -net 172.16.1.0/24 gw 192.168.1.1

  2. 请描述如何配置一个专业的安全的WEB服务器主机防火墙?

#首先设置允许ssh连接
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -j ACCEPT
iptables -P INPUT DROP
iptables -nL
#设置允许本机lo通信规则
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#修改默认规则
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#开启信任网段
iptables -A INPUT -s 124.43.62.96/27 -p all -j ACCEPT		<---办公室固定IP段
iptables -A INPUT -s 192.168.1.0/24 -p all -j ACCEPT		<---IDC机房的内网网段
iptables -A INPUT -s 10.0.0.0/24 -p all -j ACCEPT			<---其他机房的内网网段
iptables -A INPUT -s 203.83.24.0/24 -p all -j ACCEPT		<---IDC机房的外网网段
iptables -A INPUT -s 201.82.34.0/24 -p all -j ACCEPT		<---其他IDC机房的外网网段


#允许业务服务端口对外访问(允许http服务无条件通过)
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
#允许icmp类型协议通过
iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
提示:如果不想开,就不执行此命令
如果对内开,对外不开就用下面的方式
iptables -A INPUT -p icmp -s 10.0.0.0/24 -m icmp --icmp-type any -j ACCEPT
#允许关联的状态包通过(web服务不要使用FTP服务)
iptables -A INPUT -m stste --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
##查看最终结果
[root@nginx ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination ACCEPT tcp  --  10.0.0.0/24 0.0.0.0/0 ACCEPT tcp  --  0.0.0.0/0 0.0.0.0/0 tcp dpt:22 
ACCEPT all  --  0.0.0.0/0 0.0.0.0/0 ACCEPT all  --  124.43.62.96/27 0.0.0.0/0 ACCEPT all  --  192.168.1.0/24 0.0.0.0/0 ACCEPT tcp  --  0.0.0.0/0 0.0.0.0/0 tcp dpt:80 
ACCEPT icmp --  10.0.0.0/24 0.0.0.0/0 icmp type 255 

Chain FORWARD (policy DROP)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination ACCEPT all  --  0.0.0.0/0 0.0.0.0/0 ACCEPT all  --  0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
#将iptables临时配置保存为配置文件的方法
[root@nginx ~]# /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  1. 企业实战题6:请用至少两种方法实现!

写一个脚本解决DOS攻击生产案例
提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。防火墙命令为:iptables -A INPUT -s 10.0.1.10 -j DROP。

脚本一:

[root@nginx~]# cat drop_ip3.sh 
#!/bin/bash
. /etc/init.d/functions
conut=10 #访问次数的阀值,超过10次就禁止掉这个IP
Path=/server/scripts/access.log
function ipt(){ #iptables 的设置 awk  '{print $1}'$Path|sort|uniq -c|sort -rn >/tmp/tmp.log #统计IP访问次数 exec < /tmp/tmp.log while read line do ip=echo $line|awk '{print $2}' if [ echo $line|awk '{print $1}' -ge $conut -a iptables -L -n|grep "$ip"|wc -l -lt 1 ]
	#如果IP访问次数大于等于10并且在iptables禁止列表里没有这个IP。 then iptables -I INPUT -s $ip -j DROP #把这个IP写进iptables禁止列表里 RETVAL=$? if [ $RETVAL -eq 0 ] #如果上一条命令执行没有出错 then action "iptables -I INPUT -s $ip -j DROP" /bin/true echo "$ip" >>/tmp/ip_$(date +%F).log
		#把这个ip写进一个IP地址黑名单 else action "iptables -I INPUT -s $ip -j DROP" /bin/false fi fi done
}
function del(){
[ -f /tmp/ip_$(date +%F -d '-1 day').log ]||{ #如果存在这个黑名单日志 echo "log is not exist" exit 1} exec </tmp/ip_$(date +%F -d '-1 day').log while read line do if [ iptables -L -n|grep "$line"|wc -l -ge 1 ]
	#如果IP地址存在黑名单里 then iptables -D INPUT -s $line -j DROP #就把他放出来 fi done
}

function main(){ flag=0 #计数器 while true do sleep 180
	#180秒运行一次下面的命令 ((falg++))
	#每执行一次,计数器自动加上1 ipt [ $flag -ge 480 ] && del && flag=0
	#超过1天的时候,就把黑名单里的IP给放出来并且把计数器归零 done
}
main

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

脚本二:

#!/bin/bash

. /etc/init.d/functions 

iptables_list=$(iptables -n -L)

count=10
path=/server/scripts/access.log
function ipt(){ awk '{print $1}' $path|sort|uniq -c|sort -rn >/tmp/tmp.log max_line=$(cat /tmp/tmp.log|wc -l) for ((i=1;i<=$max_line;i++)) do ip=$(awk 'NR=='"$i"'{print $2}' /tmp/tmp.log) ip_num=$(awk 'NR=='"$i"'{print $1}' /tmp/tmp.log) iptables_ip_num=$(iptables -nL|grep "$ip"|wc -l) if [ $ip_num -ge $count -a $iptables_ip_num -lt 1 ] then iptables -I INPUT -s $ip -j DROP RETVAL=$? if [ $RETVAL -eq 0 ] then action "iptables -I INPUT -s $ip -j DROP" /bin/true echo "$ip" >>/tmp/ip_$(date +%F).log else action "iptables -I INPUT -s $ip -j DROP" /bin/false fi fi
done
}

function del(){
if [ -f /tmp/ip_$(date +%F -d '-1 day').log ]
then cat /tmp/ip_$(date +%F -d '-1 day').log|awk '{print "iptables -D INPUT -s "$1" -j DROP"}'|bash
else echo "log is not exist"
fi
}

function main(){
while true
do sleep 10 ((flag++)) ipt [ $flag -ge 480 ] && del && flag=0
done
}

main

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  1. /var/log/messages日志出现kernel: nf_conntrack: table full, dropping packet.请问是什么原因导致的?如何解决?

解答:
有两种可能,一是打开的端口太少导致不够用,修改ip_conntrack文件为1024 65535
还有一个原因是nat连接真的达到了65535了,此时就把NAT映射表保持时间设置短一些.
以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不计
net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_established = 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

文章来源: zmedu.blog.csdn.net,作者:互联网老辛,版权归原作者所有,如需转载,请联系作者。

原文链接:zmedu.blog.csdn.net/article/details/105549432

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。