Iptables 简单应用

自己闲时整理的一点点小东西,大家多给点意见哈....
 
防火墙(硬件和软件)
 硬件:cisco netscreen 联想  天融信
 软件:Iptables 包过滤防火墙
  Ipfwadm------->Ipchains----->Iptables
net filter 内核空间 (kernel space)
Iptables 用户空间  (user space)
三个表   filter(缺省,过滤表)  nat(地址转换)   mangle 
  INPUT    PREROUTING     
  FORWORD   OUTPUT
  OUTPUT   POSTROUTING
iptables  
 -F  清楚所有规则
  iptables -t filter -F INPUT
-X 清楚所有自定义规则
-L 列出当前所有规则
  iptables -L INPUT -n --line-number -vvv
-A 在所选链的尾加一条规则
-D从所选链中删除一条规则
-R 在所选链中替换一条规则
-P 指定缺省规则
  iptables -P INPUT DROP
-I 插入规则
  iptables -t filter -I INPUT  -s 192.168.0.5 -j REJECT   插入这条规则并做为第一条INPUT规则.其余INPUT规则下移一行
  iptables -t filter -I INPUT 3  -s 192.168.0.6 -j REJECT  将此条插入作为第三行,原来第三行及以后下移一行
-N定义子链,不能与已有的链同名
自定义脚本,最好先清空所有规则
-j
ACCEPT  接受
DROP 丢弃 别人可以判断你的系统使用防火墙
REJECT 弹回 貌似根本没有打开这个端口
LOG  进行日志,/var/log/message
使用!号的时候 需要在两端加空格 表示取反
-s 进行原地址匹配
[!] addr[/mask]
-d  目的地址匹配
[!] addr[/mask]
地址形式  192.168.0.11   192.168.0.0/24   
-p 进行协议进行匹配
[!] tcp|udp|icmp    协议列表以英文逗号为分隔符 如tcp,udp  协议前加!号表示取反 如-p ! tcp
根据端口进行匹配, 必须指定协议 必须是tcp|udp
--sport   [!]  port    包的源端口
--dport  [!]  port 包的目的端口
port 可以用/etc/services 中的协议名来代替  不指定此项,则暗示所用端口 ,  连续的端口  20:80表示从20到80所用端口包括20和80  :20 0到20  80:从80到65535  !20 非20端口
多端口匹配  -m multiport   如  iptables -A INPUT -p tcp -m multiport --sport   20,21,22,23,80  最多可以指定15的端口,以英文逗号分隔,没有空格,使用是必须指定协议
 
-i  以包进入本地所使用的网络接口来匹配 
 -i 参数指定网卡,适用于 INPUT 和PREROUGING
 -o 参数指定网卡,适用于 OUTPUT 和POSTROUGING
-o 以包离开本地所使用的网络接口来匹配
iptables -t filter -I INPUT  -s 192.168.0.5 -j REJECT   插入这条规则并做为第一条INPUT规则.其余INPUT规则下移一行
iptables -t filter -I INPUT 3  -s 192.168.0.6 -j REJECT  将此条插入作为第三行,原来第三行及以后下移一行
对比性匹配的扩展
 通过-m参数来调用 主要用法有
1基于状态的匹配 -m state
 NEW    初始包或源自于您的机器并要发送到目的IP的包都处于 NEW状态   分为OUTPUT和INPUT NEW包
 ESTABLISHED  一旦连接看到两个方向上都有通信流,与此附加相关的其它包都被看作处于ESTABLISHED 状态     NEW 和ESTABLISHED 之间的区别很重要
 RELATED 是那些启动新连接,但有与当前现有连接相关的包。RELATED 状态可以用于调整组成多重连接协议(如ftp)的连接,以及与现有连接相关的错误包(如与现有连接相关的 ICMP 错误包)
 INVALID         这种包不会被自动废弃;因此您需要插入适当的规则,并设置链策略,以便可以正确处理这些包。
   允许主动发出的包 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
   禁止别人发起的主动连接  iptables -A INPUT -m state --state NEW,INVALID -j DROP
2基于MAC地址的匹配 -m  mac    仅对于PREROUTING和INPUT链起作用
   如:  iptables -A INPUT -p tcp --dport 23 -m mac --mac-source 00:0C:29:BC:BB:DB -j REJECT
3基于封包数量的匹配 -m limit
  允许每秒通过一个icmp包,默认触发条件是5个
   iptables -A INPUT -p icmp -m limit --limit 1/s -j ACCEPT
  超过部分全部拒绝
   iptables -A INPUT -p icmp -j DROP
