(十二) iptables,sudo
摘要
1、详述iptables四表五链
2、举例实现iptables多端口匹配、连接追踪、字符串匹配、时间匹配、并发连接限制、速率匹配、报文状态匹配等应用
3、举例实现iptables之SNAT源地址修改及DNAT目标地址修改和PNAT端口修改等应用 (重要再研究)
4、简述sudo安全切换工具,及详细讲解visudoer
1、详述iptables四表五链
链(内置):
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
表功能:
filter:过滤,防火墙;
nat:network address translation;用于修改源IP或目标IP,也可以改端口;
mangle:拆解报文,做出修改,并重新封装起来;
raw:关闭nat表上启用的连接追踪机制;
功能<--链:
raw:PREROUTING, OUTPUT
mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat:PREROUTING,[INPUT,]OUTPUT,POSTROUTING
filter:INPUT,FORWARD,OUTPUT
报文流向:
流入本机:PREROUTING --> INPUT
由本机流出:OUTPUT --> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
2、举例实现iptables多端口匹配、连接追踪、字符串匹配、时间匹配、并发连接限制、速率匹配、报文状态匹配等应用
多端口匹配:
# iptables -I INPUT -d 192.168.1.7 -p tcp -m multiport --dports 22,80,100,423 -j ACCEPT
连接追踪:
# iptables -I FORWARD 2 -s 192.168.1.5 -p tcp --dport 80 -m state --state NEW -j ACCEPT
# iptables -I INPUT -d 192.168.1.5 -m state --state ESTABLISHED -j ACCEPT
字符串匹配:
#iptables -I OUTPUT -m string --algo bm --string "hello" -j REJECT
时间匹配:
# iptables -R INPUT 3 -d 172.16.0.67 -p tcp --dport 23 -m time --timestart 08:30:00 --timestop 17:00:00 --weekends 1,2,3,4,5 -kerneltz -j ACCEPT
并发连接限制:
# iptables -I INPUT -d 192.168.1.7 -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT
速率匹配:
# iptables -I INPUT -d 192.168.1.6 -p icmp-type 8 -m --limit 2/minute --limit-burst 3 -j ACCEPT
报文状态匹配:
# iptables -I input -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,SYN -j REJECT
3、举例实现iptables之SNAT源地址修改及DNAT目标地址修改和PNAT端口修改等应用
- SNAT:主要实现内网客户端访问外网主机,在POSTROUTING和OUTPUT上使用
- DNAT:主要实现内网中的服务器能被外网客户端访问到,定义在PREROUTING链上.
- PNAT:将封包重新导向到另一个端口(PNAT),这个功能可以用来实作透明代理或用来保护web服务器。
待补充
4、简述sudo安全切换工具,及详细讲解visudoer
1). sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。
2). sudo的特性主要有这样几点:
§ sudo能够限制用户只在某台主机上运行某些命令。
§ sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
§ sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。
§ sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440。
3).visudo测试
[[email protected] ~]# echo '123456' | passwd --stdin Jay
Changing password for user Jay.
passwd: all authentication tokens updated successfully.
[[email protected] ~]# su - Jay
[[email protected] ~]$ useradd Jack
-bash: /usr/sbin/useradd: Permission denied
执行visudo,添加下面内容:
Jay ALL=(ALL) /usr/sbin/useradd, /usr/sbin/userdell
[[email protected] ~]# su - Jay
[[email protected] ~]$ sudo -l
[sudo] password for Jay:
Matching Defaults entries for Jay on this host:
requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESSLC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE
LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User Jay may run the following commands on this host:
(ALL) /usr/sbin/useradd, (ALL) /usr/sbin/userdel
[[email protected] ~]$ sudo useradd Jack
[[email protected] ~]$ tail -1 /etc/group
Jack:x:501:
[[email protected] ~]$
4) visudo 添加别名
/etc/sudoers应用示例:
Cmnd_Alias USERADMINCMNDS = /usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd [a-z]*, !/usr/bin/passwd root
User_Alias USERADMIN = bob, alice
USERADMIN ALL=(root) USERADMINCMNDS