1. 程式人生 > >CentOS防火墻的配置

CentOS防火墻的配置

ans 熱加載 red 文件中 防火 aps pass slice mas

CentOS防火墻的配置

1、CentOS 6.* iptables

1.1、紅帽官方文檔:

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security_guide/sect-security_guide-firewalls

1.2、安裝:

yum install iptables -y

1.3、開啟關閉iptables服務:這是臨時操作,重啟服務器之後防火墻會根據是否開機自啟動的設置運行。

service iptables status     # 查看狀態
service iptables start      # 開啟
service iptables stop       # 關閉
service iptables restart    # 重啟
service iptables save       # 保存通過命令行設置的規則到文件
    iptables:將防火墻規則保存到 /etc/sysconfig/iptables:     [確定]

1.4、開機自啟動設置:

chkconfig [--level 35] iptables on      # iptables在3和5模式下開機自啟動; 
chkconfig iptables off                  # 禁止iptables開機自啟動;
chkconfig --list|grep iptables          # 查看狀態;
iptables        0:off   1:off   2:off   3:on    4:off   5:on    6:off

1.5、清除已有iptables規則

#允許所有入棧規則
iptables -P INPUT ACCEPT
#清空默認所有規則
iptables -F
#清空自定義的所有規則
iptables -X
#計數器置0
iptables -Z

1.6、開放指定的端口:-A 和 -I 參數分別為添加到 規則末尾 和 規則最前面。

#允許本地回環接口(即運行本機訪問本機)
iptables -A INPUT -i lo -j ACCEPT
# 允許已建立的或相關連的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允許所有本機向外的訪問
iptables -A OUTPUT -j ACCEPT
# 允許訪問22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#允許訪問80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#允許FTP服務的21和20端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#如果有其他端口的話,規則也類似,稍微修改上述語句就行
#允許ping
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
#禁止其他未允許的規則訪問
iptables -A INPUT -j REJECT  #(註意:如果22端口未加入允許規則,SSH鏈接會直接斷開。)
iptables -A FORWARD -j REJECT

#常用端口
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 23 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT

1.7、屏蔽IP:

#如果只是想屏蔽IP的話 “3、開放指定的端口” 可以直接跳過。
#屏蔽單個IP的命令是
iptables -I INPUT -s 123.45.6.7 -j DROP
#封整個段即從123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP
#封IP段即從123.45.6.1到123.45.6.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP

1.8、解封IP:

iptables -D INPUT -s **.**.**.** -j DROP

1.9、常用添加端口規則

#允許對外請求的返回包
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#允許icmp包通過
iptables -A INPUT -p icmp --icmp-type any -j ACCEPT
#允許來自於lo接口的數據包,如果沒有此規則,將不能通過127.0.0.1訪問本地服務
iptables -A INPUT -i lo -j ACCEPT

#過濾所有非以上規則的請求
iptables -P INPUT DROP

#添加內網ip信任(接受其所有TCP請求)
#註:(**.**.**.**)為IP,下同
iptables -A INPUT -p tcp -s **.**.**.** -j ACCEPT

1.10、查看已添加的iptables規則:

