iptables企业面试题集锦

网友投稿 626 2022-05-30

详述iptales工作流程以及规则过滤顺序?

iptables采用数据包过滤机制工作的,他会对请求的数据包的包头数据进行分析,并根据预先设定的规则决定是否可以进入主机.

过滤顺序是层层过滤,从上到下,从前到后进行过滤.

只要匹配上就不再往下进行匹配

iptables有几个表以及每个表有几个链?

4个表

5个链

iptables的几个表以及每个表对应链的作用,对应企业应用场景?

3个表

Filter表 真正的防火墙功能

Nat表 负责数据包改写,网关共享,端口映射

Mangle表 路由相关,用的不多

5个链

INPUT 过滤进入主机的数据包

FORWARD 负责转发流经主机的数据包

OUTPUT 处理从主机发出去的数据包

PREROUTING 数据包到达防火墙时进行路由判断之前执行的规则,适合的工作场景是端口映射

POSTROUTING 数据包离开防火墙时进行路由判断之后执行的规则,适合的工作场景是共享上网

请写出查看iptables当前所有规则的命令。

iptables -nL

iptables -nL -t nat

iptables -nL -t mangle

禁止来自10.0.0.188 ip地址访问80端口的请求

ipttables -A INPUT -p tcp -s 10.0.0.188 --dport 80 -j DROP

如何使在命令行执行的iptables规则永久生效?

/etc/init.d/iptables save

iptables-save >/etc/sysconfig/iptables

实现把访问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

实现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

描述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状态,关闭另一个单向通道.

请描述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)邮件的网关

请描述下面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

企业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

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

iptables -A INPUT --dport 80 -j ACCEPT

iptables -P INPUT DROP

请描述如何配置一个linux上网网关?

route -net 172.16.1.0/24 gw 192.168.1.1

请描述如何配置一个专业的安全的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

企业实战题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 }'$Path|sort|uniq -c|sort -rn >/tmp/tmp.log #统计IP访问次数 exec < /tmp/tmp.log while read line do ip=echo $line|awk '{print }' if [ echo $line|awk '{print }' -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

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 }' $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 }' /tmp/tmp.log) ip_num=$(awk 'NR=='"$i"'{print }' /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 "" -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

iptables企业面试题集锦

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

/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

NAT TCP/IP

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:什么是单点登录?
下一篇:HCIA-R&S笔记(一)
相关文章