自己闲时整理的一点点小东西,大家多给点意见哈....
防火墙(硬件和软件)
硬件: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