[root@BAK_18 ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
  • v:顯示詳細信息,包括每條規則的匹配包數量和匹配字節數
  • x:在 v 的基礎上,禁止自動單位換算(K、M)
  • n:只顯示IP地址和端口號,不將ip解析為域名

1.11、刪除已添加的iptables規則

將所有 iptables 以序號標記顯示,執行:
iptables -L -n --line-numbers
比如要刪除 INPUT 裏序號為 8 的規則,執行:
iptables -D INPUT 8

1.12、iptables 規則保存

保存規則:

service iptables save

1.13、添加 iptables 防火墻規則:

iptables 的配置文件為 /etc/sysconfig/iptables

編輯配置文件:
vi /etc/sysconfig/iptables

文件中的配置規則與通過iptables命令配置,語法相似:

如,通過iptables命令配置,允許訪問80端口:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

那麽,在文件中配置,只需要去掉句首的 iptables ,添加如下內容:

-A INPUT -p tcp --dport 80 -j ACCEPT

保存退出。

重啟iptables服務使其生效:
service iptables restart

2、CentOS 7.* firewalld

2.1、紅帽官方文檔:

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/sec-using_firewalls

2.2、開啟關閉firewalld服務:

systemctl status firewalld.service      # 查看狀態
systemctl start  firewalld.service      # 開啟
systemctl stop  firewalld.service       # 關閉
systemctl restart  firewalld.service    # 重啟

firewall-cmd --version                  # 查看版本
firewall-cmd --state                    # 查看狀態
firewall-cmd --get-active-zones         # 獲取啟用的zone

例:

[root@node1 ~]# systemctl start  firewalld.service
[root@node1 ~]# systemctl restart  firewalld.service
[root@node1 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: active (running) since 三 2018-05-23 09:06:50 CST; 2s ago
     Docs: man:firewalld(1)
 Main PID: 13981 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─13981 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

5月 23 09:06:50 node1 systemd[1]: Starting firewalld - dynamic firewall daemon...
5月 23 09:06:50 node1 systemd[1]: Started firewalld - dynamic firewall daemon.
[root@node1 ~]# systemctl stop  firewalld.service
[root@node1 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

5月 23 09:06:31 node1 systemd[1]: Starting firewalld - dynamic firewall daemon...
5月 23 09:06:32 node1 systemd[1]: Started firewalld - dynamic firewall daemon.
5月 23 09:06:39 node1 systemd[1]: Stopping firewalld - dynamic firewall daemon...
5月 23 09:06:40 node1 systemd[1]: Stopped firewalld - dynamic firewall daemon.
[root@node1 ~]# firewall-cmd --version              # 查看版本
0.4.4.4
[root@node1 ~]# firewall-cmd --state                # 查看狀態
running
[root@node1 ~]# firewall-cmd --get-active-zones # 獲取啟用的zone
public
  interfaces: enp0s25

2.3、開機自啟動設置:

systemctl enable firewalld              # iptables在3和5模式下開機自啟動; 
systemctl disable firewalld             # 禁止iptables開機自啟動;
systemctl list-unit-files |grep firewalld.service   # 查看狀態;

2.4、查看指定區域中開放的端口和服務

[root@node1 java]# firewall-cmd --zone=public --list-all
public (default, active)
  interfaces: eno16777984
  sources:
  services: dhcpv6-client mdns ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

2.5、查看系統中可用的服務

# 列出已配置好可用的服務, 位於 /usr/lib/firewalld/services/ 下
[root@node1 java]# firewall-cmd --get-services
amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp open*** pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https
# 強制列出包含用戶設置在/etc/firewalld/services/, 但尚未loaded的服務
[root@node1 java]# firewall-cmd --get-services --permanent
amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp open*** pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https

2.6、添加端口

# 不要忘記 --permanent 
[root@node1 java]# firewall-cmd --zone=public --add-port=8080/tcp --permanent
# OR 添加一個地址段
[root@node1 java]# firewall-cmd --zone=public --add-port=5060-5061/udp --permanent
success
# 需要reload後才啟用, 熱加載
[root@node1 java]# firewall-cmd --reload
# OR 冷加載
[root@node1 java]# firewall-cmd --complete-reload
success
# 能看到新端口已經添加
[root@node1 java]# firewall-cmd --zone=public --list-all
public (default, active)
  interfaces: eno16777984
  sources:
  services: dhcpv6-client mdns ssh
  ports: 8080/tcp
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules: 
# 刪除一個端口
firewall-cmd --permanent --zone=public --remove-port=8080/tcp
firewall-cmd --permanent --zone=public --remove-port=8080/udp

[root@node1 ~]# firewall-cmd --version    # 查看版本
0.4.4.4

CentOS防火墻的配置