1.查看规则。
iptables -L -n -v --line-numbers
-L 列出规则。
-n 以IP地址表示,而不是主机名。
-v 查看详细信息。
--line-numbers 查看规则序号。
2.清空重置。
(1)清空默认规则e
iptables -F
(2)清空自定义规则。
iptables -X
(3)重置计数器。
iptables -Z
3.设置默认DROP。
(1)默认禁止接收来自任何主机的数据。
iptables -P INPUT DROP
(2)默认禁止发送数据到任何主机。
iptables -P OUTPUT DROP
(3)默认禁止转发数据到任何主机。
iptables -P FORWARD DROP
4.保护sshd。
(1)目标。
(a)开放sshd的8801端口。
(b)只允许连接到IP:11.1.1.11上的sshd服务。
(c)只允许通过eth0连接。
(d)只有11.1.1.129能够连接,其它主机连接不上。
源IP:11.1.1.129
目的IP: 11.1.1.11
目的端口:8801
(2)允许接收数据。
sudo iptables -A INPUT -i eth0 -p tcp -s 11.1.1.129 -d 11.1.1.11 --dport 8801 -j ACCEPT
(3)允许发送数据。必须是在已经建立的连接上。
sudo iptables -A OUTPUT -o eth0 -p tcp -s 11.1.1.11 --sport 8801 -d 11.1.1.129 -m state --state ESTABLISHED,RELATED -j ACCEPT
至此,在默认拒绝全部接收和发送的数据的前提下,使用上述2条规则,保护sshd的目标达成。
(4)在修改了sshd的默认端口之后,需要修改selinux安全配置。
semanage port -l |grep ssh 查看ssh的端口配置。
semanage port -a -t ssh_port_t -p tcp 8801 增加ssh的新端口8801。
类似的思路,可以配置http和dns客户端,以及ping等网络通信的控制。
5.保存和恢复iptables配置。
(1)保存iptables配置。
iptables-save > /etc/sysconfig/iptables
(2)恢复iptables配置。
iptables-restore < /etc/sysconfig/iptables
(3)修改/etc/sysconfig/iptables-config配置文件。
IPTABLES_SAVE_ON_STOP=yes
IPTABLES_SAVE_ON_RESTART=yes
6.最终脚本。
功能:
(1)默认禁止所有通信。
(2)对localhost以及本地eth0,eth1两个网卡之间的本地通信开放。
(3)对共享宽带所在的局域网通信全部关闭。
(4)对外网开放http(80)和https(443),ping(icmp)以及DNS查询(53)。
(5)对本地主机11.1.1.129开放ssh(8801)端口。
1 [u@11 ~]$ cat /etc/iptables-rules
2 #!/bin/bash 3 4 ETH_WAN=eth1 5 ETH_LAN=eth0 6 IP_WAN=11.2.1.11 7 IP_LAN=11.1.1.11 8 IP_CONSOLE=11.1.1.129 9 IP_INSIDE=15.1.1.1/8 10 11 THIS_SERVER=${IP_WAN} 12 SSHD_SERVER=${IP_LAN} 13 SSHD_PORT=8801 14 SSH_HOST=${IP_CONSOLE} 15 DNS_SERVER=8.8.8.8 16 DNS_PORT=53 17 HTTP_PORT=80,443 18 19 20 21 22 iptables -F 23 iptables -X 24 iptables -Z 25 iptables -P INPUT DROP 26 iptables -P OUTPUT DROP 27 iptables -P FORWARD DROP 28 29 #localhost 30 iptables -A INPUT -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT 31 iptables -A OUTPUT -o lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT 32 iptables -A INPUT -s ${IP_WAN} -d ${IP_WAN} -j ACCEPT 33 iptables -A OUTPUT -s ${IP_WAN} -d ${IP_WAN} -j ACCEPT 34 iptables -A INPUT -s ${IP_LAN} -d ${IP_LAN} -j ACCEPT 35 iptables -A OUTPUT -s ${IP_LAN} -d ${IP_LAN} -j ACCEPT 36 37 #inside subnet. 38 iptables -A INPUT -s ${IP_INSIDE} -j REJECT 39 iptables -A OUTPUT -d ${IP_INSIDE} -j REJECT 40 41 #sshd 42 iptables -A INPUT -i ${ETH_LAN} -p tcp -s ${SSH_HOST} -d ${SSHD_SERVER} --dport ${SSHD_PORT} -j ACCEPT 43 iptables -A OUTPUT -o ${ETH_LAN} -p tcp -s ${SSHD_SERVER} --sport ${SSHD_PORT} -d ${SSH_HOST} -m state --state RELATED,ESTABLISHED -j ACCEPT 44 45 #ping xxx 46 iptables -A OUTPUT -o ${ETH_WAN} -p icmp -s ${THIS_SERVER} -j ACCEPT 47 iptables -A INPUT -i ${ETH_WAN} -p icmp -d ${THIS_SERVER} -j ACCEPT 48 49 #dns lookup 50 iptables -A OUTPUT -o ${ETH_WAN} -p udp -s ${THIS_SERVER} -d ${DNS_SERVER} --dport ${DNS_PORT} -j ACCEPT 51 iptables -A INPUT -i ${ETH_WAN} -p udp -s ${DNS_SERVER} --sport ${DNS_PORT} -d ${THIS_SERVER} -j ACCEPT 52 53 iptables -A OUTPUT -o ${ETH_WAN} -p tcp -s ${THIS_SERVER} -d ${DNS_SERVER} --dport ${DNS_PORT} -j ACCEPT 54 iptables -A INPUT -i ${ETH_WAN} -p tcp -s ${DNS_SERVER} --sport ${DNS_PORT} -d ${THIS_SERVER} -m state --state RELATED,ESTABLISHED -j ACCEPT 55 56 #http browser 57 iptables -A OUTPUT -o ${ETH_WAN} -p tcp --match multiport --dports ${HTTP_PORT} -j ACCEPT 58 iptables -A INPUT -i ${ETH_WAN} -p tcp --match multiport --sports ${HTTP_PORT} -m state --state RELATED,ESTABLISHED -j ACCEPT 59 60 61 iptables-save > /etc/sysconfig/iptables 62 iptables -L -n -v --line-numbers 63
重启系统。