iptables企业面试题集锦

网友投稿 650 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状态.到这里,关闭一个单向通道.

iptables企业面试题集锦

第三次挥手:服务端发送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 $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

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

/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笔记(一)
相关文章