4基于UID,GID的限制 -m owner
  iptables -A OUTPUT -p tcp --dport 23 -m owner --uid-owner 500 -j REJECT
  iptables -A OUTPUT -p tcp --dport 23 -m owner �Cgid-owner 500 -j REJECT
  注意,-m owner 仅仅对OUTPUT链有效
5基于服务类型的匹配 -m tos
  限制远程数据复制 (scp...)  iptables -A INPUT -m tos --tos 0x08 -j DROP
      Minimize-Delay 16 (0x10)   最小延迟,无法SSH
                                     Maximize-Throughput 8 (0x08) 最大吞吐
                                     Maximize-Reliability 4 (0x04)  最大可靠性
                                     Minimize-Cost 2 (0x02)
                                     Normal-Service 0 (0x00)
    
NAT= Network Address Translation
 NAT 所做的工作,是将传出去的封包重新包装,然后再将传回来的封包进行反包装
 使用nat 表之前,必须调整内核参数
  echo 1 > /proc/sys/net/ipv4/ip_forward
 应该写将此值写入 /etc/sysctl.conf 以使之在重新启动后仍然生效
 用 sysctl �Cp 命令使该文件立即生效
 
1 改变源地址为1.2.3.4、1.2.3.5、1.2.3.6
  iptables �Ct nat �CA POSTROUTING �Co eth0 �Cj SNAT --to 1.2.3.4-1.2.3.6
2  改变源地址为1.2.3.4端口为1-1023
  iptables �Ct nat �CA POSTROUTING �Cp tcp �Co eth0 �Cj SNAT --to 1.2.3.4:1-1023
3  伪装
  iptables �Ct nat �CA POSTROUTING �Co ppp0 �Cj MASQUERADE
  或者
  iptables -t nat -A POSTROUTING -j SNAT --to 202.106.0.15
 4 改变目标地址为5.6.7.8
  iptables �Ct nat �CA PREROUTING �Ci eth0 �Cj DNAT --to 5.6.7.8
4改变目标地址为5.6.7.8、5.6.7.9、5.6.7.10
  iptables �Ct nat �CA PREROUTING �Ci eth0 �CjDNAT --to 5.6.7.8-5.6.7.10
5改变web传送的目标地址为5.6.7.8,端口8080
  iptables �Ct nat �CA PREROUTING �Cp tcp �Cdport 80 �Ci eth0 �Cj DNAT --to 5.6.7.8:8080
6 iptables �CA PREROUTING �Ct nat �Cp tcp �Cd 1.2.3.4 --dport 8080 �Cj DNAT --to 192.168.1.1:80
7穿透防火墙.提供服务
  iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 80 -j DNAT �Cto 192.168.10.156:80
8 透明代理
  iptables -t nat -A PREROUTING -s 192.168.10.0/24 -p tcp -m multiport --dport 80,443 -j REDIRECT --to-port 3128
  (squid 服务需要特别的配置)
9打标签(VSFTP)
 vsftpd.conf
    pasv_address=VIP
    pasv_max_port=20000
    pasv_min_port=10000
 iptables -t mangle -A PREROUTING -d 192.168.0.120 -p tcp --dport 21 -j MARK --set-mark 21
 iptables -t mangle -A PREROUTING -d  192.168.0.120 -p tcp --dport 10000:20000 -jMARK --set-mark 21

10 modprobe ip_tables
 modprobe ip_conntrack
 modprobe ip_conntrack_ftp
 modprobe ip_conntrack_irc
/etc/rc.d/init.d/iptables start   启动了当前在/etc/sysconfig/iptables 中保存了的规则.
/etc/rc.d/init.d/iptables save   将当前规则保存在/etc/sysconfig/iptables 中

NFS:
portmap 111
nfs 2049
vim /etc/sysconfig/nfs
MOUNTD_PORT="4002"
STATD_PORT="4003"
LOCKD_TCPPORT="4004"
LOCKD_UDPPORT="4004"
RQUOTAD_PORT="4005"
# rpcinfo -p
# iptables -t filter -A INPUT -p tcp --dport 111 -j ACCEPT
# iptables -t filter -A INPUT -p udp --dport 111 -j ACCEPT
# iptables -t filter -A INPUT -p tcp --dport 2049 -j ACCEPT
# iptables -t filter -A INPUT -p udp --dport 2049 -j ACCEPT
# iptables -t filter -A INPUT -p tcp --dport 4002:4005 -j ACCEPT
# iptables -t filter -A INPUT -p udp --dport 4002:4005 -j ACCEPT

samba:
nmbd 137/udp  138/udp
smbd  139/tcp  445/tcp
iptables -t filter -A INPUT -p udp  --dport 137:139 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 139 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 445 -j ACCEPT
FTP:
modprobe ip_nat_ftp
iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

你可能感兴趣的:(职场,iptables,应用,休闲)